From 66f5636fb9239c40af6044a7f3415a21fe326d51 Mon Sep 17 00:00:00 2001 From: Abdur-Rahmaan Janhangeer Date: Sat, 23 Oct 2021 14:33:18 +0400 Subject: [PATCH 1/3] fix: setup --- README.md | 25 ++++++++++--- shopyo/app.py | 45 ++++++++++++++++------- shopyo/{config_demo.json => config.json} | 0 shopyo/{config_demo.py => config.py} | 15 +------- shopyo/shopcube.db | Bin 0 -> 139264 bytes 5 files changed, 54 insertions(+), 31 deletions(-) rename shopyo/{config_demo.json => config.json} (100%) rename shopyo/{config_demo.py => config.py} (71%) create mode 100644 shopyo/shopcube.db diff --git a/README.md b/README.md index 02602d1..95d99b7 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,8 @@ # ShopCube -![alt text](https://github.com/VaithiSniper/ShopCube/blob/dev/logo.png?raw=true) +![alt text](https://github.com/shopyo/ShopCube/blob/dev/logo.png?raw=true) -Copy paste config_demo.json to config.json in shopyo -Copy paste config_demo.py to config.py in shopyo and replace your SQLALCHEMY_DATABASE_URI details - install requirements ``` @@ -19,7 +16,7 @@ cd shopyo python manage.py initialise python manage.py rundebug ``` - +using shopyo/shopcube.db as db browse around and go to /dashboard with login admin@domain.com and password pass @@ -32,3 +29,21 @@ Current features: Read the [shopyo](https://shopyo.readthedocs.io/en/latest/) docs to get more development insights +## Config DB + + +In shopyo/ create a new folder called instance + +In shopyo/instance/ create a new file called config.py + + +In config.py add something like that, the following is for mysql: + +```python +SQLALCHEMY_DATABASE_URI = "mysql+pymysql://{username}:{password}@{server_name}/{db_name}".format( + username='shopcube', + password='pass1234-A', + server_name='localhost', + db_name='shopcube' +) +``` \ No newline at end of file diff --git a/shopyo/app.py b/shopyo/app.py index f5c78fe..adfd6f7 100644 --- a/shopyo/app.py +++ b/shopyo/app.py @@ -29,28 +29,45 @@ from shopyoapi.path import modules_path from shopyoapi.file import trycopy -try: - if not os.path.exists('config.py'): - trycopy('config_demo.py', 'config.py') - if not os.path.exists('config.json'): - trycopy('config_demo.json', 'config.json') -except PermissionError as e: - print('Cannot continue, permission error' - 'initialising config.py and config.json, ' - 'copy and rename them yourself!') - raise e - from config import app_config base_path = os.path.dirname(os.path.abspath(__file__)) +def load_config_from_obj(app, config_name): + + try: + configuration = app_config[config_name] + except KeyError as e: + print( + f"[ ] Invalid config name {e}. Available configurations are: " + f"{list(app_config.keys())}\n" + ) + sys.exit(1) + + app.config.from_object(configuration) + + +def load_config_from_instance(app, config_name): + + if config_name != "testing": + # load the instance config, if it exists, when not testing + app.config.from_pyfile("config.py", silent=True) + + # create empty instance folder and empty config if not present + try: + os.makedirs(app.instance_path) + with open(os.path.join(app.instance_path, "config.py"), "a"): + pass + except OSError: + pass def create_app(config_name): app = Flask(__name__) - configuration = app_config[config_name] - app.config.from_object(configuration) + load_config_from_obj(app, config_name) + load_config_from_instance(app, config_name) + migrate.init_app(app, db) db.init_app(app) ma.init_app(app) @@ -59,6 +76,8 @@ def create_app(config_name): mail = Mail() mail.init_app(app) + + configure_uploads(app, categoryphotos) configure_uploads(app, subcategoryphotos) configure_uploads(app, productphotos) diff --git a/shopyo/config_demo.json b/shopyo/config.json similarity index 100% rename from shopyo/config_demo.json rename to shopyo/config.json diff --git a/shopyo/config_demo.py b/shopyo/config.py similarity index 71% rename from shopyo/config_demo.py rename to shopyo/config.py index 5968dbe..a0a1497 100644 --- a/shopyo/config_demo.py +++ b/shopyo/config.py @@ -7,7 +7,6 @@ class Config: """Parent configuration class.""" DEBUG = False - # SQLALCHEMY_DATABASE_URI = "sqlite:///shopyo.db" SQLALCHEMY_TRACK_MODIFICATIONS = False SECRET_KEY = os.urandom(24) BASE_DIR = base_path @@ -21,12 +20,8 @@ class Config: STATIC, "uploads", "subcategory" ) PASSWORD_SALT = "abcdefghi" - # SQLALCHEMY_DATABASE_URI = "mysql+pymysql://{username}:{password}@{server_name}/{db_name}".format( - # username='shopyo_user', - # password='pass', - # server_name='localhost', - # db_name='shopyodb' - # ) + + SQLALCHEMY_DATABASE_URI = "sqlite:///shopcube.db" class DevelopmentConfig(Config): @@ -36,12 +31,6 @@ class DevelopmentConfig(Config): DEBUG = True # EXPLAIN_TEMPLATE_LOADING = True LOGIN_DISABLED = True - SQLALCHEMY_DATABASE_URI = "mysql+pymysql://{username}:{password}@{server_name}/{db_name}".format( - username='freaksboutique_user', - password='root', - server_name='localhost', - db_name='freaksboutique' - ) class TestingConfig(Config): diff --git a/shopyo/shopcube.db b/shopyo/shopcube.db new file mode 100644 index 0000000000000000000000000000000000000000..ad5917b9342fe2a29d15db96937e285449bc2a72 GIT binary patch literal 139264 zcmeI*OKcm*0S4e*E=7uzrM2TIjO{31$1!ZekufKd%w>4$cY}Qp<$qM@gQ54QAiXaH@lYh^Uf8On<F59Cm;P~s00bZa0SG_<0uX=z1Rwwb z2tZ(j1+f1g;l@SPAOHafKmY;|fB*y_009U<00OQ6-T#N=PXzfMxx)Hq-}Q|00Izz00bZa0SG_<0uXpq1?c`?luH8n!3_cs zfB*y_009U<00Izz00bZafd>$1Cq=TYZl4o`*ld10KW=TSncV!dKbYIvUMm{kU(PMv zyrkZ!JeylcXLFg{!eTYOn9inCb4weGn{#suS}wb=q~+!}DvN1tF_)XqELPQpN;;#a zHdEP6ZGLe+mswg;)oNWg&R5O4svBp>*8(!BOnNq*n$2XD^xX5=^z-TT8ItM3+(J)G zCUqv4OD(15=zY#4YWf>mbEi5f-xCfJe=t>={KdXMPQJEp zBK}G2i&!CAi~J{IMqU_uN4g`ejGYzV7d|A1@9Eawcs!aoazwm)#8x+ITE%QNOv7>? zrVH!Ee5t6E@)xca6*o{h6_4pvWqEba{}X|HFY?~*c?ajlU&+Oy=mEHJ~cUprmm@j zVsxv_{)C8fVQuYdF~3TW*2o_qtp(mE#lKHgB@9h%OSf#Tsa2JWWayWcSBhL=NWLta za>X=A!Rq8V_Z_&yxMRvR=T3ICBqWzg%d*J~*YuLp;A`v4EBW=C%9Y|x<&<7!RlKpf z{PK;Wa*E~1g?Oecu<%l`aD^oDs=d6boJu{Xq?28-T){};2OZZbo_|0**`Al9i4!Np z-LtGS*iF^2)QYW>88i5NKi4&aF++MtWm~njb*));=2qH+D2c6;PUE!%4S2n!8n$ll z&Y6a?=aw6-pwN!Puly~;A>xIrD&Qp&0=?x-21bjA+-F^ z=`IlW)}+(LlXpuK(Zr!c;=2-i+lFQ~YMOJuk9%V$>_Og{Hcw;QG_+vz)y)mP#)Yt6 z${Esxn`%YdFwI+jggXt`w{@G0*`Dy4ZrswUy3rG%ZgFq7p*QXAs=DJJ=gv-sX=_$b zC>dmR)o798*sUf%f`j2*QO{QAt{{dxE!Wt*xFwGI`pXVF$u9b8MpO zt{N$IGsZgO-4|J@$(e$jot*nPS8gY4NWpuilA5`-MJl2joypjl+x=o?oRbte_t`DK z9nx-aL*1#9T9nNOodUa>yZ(mzVS|P;yV+U zK`%~wDaw}YyUPrR_9ZeB-G_0G#|<3fGq5*vXx?h2|GZQugOoIo-)&NZd-LOC(ZsQ1 zV%u3xRme!%GMl<)`OhMJ4LU~*sYFj%hYHf^!dq3)lw`)wMk0yJ#|E7r{j!zQ{_|-2 zg|M?4a7L!uXpjY@O-FIt=Vu{U^!?nG=&@G;#X0xEpf{UeoFudZkP@ z$`+Z3RQ_d%FFYSfi|-~Y8?Ab$3uiO@s->{DdcCxsCu=UHEBkWeRz=|kX&^t+wa$ei ziI-0g>RR2IrMm(ovK<PmtjFe`gzanL&s{PX;xbmyK6Pi^%Hl4b7^h8 zxO{n)ZhB7nsglZi@ltWUxLPP)SKMH>CnC$!H;=IS|J^IB_q&nq!_!>RI|;o@Ha#2D z4V6^6>Q5HlOyA(Q6n*PhCDV3OXD5Gu;J9lvZm#k&B`XcG>8srG&V+1I)5+B)vZFCt z{#KHPTUw1QU$@F#1tDusvfCn~B)D%RftzGeMi!%;-6+eVwc$?JJArn%@3|q^AQqPe z*C>7zIem4utL{3q8myJSg`}nOSE_DB21R$OM-Zb$L+NrW!*V}Tl{;0Y}*oOsl9Y4FAeAB?SI%7e)rrH(ZuoN;@f#vLpOn~)t#+V znOyO!TZg#11&$d~v7Sv-zw0s18N*wZd9xqeLi7ao-&*yXmbrfF5qMK67s++vKBpNk z@nFC9YtzmO%b8}pk0IPn(e?5P&ao?Uh^3QT wp#`g;A)%2_BAP@7oN6$%=T>T@b zs-BA2I}QKD>h*X2`j;2_^;B~At%Ix;-^sF3K&~>eQ)*SS$$r=Bdigllid~UITCv~d zX?MW)xjgO0kk66~yV-leiAZW%;0l2^bC|cuMGAV=vwQqFSCG0x`|nd7N| zcSTzECb+;=>|hH2?A(3I?8<{K64(QJC`gF<(zoQGAsRbG%-Cby4MQn)J^{# zHXlrRk;7vv)~lhec{Yo_jLws&jI}|rE-RT#e>tomvLa(z@_q6yTOJ3UZ4XxbJAT) z)j^$-^t<3vFxWobN%%5y$^0m9XAw{0`~Tm>yodLI00bZa0SG_<0uX=z1Rwwb2zcvzSbEkjdpk-vr+nuvylL!wIlLoD@9Xd*&iST&vef%K3(78Z`t80AOgZ;Yx& zXkVD5jCm>J5;->JB#ejXb0^)DNRrWTHyPdkho|ld@*m`%$j_4}xIq8{5P$##AOHaf zKmY;|fB*zWNZ@>UQn(==pA^J#aeQ3NRkWo_T20Spvsz^~ohEmSl{sy8esgJVKDCgU zTTmC{7qz;nT;Db|WiBI!&rAJsNbNC)EX^U*Cx@lYJ?4<1If(so(Ds-^n&ja8{lCuz z`STHKTvP=D5P$##AOHafKmY;|fB*y_00AlxCBFu6K&+(M{vY4}N2h=Q1Rwwb2tWV= z5P$##AOHafjJ5zi{~zu4MeQH}0SG_<0uX=z1Rwwb2teRFE#Q3qZ{hR*?{qIf Date: Sat, 23 Oct 2021 14:36:17 +0400 Subject: [PATCH 2/3] fix: setup --- .gitignore | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 59c1663..be01ba1 100644 --- a/.gitignore +++ b/.gitignore @@ -134,6 +134,4 @@ shopyo/static/uploads/subcategory/ # modules in static since present in modules shopyo/static/modules/ -# ignore secrets -config.py -config.json +shopcube.db \ No newline at end of file From 6587355d3603f4a3896366a2e2cf1401d9696507 Mon Sep 17 00:00:00 2001 From: Abdur-Rahmaan Janhangeer Date: Sat, 23 Oct 2021 14:37:04 +0400 Subject: [PATCH 3/3] refactor: .gitignore reapplied --- shopyo/shopcube.db | Bin 139264 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 shopyo/shopcube.db diff --git a/shopyo/shopcube.db b/shopyo/shopcube.db deleted file mode 100644 index ad5917b9342fe2a29d15db96937e285449bc2a72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139264 zcmeI*OKcm*0S4e*E=7uzrM2TIjO{31$1!ZekufKd%w>4$cY}Qp<$qM@gQ54QAiXaH@lYh^Uf8On<F59Cm;P~s00bZa0SG_<0uX=z1Rwwb z2tZ(j1+f1g;l@SPAOHafKmY;|fB*y_009U<00OQ6-T#N=PXzfMxx)Hq-}Q|00Izz00bZa0SG_<0uXpq1?c`?luH8n!3_cs zfB*y_009U<00Izz00bZafd>$1Cq=TYZl4o`*ld10KW=TSncV!dKbYIvUMm{kU(PMv zyrkZ!JeylcXLFg{!eTYOn9inCb4weGn{#suS}wb=q~+!}DvN1tF_)XqELPQpN;;#a zHdEP6ZGLe+mswg;)oNWg&R5O4svBp>*8(!BOnNq*n$2XD^xX5=^z-TT8ItM3+(J)G zCUqv4OD(15=zY#4YWf>mbEi5f-xCfJe=t>={KdXMPQJEp zBK}G2i&!CAi~J{IMqU_uN4g`ejGYzV7d|A1@9Eawcs!aoazwm)#8x+ITE%QNOv7>? zrVH!Ee5t6E@)xca6*o{h6_4pvWqEba{}X|HFY?~*c?ajlU&+Oy=mEHJ~cUprmm@j zVsxv_{)C8fVQuYdF~3TW*2o_qtp(mE#lKHgB@9h%OSf#Tsa2JWWayWcSBhL=NWLta za>X=A!Rq8V_Z_&yxMRvR=T3ICBqWzg%d*J~*YuLp;A`v4EBW=C%9Y|x<&<7!RlKpf z{PK;Wa*E~1g?Oecu<%l`aD^oDs=d6boJu{Xq?28-T){};2OZZbo_|0**`Al9i4!Np z-LtGS*iF^2)QYW>88i5NKi4&aF++MtWm~njb*));=2qH+D2c6;PUE!%4S2n!8n$ll z&Y6a?=aw6-pwN!Puly~;A>xIrD&Qp&0=?x-21bjA+-F^ z=`IlW)}+(LlXpuK(Zr!c;=2-i+lFQ~YMOJuk9%V$>_Og{Hcw;QG_+vz)y)mP#)Yt6 z${Esxn`%YdFwI+jggXt`w{@G0*`Dy4ZrswUy3rG%ZgFq7p*QXAs=DJJ=gv-sX=_$b zC>dmR)o798*sUf%f`j2*QO{QAt{{dxE!Wt*xFwGI`pXVF$u9b8MpO zt{N$IGsZgO-4|J@$(e$jot*nPS8gY4NWpuilA5`-MJl2joypjl+x=o?oRbte_t`DK z9nx-aL*1#9T9nNOodUa>yZ(mzVS|P;yV+U zK`%~wDaw}YyUPrR_9ZeB-G_0G#|<3fGq5*vXx?h2|GZQugOoIo-)&NZd-LOC(ZsQ1 zV%u3xRme!%GMl<)`OhMJ4LU~*sYFj%hYHf^!dq3)lw`)wMk0yJ#|E7r{j!zQ{_|-2 zg|M?4a7L!uXpjY@O-FIt=Vu{U^!?nG=&@G;#X0xEpf{UeoFudZkP@ z$`+Z3RQ_d%FFYSfi|-~Y8?Ab$3uiO@s->{DdcCxsCu=UHEBkWeRz=|kX&^t+wa$ei ziI-0g>RR2IrMm(ovK<PmtjFe`gzanL&s{PX;xbmyK6Pi^%Hl4b7^h8 zxO{n)ZhB7nsglZi@ltWUxLPP)SKMH>CnC$!H;=IS|J^IB_q&nq!_!>RI|;o@Ha#2D z4V6^6>Q5HlOyA(Q6n*PhCDV3OXD5Gu;J9lvZm#k&B`XcG>8srG&V+1I)5+B)vZFCt z{#KHPTUw1QU$@F#1tDusvfCn~B)D%RftzGeMi!%;-6+eVwc$?JJArn%@3|q^AQqPe z*C>7zIem4utL{3q8myJSg`}nOSE_DB21R$OM-Zb$L+NrW!*V}Tl{;0Y}*oOsl9Y4FAeAB?SI%7e)rrH(ZuoN;@f#vLpOn~)t#+V znOyO!TZg#11&$d~v7Sv-zw0s18N*wZd9xqeLi7ao-&*yXmbrfF5qMK67s++vKBpNk z@nFC9YtzmO%b8}pk0IPn(e?5P&ao?Uh^3QT wp#`g;A)%2_BAP@7oN6$%=T>T@b zs-BA2I}QKD>h*X2`j;2_^;B~At%Ix;-^sF3K&~>eQ)*SS$$r=Bdigllid~UITCv~d zX?MW)xjgO0kk66~yV-leiAZW%;0l2^bC|cuMGAV=vwQqFSCG0x`|nd7N| zcSTzECb+;=>|hH2?A(3I?8<{K64(QJC`gF<(zoQGAsRbG%-Cby4MQn)J^{# zHXlrRk;7vv)~lhec{Yo_jLws&jI}|rE-RT#e>tomvLa(z@_q6yTOJ3UZ4XxbJAT) z)j^$-^t<3vFxWobN%%5y$^0m9XAw{0`~Tm>yodLI00bZa0SG_<0uX=z1Rwwb2zcvzSbEkjdpk-vr+nuvylL!wIlLoD@9Xd*&iST&vef%K3(78Z`t80AOgZ;Yx& zXkVD5jCm>J5;->JB#ejXb0^)DNRrWTHyPdkho|ld@*m`%$j_4}xIq8{5P$##AOHaf zKmY;|fB*zWNZ@>UQn(==pA^J#aeQ3NRkWo_T20Spvsz^~ohEmSl{sy8esgJVKDCgU zTTmC{7qz;nT;Db|WiBI!&rAJsNbNC)EX^U*Cx@lYJ?4<1If(so(Ds-^n&ja8{lCuz z`STHKTvP=D5P$##AOHafKmY;|fB*y_00AlxCBFu6K&+(M{vY4}N2h=Q1Rwwb2tWV= z5P$##AOHafjJ5zi{~zu4MeQH}0SG_<0uX=z1Rwwb2teRFE#Q3qZ{hR*?{qIf