From d9b9e10d56161ad14868627e1f2ad51efb913610 Mon Sep 17 00:00:00 2001 From: Michal Kunc Date: Wed, 17 Nov 2021 11:12:31 +0100 Subject: [PATCH] Add basic db explorer --- db_explorer/db_explorer/app.py | 58 ++++++++++++++++++ .../db_explorer/blueprints/core/__init__.py | 2 + .../db_explorer/static/activity/free.webp | Bin 0 -> 1082 bytes .../db_explorer/static/activity/one.webp | Bin 0 -> 1000 bytes .../db_explorer/static/activity/reaction.webp | Bin 0 -> 1592 bytes .../db_explorer/static/activity/three.webp | Bin 0 -> 1318 bytes .../db_explorer/static/activity/two.webp | Bin 0 -> 1208 bytes db_explorer/db_explorer/static/css/base.css | 10 +++ db_explorer/db_explorer/templates/_base.html | 15 +++++ db_explorer/db_explorer/templates/_const.html | 16 +++++ db_explorer/db_explorer/templates/action.html | 7 +++ db_explorer/db_explorer/templates/list.html | 10 +++ db_explorer/pyproject.toml | 17 +++++ 13 files changed, 135 insertions(+) create mode 100644 db_explorer/db_explorer/app.py create mode 100644 db_explorer/db_explorer/blueprints/core/__init__.py create mode 100644 db_explorer/db_explorer/static/activity/free.webp create mode 100644 db_explorer/db_explorer/static/activity/one.webp create mode 100644 db_explorer/db_explorer/static/activity/reaction.webp create mode 100644 db_explorer/db_explorer/static/activity/three.webp create mode 100644 db_explorer/db_explorer/static/activity/two.webp create mode 100644 db_explorer/db_explorer/static/css/base.css create mode 100644 db_explorer/db_explorer/templates/_base.html create mode 100644 db_explorer/db_explorer/templates/_const.html create mode 100644 db_explorer/db_explorer/templates/action.html create mode 100644 db_explorer/db_explorer/templates/list.html create mode 100644 db_explorer/pyproject.toml diff --git a/db_explorer/db_explorer/app.py b/db_explorer/db_explorer/app.py new file mode 100644 index 0000000..e86e8e0 --- /dev/null +++ b/db_explorer/db_explorer/app.py @@ -0,0 +1,58 @@ + +import urllib.parse +import os +import re + +from flask import Flask, render_template +from flask_pymongo import PyMongo + +app = Flask(__name__) +app.config["MONGO_URI"] = os.environ["MONGO_URI"] +mongo = PyMongo(app) + +@app.template_filter('filter_vtt') +def filter_vtt(text): + compendium_re = re.compile(r"@Compendium\[([^\]]+)\]\{([^\}]+)\}") + def compendium_return(m): + return f"{m.group(2)}" + macro_re = re.compile(r"\[\[\/\S?r\s(?:(?P[^\{\] ]+)[^\{\]]*|(?:\{(?P[^\}]+)\}\[[^\]]+\])?)\]\](?:\{(?P[^\}]+)\})?") + def macro_return(m): + if m.group('alt') is not None: + return m.group('alt') + return m.group('sdice') + text = compendium_re.sub(compendium_return, text) + text = macro_re.sub(macro_return, text) + return text + +@app.route("/") +def list_types(): + types = [ {"name": "Actions", "href": "action"} ] + return render_template("list.html", header="All types", items=types) + +@app.route("/action") +def list_actions(): + items = list(map(lambda x: {"name": x["name"], "href": "./action/" + urllib.parse.quote(x["name"], safe='')}, mongo.db.action.find({}, {"name": 1}).sort("name", 1))) + return render_template("list.html", header="All actions", items=items) + +@app.route("/action/") +def show_action(name): + item = mongo.db.action.find_one_or_404({"name": name}) + print(item) + if item["data"]["actions"]["value"] == None: + if item["data"]["actionType"]["value"] == 'passive': + item['_action_icon'] = None + elif item["data"]["actionType"]["value"] == 'reaction': + item['_action_icon'] = 'r' + elif item["data"]["actionType"]["value"] == 'free': + item['_action_icon'] = 0 + else: + raise ValueError(f'Unknown action type: {item["data"]["actionType"]["value"]}') + elif item["data"]["actions"]["value"] in (1,2,3): + item['_action_icon'] = item["data"]["actions"]["value"] + else: + raise ValueError(f'Unknown action: {item["data"]["actionType"]["value"]} - {item["data"]["actions"]["value"]}') + + return render_template("action.html", action=item) + +if __name__ == "__main__": + app.run() \ No newline at end of file diff --git a/db_explorer/db_explorer/blueprints/core/__init__.py b/db_explorer/db_explorer/blueprints/core/__init__.py new file mode 100644 index 0000000..02ded5b --- /dev/null +++ b/db_explorer/db_explorer/blueprints/core/__init__.py @@ -0,0 +1,2 @@ + +from flask import Blueprint \ No newline at end of file diff --git a/db_explorer/db_explorer/static/activity/free.webp b/db_explorer/db_explorer/static/activity/free.webp new file mode 100644 index 0000000000000000000000000000000000000000..3c548b186ee0b5dd9a784f0fde526ec25e32489c GIT binary patch literal 1082 zcmV-A1jYMONk&F81ONb6MM6+kP&il$0000G0000%002J#06|PpNY?=X00EGsZMSJh ze{9?7rscFU4jUt|owSm&-LQU!0?xRxf3ST z_i%=;Kh8-yl%Z&sC(XpUt>2gooGpl*`>tLJqY#K=I+(6tCku$5|G}hAR;b_PwRzH1 zNjs1pUQ*_=@d)^DmT`N}+T$utu>}r|Z z@0}R|Uzq*x#1+zZq#$4;`?zHO?DP~X{m)sJW>?mgdXl;)zjmYo;k_ZdnCT~B8}$)* zR0)MmyGlM)`;y@|ne2Lb_$00VB&7k8!u{gNG6AG)*D7g+wBHj~A)m}GEO~e8#a~>< z|5D#>YeKqPFXc$-fS_$Z$YlOe@A!Sf@7ILk&*Z@{-=>ow+~|QX0p%Wdl!;hC+#p#U z=O1M<01(4OI>yo~fM#OB4N={$6PWUptM!hu)T_zn>38qeUz))mY02Md%{~d{%aro} z@#wba?7Z%ch4wbS;B-U)2Jvir)9D#y4rqEoG0Yqyd~dou)0!W48v~-sqp|T909H^q zAT$C105A^#odGIB06+jfbuN`hq@tpsH~h|EkPeAy02AI{gyjJZ>`?-shHv9r>W^R# zAP-l+s2;!{qK$8U8o4~pG>qgiQN%^EZ#G!O@&qD;Pdo+!RuA4U+qlXjg0o5Q(sTBO zy#F{>uZPdz#zU10{sOh3oRyl?UIYLhrVln<+4*Py{`~mZ*hWLBbr!#fyMt|KEG61X zY3)NPwKw+>@~QT>Swmbw5AO!N`05zgu4V8B-E=vYHgOHV@^m8Nt|Zr`nu9DB#t) z6-6|N{U_^2>|ba9doH7*e)`>we#u^$^FWA}A!+@>6c-LvMTKm(Ic+=#W+Cg%k(odz z56Z>K+ z!3WPoKY~-p2^_#;^rSx581HukITa7+J?Ai7|LlnYB8X9?T&CnNPVLsCR5Or@Vvh^% zH@zI0IngR5=X@LRQBs?l<~JeHx*Ti;z=t_Tf0tjh2C&x^DJxuMO8d$q{aYhF8VN^_ zWl?4r0`8ou!nqZbELd#Hce!G85T+0P zdF+LqLs4T0Trqdo3+Rc?PX))T@sc+=5=+Yb^ycHkZ*R*Qv(HadrFZ<{_x`Z}0C;B& Ab^rhX literal 0 HcmV?d00001 diff --git a/db_explorer/db_explorer/static/activity/one.webp b/db_explorer/db_explorer/static/activity/one.webp new file mode 100644 index 0000000000000000000000000000000000000000..2344d493fa0a19ce0aa4b1dfa4a35e48b1aac468 GIT binary patch literal 1000 zcmVKNk&HC0{{S5MM6+kP&il$0000G0000&002J#06|PpNW}pF00EF>+qP** z=l-zm7T9JjT41GG5w_cqHalS3uG(fe&iMEJc<RKpz8f(ajYllf^4Om}MK6Eo>0^Rq@J zoRmGw?A_NLO4bAGY|@XNO45T`GrHtRJ!C5LCoxhFYt8AFAJ^R+}Y*R!M>|M81rb&CudEcst z#8@-6g#??l+ide)Gl@2F`;tMP`xS1~@PcO^0lq=PhP-%KK?Gp%ua}U94!H54oCrk! z-;I_Lp}DUG()ZV~ln6@iAHJtWbE)JX_}`F8wjlskP&gp;0RR9H4gj42DnkH306u{- zkw>K?A)z^#3IL!G326BgkgO?CyR zD9nD`7&#wBOc&e($sZt!4IN~tKogjcBM?Q}@AQ|z#zTvuP=GJ9UOO-#`OwH4j z{q#ft0RH@4Yr*DA?hpzs`X$QugEnEYdJb$+P*=_!({NkuJ)p-3L=2pdz+TGZYV=&@ zcZh25`Z>9>_o#mLUe>Ow_6?nn2-Ayhd9$&MIsL%h{<_`tVxeBCqax4y*+vt78`O#a zrT28!bQ#Kql+eF!2SH1_`ZN)fi3=w{)la0bTgVf>@6DBPL@D`;oi2+1$nu zU$w&`cC1iADGvRH4r#o$wfVvcjsIW&|Nm0D^sJ8chUd)TPw(4J^N@)J^YnDG>Ly?x z@j8^a)*$U>YozjX2+0tE+RDMm=lFMj!VLPX$FJPv%q3b}oJpj5Lsm^a$zyOECOB`f WnUlpG292IbYe4?4&;QwB$Z!DB1@gB5 literal 0 HcmV?d00001 diff --git a/db_explorer/db_explorer/static/activity/reaction.webp b/db_explorer/db_explorer/static/activity/reaction.webp new file mode 100644 index 0000000000000000000000000000000000000000..ee09f5a843f98fc477350523d85237d07460846d GIT binary patch literal 1592 zcmV-82FLkQNk&F61^@t8MM6+kP&il$0000G0000)002J#06|PpNH7Bc00EFj+uHF) z&zFYP*tTukwr$(CZQHhO+cuJ^+b@1b-}54azY#G3@E;wNC|}uMb0-S)mAHkwtUUkp zoBdbo)6>g3t1{nodCOA;mn87A){u3Q2Z%lVyy1ovS z`C|=E6}}>~=k+6^O=ZF7*}0^-iR{r;5@;vPQ>NS6yLJ+84&b1lf*hj?0bNPdaHmSK zcjQpS#>2ILmF9{*ZOW!I00cCCOu)Ozm<%gXc=X#Ht>Xg}I79ICVJiAf93r|dHrGS` z=UR9#IfH%$N*dWy4{cQ~cUOiquVlfn8W40`3r_^on!BXI^Rc0)S1Y0zNxuQ*jVc4V zY+Bfhl=O*2I2vMIBJ49!ibu(Gz@*<#c$k>d$s^M_i~ay1G&f}k`i!FFOymwGJo>DI|-q!+vmLf74uHyqf8g!W;v7?%7v3U6JRhm_0-@8 z4EM7@tX)WrsYq$!;-em^A8ffya_-3iej{BZYc@*0P#)I3^@0EbuMiw(TgCxh*Dxes zjZKMri_N;ChzS57=-ThX?<}ns2O!??aHKERQIxqXUzQct!*2t2Jb!v%+qjN}<0}A` zvPV5gcQpfYRh8m-G%}AKG?n;C5}OnN0Daol2SbtdMJigtyA=CqGqC!{$x(jLj#qAE zU#q9-#(D`DwWEqfOJ8~7qQ$3fTVs%`S|1p*exe{o?y6$`UEmcIc|4fKxRQn#wKAVh zoZ1kWv%h3O{Jb!~A3)$`5yyhrV1SDS@ymh?5bLG@TLs`4`ydorFmNo1e#iYmgI3&5L@@544&iJKy;3s zPGJ!<6N31l?hnOyPSrAilo{rJ;ODv7GXcn|%RTOnolDr+9!Wsz#5EV(kEVHTr>7PV z2Kkee>ArOP-KW1^*gU0Go*?j9zxauM4OZZP8&*&_Ald=|0Pqk1odGIE06+jfkvN!0 zC8HuCF_P?Xuo4Mr02So_&pTfK9bK1z{ou+58vJa3uk_i@ljVQkeSyD{e@f~*`(f-; z`t+rm+!r>Ym;CvNRKmh*AyDfij6T=4j-RFo)RK6@L;2U!b?M=2? zz1`mdgRe63ufrZsKR3Iu73TBWZp9}$rX(U}%R7p_hPZ%a&>c6svU94}7l9uv_hB0T zol>=sR&_iufaW!sfA4j_`y`<5#lK`N^%z{5E#oexNgC0>M0YXFU3tD+bP83D>t!GA zfwHUJVM@&>8B_~{EE){$mqU()bjW$X8O|VhjX($!i^uMZ@M4nu1L@YPzsjc~kM&1_ z=4XI$PPb)u&tx=($V!GHeY7-?i+{~rigqM#z={FGLnjgPbH?!#|04{OR=yVqt@O*5IJWIIo_G zS9Jj+URaKMa3JKiZ?cLV-Zt!mK35U=s{9bTqt>Cgfz)OA^{O_$9c$Or$I5C@~i;<2Z48@O*t+XwhP+&Gc*|?7t6r1qaT>M}X(NAFzlVl(uO=1pEoIm~(LGPFG^B`B!R2%4(2zuD+zpH`d9Vis?iQH0E-d~4n z8+&``F{(1xUJdU#@d1jLYDUzQe7ZD`Jy$SaKKXR6RPst3c3zd&(h z5_sI5;p+-H;&08e!D-3Z$HTzP+s@$SH;laH&@6mGh9l{CQ-Zge^Ppu5FpO_PlR&Af qBYW^bamJSWFT?DzV{_=)A!ovePz5FZ{b%$#sq)|NL0RX&0001Q^a?`& literal 0 HcmV?d00001 diff --git a/db_explorer/db_explorer/static/activity/three.webp b/db_explorer/db_explorer/static/activity/three.webp new file mode 100644 index 0000000000000000000000000000000000000000..96ae2fd76f2b9dac99938397bc0e5756a8eb32c7 GIT binary patch literal 1318 zcmV+>1=;#iNk&E<1pok7MM6+kP&il$0000G0001c002J#06|PpNZtYf00EGMZIdBM zQ8l*hIoYSR&719`ZQHi(z3tVuZQE$Xv)SF15tW_yh=Alsk|HV7d}tX?)jt5m8)AST zZ%~aG-jwZV=*MIBd%rM}Go@$oetpj5#Hg+BXLKxJC^?JBQhi}XwBisQ^CMUx-m6EQ zs>|qH7NxE}pU|`as7lTtvQ%9{MCZ~dm3f;-QtTVz-MW;i6e(o(7I74xMzll@(Xk{- zRaWLkP-3aLh^Ua+OC%94`3R9rJ$Y6Z+bwkPN0jZ~70Fi9@CM5FSx3XF3y2DZPX2?0 z-IL-wjUFOp-*xg;M?98UnPO*?NFnY{@p&v_Y4H>ZdobPJh?2c}fJoKR@JXSNiR93| zOK3n3@vYEYM3iPzzY#g=-$!I=`2@*(AkB^@a6)t)e}KIG`~i`}mi%}3r*RuE@@J_U zhqy15(>Rge(>TPvRIxLDA?hl2oeTBY{rQyE>Js9qB3inNT_e&-p~fMeEVOF1NLMkd zov7cQDDZBTNLS`;H=@2eyhTm-XdHl{tDmETK)+@8haUT* zJcYjWk6GYgjPr$qS$6~2+u%N@0Ra%Xkp6?YcNA}Ov$MeiR^Y)niAmVZ@Ue#hpwO3r zB9BExoll#FqSr41` zS3!)U`RA=kSIvg}us+o1cqCH7G9t#6l(6Z4tyANSMMOh?_+G@}c+><`ZHdQ=HUJEa zD`#OdygU}EbJi<{VP6(R0MLn=g32vB(w=$5Uo#qjZl>dj+5n{5Pc-4$x3YOyg9OW5@cym8 zYyE&fKoU5H`C~b@|0)F;dht(vG@&hD`^pX}1?J?b?*8omGbWG;IQ4eyO@AV7j=sU5 zy76T$h@}JO!TnYeJwSA&?$tE2mj;cj(@pB2!JV#p0X>s#xiU`1breCJZm~uY-yB2e z7f=8I{`;NzF8P;JE(+g`oG2j3*%uQ~2y|9r?XX$U7AuK*zkGr1FHAT{Wz(Utj&>px z{jE@4KqIbKGw(1V*I_fFdyO5s^_rnmjwwQU`Gi~GvN#3}^0;v8ev|>Ge#D2n%O6bC zNP2Z4s9-tiy%?QQ;#L2N{hEXq`tQ;h{m?V>6d$Wyb+k!>KD8vZmgjRa6V$A6C9m*c zS?r^Ep3NOk8k)NVR%zCKa>ROY>+7KW)JYhqzjk6Xojs#DsEyboUOd-2{eE16#xHyH87nA zccV}KLq8V<5;vq%c->g}0AnYC^0>Q_?PPUhe*s^DN+hE+C#iZH%a>{@7_>@wJsSY( z!Z@DOQQ$&jYD1o425A9Qv0IazI^a5-yed&tQt_7;IQ}Ji;p-5?1OBxXlegCe(Uw|m c4!@Wf9J#i0G&vSIRF3v literal 0 HcmV?d00001 diff --git a/db_explorer/db_explorer/static/activity/two.webp b/db_explorer/db_explorer/static/activity/two.webp new file mode 100644 index 0000000000000000000000000000000000000000..bbe077e7d5ec87fa1d551f6bf0014c18196ae87f GIT binary patch literal 1208 zcmV;p1V{T)Nk&Gn1ONb6MM6+kP&il$0000G0001A002J#06|PpNFD+J00EF|Yum9o z?<~9W#I|z;nN+sZvvVrj&H>ozY&)rJ+s^P_-}~WxA50$+j@-79q*&_N=h&6x38vmB zr9~RCQpFv8Z+t4LT5s+m?FW1((fSOob(ZxbfbSDh{XGj<1RZ0ILJ_#$Mbs!0{b+Lz z(cI`FpIuG zQhq?wx$K#;{eYUr#UCwF*r%eeqotGshQ^o5USeH+#vq+Nq&m{1LUJzPIHnIbF_Lo) zN1JgdP;xHgXp;^#Hj;Ctv(59WgMsw9n3GMF&Z^nc$dKoH-efPSbh)X((DxGDEUt7a zwpZbqqG~n<()U85)NBZ(@3mxD7^Qkcz7gEZk;mlF^?`zWMUFAQdR-uWFDl9WA6D{S zS2o#w3JiHKtvsowp2q-IP&goL0ssK85dfV5DqsLW06u*%lt-kaA|W=rO|Xy;iD>{8 z=bza7Wd6C1vgzG`%3*`rK$%a_1Nj&7&qSYA{(v8&4BSF;xvUum!34Z(8?X_M#)_Zh z;ai71*3nfqqrGL+oTEFwN2ic~dX~_{vv-m% zF7kVdom3W|5D=}-@ABP50092{_|V6?XW-=cDES)4pO#_hPqFNp(3YY$5^m(B7dl3< zB_7DW-f|;yu0aiYnFde?vL9g)K=%iIDd4kJ-ZM;_HhoOyy5-9A^!cV)25ekf%_Kx8 zF4jwu2Ap?ypnZ1+)8OATg()KXD&T`+1Hyj^jCF(aDX&Fs*b_`NKnf+6`OL&V#h^pk z&NseG+7=fF&qUJ^L=03sTE5Ig2)~XqV+fty*k2 z3;UCbs&US3>Xt}8E7IsAUo!iE + + + {% block head %} + {% block title %}PF2 DB{% endblock %} + {% endblock %} + + + {% block body %} + This page is unintentionally left empty + {% endblock %} + + diff --git a/db_explorer/db_explorer/templates/_const.html b/db_explorer/db_explorer/templates/_const.html new file mode 100644 index 0000000..2104271 --- /dev/null +++ b/db_explorer/db_explorer/templates/_const.html @@ -0,0 +1,16 @@ +{% macro _abase(url) -%} + +{%- endmacro %} +{% set afree = _abase(url_for("static", filename="activity/free.webp")) -%} +{% set aone = _abase(url_for("static", filename="activity/one.webp")) -%} +{% set atwo = _abase(url_for("static", filename="activity/two.webp")) -%} +{% set athree = _abase(url_for("static", filename="activity/three.webp")) -%} +{% set areaction = _abase(url_for("static", filename="activity/reaction.webp")) -%} +{% set actions = { + None: "", + 0: afree, + 1: aone, + 2: atwo, + 3: athree, + 'r': areaction +} -%} \ No newline at end of file diff --git a/db_explorer/db_explorer/templates/action.html b/db_explorer/db_explorer/templates/action.html new file mode 100644 index 0000000..ed4dd89 --- /dev/null +++ b/db_explorer/db_explorer/templates/action.html @@ -0,0 +1,7 @@ +{% extends "_base.html" %} +{% block title %}{{action.name}} - PF2 DB{% endblock %} +{% block body %} +

{{action["name"]}}{{c.actions[action["_action_icon"]]|safe}}

+

{{action["data"]["description"]["value"]|filter_vtt|safe}}

+

{{action["data"]["source"]["value"]}}

+{% endblock %} \ No newline at end of file diff --git a/db_explorer/db_explorer/templates/list.html b/db_explorer/db_explorer/templates/list.html new file mode 100644 index 0000000..ed7c977 --- /dev/null +++ b/db_explorer/db_explorer/templates/list.html @@ -0,0 +1,10 @@ +{% extends "_base.html" %} +{% block title %}{{header}} - PF2 DB {% endblock %} +{% block body %} +

{{ header }}

+ +{% endblock %} \ No newline at end of file diff --git a/db_explorer/pyproject.toml b/db_explorer/pyproject.toml new file mode 100644 index 0000000..a02acba --- /dev/null +++ b/db_explorer/pyproject.toml @@ -0,0 +1,17 @@ +[tool.poetry] +name = "db-explorer" +version = "0.1.0" +description = "" +authors = ["Michal Kunc "] +readme = "README.md" +packages = [{include = "db_explorer"}] + +[tool.poetry.dependencies] +python = "^3.8" +Flask = "^2.0.2" +Flask-PyMongo = "^2.3.0" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api"