From 168a1a5cbc9850d6ffdcd0170561da41c4fa3380 Mon Sep 17 00:00:00 2001 From: safer-lgtm <git@code.fbi.h-da.de/safouan.erryfy> Date: Mon, 27 May 2024 19:31:46 +0200 Subject: [PATCH] docs HTML generated and data transformed --- .gitignore | 4 + docs/API.rst | 2 +- docs/docHTMLs/.buildinfo | 4 + docs/docHTMLs/.doctrees/API.doctree | Bin 0 -> 4378 bytes docs/docHTMLs/.doctrees/dynamodb.doctree | Bin 0 -> 37971 bytes docs/docHTMLs/.doctrees/environment.pickle | Bin 0 -> 157585 bytes .../dynamodb.dynamodb_helpers.doctree | Bin 0 -> 16319 bytes .../.doctrees/generated/ergast.doctree | Bin 0 -> 5620 bytes .../.doctrees/generated/sample.doctree | Bin 0 -> 2465 bytes .../generated/sample.helpers.doctree | Bin 0 -> 2505 bytes docs/docHTMLs/.doctrees/index.doctree | Bin 0 -> 3574 bytes docs/docHTMLs/.doctrees/modules.doctree | Bin 0 -> 2801 bytes docs/docHTMLs/.doctrees/usage.doctree | Bin 0 -> 28497 bytes docs/docHTMLs/API.html | 119 +++ docs/docHTMLs/_sources/API.rst.txt | 7 + docs/docHTMLs/_sources/dynamodb.rst.txt | 53 + .../dynamodb.dynamodb_helpers.rst.txt | 38 + .../_sources/generated/ergast.rst.txt | 22 + .../_sources/generated/sample.helpers.rst.txt | 31 + .../_sources/generated/sample.rst.txt | 23 + docs/docHTMLs/_sources/index.rst.txt | 14 + docs/docHTMLs/_sources/modules.rst.txt | 7 + docs/docHTMLs/_sources/usage.rst.txt | 47 + docs/docHTMLs/_static/basic.css | 925 ++++++++++++++++++ docs/docHTMLs/_static/classic.css | 269 +++++ docs/docHTMLs/_static/default.css | 1 + docs/docHTMLs/_static/doctools.js | 156 +++ .../docHTMLs/_static/documentation_options.js | 13 + docs/docHTMLs/_static/file.png | Bin 0 -> 286 bytes docs/docHTMLs/_static/language_data.js | 199 ++++ docs/docHTMLs/_static/minus.png | Bin 0 -> 90 bytes docs/docHTMLs/_static/plus.png | Bin 0 -> 90 bytes docs/docHTMLs/_static/pygments.css | 75 ++ docs/docHTMLs/_static/searchtools.js | 619 ++++++++++++ docs/docHTMLs/_static/sidebar.js | 70 ++ docs/docHTMLs/_static/sphinx_highlight.js | 154 +++ docs/docHTMLs/dynamodb.html | 297 ++++++ .../generated/dynamodb.dynamodb_helpers.html | 137 +++ docs/docHTMLs/generated/ergast.html | 110 +++ docs/docHTMLs/generated/sample.helpers.html | 88 ++ docs/docHTMLs/generated/sample.html | 88 ++ docs/docHTMLs/genindex.html | 185 ++++ docs/docHTMLs/index.html | 161 +++ docs/docHTMLs/modules.html | 144 +++ docs/docHTMLs/objects.inv | 8 + docs/docHTMLs/py-modindex.html | 108 ++ docs/docHTMLs/search.html | 100 ++ docs/docHTMLs/searchindex.js | 1 + docs/docHTMLs/usage.html | 248 +++++ docs/dynamodb.rst | 53 + docs/formulaone.rst | 61 -- docs/modules.rst | 2 +- docs/usage.rst | 44 +- dynamodb/Data/RawData/rawdata.json | 1 + dynamodb/Data/TidyData/current_race.parquet | Bin 0 -> 9680 bytes {formulaone => dynamodb}/__init__.py | 0 dynamodb/core.py | 13 + {formulaone => dynamodb}/dynamodb_helpers.py | 19 + dynamodb/load_movies.py | 21 + {formulaone => dynamodb}/prepare_data.py | 2 +- dynamodb/tidy_data.py | 20 + formulaone/core.py | 6 - formulaone/helpers.py | 16 - formulaone/load_latest_race.py | 20 - formulaone/tidy_data.py | 14 - setup.py | 14 +- tests/test_basic.py | 2 +- tests/test_dynamodb.py | 2 +- 68 files changed, 4700 insertions(+), 137 deletions(-) create mode 100644 docs/docHTMLs/.buildinfo create mode 100644 docs/docHTMLs/.doctrees/API.doctree create mode 100644 docs/docHTMLs/.doctrees/dynamodb.doctree create mode 100644 docs/docHTMLs/.doctrees/environment.pickle create mode 100644 docs/docHTMLs/.doctrees/generated/dynamodb.dynamodb_helpers.doctree create mode 100644 docs/docHTMLs/.doctrees/generated/ergast.doctree create mode 100644 docs/docHTMLs/.doctrees/generated/sample.doctree create mode 100644 docs/docHTMLs/.doctrees/generated/sample.helpers.doctree create mode 100644 docs/docHTMLs/.doctrees/index.doctree create mode 100644 docs/docHTMLs/.doctrees/modules.doctree create mode 100644 docs/docHTMLs/.doctrees/usage.doctree create mode 100644 docs/docHTMLs/API.html create mode 100644 docs/docHTMLs/_sources/API.rst.txt create mode 100644 docs/docHTMLs/_sources/dynamodb.rst.txt create mode 100644 docs/docHTMLs/_sources/generated/dynamodb.dynamodb_helpers.rst.txt create mode 100644 docs/docHTMLs/_sources/generated/ergast.rst.txt create mode 100644 docs/docHTMLs/_sources/generated/sample.helpers.rst.txt create mode 100644 docs/docHTMLs/_sources/generated/sample.rst.txt create mode 100644 docs/docHTMLs/_sources/index.rst.txt create mode 100644 docs/docHTMLs/_sources/modules.rst.txt create mode 100644 docs/docHTMLs/_sources/usage.rst.txt create mode 100644 docs/docHTMLs/_static/basic.css create mode 100644 docs/docHTMLs/_static/classic.css create mode 100644 docs/docHTMLs/_static/default.css create mode 100644 docs/docHTMLs/_static/doctools.js create mode 100644 docs/docHTMLs/_static/documentation_options.js create mode 100644 docs/docHTMLs/_static/file.png create mode 100644 docs/docHTMLs/_static/language_data.js create mode 100644 docs/docHTMLs/_static/minus.png create mode 100644 docs/docHTMLs/_static/plus.png create mode 100644 docs/docHTMLs/_static/pygments.css create mode 100644 docs/docHTMLs/_static/searchtools.js create mode 100644 docs/docHTMLs/_static/sidebar.js create mode 100644 docs/docHTMLs/_static/sphinx_highlight.js create mode 100644 docs/docHTMLs/dynamodb.html create mode 100644 docs/docHTMLs/generated/dynamodb.dynamodb_helpers.html create mode 100644 docs/docHTMLs/generated/ergast.html create mode 100644 docs/docHTMLs/generated/sample.helpers.html create mode 100644 docs/docHTMLs/generated/sample.html create mode 100644 docs/docHTMLs/genindex.html create mode 100644 docs/docHTMLs/index.html create mode 100644 docs/docHTMLs/modules.html create mode 100644 docs/docHTMLs/objects.inv create mode 100644 docs/docHTMLs/py-modindex.html create mode 100644 docs/docHTMLs/search.html create mode 100644 docs/docHTMLs/searchindex.js create mode 100644 docs/docHTMLs/usage.html create mode 100644 docs/dynamodb.rst delete mode 100644 docs/formulaone.rst create mode 100644 dynamodb/Data/RawData/rawdata.json create mode 100644 dynamodb/Data/TidyData/current_race.parquet rename {formulaone => dynamodb}/__init__.py (100%) create mode 100644 dynamodb/core.py rename {formulaone => dynamodb}/dynamodb_helpers.py (92%) create mode 100644 dynamodb/load_movies.py rename {formulaone => dynamodb}/prepare_data.py (94%) create mode 100644 dynamodb/tidy_data.py delete mode 100644 formulaone/core.py delete mode 100644 formulaone/helpers.py delete mode 100644 formulaone/load_latest_race.py delete mode 100644 formulaone/tidy_data.py diff --git a/.gitignore b/.gitignore index 250c32e..5c0af16 100644 --- a/.gitignore +++ b/.gitignore @@ -62,6 +62,7 @@ instance/ # Sphinx documentation docs/_build/ +docs/generated/ # PyBuilder target/ @@ -94,6 +95,7 @@ ENV/ # My Data /Data +/Data/* # Vs code Setting .vscode/ @@ -103,3 +105,5 @@ ENV/ # Ignore config file with sensitive information config.ini + +.DS_Store \ No newline at end of file diff --git a/docs/API.rst b/docs/API.rst index 7e32988..5d63826 100644 --- a/docs/API.rst +++ b/docs/API.rst @@ -4,4 +4,4 @@ API .. autosummary:: :toctree: generated - formulaone.helpers \ No newline at end of file + dynamodb.dynamodb_helpers \ No newline at end of file diff --git a/docs/docHTMLs/.buildinfo b/docs/docHTMLs/.buildinfo new file mode 100644 index 0000000..876e047 --- /dev/null +++ b/docs/docHTMLs/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 192e42e872864313c12dcb7e3a4cfed8 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/docHTMLs/.doctrees/API.doctree b/docs/docHTMLs/.doctrees/API.doctree new file mode 100644 index 0000000000000000000000000000000000000000..546978c04f55ecc26fb087e95874c78a93c876ba GIT binary patch literal 4378 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 literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/.doctrees/dynamodb.doctree b/docs/docHTMLs/.doctrees/dynamodb.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7fa800294212a04688cf9897b1ebbeb489635d62 GIT binary patch literal 37971 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 P)c61g))YTTi0T0V9t_XR literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/.doctrees/environment.pickle b/docs/docHTMLs/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..96ad11b212bba7eccd02323e3329dcffc5378a5e GIT binary patch literal 157585 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%0AfG|f^$JiD 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 ZJz}Vu^OLelDht4kZ7fnS$Cf7P0RT2Y)HwhE literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/.doctrees/generated/dynamodb.dynamodb_helpers.doctree b/docs/docHTMLs/.doctrees/generated/dynamodb.dynamodb_helpers.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6ba927740e6c71bbafe675f0509981790e4f5833 GIT binary patch literal 16319 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 ASO5S3 literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/.doctrees/generated/ergast.doctree b/docs/docHTMLs/.doctrees/generated/ergast.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e67f2a97ae1a743dbe450d0b09c4e1b213252567 GIT binary patch literal 5620 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 literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/.doctrees/generated/sample.doctree b/docs/docHTMLs/.doctrees/generated/sample.doctree new file mode 100644 index 0000000000000000000000000000000000000000..863b88638ea0d6b6fbbf997584b29d06cbe2d31c GIT binary patch literal 2465 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 bNsZ6RPY1;oR|=?T0|(X=KTzdenxqE+X0G1y literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/.doctrees/generated/sample.helpers.doctree b/docs/docHTMLs/.doctrees/generated/sample.helpers.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2aaba718360a31200d4e761c0c0fbd95cd33e95c GIT binary patch literal 2505 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 literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/.doctrees/index.doctree b/docs/docHTMLs/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d454fcad5398e2075259ed36f20126d4b7b63fdf GIT binary patch literal 3574 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 GNe=+8f_ixX literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/.doctrees/modules.doctree b/docs/docHTMLs/.doctrees/modules.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5cd4dd34821f8fdb376eeee66353fcc2dc3a07f5 GIT binary patch literal 2801 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 Yocwf9Y;mQ4iZ*ayP4NR&-la);028@j9RL6T literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/.doctrees/usage.doctree b/docs/docHTMLs/.doctrees/usage.doctree new file mode 100644 index 0000000000000000000000000000000000000000..86fc7e9ff99323f83860271ec5bd7a7085c08ab1 GIT binary patch literal 28497 zcmZo*o$8j)00uq$#RVCec@=tzDJgmRDXGO%dN@+@lS^|`^Gc>no}$?}rFM!&4`)$g zd2xPeQF7{(9)>AB9LX7(IVnY{c~fGi^zea{mt^J?>p}Ii7pEqdWaj6=wP&zquw}5v zPSMEV>|rg*EXhellImd%Elx~NodQyj!P&zSl3D?>7$)301>yp>g2W<_lQIN*IO9P! zf*qK_+`|TSmtPM{PG(-}6u;7>#2&81l9Hm#q|%bqVzB#}GgFE|Ze>r-Nh~f-1+!W6 z5_2Iej+D{@1ScsmIlCw|4Wy>DhrJ{*9V9g+gFiz$gC|2KgE>RCC&<|<CbT%Us5qvm zGOf}u#wE2lyClCL#w9r3H?g=RwJ65THO9?VH=rmnyCgHaG&d%oC_gJTxg;hnzbLmf zCow-SH6|rLxj3d2<afQI;*u#Da^6g(Ng3Rb5Jv==08F5V-6J)pAhoC%5>#RcJ~WIn zq%#a44)n{A0|i5deC-sC48_<f8OpI!GE`%yWT?kZ$<U0QQktO+_Kz+^d4^7goHuJ} zQU+%aXF+07VtP?xK?ZUZc}3=zDkLZ7DU=qcDwJfTDkLPNROTh-=BFg-!5Hxw5ZCFY zr<TMQB$i~vm*mH%B$gy<XeJ~mq?P7@(}We+@fsOoJp$-vPC<CX0pc!*H!?VT*mE*V zQi~FEklkcJsvE#IXNdLaz+6m>(~%tIh3u$AykYB+A)Vn+nv@~d!-eE?9R5qiYm{Av zEI4}DGo&-X(N&t1!O+8+nU|7UffO8&42ILB9`@9{lA=s-a@Xi#E6&VI&q<xqV}Ti0 z3L2St3c2|yr8%hzI0H&^N{<#!NsI(AC4<ecWJ)3^(Ivrrks;eNgDRN_nhaxL&VeVx zf=Vk;4l60j%u83uPs8mQEbay6o(zT_mXy@uWQ;)8$YAK<1Ife}XQt;RmXsEu6lX%1 zVG2%pAZ<KgZJ?4iF&9OX6wLXUX%ehCL#zj%5=6>s#GObrdbo=-({&4qQo#jU4=>0u z;PMd6Pem>udN?a`bF7LB5<vw%M?q0)acWUnD!AOJ&ydcjhS)NwqtKfXoKrYKzKjR^ z5LTOIu=WU`M-nWQF(nXTI}PG%NU4Nc0BH1ZfWj7RO%DgiN-z^8Ofx2COakSBDTn~f zn4BR8b*B(WQ#`2j%}p&yEy~F(2GxS_vY$yq6XHZ%MLNv%WtgTT6)=T~psGNlhq*X2 zeM%1($j$jlpo(b<ic@>oa=|6QlpaZ(33EyhD>(5?$zbc@NGr|B0sA;(Mh{nfNq#cO zCnd#GGInRoXq(c*2^In?=)smhK*3U(AqxqP4C#zAP)LKL50Yb&^YcnTl|Lc|q2--D zJb*-kQcFsU@)STdk3vbl0;uNEg9Mpa4|YjJ%pM2Xmm!NSW|4CR$eEz>xEK^`8PXX? zK-x-^P?G|>hC?v_!2DO5gcKplu~Rg9m<lSVfWi<`MWRPVN`7u)X5N&Hdp+#=Nm(V8 z1*uaq?n4q8oRgQY3#k!0d)V{xVN5=lur8?dubk4^!vmFs@dfkpb)kV<3|GXTmk$$z zsRNk=vaC3@q$D#heM%=NC`v%y2N&qF8O7ihM+PE3qJk33!I7YlmY<W7TBML!tWX4w zqSO?Hq)LJ<h@!-DaO(lwl)%x1kSAaVQsw;?>{e(DXL!PsjUk~{1cp0cX-XGo&Hz^^ zX!?+x@)g-B_|p!k9q|@VI|9X5sHqA)8G_O+sF}wNjxd=F=F+5$WLPjja}%zz1*P?n zk>6tpDm~FWs6b@9L7RkN!_jb<IhYy_D8VoVk_$>v!&M`r3MSAaj3wy6DM}-w0j>yN zRS)ha5!o8ZQf6dez@6GOGI}z4QObQ-B~qUuoh1*~+cT&G99(}+g@>IWMgW6@H$$uk ziwwL5$TEWa7F#8tk+Cpi5!R5Jf)Y|$h9F}gRr+$clSrw%k%Aq`FhthQl4N9HfK=ic zTQjzyx@i}_>N;aj23yA7EEA9m_hkhzGBAMIZBsH1U{95xBEB+17VeA;=`0zLW=Pp_ z80I}_*?}neCD3Z(B4|YbuZ?jlK*UEF)Fz@U<t%BC4moee4C$<35EJZ7{Ke}bBrhR( zl(Y&u<8f9l$i638c_8X3gnHJQ@w_wRMQ6s#&Wu-`8LvAt-k{f+P#61^CLvXufv{e2 zVoq^B(cSHm%#=!kwWTOlqY)KTRuRbk-~kRu9zd!ljR;kfm@a^2J9v)<&VYB(Kv@-C zBa(Zn(A<MRGCeY+!9KuUU4o^Ni$g@V0=0^9)tI1xA6U<u+#1sgn^%dgG6@V=poSoh zI&;=wsx#4D4DN2@sWe5fg&sJ4(WKT~fj8aZuQivz_4W+zAV;e<!M!r{cwvv7k|74^ zu%SsI3hM1}4?_wK)J%%M;zR^i);5qa6jhv94MXJcta%hxoI61-+?RC~RB?jX;EEG_ z%7oRNFi&MjXDtNj23JWLxNA;Hw3-tX=-@sSyz0cG0ud#*p>`2pcP;?wfYhBgKuoYh zQDYLlbOhC%Fi&O3BE=sf$U%iF{?2X2<E&30`<`Td22oET6ft!t#KnHdRdo+LbOd?| zxP1h2FtQNR&^H%iC?7nw3L5&xGw#me0v=>^aRL`P8Dc#M0YsoPG2v@!gB*i4_@4D2 z<YjPm3wDGEN;@DWBwr!9C^fMpRUuIUX1_vFDrB-lhv=38thW^p(~5O0UY$tWkSb>Z zH2)$s7K{ls7O*%97PR^>Iqa<km@M2oNG_5<a}oaZ3u-Qa{D7yq0FoxXxgeGy4Ubw1 z`q;LhIuFCU8k)p58b}UEltFs94`5|T2A=9!9EVfEaY~aK+7)k9<FBC|;d*=K4yHyC zMqGnt1VLlih`y~T)_?{FbB0(C4p~GI6$1A;=~Xo%)Utv>#!ysMV>Jv>Z)DjpQP#%| z1G#WtRuK~eLl%e)uBvgSQdn&b^H+v+mL13da3zRdTWcWo)r_3M1#~gC5?Y}YG{**> zD|HMHRwzy_F3!x)gV*EaXhlS11=M-4%!$9Gv&)bj3MoB9I;#}wFYrt>e@bdvW?m*} zAwfLaYzTD7fwM;hO-+1eNop?Agk6sTq(xP1#RbV;@Or~aAtWOevtorr5NMqOOG#=G zicuUeqhR?BA%KXPDNr8}6*F0rK&oZ4+CY??H*<z`Rv!}s1K9Um2%jPO2kLReSc^I- z-pUZ`AzD4cOUps712<E!l^W;`8@mj+e^@f4vzCDUgExI<Edp79q6-oVhynrBkVLa6 zs|Q6FDC|0ku&W(I7b4B!wJ!tI-h~wl8L~))AgVTk?cEC?7d*+j2%?@sC<5(WNL>t@ zx<JHzVo1IMC}Suj=Hwt!a!F!RPHHi64MdRcct{FLNs5Q)#M(YoCCVzKw%ApW_mC0| zQtJ@!P!e_*!EzkDO$cYehmx>qL~_qvH22_5kr|-2A;<@K+J+!$(%Xho)M*>qVDl~U zO+$F-!5R32k^GjSDprR=QXIS}hD>bJq@BpcjIUFMzn#bi*V{8^u(T7g1t(@RQ3Sg( z$Y>6BNknlk3HLU(;vWBa4kF01BtXWXHxl{LVjhyOVXJB2Yafs*ydGRyz>8Nv3ve)& zc3{^bhG`PQ&&D9fB9&ICr9%&6-jqc2>c<eIMLJ8D8B|}Rsz+7|olwithA3AjLV1s5 zZfQ<QW;|#yBWM*xB6vLrqzMF`LRgj|orN`|5j9a3BQs?!Xlamp_hp4LGcaU<*x(kl z7`Ak!p$T3U1ez#<#d(Hw7Bfgc!3MOJPiApRF}VJMR6YusdEh29#()Q;U6vu%Ly8te z1V=-iLsYXY1Jqz1{8>IjIx7O|t<t2d4kiW$)EPOAtX?Fs9zDmRbmE)AT;Qy!ku@3F z2v)EWV3`cD9w-kH$c0eX5EaO<wr?g#6Qu2%3(g!_i;=7xi1uz1$VE5{1LVvN>NtYh zyHG!X+Pn2&Kj1D8N;9-!?Oh~Y5T7HmFP`=;R2Qhdn+3KDHI|iOofIxmUbRvHWiZg< zM{xF104=~OhGZqQs73T;pz8||0*DA+KuXA<MKD{2bk-b*gYibN6ajaG7DD1tf^h6c zQXC7)@>$TJWzUe#S_gJ1DbWbh1@Rv#(Fh6^P&9&ClE_2Z*b)G=>jHHpC;=d{KVCb* zT^Cq^oFR);HKS@H*mb!D3eqQ8w?WiX2t{VsB|RixAw9JOT-N92mu03FD?n0cT2X#3 zye~ssCk8Yo1~CKDgTdN?(I?SDq^`q#kav;F1Ej8u9-)D5RCmEjP6A7(ku@Q?<2jl; z@TN|17Y5{VJY5)&G$`T0%4^irfTf@VPgBTIrwapKd5-K;;=3=T1Rwcb7e(}RrGeIX zrD3;4goXTWivV2j;98xH9M_m#7VxrbR3(t^3Z?|2h*yStmGrI(BABw2K*kW&Rmsv} zMzpdpI~1U*Gs}pek_^0k5lfJ3kcu1BY@THYZrG!4<;j9}Mod{q>Wml?p*+ivnSlY` z>%balh+-p)n}xDohbqYL`?4Zg7#OlZY;dmwyfOhfX(07DU{RMLoy7~%OR&eG;+|Sk zOrY9<G>|gHdWchuNRRPQC%_6+)TqN!pbqjJnjxJP1NGA2=wXyXT|-m=!y2HuAWe`S zMj<%G4|orw4df!6SsY6`$%6U;)Wc{7`vGs#g7q+vbU}QM$g0>Hn9vb*s4h?gGY@PR zY7fI4-opU5*wE%tz+&)a3JPiYMGBCt3&~XE^g5Q15?W}H4r*U7fOrCLuR{;)Zqodc zA=X2xHbhael@w2bdneFn0rfLBfqg_u5&-Ffgaau_02F$lBmin864^U}x)PLl5Jd-G zJHfpZSmB)^i&Pt<Y9rV?xd#f;Ct3GF)KdsWX73~h+F3|cC@x4%&P>Zph9qJI(Ci|K zof7bjB-Sp88gaHD^#C4&yoOY6AoWCai0X+z9Rur!KwGr9_V9u;E?5ha8(yQi0dFb< z_d-Cf#?uP{NrMs?tV~CZbu5J;xEG>ConD9;ypa#~C-Hp{;)9O-9*7c}<G^K<jzVQ> zVv&vlco#hlyC4#*<aa?t;Cg$e4VIY`)Ud?tfbgL!fOJ35g%KsVI^2__cRmmSl%)nT z2EFqkgc;S~Jgb4)0bvCz1IwUxJCGzm1GNxk2&dbE>_jR@Q1dX}E`}v5NnH$6uyRya zvw#vX7Dpq*GsJoz9E6iY$#-%f*bS(DL@rj)rf9G^8G2>~X8#UJ0vyobqb(4w&L!W~ zndG<{ci9Q@Bx+v{YZ^otkj2kRSzk^Q<oA79y{rrjSs*sJFDHPS%aD3<uzZjqoh1m; zNw6oU1@6fuBGt?a;K4)C=@jtkBXG)xG(ACcM<i%LMB-$qb6^z|?vw<b4;a*iUWRnm z1gM9I>C>fwr+m1;;fS|+tj7h))(|Bi7I@MjBNY-odR*Y@3L*<;qDg~`1GLTobbbkx z=|Fi4>=2}e$V#X$h>8|iw_qVi6QnP=6r92E_XQyX$`EIxrYU$Aha!K2y`3S}Lvwo& zsd*PD1aOx9$mJq5HD^J?4Al4B4h}QC835MzMA8KbX++V2r|${X1?oO50^5b!_mqS8 zJySB1OCa$AZl!`-=8$}jmWmMbSkQ!o5I_XV4N?LHEiG|mNM~JvxD{^~Qxvz8L2Gxh z%Oafkk`yO`JB-k<<jj!HdIokMDe(r<1@RRr@dgSDP`rWK^F($Sp{@kQIHFv_YbUtF z2&*G9WRY4>sM-j27=_pv7&4w@34^Go5Q@wWV{AyiLSboYQ6;3fD+Zl!04fBD>nnnF z#)H#waePu`JV+<j9-|^bYmmxEageu=GCERc5$_5-?5=^8RPYsJa0Yzo7&eVa?vY1x z58l)W?l^*cfT!aKk_II-SOtI@`&ddcaK}-NIvqzFY`!JF`v?y`I0Jt$lHZ9`#OhFR zeGchL(y$NdgEz|YufFqu>m59+@2~|WW=~QCyD~_B61ya#n2&~goAh2KBFM6$K*pf= zD!Gwj9h{%3)SWB@S%y^7pyq76-N{@wlDd<bVC7WkPIi*-<W{g7Q2mHp*noOkpjAH5 z6@L&X<1U*(%27LJSfdePK$bHbWgW9vkl*)Ztz=_h$O5s!9Wya(i597Q21`&G(pjz` z{RF#b`hlgXp!4R?YD9v4G?Mip^3Hmw!(bHx?l^)rZHGX~k|CY72I?(hx@*qhUJ^Oo zwGwCxMvt78e@CHCBr4=#?dQE9O_09WL2#bJ-xsq1mtK%IKe2r=xTnCyU4~c>WriS< z+BJ~daTa;V#Q`*_WkG!l>P1}!`xbBNg!Q73bV0%hQ4ZkgML~6e+SL2NcA@s74B@>f z)P;1A7ASbm4m608o>`Wf2Oe!Ezhm`<lyE{z7@#?;4-n_$?O17$<ckck9^y41BAk^S z-*7md2nThEnAq{xa-ix0x(Nyzbs$|3zmpQ-pb!H^IH*-jWcLedA1J9H${D<Ng1cX^ zIv_(9si}dgjbQgn4-}+Nvh+dJQwT*$_X}ZL4+msrR!S1m#(!inJUjnEo9^-K{1<jf zEJ;)dDN4*M1|8g+2-=JYD@(A-AySMT$X`Sk5&Rj_S=MkJ;GT*$%6R}qA^8d=Fn1_` zj#L6?SMcc&3YmE&`3i{&;Nv1dE_N$Q%uOY(^9j-e>3f3D55n5-w5Gsrq#mFT+<%a^ zEmDtE7vJ<Hh7(~ipb3k2%w80l9wb+Upt%BXISlTHg4~U#9}1EN<v3X7he()MifGWt z3^;amks_ReQv%G<JW6~Ql!U-T?R_GWDKr}KoeY5PJaD2dreUA65pVS3?{n6|_4Z63 zEc2FV0f^b%<i}6}>1kq!BZ{U8aDPH#5H$<n-{OS`qpW_AG3cF4Hb@MEvnXmu4MhfJ zl_auEh8XDVS<s4bq&&L}WE0M^6mJi65rMiF)c*q2ztHa5JR+2%cGs{52%-$gs$i$A zyEX~r_kCH%*clkIKx}Y#O%N^8k$P&dSjmvissd>x*i$osS8tGok;K$3kQQNvSPyxc z5lQh3)QPad6E!JfX;%&IoS7k=brR|$V!CU(knS2J%P4@`rJ9I6JE##sR>$lS)G<T_ zFRcB23#19sF}nxO4){A}YQ#AoTq0zM^$@EZkw!j)+=DasV@V@fP#=IgTOYtaz?-aK zoh>9?5Pu_bF_xMfb^rlX7pMh&8*CS9XUh`a*@8FBtQ0~rQz{kUe1+uvypqJsJkUAy z;IITY>L6K+oY^cv4ifq*Xps(D^2f^o>aO6AbOX5SN%2jFSP$tM5eY$w6pw*gTCjuw z>KMs`eML$_0O^8+1t|#u6oR0H0BRBv*$G2RLWt4>ubtpd7_4~DkVUGBQMD25gn5I4 z^huTvh<Xa42zA21?LX*g6bRdTgh2<c>%zMzkggKqAU3cxq6Y($#?v*^Mh?9mR`5kB zNF6-50GbiZpn!+onZbnbY<Bp?F&R2NB4BstfL#?|P?Voulv)hAIEJ+(za%kdiZ??K z7felR$`o&gQqaH-V-H_)X%XmJns~^$Y*YMtcwi!+{o7OgdN`m*rWa4?5d>XZ1HLFH zttcOKpnb}e9=5Q=oYK@{_?Gt`w*1nPg3^*Hei{6JJ)G&Od8tK-CHX~D{CYT35=&Bx zOA>Pnrug-67v<-d#1|B$re#)4>0#8L(!&jL0%+fO_7uM!E-1IOC})aa4=?CQe$d4> zIhlFc#Z!7%AqTtn2&Lucm*nM_q{bs8J9>CQ7x?6r=Ehfmdc9LRdiaV<iZTo0lk;;y zx9${A@#~R>h@|GEf<@xXGfOh!!S?~Af~0vN(g*>bqSS)?qLTQW)Uwo^Dc(#yTp5Wu za4u_)U}{BXNqlihVo7N+Oc84jYf5TTY5Eku9=`I#B2WPtUtCg@nwSd;jgq3o<W!KW zLGH`UD=00APt8ltPXQfI-@{p2lBR2+3%=z*230aXwWuh+C_W=GFC{0nXi5(o$f?OC zQ+oIzA&+DVE7+7NJ+f#rXhvjpaWF9S@IlN)xB;eH22}!0bB_SX55+l&#TiAZ1v%gg zH+XXr^U_Nb(^KP<^HWl%^f0C7P3aLXN=?o$N{LTNElABvNzF?J-R9!g!<L+%mzD_% zBhJheSc1r4>)}f*Ey<5Z2=y>!rcCMKO)1SSh=(UhzaBoYKxSS^YEfQd4k+sQ!6M+q z4vKw*P(g8OX-a;4MJ^~o38YpO<QJ#LBkKgGlH`*3vdrR4NRs7`PsuC>9Y_-ocO^S4 zt7Pc(@WiL27MEn^f%6?Gl|q%pr)B1Vud3-01F_;W^NLf8Kw~fQsd*sNQl@nDaDxtB zhjG0bdjvuGEj}kTFTErqJ|{Cbvt){|fO-#KL25yKQEFOhQEFZ?IBD{LM3NGVQ{zEd zqemj6q@<wON?*SqwV+t9pt2+*KTj{eC|!R_k0?kb*a4+QIq@Z_xdl0iC8<+-I0{k= zbX5&ZQl|9q6{RJk84nUc7_SC19#lMnl5BQrkzQtMNgCLWl>B7<jFQ|O{V6@1C5cJ# z<(VlZ8B@GDdSpwAGIQhMnG^1Tc*vD3ojn4@m3bwJ74aFF=@~hh=@}(cdRTJu^U|mE z@D%4J7L~*omga*lzv}1_2J<1@_?-OYL}<{;CTAoTB_@}o7D4h`d}bav2y+vQvP%o5 zbb{~o0x#Br76Y9<yeav~nR#jXP=SsfAy7e4T$+TYEHf9Bc60I*A(;_$FIV=I9)Z-{ zq|}u7;*!do)Z&cP)RHNkJ)+4u`H9)_skw=nIq``pDWGyUwRlQLk08k8%>2Cg;?$fp zNSW5z!<?E|2D;y?hXYcYq=Je?fy}&=%%arflK7IuqV&{~V$eNbg2kmt#U+^~rQlSP z0=mtsc1n*BiYRzD{FK@$Ak)&|95zsqngS~Pd)PsOpo_z5r)XrwaxgGtMS+Mvpc7z! zf(Q#xr_2;Ygn}f3KuwGuPLM9}T^XR8$H4kJvp{+}vq0)Qvp{M)OEVNfrh*L2;K>4+ zmZ6(bm{AQr-yM7iJov!cEYPX8Szs$b$AyAV#>)a7p9enS1AGh!c-LJPXlovL&1M#8 zVJCQ!Fbg!3m<4hacxVya6U_p3S4(?%ky94fue`~bCE#obO3e@vPyqr{2MJVU5s13j zDWH^?o0OjePpn|2BE^*`f^gNGC?;~kYz1o)LNUL%B(bPuiZ^4AD7slt8HOIN%#`@# z{8CWiHKm6;IX@={a`9a8lpc0xsQBb5wNqNB1WoDTD@ZIVPL0n^Ee2h=2C)!c%Ap8z m!-c^Kj5{+gIj1xwH9jXl9hA1XQa}YUIIyPpfm$1-NqPVdT9aG= literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/API.html b/docs/docHTMLs/API.html new file mode 100644 index 0000000..2b82e3d --- /dev/null +++ b/docs/docHTMLs/API.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="./"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>API — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="_static/classic.css?v=def86cc0" /> + + <script src="_static/documentation_options.js?v=2fea6348"></script> + <script src="_static/doctools.js?v=9a2dae69"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="next" title="dynamodb.dynamodb_helpers" href="generated/dynamodb.dynamodb_helpers.html" /> + <link rel="prev" title="Usage" href="usage.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="generated/dynamodb.dynamodb_helpers.html" title="dynamodb.dynamodb_helpers" + accesskey="N">next</a> |</li> + <li class="right" > + <a href="usage.html" title="Usage" + accesskey="P">previous</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">API</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <section id="api"> +<h1>API<a class="headerlink" href="#api" title="Link to this heading">¶</a></h1> +<table class="autosummary longtable docutils align-default"> +<tbody> +<tr class="row-odd"><td><p><a class="reference internal" href="generated/dynamodb.dynamodb_helpers.html#module-dynamodb.dynamodb_helpers" title="dynamodb.dynamodb_helpers"><code class="xref py py-obj docutils literal notranslate"><span class="pre">dynamodb.dynamodb_helpers</span></code></a></p></td> +<td><p></p></td> +</tr> +</tbody> +</table> +</section> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> + <div> + <h4>Previous topic</h4> + <p class="topless"><a href="usage.html" + title="previous chapter">Usage</a></p> + </div> + <div> + <h4>Next topic</h4> + <p class="topless"><a href="generated/dynamodb.dynamodb_helpers.html" + title="next chapter">dynamodb.dynamodb_helpers</a></p> + </div> + <div role="note" aria-label="source link"> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="_sources/API.rst.txt" + rel="nofollow">Show Source</a></li> + </ul> + </div> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="generated/dynamodb.dynamodb_helpers.html" title="dynamodb.dynamodb_helpers" + >next</a> |</li> + <li class="right" > + <a href="usage.html" title="Usage" + >previous</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">API</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/_sources/API.rst.txt b/docs/docHTMLs/_sources/API.rst.txt new file mode 100644 index 0000000..5d63826 --- /dev/null +++ b/docs/docHTMLs/_sources/API.rst.txt @@ -0,0 +1,7 @@ +API +=== + +.. autosummary:: + :toctree: generated + + dynamodb.dynamodb_helpers \ No newline at end of file diff --git a/docs/docHTMLs/_sources/dynamodb.rst.txt b/docs/docHTMLs/_sources/dynamodb.rst.txt new file mode 100644 index 0000000..356bcf3 --- /dev/null +++ b/docs/docHTMLs/_sources/dynamodb.rst.txt @@ -0,0 +1,53 @@ +dynamodb package +================ + +Submodules +---------- + +dynamodb.core module +-------------------- + +.. automodule:: dynamodb.core + :members: + :undoc-members: + :show-inheritance: + +dynamodb.dynamodb\_helpers module +--------------------------------- + +.. automodule:: dynamodb.dynamodb_helpers + :members: + :undoc-members: + :show-inheritance: + +dynamodb.load\_movies module +---------------------------- + +.. automodule:: dynamodb.load_movies + :members: + :undoc-members: + :show-inheritance: + +dynamodb.prepare\_data module +----------------------------- + +.. automodule:: dynamodb.prepare_data + :members: + :undoc-members: + :show-inheritance: + +dynamodb.tidy\_data module +-------------------------- + +.. automodule:: dynamodb.tidy_data + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: dynamodb + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/docHTMLs/_sources/generated/dynamodb.dynamodb_helpers.rst.txt b/docs/docHTMLs/_sources/generated/dynamodb.dynamodb_helpers.rst.txt new file mode 100644 index 0000000..592c1d4 --- /dev/null +++ b/docs/docHTMLs/_sources/generated/dynamodb.dynamodb_helpers.rst.txt @@ -0,0 +1,38 @@ +dynamodb.dynamodb\_helpers +========================== + +.. automodule:: dynamodb.dynamodb_helpers + + + + + + + + .. rubric:: Functions + + .. autosummary:: + + get_config + get_dynamodb_resource + get_movie_item + get_movies_table + get_path_to_data + get_raw_data_path + get_tidy_data_path + list_dynamodb_tables + query_movies_by_year + tidy_movie_data + + + + + + + + + + + + + diff --git a/docs/docHTMLs/_sources/generated/ergast.rst.txt b/docs/docHTMLs/_sources/generated/ergast.rst.txt new file mode 100644 index 0000000..c072d53 --- /dev/null +++ b/docs/docHTMLs/_sources/generated/ergast.rst.txt @@ -0,0 +1,22 @@ +.. _ergast: + +Ergast API Interface +==================== + +.. currentmodule:: + fastf1.ergast + +Introduction +------------ + +This module can be used to interface with the Ergast F1 API +(https://ergast.com/mrd/). All Ergast endpoints are supported. + +The :class:`Ergast` object provides access to all API Endpoints of the +Ergast API. + +The terms of use of Ergast apply (https://ergast.com/mrd/terms/). +Especially take care not to exceed the specified rate limits. +FastF1 will handle caching and it will try to enforce rate limits where +possible. Make sure to know what limits apply. For more information on how +FastF1 handles caching and rate limiting see :ref:`requests-and-caching`. diff --git a/docs/docHTMLs/_sources/generated/sample.helpers.rst.txt b/docs/docHTMLs/_sources/generated/sample.helpers.rst.txt new file mode 100644 index 0000000..c75d5e6 --- /dev/null +++ b/docs/docHTMLs/_sources/generated/sample.helpers.rst.txt @@ -0,0 +1,31 @@ +sample.helpers +============== + +.. automodule:: sample.helpers + + + + + + + + .. rubric:: Functions + + .. autosummary:: + + get_path_to_data + get_raw_data_path + get_tidy_data_path + + + + + + + + + + + + + diff --git a/docs/docHTMLs/_sources/generated/sample.rst.txt b/docs/docHTMLs/_sources/generated/sample.rst.txt new file mode 100644 index 0000000..12cd9db --- /dev/null +++ b/docs/docHTMLs/_sources/generated/sample.rst.txt @@ -0,0 +1,23 @@ +sample +====== + +.. automodule:: sample + + + + + + + + + + + + + + + + + + + diff --git a/docs/docHTMLs/_sources/index.rst.txt b/docs/docHTMLs/_sources/index.rst.txt new file mode 100644 index 0000000..5b22772 --- /dev/null +++ b/docs/docHTMLs/_sources/index.rst.txt @@ -0,0 +1,14 @@ +.. sample documentation master file, created by + sphinx-quickstart on Mon Apr 16 21:22:43 2012. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to sample's documentation! +================================== + +Contents: + +.. toctree:: + modules + usage + API diff --git a/docs/docHTMLs/_sources/modules.rst.txt b/docs/docHTMLs/_sources/modules.rst.txt new file mode 100644 index 0000000..09e5b15 --- /dev/null +++ b/docs/docHTMLs/_sources/modules.rst.txt @@ -0,0 +1,7 @@ +formulaone +========== + +.. toctree:: + :maxdepth: 4 + + dynamodb diff --git a/docs/docHTMLs/_sources/usage.rst.txt b/docs/docHTMLs/_sources/usage.rst.txt new file mode 100644 index 0000000..ee6f0a6 --- /dev/null +++ b/docs/docHTMLs/_sources/usage.rst.txt @@ -0,0 +1,47 @@ +Usage +===== + +Helpers +------- + +You can use the ``dynamodb.dynamodb_helpers.get_path_to_data()`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.get_path_to_data + +Raw data folder is returned by ``dynamodb.dynamodb_helpers.get_raw_data_path()`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.get_raw_data_path + +You can also use the ``dynamodb.dynamodb_helpers.get_tidy_data_path()`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.get_tidy_data_path + +DynamoDB +-------- + +To create a DynamoDB resource, use the ``dynamodb.dynamodb_helpers.get_dynamodb_resource`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.get_dynamodb_resource + +To list all DynamoDB tables, use the ``dynamodb.dynamodb_helpers.list_dynamodb_tables`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.list_dynamodb_tables + +To get the movies table from DynamoDB, use the ``dynamodb.dynamodb_helpers.get_movies_table`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.get_movies_table + +To get a specific movie item, use the ``dynamodb.dynamodb_helpers.get_movie_item`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.get_movie_item + +To query movies by year, use the ``dynamodb.dynamodb_helpers.query_movies_by_year`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.query_movies_by_year + +Data Transformation +------------------- + +To transform raw movie data into a tidy DataFrame, use the ``dynamodb.dynamodb_helpers.tidy_movie_data`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.tidy_movie_data diff --git a/docs/docHTMLs/_static/basic.css b/docs/docHTMLs/_static/basic.css new file mode 100644 index 0000000..f316efc --- /dev/null +++ b/docs/docHTMLs/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/docHTMLs/_static/classic.css b/docs/docHTMLs/_static/classic.css new file mode 100644 index 0000000..5530147 --- /dev/null +++ b/docs/docHTMLs/_static/classic.css @@ -0,0 +1,269 @@ +/* + * classic.css_t + * ~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- classic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +html { + /* CSS hack for macOS's scrollbar (see #1125) */ + background-color: #FFFFFF; +} + +body { + font-family: sans-serif; + font-size: 100%; + background-color: #11303d; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + display: flex; + background-color: #1c4e63; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +div.body { + background-color: #ffffff; + color: #000000; + padding: 0 20px 30px 20px; +} + +div.footer { + color: #ffffff; + width: 100%; + padding: 9px 0 9px 0; + text-align: center; + font-size: 75%; +} + +div.footer a { + color: #ffffff; + text-decoration: underline; +} + +div.related { + background-color: #133f52; + line-height: 30px; + color: #ffffff; +} + +div.related a { + color: #ffffff; +} + +div.sphinxsidebar { +} + +div.sphinxsidebar h3 { + font-family: 'Trebuchet MS', sans-serif; + color: #ffffff; + font-size: 1.4em; + font-weight: normal; + margin: 0; + padding: 0; +} + +div.sphinxsidebar h3 a { + color: #ffffff; +} + +div.sphinxsidebar h4 { + font-family: 'Trebuchet MS', sans-serif; + color: #ffffff; + font-size: 1.3em; + font-weight: normal; + margin: 5px 0 0 0; + padding: 0; +} + +div.sphinxsidebar p { + color: #ffffff; +} + +div.sphinxsidebar p.topless { + margin: 5px 10px 10px 10px; +} + +div.sphinxsidebar ul { + margin: 10px; + padding: 0; + color: #ffffff; +} + +div.sphinxsidebar a { + color: #98dbcc; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + + + +/* -- hyperlink styles ------------------------------------------------------ */ + +a { + color: #355f7c; + text-decoration: none; +} + +a:visited { + color: #551a8b; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + + + +/* -- body styles ----------------------------------------------------------- */ + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Trebuchet MS', sans-serif; + background-color: #f2f2f2; + font-weight: normal; + color: #20435c; + border-bottom: 1px solid #ccc; + margin: 20px -20px 10px -20px; + padding: 3px 0 3px 10px; +} + +div.body h1 { margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 160%; } +div.body h3 { font-size: 140%; } +div.body h4 { font-size: 120%; } +div.body h5 { font-size: 110%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #c60f0f; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: #c60f0f; + color: white; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + text-align: justify; + line-height: 130%; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.admonition p { + margin-bottom: 5px; +} + +div.admonition pre { + margin-bottom: 5px; +} + +div.admonition ul, div.admonition ol { + margin-bottom: 5px; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +nav.contents, +aside.topic, +div.topic { + background-color: #eee; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 5px; + background-color: unset; + color: unset; + line-height: 120%; + border: 1px solid #ac9; + border-left: none; + border-right: none; +} + +code { + background-color: #ecf0f3; + padding: 0 1px 0 1px; + font-size: 0.95em; +} + +th, dl.field-list > dt { + background-color: #ede; +} + +.warning code { + background: #efc2c2; +} + +.note code { + background: #d6d6d6; +} + +.viewcode-back { + font-family: sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +div.code-block-caption { + color: #efefef; + background-color: #1c4e63; +} \ No newline at end of file diff --git a/docs/docHTMLs/_static/default.css b/docs/docHTMLs/_static/default.css new file mode 100644 index 0000000..81b9363 --- /dev/null +++ b/docs/docHTMLs/_static/default.css @@ -0,0 +1 @@ +@import url("classic.css"); diff --git a/docs/docHTMLs/_static/doctools.js b/docs/docHTMLs/_static/doctools.js new file mode 100644 index 0000000..4d67807 --- /dev/null +++ b/docs/docHTMLs/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/docHTMLs/_static/documentation_options.js b/docs/docHTMLs/_static/documentation_options.js new file mode 100644 index 0000000..5c18e31 --- /dev/null +++ b/docs/docHTMLs/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: 'v0.0.1', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/docHTMLs/_static/file.png b/docs/docHTMLs/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7o_e}ChEy=Fo!lJ6#wgPI zU9-A1=eok}ZEQDX(r(*2tb58m$7=u1ea82H)jeO=^6%fjou57xMW{G_5a*B3{pP}1 zS6~0}?_b_epFayX9PiZV3J_7<*U-z(&Te62!(wS=#r62dj~f93Q(yV3O;UNueM4ey zPF+*P_cxDwe?L<@A-VUOYxn_?IFqgAjDfX>&K+iC+ZOj{hWM55XBY3QXXIt>UXl5V zY32J_2KpZQFCE-8U%FHkYESx{HDO9L>%8Dl(|ry6XI@BV%vz@ZVSj$)G){LlpS0qd r#>Mpuckiw~`|AFW`^Ks}LhH4IH@r-6bi2gBz`)??>gTe~DWM4fp;vuF literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/_static/language_data.js b/docs/docHTMLs/_static/language_data.js new file mode 100644 index 0000000..367b8ed --- /dev/null +++ b/docs/docHTMLs/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/docs/docHTMLs/_static/minus.png b/docs/docHTMLs/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4h9AWhMwaZzZe)86g^!WLn;`PEt(m4((N1$ qT5J54Rote=BCz_OtVqKR4hDwUH)%$B(trFwnmk?oT-G@yGywom%@%0@ literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/_static/plus.png b/docs/docHTMLs/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4h9AWhMwaZzZe)86g^!WLn;`PEt(m4((N1$ pT5Cj47Kj#R>InVM$K{a2!oZ-bm^kJ02L~3ACQnyCmvv4FO#meY6wUwu literal 0 HcmV?d00001 diff --git a/docs/docHTMLs/_static/pygments.css b/docs/docHTMLs/_static/pygments.css new file mode 100644 index 0000000..0d49244 --- /dev/null +++ b/docs/docHTMLs/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/docHTMLs/_static/searchtools.js b/docs/docHTMLs/_static/searchtools.js new file mode 100644 index 0000000..92da3f8 --- /dev/null +++ b/docs/docHTMLs/_static/searchtools.js @@ -0,0 +1,619 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlinks", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/docHTMLs/_static/sidebar.js b/docs/docHTMLs/_static/sidebar.js new file mode 100644 index 0000000..f28c206 --- /dev/null +++ b/docs/docHTMLs/_static/sidebar.js @@ -0,0 +1,70 @@ +/* + * sidebar.js + * ~~~~~~~~~~ + * + * This script makes the Sphinx sidebar collapsible. + * + * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds + * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton + * used to collapse and expand the sidebar. + * + * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden + * and the width of the sidebar and the margin-left of the document + * are decreased. When the sidebar is expanded the opposite happens. + * This script saves a per-browser/per-session cookie used to + * remember the position of the sidebar among the pages. + * Once the browser is closed the cookie is deleted and the position + * reset to the default (expanded). + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +const initialiseSidebar = () => { + + + + + // global elements used by the functions. + const bodyWrapper = document.getElementsByClassName("bodywrapper")[0] + const sidebar = document.getElementsByClassName("sphinxsidebar")[0] + const sidebarWrapper = document.getElementsByClassName('sphinxsidebarwrapper')[0] + const sidebarButton = document.getElementById("sidebarbutton") + const sidebarArrow = sidebarButton.querySelector('span') + + // for some reason, the document has no sidebar; do not run into errors + if (typeof sidebar === "undefined") return; + + const flipArrow = element => element.innerText = (element.innerText === "»") ? "«" : "»" + + const collapse_sidebar = () => { + bodyWrapper.style.marginLeft = ".8em"; + sidebar.style.width = ".8em" + sidebarWrapper.style.display = "none" + flipArrow(sidebarArrow) + sidebarButton.title = _('Expand sidebar') + window.localStorage.setItem("sidebar", "collapsed") + } + + const expand_sidebar = () => { + bodyWrapper.style.marginLeft = "" + sidebar.style.removeProperty("width") + sidebarWrapper.style.display = "" + flipArrow(sidebarArrow) + sidebarButton.title = _('Collapse sidebar') + window.localStorage.setItem("sidebar", "expanded") + } + + sidebarButton.addEventListener("click", () => { + (sidebarWrapper.style.display === "none") ? expand_sidebar() : collapse_sidebar() + }) + + if (!window.localStorage.getItem("sidebar")) return + const value = window.localStorage.getItem("sidebar") + if (value === "collapsed") collapse_sidebar(); + else if (value === "expanded") expand_sidebar(); +} + +if (document.readyState !== "loading") initialiseSidebar() +else document.addEventListener("DOMContentLoaded", initialiseSidebar) \ No newline at end of file diff --git a/docs/docHTMLs/_static/sphinx_highlight.js b/docs/docHTMLs/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/docs/docHTMLs/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '<p class="highlight-link">' + + '<a href="javascript:SphinxHighlight.hideSearchWords()">' + + _("Hide Search Matches") + + "</a></p>" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/docHTMLs/dynamodb.html b/docs/docHTMLs/dynamodb.html new file mode 100644 index 0000000..c27e9d2 --- /dev/null +++ b/docs/docHTMLs/dynamodb.html @@ -0,0 +1,297 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="./"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>dynamodb package — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="_static/classic.css?v=def86cc0" /> + + <script src="_static/documentation_options.js?v=2fea6348"></script> + <script src="_static/doctools.js?v=9a2dae69"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="next" title="Usage" href="usage.html" /> + <link rel="prev" title="formulaone" href="modules.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="usage.html" title="Usage" + accesskey="N">next</a> |</li> + <li class="right" > + <a href="modules.html" title="formulaone" + accesskey="P">previous</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-1"><a href="modules.html" accesskey="U">formulaone</a> »</li> + <li class="nav-item nav-item-this"><a href="">dynamodb package</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <section id="dynamodb-package"> +<h1>dynamodb package<a class="headerlink" href="#dynamodb-package" title="Link to this heading">¶</a></h1> +<section id="submodules"> +<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2> +</section> +<section id="module-dynamodb.core"> +<span id="dynamodb-core-module"></span><h2>dynamodb.core module<a class="headerlink" href="#module-dynamodb.core" title="Link to this heading">¶</a></h2> +<dl class="py class"> +<dt class="sig sig-object py" id="dynamodb.core.DecimalEncoder"> +<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">dynamodb.core.</span></span><span class="sig-name descname"><span class="pre">DecimalEncoder</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">skipkeys</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ensure_ascii</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">check_circular</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allow_nan</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sort_keys</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">indent</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">separators</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.core.DecimalEncoder" title="Link to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">JSONEncoder</span></code></p> +<dl class="py method"> +<dt class="sig sig-object py" id="dynamodb.core.DecimalEncoder.default"> +<span class="sig-name descname"><span class="pre">default</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">obj</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.core.DecimalEncoder.default" title="Link to this definition">¶</a></dt> +<dd><p>Implement this method in a subclass such that it returns +a serializable object for <code class="docutils literal notranslate"><span class="pre">o</span></code>, or calls the base implementation +(to raise a <code class="docutils literal notranslate"><span class="pre">TypeError</span></code>).</p> +<p>For example, to support arbitrary iterators, you could +implement default like this:</p> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">o</span><span class="p">):</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">iterable</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">iterable</span><span class="p">)</span> + <span class="c1"># Let the base class default method raise the TypeError</span> + <span class="k">return</span> <span class="n">JSONEncoder</span><span class="o">.</span><span class="n">default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">o</span><span class="p">)</span> +</pre></div> +</div> +</dd></dl> + +</dd></dl> + +</section> +<section id="module-dynamodb.dynamodb_helpers"> +<span id="dynamodb-dynamodb-helpers-module"></span><h2>dynamodb.dynamodb_helpers module<a class="headerlink" href="#module-dynamodb.dynamodb_helpers" title="Link to this heading">¶</a></h2> +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_config"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_config</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_config" title="Link to this definition">¶</a></dt> +<dd><p>Reads the configuration file and returns the config object.</p> +<dl class="simple"> +<dt>Returns:</dt><dd><p>config: The config object.</p> +</dd> +</dl> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_dynamodb_resource"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_dynamodb_resource</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_dynamodb_resource" title="Link to this definition">¶</a></dt> +<dd><p>Creates a DynamoDB resource using the AWS session.</p> +<dl class="simple"> +<dt>Returns:</dt><dd><p>dynamo_resource: The DynamoDB resource.</p> +</dd> +</dl> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_movie_item"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_movie_item</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">table</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">year</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_movie_item" title="Link to this definition">¶</a></dt> +<dd><p>Gets a movie item from the DynamoDB table.</p> +<dl class="simple"> +<dt>Args:</dt><dd><p>table: The DynamoDB table resource. +year: The year of the movie. +title: The title of the movie.</p> +</dd> +<dt>Returns:</dt><dd><p>dict: The movie item.</p> +</dd> +</dl> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_movies_table"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_movies_table</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dynamo_resource</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_movies_table" title="Link to this definition">¶</a></dt> +<dd><p>Gets the movies table from DynamoDB.</p> +<dl class="simple"> +<dt>Args:</dt><dd><p>dynamo_resource: The DynamoDB resource.</p> +</dd> +<dt>Returns:</dt><dd><p>table: The DynamoDB table resource for movies.</p> +</dd> +</dl> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_path_to_data"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_path_to_data</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_path_to_data" title="Link to this definition">¶</a></dt> +<dd><p>Return path to data.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_raw_data_path"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_raw_data_path</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_raw_data_path" title="Link to this definition">¶</a></dt> +<dd><p>Return path to raw data.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_tidy_data_path"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_tidy_data_path</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_tidy_data_path" title="Link to this definition">¶</a></dt> +<dd><p>Return path to tidy data.</p> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.list_dynamodb_tables"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">list_dynamodb_tables</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dynamo_resource</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.list_dynamodb_tables" title="Link to this definition">¶</a></dt> +<dd><p>Lists all tables in the DynamoDB resource.</p> +<dl class="simple"> +<dt>Args:</dt><dd><p>dynamo_resource: The DynamoDB resource.</p> +</dd> +<dt>Returns:</dt><dd><p>list: List of table names.</p> +</dd> +</dl> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.query_movies_by_year"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">query_movies_by_year</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">table</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">year</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.query_movies_by_year" title="Link to this definition">¶</a></dt> +<dd><p>Queries movies by year from the DynamoDB table.</p> +<dl class="simple"> +<dt>Args:</dt><dd><p>table: The DynamoDB table resource. +year: The year to query.</p> +</dd> +<dt>Returns:</dt><dd><p>list: List of movies for the given year.</p> +</dd> +</dl> +</dd></dl> + +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.tidy_movie_data"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">tidy_movie_data</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">movies</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.tidy_movie_data" title="Link to this definition">¶</a></dt> +<dd><p>Transforms the raw movie data into a tidy DataFrame.</p> +<dl class="simple"> +<dt>Args:</dt><dd><p>movies (list): List of raw movie data.</p> +</dd> +<dt>Returns:</dt><dd><p>DataFrame: Tidy DataFrame containing movie data.</p> +</dd> +</dl> +</dd></dl> + +</section> +<section id="dynamodb-load-movies-module"> +<h2>dynamodb.load_movies module<a class="headerlink" href="#dynamodb-load-movies-module" title="Link to this heading">¶</a></h2> +</section> +<section id="dynamodb-prepare-data-module"> +<h2>dynamodb.prepare_data module<a class="headerlink" href="#dynamodb-prepare-data-module" title="Link to this heading">¶</a></h2> +</section> +<section id="dynamodb-tidy-data-module"> +<h2>dynamodb.tidy_data module<a class="headerlink" href="#dynamodb-tidy-data-module" title="Link to this heading">¶</a></h2> +</section> +<section id="module-dynamodb"> +<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-dynamodb" title="Link to this heading">¶</a></h2> +</section> +</section> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> + <div> + <h3><a href="index.html">Table of Contents</a></h3> + <ul> +<li><a class="reference internal" href="#">dynamodb package</a><ul> +<li><a class="reference internal" href="#submodules">Submodules</a></li> +<li><a class="reference internal" href="#module-dynamodb.core">dynamodb.core module</a><ul> +<li><a class="reference internal" href="#dynamodb.core.DecimalEncoder"><code class="docutils literal notranslate"><span class="pre">DecimalEncoder</span></code></a><ul> +<li><a class="reference internal" href="#dynamodb.core.DecimalEncoder.default"><code class="docutils literal notranslate"><span class="pre">DecimalEncoder.default()</span></code></a></li> +</ul> +</li> +</ul> +</li> +<li><a class="reference internal" href="#module-dynamodb.dynamodb_helpers">dynamodb.dynamodb_helpers module</a><ul> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_config"><code class="docutils literal notranslate"><span class="pre">get_config()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_dynamodb_resource"><code class="docutils literal notranslate"><span class="pre">get_dynamodb_resource()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_movie_item"><code class="docutils literal notranslate"><span class="pre">get_movie_item()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_movies_table"><code class="docutils literal notranslate"><span class="pre">get_movies_table()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_path_to_data"><code class="docutils literal notranslate"><span class="pre">get_path_to_data()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_raw_data_path"><code class="docutils literal notranslate"><span class="pre">get_raw_data_path()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_tidy_data_path"><code class="docutils literal notranslate"><span class="pre">get_tidy_data_path()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.list_dynamodb_tables"><code class="docutils literal notranslate"><span class="pre">list_dynamodb_tables()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.query_movies_by_year"><code class="docutils literal notranslate"><span class="pre">query_movies_by_year()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.tidy_movie_data"><code class="docutils literal notranslate"><span class="pre">tidy_movie_data()</span></code></a></li> +</ul> +</li> +<li><a class="reference internal" href="#dynamodb-load-movies-module">dynamodb.load_movies module</a></li> +<li><a class="reference internal" href="#dynamodb-prepare-data-module">dynamodb.prepare_data module</a></li> +<li><a class="reference internal" href="#dynamodb-tidy-data-module">dynamodb.tidy_data module</a></li> +<li><a class="reference internal" href="#module-dynamodb">Module contents</a></li> +</ul> +</li> +</ul> + + </div> + <div> + <h4>Previous topic</h4> + <p class="topless"><a href="modules.html" + title="previous chapter">formulaone</a></p> + </div> + <div> + <h4>Next topic</h4> + <p class="topless"><a href="usage.html" + title="next chapter">Usage</a></p> + </div> + <div role="note" aria-label="source link"> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="_sources/dynamodb.rst.txt" + rel="nofollow">Show Source</a></li> + </ul> + </div> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="usage.html" title="Usage" + >next</a> |</li> + <li class="right" > + <a href="modules.html" title="formulaone" + >previous</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-1"><a href="modules.html" >formulaone</a> »</li> + <li class="nav-item nav-item-this"><a href="">dynamodb package</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/generated/dynamodb.dynamodb_helpers.html b/docs/docHTMLs/generated/dynamodb.dynamodb_helpers.html new file mode 100644 index 0000000..eba6919 --- /dev/null +++ b/docs/docHTMLs/generated/dynamodb.dynamodb_helpers.html @@ -0,0 +1,137 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="../"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>dynamodb.dynamodb_helpers — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="../_static/classic.css?v=def86cc0" /> + + <script src="../_static/documentation_options.js?v=2fea6348"></script> + <script src="../_static/doctools.js?v=9a2dae69"></script> + <script src="../_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="../genindex.html" /> + <link rel="search" title="Search" href="../search.html" /> + <link rel="prev" title="API" href="../API.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="../genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="../py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="../API.html" title="API" + accesskey="P">previous</a> |</li> + <li class="nav-item nav-item-0"><a href="../index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-1"><a href="../API.html" accesskey="U">API</a> »</li> + <li class="nav-item nav-item-this"><a href="">dynamodb.dynamodb_helpers</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <section id="module-dynamodb.dynamodb_helpers"> +<span id="dynamodb-dynamodb-helpers"></span><h1>dynamodb.dynamodb_helpers<a class="headerlink" href="#module-dynamodb.dynamodb_helpers" title="Link to this heading">¶</a></h1> +<p class="rubric">Functions</p> +<table class="autosummary longtable docutils align-default"> +<tbody> +<tr class="row-odd"><td><p><a class="reference internal" href="../dynamodb.html#dynamodb.dynamodb_helpers.get_config" title="dynamodb.dynamodb_helpers.get_config"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_config</span></code></a>()</p></td> +<td><p>Reads the configuration file and returns the config object.</p></td> +</tr> +<tr class="row-even"><td><p><a class="reference internal" href="../usage.html#dynamodb.dynamodb_helpers.get_dynamodb_resource" title="dynamodb.dynamodb_helpers.get_dynamodb_resource"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_dynamodb_resource</span></code></a>()</p></td> +<td><p>Creates a DynamoDB resource using the AWS session.</p></td> +</tr> +<tr class="row-odd"><td><p><a class="reference internal" href="../usage.html#dynamodb.dynamodb_helpers.get_movie_item" title="dynamodb.dynamodb_helpers.get_movie_item"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_movie_item</span></code></a>(table, year, title)</p></td> +<td><p>Gets a movie item from the DynamoDB table.</p></td> +</tr> +<tr class="row-even"><td><p><a class="reference internal" href="../usage.html#dynamodb.dynamodb_helpers.get_movies_table" title="dynamodb.dynamodb_helpers.get_movies_table"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_movies_table</span></code></a>(dynamo_resource)</p></td> +<td><p>Gets the movies table from DynamoDB.</p></td> +</tr> +<tr class="row-odd"><td><p><a class="reference internal" href="../usage.html#dynamodb.dynamodb_helpers.get_path_to_data" title="dynamodb.dynamodb_helpers.get_path_to_data"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_path_to_data</span></code></a>()</p></td> +<td><p>Return path to data.</p></td> +</tr> +<tr class="row-even"><td><p><a class="reference internal" href="../usage.html#dynamodb.dynamodb_helpers.get_raw_data_path" title="dynamodb.dynamodb_helpers.get_raw_data_path"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_raw_data_path</span></code></a>()</p></td> +<td><p>Return path to raw data.</p></td> +</tr> +<tr class="row-odd"><td><p><a class="reference internal" href="../usage.html#dynamodb.dynamodb_helpers.get_tidy_data_path" title="dynamodb.dynamodb_helpers.get_tidy_data_path"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_tidy_data_path</span></code></a>()</p></td> +<td><p>Return path to tidy data.</p></td> +</tr> +<tr class="row-even"><td><p><a class="reference internal" href="../usage.html#dynamodb.dynamodb_helpers.list_dynamodb_tables" title="dynamodb.dynamodb_helpers.list_dynamodb_tables"><code class="xref py py-obj docutils literal notranslate"><span class="pre">list_dynamodb_tables</span></code></a>(dynamo_resource)</p></td> +<td><p>Lists all tables in the DynamoDB resource.</p></td> +</tr> +<tr class="row-odd"><td><p><a class="reference internal" href="../usage.html#dynamodb.dynamodb_helpers.query_movies_by_year" title="dynamodb.dynamodb_helpers.query_movies_by_year"><code class="xref py py-obj docutils literal notranslate"><span class="pre">query_movies_by_year</span></code></a>(table, year)</p></td> +<td><p>Queries movies by year from the DynamoDB table.</p></td> +</tr> +<tr class="row-even"><td><p><a class="reference internal" href="../usage.html#dynamodb.dynamodb_helpers.tidy_movie_data" title="dynamodb.dynamodb_helpers.tidy_movie_data"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tidy_movie_data</span></code></a>(movies)</p></td> +<td><p>Transforms the raw movie data into a tidy DataFrame.</p></td> +</tr> +</tbody> +</table> +</section> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> + <div> + <h4>Previous topic</h4> + <p class="topless"><a href="../API.html" + title="previous chapter">API</a></p> + </div> + <div role="note" aria-label="source link"> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="../_sources/generated/dynamodb.dynamodb_helpers.rst.txt" + rel="nofollow">Show Source</a></li> + </ul> + </div> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="../search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="../genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="../py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="../API.html" title="API" + >previous</a> |</li> + <li class="nav-item nav-item-0"><a href="../index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-1"><a href="../API.html" >API</a> »</li> + <li class="nav-item nav-item-this"><a href="">dynamodb.dynamodb_helpers</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/generated/ergast.html b/docs/docHTMLs/generated/ergast.html new file mode 100644 index 0000000..0d2166e --- /dev/null +++ b/docs/docHTMLs/generated/ergast.html @@ -0,0 +1,110 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="../"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>Ergast API Interface — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="../_static/classic.css?v=def86cc0" /> + + <script src="../_static/documentation_options.js?v=2fea6348"></script> + <script src="../_static/doctools.js?v=9a2dae69"></script> + <script src="../_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="../genindex.html" /> + <link rel="search" title="Search" href="../search.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="../genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="../py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="../index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Ergast API Interface</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <section id="ergast-api-interface"> +<span id="ergast"></span><h1>Ergast API Interface<a class="headerlink" href="#ergast-api-interface" title="Link to this heading">¶</a></h1> +<section id="introduction"> +<h2>Introduction<a class="headerlink" href="#introduction" title="Link to this heading">¶</a></h2> +<p>This module can be used to interface with the Ergast F1 API +(<a class="reference external" href="https://ergast.com/mrd/">https://ergast.com/mrd/</a>). All Ergast endpoints are supported.</p> +<p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">Ergast</span></code> object provides access to all API Endpoints of the +Ergast API.</p> +<p>The terms of use of Ergast apply (<a class="reference external" href="https://ergast.com/mrd/terms/">https://ergast.com/mrd/terms/</a>). +Especially take care not to exceed the specified rate limits. +FastF1 will handle caching and it will try to enforce rate limits where +possible. Make sure to know what limits apply. For more information on how +FastF1 handles caching and rate limiting see <span class="xref std std-ref">requests-and-caching</span>.</p> +</section> +</section> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> + <div> + <h3><a href="../index.html">Table of Contents</a></h3> + <ul> +<li><a class="reference internal" href="#">Ergast API Interface</a><ul> +<li><a class="reference internal" href="#introduction">Introduction</a></li> +</ul> +</li> +</ul> + + </div> + <div role="note" aria-label="source link"> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="../_sources/generated/ergast.rst.txt" + rel="nofollow">Show Source</a></li> + </ul> + </div> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="../search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="../genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="../py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="../index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Ergast API Interface</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/generated/sample.helpers.html b/docs/docHTMLs/generated/sample.helpers.html new file mode 100644 index 0000000..479bafe --- /dev/null +++ b/docs/docHTMLs/generated/sample.helpers.html @@ -0,0 +1,88 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="../"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>sample.helpers — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="../_static/classic.css?v=def86cc0" /> + + <script src="../_static/documentation_options.js?v=2fea6348"></script> + <script src="../_static/doctools.js?v=9a2dae69"></script> + <script src="../_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="../genindex.html" /> + <link rel="search" title="Search" href="../search.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="../genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="../py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="../index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">sample.helpers</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <section id="sample-helpers"> +<h1>sample.helpers<a class="headerlink" href="#sample-helpers" title="Link to this heading">¶</a></h1> +</section> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> + <div role="note" aria-label="source link"> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="../_sources/generated/sample.helpers.rst.txt" + rel="nofollow">Show Source</a></li> + </ul> + </div> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="../search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="../genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="../py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="../index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">sample.helpers</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/generated/sample.html b/docs/docHTMLs/generated/sample.html new file mode 100644 index 0000000..024151f --- /dev/null +++ b/docs/docHTMLs/generated/sample.html @@ -0,0 +1,88 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="../"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>sample — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="../_static/classic.css?v=def86cc0" /> + + <script src="../_static/documentation_options.js?v=2fea6348"></script> + <script src="../_static/doctools.js?v=9a2dae69"></script> + <script src="../_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="../genindex.html" /> + <link rel="search" title="Search" href="../search.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="../genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="../py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="../index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">sample</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <section id="sample"> +<h1>sample<a class="headerlink" href="#sample" title="Link to this heading">¶</a></h1> +</section> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> + <div role="note" aria-label="source link"> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="../_sources/generated/sample.rst.txt" + rel="nofollow">Show Source</a></li> + </ul> + </div> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="../search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="../genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="../py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="../index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">sample</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/genindex.html b/docs/docHTMLs/genindex.html new file mode 100644 index 0000000..0b1c0d3 --- /dev/null +++ b/docs/docHTMLs/genindex.html @@ -0,0 +1,185 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="./"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Index — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="_static/classic.css?v=def86cc0" /> + + <script src="_static/documentation_options.js?v=2fea6348"></script> + <script src="_static/doctools.js?v=9a2dae69"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="#" /> + <link rel="search" title="Search" href="search.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="#" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Index</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + +<h1 id="index">Index</h1> + +<div class="genindex-jumpbox"> + <a href="#D"><strong>D</strong></a> + | <a href="#G"><strong>G</strong></a> + | <a href="#L"><strong>L</strong></a> + | <a href="#M"><strong>M</strong></a> + | <a href="#Q"><strong>Q</strong></a> + | <a href="#T"><strong>T</strong></a> + +</div> +<h2 id="D">D</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="dynamodb.html#dynamodb.core.DecimalEncoder">DecimalEncoder (class in dynamodb.core)</a> +</li> + <li><a href="dynamodb.html#dynamodb.core.DecimalEncoder.default">default() (dynamodb.core.DecimalEncoder method)</a> +</li> + <li> + dynamodb + + <ul> + <li><a href="dynamodb.html#module-dynamodb">module</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li> + dynamodb.core + + <ul> + <li><a href="dynamodb.html#module-dynamodb.core">module</a> +</li> + </ul></li> + <li> + dynamodb.dynamodb_helpers + + <ul> + <li><a href="dynamodb.html#module-dynamodb.dynamodb_helpers">module</a>, <a href="generated/dynamodb.dynamodb_helpers.html#module-dynamodb.dynamodb_helpers">[1]</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="G">G</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="dynamodb.html#dynamodb.dynamodb_helpers.get_config">get_config() (in module dynamodb.dynamodb_helpers)</a> +</li> + <li><a href="dynamodb.html#dynamodb.dynamodb_helpers.get_dynamodb_resource">get_dynamodb_resource() (in module dynamodb.dynamodb_helpers)</a>, <a href="usage.html#dynamodb.dynamodb_helpers.get_dynamodb_resource">[1]</a> +</li> + <li><a href="dynamodb.html#dynamodb.dynamodb_helpers.get_movie_item">get_movie_item() (in module dynamodb.dynamodb_helpers)</a>, <a href="usage.html#dynamodb.dynamodb_helpers.get_movie_item">[1]</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="dynamodb.html#dynamodb.dynamodb_helpers.get_movies_table">get_movies_table() (in module dynamodb.dynamodb_helpers)</a>, <a href="usage.html#dynamodb.dynamodb_helpers.get_movies_table">[1]</a> +</li> + <li><a href="dynamodb.html#dynamodb.dynamodb_helpers.get_path_to_data">get_path_to_data() (in module dynamodb.dynamodb_helpers)</a>, <a href="usage.html#dynamodb.dynamodb_helpers.get_path_to_data">[1]</a> +</li> + <li><a href="dynamodb.html#dynamodb.dynamodb_helpers.get_raw_data_path">get_raw_data_path() (in module dynamodb.dynamodb_helpers)</a>, <a href="usage.html#dynamodb.dynamodb_helpers.get_raw_data_path">[1]</a> +</li> + <li><a href="dynamodb.html#dynamodb.dynamodb_helpers.get_tidy_data_path">get_tidy_data_path() (in module dynamodb.dynamodb_helpers)</a>, <a href="usage.html#dynamodb.dynamodb_helpers.get_tidy_data_path">[1]</a> +</li> + </ul></td> +</tr></table> + +<h2 id="L">L</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="dynamodb.html#dynamodb.dynamodb_helpers.list_dynamodb_tables">list_dynamodb_tables() (in module dynamodb.dynamodb_helpers)</a>, <a href="usage.html#dynamodb.dynamodb_helpers.list_dynamodb_tables">[1]</a> +</li> + </ul></td> +</tr></table> + +<h2 id="M">M</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li> + module + + <ul> + <li><a href="dynamodb.html#module-dynamodb">dynamodb</a> +</li> + <li><a href="dynamodb.html#module-dynamodb.core">dynamodb.core</a> +</li> + <li><a href="dynamodb.html#module-dynamodb.dynamodb_helpers">dynamodb.dynamodb_helpers</a>, <a href="generated/dynamodb.dynamodb_helpers.html#module-dynamodb.dynamodb_helpers">[1]</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="Q">Q</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="dynamodb.html#dynamodb.dynamodb_helpers.query_movies_by_year">query_movies_by_year() (in module dynamodb.dynamodb_helpers)</a>, <a href="usage.html#dynamodb.dynamodb_helpers.query_movies_by_year">[1]</a> +</li> + </ul></td> +</tr></table> + +<h2 id="T">T</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="dynamodb.html#dynamodb.dynamodb_helpers.tidy_movie_data">tidy_movie_data() (in module dynamodb.dynamodb_helpers)</a>, <a href="usage.html#dynamodb.dynamodb_helpers.tidy_movie_data">[1]</a> +</li> + </ul></td> +</tr></table> + + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="#" title="General Index" + >index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Index</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/index.html b/docs/docHTMLs/index.html new file mode 100644 index 0000000..f619320 --- /dev/null +++ b/docs/docHTMLs/index.html @@ -0,0 +1,161 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="./"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>Welcome to sample’s documentation! — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="_static/classic.css?v=def86cc0" /> + + <script src="_static/documentation_options.js?v=2fea6348"></script> + <script src="_static/doctools.js?v=9a2dae69"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="next" title="formulaone" href="modules.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="modules.html" title="formulaone" + accesskey="N">next</a> |</li> + <li class="nav-item nav-item-0"><a href="#">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Welcome to sample’s documentation!</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <section id="welcome-to-sample-s-documentation"> +<h1>Welcome to sample’s documentation!<a class="headerlink" href="#welcome-to-sample-s-documentation" title="Link to this heading">¶</a></h1> +<p>Contents:</p> +<div class="toctree-wrapper compound"> +<ul> +<li class="toctree-l1"><a class="reference internal" href="modules.html">formulaone</a><ul> +<li class="toctree-l2"><a class="reference internal" href="dynamodb.html">dynamodb package</a><ul> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#submodules">Submodules</a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#module-dynamodb.core">dynamodb.core module</a><ul> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.core.DecimalEncoder"><code class="docutils literal notranslate"><span class="pre">DecimalEncoder</span></code></a><ul> +<li class="toctree-l5"><a class="reference internal" href="dynamodb.html#dynamodb.core.DecimalEncoder.default"><code class="docutils literal notranslate"><span class="pre">DecimalEncoder.default()</span></code></a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#module-dynamodb.dynamodb_helpers">dynamodb.dynamodb_helpers module</a><ul> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_config"><code class="docutils literal notranslate"><span class="pre">get_config()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_dynamodb_resource"><code class="docutils literal notranslate"><span class="pre">get_dynamodb_resource()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_movie_item"><code class="docutils literal notranslate"><span class="pre">get_movie_item()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_movies_table"><code class="docutils literal notranslate"><span class="pre">get_movies_table()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_path_to_data"><code class="docutils literal notranslate"><span class="pre">get_path_to_data()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_raw_data_path"><code class="docutils literal notranslate"><span class="pre">get_raw_data_path()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_tidy_data_path"><code class="docutils literal notranslate"><span class="pre">get_tidy_data_path()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.list_dynamodb_tables"><code class="docutils literal notranslate"><span class="pre">list_dynamodb_tables()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.query_movies_by_year"><code class="docutils literal notranslate"><span class="pre">query_movies_by_year()</span></code></a></li> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.tidy_movie_data"><code class="docutils literal notranslate"><span class="pre">tidy_movie_data()</span></code></a></li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb-load-movies-module">dynamodb.load_movies module</a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb-prepare-data-module">dynamodb.prepare_data module</a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb-tidy-data-module">dynamodb.tidy_data module</a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#module-dynamodb">Module contents</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a><ul> +<li class="toctree-l2"><a class="reference internal" href="usage.html#helpers">Helpers</a><ul> +<li class="toctree-l3"><a class="reference internal" href="usage.html#dynamodb.dynamodb_helpers.get_path_to_data"><code class="docutils literal notranslate"><span class="pre">get_path_to_data()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="usage.html#dynamodb.dynamodb_helpers.get_raw_data_path"><code class="docutils literal notranslate"><span class="pre">get_raw_data_path()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="usage.html#dynamodb.dynamodb_helpers.get_tidy_data_path"><code class="docutils literal notranslate"><span class="pre">get_tidy_data_path()</span></code></a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="usage.html#dynamodb">DynamoDB</a><ul> +<li class="toctree-l3"><a class="reference internal" href="usage.html#dynamodb.dynamodb_helpers.get_dynamodb_resource"><code class="docutils literal notranslate"><span class="pre">get_dynamodb_resource()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="usage.html#dynamodb.dynamodb_helpers.list_dynamodb_tables"><code class="docutils literal notranslate"><span class="pre">list_dynamodb_tables()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="usage.html#dynamodb.dynamodb_helpers.get_movies_table"><code class="docutils literal notranslate"><span class="pre">get_movies_table()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="usage.html#dynamodb.dynamodb_helpers.get_movie_item"><code class="docutils literal notranslate"><span class="pre">get_movie_item()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="usage.html#dynamodb.dynamodb_helpers.query_movies_by_year"><code class="docutils literal notranslate"><span class="pre">query_movies_by_year()</span></code></a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="usage.html#data-transformation">Data Transformation</a><ul> +<li class="toctree-l3"><a class="reference internal" href="usage.html#dynamodb.dynamodb_helpers.tidy_movie_data"><code class="docutils literal notranslate"><span class="pre">tidy_movie_data()</span></code></a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="API.html">API</a><ul> +<li class="toctree-l2"><a class="reference internal" href="generated/dynamodb.dynamodb_helpers.html">dynamodb.dynamodb_helpers</a></li> +</ul> +</li> +</ul> +</div> +</section> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> + <div> + <h4>Next topic</h4> + <p class="topless"><a href="modules.html" + title="next chapter">formulaone</a></p> + </div> + <div role="note" aria-label="source link"> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="_sources/index.rst.txt" + rel="nofollow">Show Source</a></li> + </ul> + </div> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="modules.html" title="formulaone" + >next</a> |</li> + <li class="nav-item nav-item-0"><a href="#">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Welcome to sample’s documentation!</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/modules.html b/docs/docHTMLs/modules.html new file mode 100644 index 0000000..37e3eb6 --- /dev/null +++ b/docs/docHTMLs/modules.html @@ -0,0 +1,144 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="./"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>formulaone — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="_static/classic.css?v=def86cc0" /> + + <script src="_static/documentation_options.js?v=2fea6348"></script> + <script src="_static/doctools.js?v=9a2dae69"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="next" title="dynamodb package" href="dynamodb.html" /> + <link rel="prev" title="Welcome to sample’s documentation!" href="index.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="dynamodb.html" title="dynamodb package" + accesskey="N">next</a> |</li> + <li class="right" > + <a href="index.html" title="Welcome to sample’s documentation!" + accesskey="P">previous</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">formulaone</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <section id="formulaone"> +<h1>formulaone<a class="headerlink" href="#formulaone" title="Link to this heading">¶</a></h1> +<div class="toctree-wrapper compound"> +<ul> +<li class="toctree-l1"><a class="reference internal" href="dynamodb.html">dynamodb package</a><ul> +<li class="toctree-l2"><a class="reference internal" href="dynamodb.html#submodules">Submodules</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamodb.html#module-dynamodb.core">dynamodb.core module</a><ul> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.core.DecimalEncoder"><code class="docutils literal notranslate"><span class="pre">DecimalEncoder</span></code></a><ul> +<li class="toctree-l4"><a class="reference internal" href="dynamodb.html#dynamodb.core.DecimalEncoder.default"><code class="docutils literal notranslate"><span class="pre">DecimalEncoder.default()</span></code></a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="dynamodb.html#module-dynamodb.dynamodb_helpers">dynamodb.dynamodb_helpers module</a><ul> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_config"><code class="docutils literal notranslate"><span class="pre">get_config()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_dynamodb_resource"><code class="docutils literal notranslate"><span class="pre">get_dynamodb_resource()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_movie_item"><code class="docutils literal notranslate"><span class="pre">get_movie_item()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_movies_table"><code class="docutils literal notranslate"><span class="pre">get_movies_table()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_path_to_data"><code class="docutils literal notranslate"><span class="pre">get_path_to_data()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_raw_data_path"><code class="docutils literal notranslate"><span class="pre">get_raw_data_path()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.get_tidy_data_path"><code class="docutils literal notranslate"><span class="pre">get_tidy_data_path()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.list_dynamodb_tables"><code class="docutils literal notranslate"><span class="pre">list_dynamodb_tables()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.query_movies_by_year"><code class="docutils literal notranslate"><span class="pre">query_movies_by_year()</span></code></a></li> +<li class="toctree-l3"><a class="reference internal" href="dynamodb.html#dynamodb.dynamodb_helpers.tidy_movie_data"><code class="docutils literal notranslate"><span class="pre">tidy_movie_data()</span></code></a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="dynamodb.html#dynamodb-load-movies-module">dynamodb.load_movies module</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamodb.html#dynamodb-prepare-data-module">dynamodb.prepare_data module</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamodb.html#dynamodb-tidy-data-module">dynamodb.tidy_data module</a></li> +<li class="toctree-l2"><a class="reference internal" href="dynamodb.html#module-dynamodb">Module contents</a></li> +</ul> +</li> +</ul> +</div> +</section> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> + <div> + <h4>Previous topic</h4> + <p class="topless"><a href="index.html" + title="previous chapter">Welcome to sample’s documentation!</a></p> + </div> + <div> + <h4>Next topic</h4> + <p class="topless"><a href="dynamodb.html" + title="next chapter">dynamodb package</a></p> + </div> + <div role="note" aria-label="source link"> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="_sources/modules.rst.txt" + rel="nofollow">Show Source</a></li> + </ul> + </div> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="dynamodb.html" title="dynamodb package" + >next</a> |</li> + <li class="right" > + <a href="index.html" title="Welcome to sample’s documentation!" + >previous</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">formulaone</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/objects.inv b/docs/docHTMLs/objects.inv new file mode 100644 index 0000000..1ecabc8 --- /dev/null +++ b/docs/docHTMLs/objects.inv @@ -0,0 +1,8 @@ +# Sphinx inventory version 2 +# Project: sample +# Version: v0.0.1 +# The remainder of this file is compressed using zlib. +xڥ��n�0��| +��Nrͭ@s�!��"�Q��墒�$��5�z}�J�lS^b�:���(%;�ʜ7�C�l�;.G�"��G��/��!��+R�?Q�ԣV�B���~p.s)��VQЀTY�9b��*T :?�^�A���d��"K�LXS��P�h��ښ����ѡ����k=�x)Lۗ��PϦ�� W��4@UF6�@0���50p�j��'��'�-쒿���E�m6<��]� +��p~��Wܓ|�V��=�_�/)��'�z��z*CW���� G5���-z7�c�Pe]���ʹt��I7ۗw�H?'܃n�q9�����kv����iL +Z& �F���W֘��l6�I"~�V#';���x�ǵ �p���~#��j���YO��E�:io4���:�*�Y:Sa���3-�� �41�bί�_�6�D*i7$�yX���䠂 \ No newline at end of file diff --git a/docs/docHTMLs/py-modindex.html b/docs/docHTMLs/py-modindex.html new file mode 100644 index 0000000..7cf4466 --- /dev/null +++ b/docs/docHTMLs/py-modindex.html @@ -0,0 +1,108 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="./"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Python Module Index — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="_static/classic.css?v=def86cc0" /> + + <script src="_static/documentation_options.js?v=2fea6348"></script> + <script src="_static/doctools.js?v=9a2dae69"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + + + + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="#" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Python Module Index</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + + <h1>Python Module Index</h1> + + <div class="modindex-jumpbox"> + <a href="#cap-d"><strong>d</strong></a> + </div> + + <table class="indextable modindextable"> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-d"><td></td><td> + <strong>d</strong></td><td></td></tr> + <tr> + <td><img src="_static/minus.png" class="toggler" + id="toggle-1" style="display: none" alt="-" /></td> + <td> + <a href="dynamodb.html#module-dynamodb"><code class="xref">dynamodb</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="dynamodb.html#module-dynamodb.core"><code class="xref">dynamodb.core</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="generated/dynamodb.dynamodb_helpers.html#module-dynamodb.dynamodb_helpers"><code class="xref">dynamodb.dynamodb_helpers</code></a></td><td> + <em></em></td></tr> + </table> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="#" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Python Module Index</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/search.html b/docs/docHTMLs/search.html new file mode 100644 index 0000000..b711ced --- /dev/null +++ b/docs/docHTMLs/search.html @@ -0,0 +1,100 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="./"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Search — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="_static/classic.css?v=def86cc0" /> + + + <script src="_static/documentation_options.js?v=2fea6348"></script> + <script src="_static/doctools.js?v=9a2dae69"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> + + <script src="_static/searchtools.js"></script> + <script src="_static/language_data.js"></script> + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="#" /> + <script src="searchindex.js" defer="defer"></script> + <meta name="robots" content="noindex" /> + + + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Search</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <h1 id="search-documentation">Search</h1> + + <noscript> + <div class="admonition warning"> + <p> + Please activate JavaScript to enable the search + functionality. + </p> + </div> + </noscript> + + + <p> + Searching for multiple words only shows matches that contain + all words. + </p> + + + <form action="" method="get"> + <input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="search" /> + <span id="search-progress" style="padding-left: 10px"></span> + </form> + + + <div id="search-results"></div> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Search</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/docHTMLs/searchindex.js b/docs/docHTMLs/searchindex.js new file mode 100644 index 0000000..140d5df --- /dev/null +++ b/docs/docHTMLs/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"API": [[0, "api"]], "Data Transformation": [[8, "data-transformation"]], "DynamoDB": [[8, "dynamodb"]], "Ergast API Interface": [[3, "ergast-api-interface"]], "Helpers": [[8, "helpers"]], "Introduction": [[3, "introduction"]], "Module contents": [[1, "module-dynamodb"]], "Submodules": [[1, "submodules"]], "Usage": [[8, "usage"]], "Welcome to sample\u2019s documentation!": [[6, "welcome-to-sample-s-documentation"]], "dynamodb package": [[1, "dynamodb-package"]], "dynamodb.core module": [[1, "module-dynamodb.core"]], "dynamodb.dynamodb_helpers": [[2, "module-dynamodb.dynamodb_helpers"]], "dynamodb.dynamodb_helpers module": [[1, "module-dynamodb.dynamodb_helpers"]], "dynamodb.load_movies module": [[1, "dynamodb-load-movies-module"]], "dynamodb.prepare_data module": [[1, "dynamodb-prepare-data-module"]], "dynamodb.tidy_data module": [[1, "dynamodb-tidy-data-module"]], "formulaone": [[7, "formulaone"]], "sample": [[4, "sample"]], "sample.helpers": [[5, "sample-helpers"]]}, "docnames": ["API", "dynamodb", "generated/dynamodb.dynamodb_helpers", "generated/ergast", "generated/sample", "generated/sample.helpers", "index", "modules", "usage"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["API.rst", "dynamodb.rst", "generated/dynamodb.dynamodb_helpers.rst", "generated/ergast.rst", "generated/sample.rst", "generated/sample.helpers.rst", "index.rst", "modules.rst", "usage.rst"], "indexentries": {"decimalencoder (class in dynamodb.core)": [[1, "dynamodb.core.DecimalEncoder", false]], "default() (dynamodb.core.decimalencoder method)": [[1, "dynamodb.core.DecimalEncoder.default", false]], "dynamodb": [[1, "module-dynamodb", false]], "dynamodb.core": [[1, "module-dynamodb.core", false]], "dynamodb.dynamodb_helpers": [[1, "module-dynamodb.dynamodb_helpers", false], [2, "module-dynamodb.dynamodb_helpers", false]], "get_config() (in module dynamodb.dynamodb_helpers)": [[1, "dynamodb.dynamodb_helpers.get_config", false]], "get_dynamodb_resource() (in module dynamodb.dynamodb_helpers)": [[1, "dynamodb.dynamodb_helpers.get_dynamodb_resource", false], [8, "dynamodb.dynamodb_helpers.get_dynamodb_resource", false]], "get_movie_item() (in module dynamodb.dynamodb_helpers)": [[1, "dynamodb.dynamodb_helpers.get_movie_item", false], [8, "dynamodb.dynamodb_helpers.get_movie_item", false]], "get_movies_table() (in module dynamodb.dynamodb_helpers)": [[1, "dynamodb.dynamodb_helpers.get_movies_table", false], [8, "dynamodb.dynamodb_helpers.get_movies_table", false]], "get_path_to_data() (in module dynamodb.dynamodb_helpers)": [[1, "dynamodb.dynamodb_helpers.get_path_to_data", false], [8, "dynamodb.dynamodb_helpers.get_path_to_data", false]], "get_raw_data_path() (in module dynamodb.dynamodb_helpers)": [[1, "dynamodb.dynamodb_helpers.get_raw_data_path", false], [8, "dynamodb.dynamodb_helpers.get_raw_data_path", false]], "get_tidy_data_path() (in module dynamodb.dynamodb_helpers)": [[1, "dynamodb.dynamodb_helpers.get_tidy_data_path", false], [8, "dynamodb.dynamodb_helpers.get_tidy_data_path", false]], "list_dynamodb_tables() (in module dynamodb.dynamodb_helpers)": [[1, "dynamodb.dynamodb_helpers.list_dynamodb_tables", false], [8, "dynamodb.dynamodb_helpers.list_dynamodb_tables", false]], "module": [[1, "module-dynamodb", false], [1, "module-dynamodb.core", false], [1, "module-dynamodb.dynamodb_helpers", false], [2, "module-dynamodb.dynamodb_helpers", false]], "query_movies_by_year() (in module dynamodb.dynamodb_helpers)": [[1, "dynamodb.dynamodb_helpers.query_movies_by_year", false], [8, "dynamodb.dynamodb_helpers.query_movies_by_year", false]], "tidy_movie_data() (in module dynamodb.dynamodb_helpers)": [[1, "dynamodb.dynamodb_helpers.tidy_movie_data", false], [8, "dynamodb.dynamodb_helpers.tidy_movie_data", false]]}, "objects": {"": [[1, 0, 0, "-", "dynamodb"]], "dynamodb": [[1, 0, 0, "-", "core"], [2, 0, 0, "-", "dynamodb_helpers"]], "dynamodb.core": [[1, 1, 1, "", "DecimalEncoder"]], "dynamodb.core.DecimalEncoder": [[1, 2, 1, "", "default"]], "dynamodb.dynamodb_helpers": [[1, 3, 1, "", "get_config"], [8, 3, 1, "", "get_dynamodb_resource"], [8, 3, 1, "", "get_movie_item"], [8, 3, 1, "", "get_movies_table"], [8, 3, 1, "", "get_path_to_data"], [8, 3, 1, "", "get_raw_data_path"], [8, 3, 1, "", "get_tidy_data_path"], [8, 3, 1, "", "list_dynamodb_tables"], [8, 3, 1, "", "query_movies_by_year"], [8, 3, 1, "", "tidy_movie_data"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:function"}, "terms": {"For": [1, 3], "The": [1, 3, 8], "To": 8, "access": 3, "all": [1, 3, 8], "allow_nan": 1, "also": 8, "api": 6, "appli": 3, "ar": 3, "arbitrari": 1, "arg": [1, 8], "aw": [1, 8], "base": 1, "cach": 3, "call": 1, "can": [3, 8], "care": 3, "check_circular": 1, "class": 1, "com": 3, "config": 1, "configur": 1, "contain": [1, 8], "content": [6, 7], "core": [6, 7], "could": 1, "creat": [1, 8], "data": [1, 6], "datafram": [1, 8], "decimalencod": [1, 6, 7], "def": 1, "default": [1, 6, 7], "dict": [1, 8], "dynamo_resourc": [1, 8], "dynamodb": [6, 7], "dynamodb_help": [6, 7, 8], "els": 1, "endpoint": 3, "enforc": 3, "ensure_ascii": 1, "especi": 3, "exampl": 1, "exce": 3, "except": 1, "f1": 3, "fals": 1, "fastf1": 3, "file": 1, "folder": 8, "formulaon": 6, "from": [1, 8], "function": [2, 8], "get": [1, 8], "get_config": [1, 6, 7], "get_dynamodb_resourc": [1, 6, 7, 8], "get_movie_item": [1, 6, 7, 8], "get_movies_t": [1, 6, 7, 8], "get_path_to_data": [1, 6, 7, 8], "get_raw_data_path": [1, 6, 7, 8], "get_tidy_data_path": [1, 6, 7, 8], "given": [1, 8], "handl": 3, "helper": 6, "how": 3, "http": 3, "i": 8, "implement": 1, "indent": 1, "inform": 3, "item": [1, 8], "iter": 1, "jsonencod": 1, "know": 3, "let": 1, "like": 1, "limit": 3, "list": [1, 8], "list_dynamodb_t": [1, 6, 7, 8], "load_movi": [6, 7], "make": 3, "method": 1, "modul": [3, 6, 7], "more": 3, "movi": [1, 8], "mrd": 3, "name": [1, 8], "none": 1, "o": 1, "obj": 1, "object": [1, 3], "packag": [6, 7], "pass": 1, "path": [1, 8], "possibl": 3, "prepare_data": [6, 7], "provid": 3, "queri": [1, 8], "query_movies_by_year": [1, 6, 7, 8], "rais": 1, "rate": 3, "raw": [1, 8], "read": 1, "request": 3, "resourc": [1, 8], "return": [1, 8], "see": 3, "self": 1, "separ": 1, "serializ": 1, "session": [1, 8], "skipkei": 1, "sort_kei": 1, "specif": 8, "specifi": 3, "subclass": 1, "submodul": [6, 7], "support": [1, 3], "sure": 3, "tabl": [1, 8], "take": 3, "term": 3, "thi": [1, 3], "tidi": [1, 8], "tidy_data": [6, 7], "tidy_movie_data": [1, 6, 7, 8], "titl": [1, 8], "transform": [1, 6], "true": 1, "try": [1, 3], "typeerror": 1, "us": [1, 3, 8], "usag": 6, "what": 3, "where": 3, "year": [1, 8], "you": [1, 8]}, "titles": ["API", "dynamodb package", "dynamodb.dynamodb_helpers", "Ergast API Interface", "sample", "sample.helpers", "Welcome to sample\u2019s documentation!", "formulaone", "Usage"], "titleterms": {"": 6, "api": [0, 3], "content": 1, "core": 1, "data": 8, "document": 6, "dynamodb": [1, 2, 8], "dynamodb_help": [1, 2], "ergast": 3, "formulaon": 7, "helper": [5, 8], "interfac": 3, "introduct": 3, "load_movi": 1, "modul": 1, "packag": 1, "prepare_data": 1, "sampl": [4, 5, 6], "submodul": 1, "tidy_data": 1, "transform": 8, "usag": 8, "welcom": 6}}) \ No newline at end of file diff --git a/docs/docHTMLs/usage.html b/docs/docHTMLs/usage.html new file mode 100644 index 0000000..5e6bc0e --- /dev/null +++ b/docs/docHTMLs/usage.html @@ -0,0 +1,248 @@ +<!DOCTYPE html> + +<html lang="en" data-content_root="./"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> + + <title>Usage — sample v0.0.1 documentation</title> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" /> + <link rel="stylesheet" type="text/css" href="_static/classic.css?v=def86cc0" /> + + <script src="_static/documentation_options.js?v=2fea6348"></script> + <script src="_static/doctools.js?v=9a2dae69"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> + + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="next" title="API" href="API.html" /> + <link rel="prev" title="dynamodb package" href="dynamodb.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="API.html" title="API" + accesskey="N">next</a> |</li> + <li class="right" > + <a href="dynamodb.html" title="dynamodb package" + accesskey="P">previous</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Usage</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <section id="usage"> +<h1>Usage<a class="headerlink" href="#usage" title="Link to this heading">¶</a></h1> +<section id="helpers"> +<h2>Helpers<a class="headerlink" href="#helpers" title="Link to this heading">¶</a></h2> +<p>You can use the <code class="docutils literal notranslate"><span class="pre">dynamodb.dynamodb_helpers.get_path_to_data()</span></code> function:</p> +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_path_to_data"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_path_to_data</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_path_to_data" title="Link to this definition">¶</a></dt> +<dd><p>Return path to data.</p> +</dd></dl> + +<p>Raw data folder is returned by <code class="docutils literal notranslate"><span class="pre">dynamodb.dynamodb_helpers.get_raw_data_path()</span></code> function:</p> +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_raw_data_path"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_raw_data_path</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_raw_data_path" title="Link to this definition">¶</a></dt> +<dd><p>Return path to raw data.</p> +</dd></dl> + +<p>You can also use the <code class="docutils literal notranslate"><span class="pre">dynamodb.dynamodb_helpers.get_tidy_data_path()</span></code> function:</p> +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_tidy_data_path"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_tidy_data_path</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_tidy_data_path" title="Link to this definition">¶</a></dt> +<dd><p>Return path to tidy data.</p> +</dd></dl> + +</section> +<section id="dynamodb"> +<h2>DynamoDB<a class="headerlink" href="#dynamodb" title="Link to this heading">¶</a></h2> +<p>To create a DynamoDB resource, use the <code class="docutils literal notranslate"><span class="pre">dynamodb.dynamodb_helpers.get_dynamodb_resource</span></code> function:</p> +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_dynamodb_resource"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_dynamodb_resource</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_dynamodb_resource" title="Link to this definition">¶</a></dt> +<dd><p>Creates a DynamoDB resource using the AWS session.</p> +<dl class="simple"> +<dt>Returns:</dt><dd><p>dynamo_resource: The DynamoDB resource.</p> +</dd> +</dl> +</dd></dl> + +<p>To list all DynamoDB tables, use the <code class="docutils literal notranslate"><span class="pre">dynamodb.dynamodb_helpers.list_dynamodb_tables</span></code> function:</p> +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.list_dynamodb_tables"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">list_dynamodb_tables</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dynamo_resource</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.list_dynamodb_tables" title="Link to this definition">¶</a></dt> +<dd><p>Lists all tables in the DynamoDB resource.</p> +<dl class="simple"> +<dt>Args:</dt><dd><p>dynamo_resource: The DynamoDB resource.</p> +</dd> +<dt>Returns:</dt><dd><p>list: List of table names.</p> +</dd> +</dl> +</dd></dl> + +<p>To get the movies table from DynamoDB, use the <code class="docutils literal notranslate"><span class="pre">dynamodb.dynamodb_helpers.get_movies_table</span></code> function:</p> +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_movies_table"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_movies_table</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dynamo_resource</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_movies_table" title="Link to this definition">¶</a></dt> +<dd><p>Gets the movies table from DynamoDB.</p> +<dl class="simple"> +<dt>Args:</dt><dd><p>dynamo_resource: The DynamoDB resource.</p> +</dd> +<dt>Returns:</dt><dd><p>table: The DynamoDB table resource for movies.</p> +</dd> +</dl> +</dd></dl> + +<p>To get a specific movie item, use the <code class="docutils literal notranslate"><span class="pre">dynamodb.dynamodb_helpers.get_movie_item</span></code> function:</p> +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.get_movie_item"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">get_movie_item</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">table</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">year</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.get_movie_item" title="Link to this definition">¶</a></dt> +<dd><p>Gets a movie item from the DynamoDB table.</p> +<dl class="simple"> +<dt>Args:</dt><dd><p>table: The DynamoDB table resource. +year: The year of the movie. +title: The title of the movie.</p> +</dd> +<dt>Returns:</dt><dd><p>dict: The movie item.</p> +</dd> +</dl> +</dd></dl> + +<p>To query movies by year, use the <code class="docutils literal notranslate"><span class="pre">dynamodb.dynamodb_helpers.query_movies_by_year</span></code> function:</p> +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.query_movies_by_year"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">query_movies_by_year</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">table</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">year</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.query_movies_by_year" title="Link to this definition">¶</a></dt> +<dd><p>Queries movies by year from the DynamoDB table.</p> +<dl class="simple"> +<dt>Args:</dt><dd><p>table: The DynamoDB table resource. +year: The year to query.</p> +</dd> +<dt>Returns:</dt><dd><p>list: List of movies for the given year.</p> +</dd> +</dl> +</dd></dl> + +</section> +<section id="data-transformation"> +<h2>Data Transformation<a class="headerlink" href="#data-transformation" title="Link to this heading">¶</a></h2> +<p>To transform raw movie data into a tidy DataFrame, use the <code class="docutils literal notranslate"><span class="pre">dynamodb.dynamodb_helpers.tidy_movie_data</span></code> function:</p> +<dl class="py function"> +<dt class="sig sig-object py" id="dynamodb.dynamodb_helpers.tidy_movie_data"> +<span class="sig-prename descclassname"><span class="pre">dynamodb.dynamodb_helpers.</span></span><span class="sig-name descname"><span class="pre">tidy_movie_data</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">movies</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#dynamodb.dynamodb_helpers.tidy_movie_data" title="Link to this definition">¶</a></dt> +<dd><p>Transforms the raw movie data into a tidy DataFrame.</p> +<dl class="simple"> +<dt>Args:</dt><dd><p>movies (list): List of raw movie data.</p> +</dd> +<dt>Returns:</dt><dd><p>DataFrame: Tidy DataFrame containing movie data.</p> +</dd> +</dl> +</dd></dl> + +</section> +</section> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"> + <div> + <h3><a href="index.html">Table of Contents</a></h3> + <ul> +<li><a class="reference internal" href="#">Usage</a><ul> +<li><a class="reference internal" href="#helpers">Helpers</a><ul> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_path_to_data"><code class="docutils literal notranslate"><span class="pre">get_path_to_data()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_raw_data_path"><code class="docutils literal notranslate"><span class="pre">get_raw_data_path()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_tidy_data_path"><code class="docutils literal notranslate"><span class="pre">get_tidy_data_path()</span></code></a></li> +</ul> +</li> +<li><a class="reference internal" href="#dynamodb">DynamoDB</a><ul> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_dynamodb_resource"><code class="docutils literal notranslate"><span class="pre">get_dynamodb_resource()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.list_dynamodb_tables"><code class="docutils literal notranslate"><span class="pre">list_dynamodb_tables()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_movies_table"><code class="docutils literal notranslate"><span class="pre">get_movies_table()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.get_movie_item"><code class="docutils literal notranslate"><span class="pre">get_movie_item()</span></code></a></li> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.query_movies_by_year"><code class="docutils literal notranslate"><span class="pre">query_movies_by_year()</span></code></a></li> +</ul> +</li> +<li><a class="reference internal" href="#data-transformation">Data Transformation</a><ul> +<li><a class="reference internal" href="#dynamodb.dynamodb_helpers.tidy_movie_data"><code class="docutils literal notranslate"><span class="pre">tidy_movie_data()</span></code></a></li> +</ul> +</li> +</ul> +</li> +</ul> + + </div> + <div> + <h4>Previous topic</h4> + <p class="topless"><a href="dynamodb.html" + title="previous chapter">dynamodb package</a></p> + </div> + <div> + <h4>Next topic</h4> + <p class="topless"><a href="API.html" + title="next chapter">API</a></p> + </div> + <div role="note" aria-label="source link"> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="_sources/usage.rst.txt" + rel="nofollow">Show Source</a></li> + </ul> + </div> +<search id="searchbox" style="display: none" role="search"> + <h3 id="searchlabel">Quick search</h3> + <div class="searchformwrapper"> + <form class="search" action="search.html" method="get"> + <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> + <input type="submit" value="Go" /> + </form> + </div> +</search> +<script>document.getElementById('searchbox').style.display = "block"</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="py-modindex.html" title="Python Module Index" + >modules</a> |</li> + <li class="right" > + <a href="API.html" title="API" + >next</a> |</li> + <li class="right" > + <a href="dynamodb.html" title="dynamodb package" + >previous</a> |</li> + <li class="nav-item nav-item-0"><a href="index.html">sample v0.0.1 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">Usage</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2012, Kenneth Reitz. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.3.7. + </div> + </body> +</html> \ No newline at end of file diff --git a/docs/dynamodb.rst b/docs/dynamodb.rst new file mode 100644 index 0000000..356bcf3 --- /dev/null +++ b/docs/dynamodb.rst @@ -0,0 +1,53 @@ +dynamodb package +================ + +Submodules +---------- + +dynamodb.core module +-------------------- + +.. automodule:: dynamodb.core + :members: + :undoc-members: + :show-inheritance: + +dynamodb.dynamodb\_helpers module +--------------------------------- + +.. automodule:: dynamodb.dynamodb_helpers + :members: + :undoc-members: + :show-inheritance: + +dynamodb.load\_movies module +---------------------------- + +.. automodule:: dynamodb.load_movies + :members: + :undoc-members: + :show-inheritance: + +dynamodb.prepare\_data module +----------------------------- + +.. automodule:: dynamodb.prepare_data + :members: + :undoc-members: + :show-inheritance: + +dynamodb.tidy\_data module +-------------------------- + +.. automodule:: dynamodb.tidy_data + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: dynamodb + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/formulaone.rst b/docs/formulaone.rst deleted file mode 100644 index 35c40f6..0000000 --- a/docs/formulaone.rst +++ /dev/null @@ -1,61 +0,0 @@ -formulaone package -================== - -Submodules ----------- - -formulaone.core module ----------------------- - -.. automodule:: formulaone.core - :members: - :undoc-members: - :show-inheritance: - -formulaone.dynamodb\_helpers module ------------------------------------ - -.. automodule:: formulaone.dynamodb_helpers - :members: - :undoc-members: - :show-inheritance: - -formulaone.helpers module -------------------------- - -.. automodule:: formulaone.helpers - :members: - :undoc-members: - :show-inheritance: - -formulaone.load\_latest\_race module ------------------------------------- - -.. automodule:: formulaone.load_latest_race - :members: - :undoc-members: - :show-inheritance: - -formulaone.prepare\_data module -------------------------------- - -.. automodule:: formulaone.prepare_data - :members: - :undoc-members: - :show-inheritance: - -formulaone.tidy\_data module ----------------------------- - -.. automodule:: formulaone.tidy_data - :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- - -.. automodule:: formulaone - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/modules.rst b/docs/modules.rst index b2a413d..09e5b15 100644 --- a/docs/modules.rst +++ b/docs/modules.rst @@ -4,4 +4,4 @@ formulaone .. toctree:: :maxdepth: 4 - formulaone + dynamodb diff --git a/docs/usage.rst b/docs/usage.rst index bd80d08..ee6f0a6 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -2,16 +2,46 @@ Usage ===== Helpers ------------- +------- -you can use the ``formulaone.helpers.get_path_to_data()`` function: +You can use the ``dynamodb.dynamodb_helpers.get_path_to_data()`` function: -.. autofunction:: formulaone.helpers.get_path_to_data +.. autofunction:: dynamodb.dynamodb_helpers.get_path_to_data -Raw data folder is returned by ``formulaone.helpers.get_raw_data_path()`` function: +Raw data folder is returned by ``dynamodb.dynamodb_helpers.get_raw_data_path()`` function: -.. autofunction:: formulaone.helpers.get_raw_data_path +.. autofunction:: dynamodb.dynamodb_helpers.get_raw_data_path -you can also use the ``formulaone.helpers.get_tidy_data_path()`` function: +You can also use the ``dynamodb.dynamodb_helpers.get_tidy_data_path()`` function: -.. autofunction:: formulaone.helpers.get_tidy_data_path \ No newline at end of file +.. autofunction:: dynamodb.dynamodb_helpers.get_tidy_data_path + +DynamoDB +-------- + +To create a DynamoDB resource, use the ``dynamodb.dynamodb_helpers.get_dynamodb_resource`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.get_dynamodb_resource + +To list all DynamoDB tables, use the ``dynamodb.dynamodb_helpers.list_dynamodb_tables`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.list_dynamodb_tables + +To get the movies table from DynamoDB, use the ``dynamodb.dynamodb_helpers.get_movies_table`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.get_movies_table + +To get a specific movie item, use the ``dynamodb.dynamodb_helpers.get_movie_item`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.get_movie_item + +To query movies by year, use the ``dynamodb.dynamodb_helpers.query_movies_by_year`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.query_movies_by_year + +Data Transformation +------------------- + +To transform raw movie data into a tidy DataFrame, use the ``dynamodb.dynamodb_helpers.tidy_movie_data`` function: + +.. autofunction:: dynamodb.dynamodb_helpers.tidy_movie_data diff --git a/dynamodb/Data/RawData/rawdata.json b/dynamodb/Data/RawData/rawdata.json new file mode 100644 index 0000000..5e12214 --- /dev/null +++ b/dynamodb/Data/RawData/rawdata.json @@ -0,0 +1 @@ +{"year": 1994.0, "info": {"actors": ["Tim Robbins", "Morgan Freeman", "Bob Gunton"], "release_date": "1994-09-10T00:00:00Z", "plot": "Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency.", "genres": ["Crime", "Drama"], "image_url": "http://ia.media-imdb.com/images/M/MV5BODU4MjU4NjIwNl5BMl5BanBnXkFtZTgwMDU2MjEyMDE@._V1_SX400_.jpg", "directors": ["Frank Darabont"], "rating": 9.3, "rank": 80.0, "running_time_secs": 8520.0}, "title": "The Shawshank Redemption"} \ No newline at end of file diff --git a/dynamodb/Data/TidyData/current_race.parquet b/dynamodb/Data/TidyData/current_race.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1db8f03f3c65cc07c34c580879917c11998990b9 GIT binary patch literal 9680 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 CGk)0s literal 0 HcmV?d00001 diff --git a/formulaone/__init__.py b/dynamodb/__init__.py similarity index 100% rename from formulaone/__init__.py rename to dynamodb/__init__.py diff --git a/dynamodb/core.py b/dynamodb/core.py new file mode 100644 index 0000000..05ba7a2 --- /dev/null +++ b/dynamodb/core.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- + +import json +from decimal import Decimal + + +# Custom JSON Encoder for Decimal +class DecimalEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, Decimal): + return float(obj) + return super(DecimalEncoder, self).default(obj) + \ No newline at end of file diff --git a/formulaone/dynamodb_helpers.py b/dynamodb/dynamodb_helpers.py similarity index 92% rename from formulaone/dynamodb_helpers.py rename to dynamodb/dynamodb_helpers.py index dc18e09..6c80308 100644 --- a/formulaone/dynamodb_helpers.py +++ b/dynamodb/dynamodb_helpers.py @@ -9,6 +9,25 @@ import pandas as pd from decimal import Decimal +from pathlib import Path + + +def get_path_to_data(): + """Return path to data.""" + return Path('Data/') + + +def get_raw_data_path(): + """Return path to raw data.""" + return get_path_to_data() / 'RawData' + + +def get_tidy_data_path(): + """Return path to tidy data.""" + return get_path_to_data() / 'TidyData' + + + def get_config(): """ Reads the configuration file and returns the config object. diff --git a/dynamodb/load_movies.py b/dynamodb/load_movies.py new file mode 100644 index 0000000..77071f0 --- /dev/null +++ b/dynamodb/load_movies.py @@ -0,0 +1,21 @@ +import json + +from dynamodb_helpers import * +from core import DecimalEncoder +dynamo_resource = get_dynamodb_resource() + +movies_table = get_movies_table(dynamo_resource) + +movie_item = get_movie_item(movies_table, 1994, "The Shawshank Redemption") + +#movies_by_year = query_movies_by_year(movies_table, 1994) +# Load data from DynamoDB +raw_data_path = get_raw_data_path() +raw_data_path.mkdir(parents=True, exist_ok=True) + +dec_encoder= DecimalEncoder() +# Save data in JSON +with open(raw_data_path / 'rawdata.json', 'w') as f: + json.dump(movie_item, f, cls=dec_encoder) + +print(f"Movie data saved to {raw_data_path / 'rawdata.json'}") \ No newline at end of file diff --git a/formulaone/prepare_data.py b/dynamodb/prepare_data.py similarity index 94% rename from formulaone/prepare_data.py rename to dynamodb/prepare_data.py index 61ddfb2..951dbf2 100644 --- a/formulaone/prepare_data.py +++ b/dynamodb/prepare_data.py @@ -3,7 +3,7 @@ from numpy import save from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer -from helpers import get_tidy_data_path +from dynamodb_helpers import get_tidy_data_path df = pd.read_parquet(get_tidy_data_path() / 'current_race.parquet') diff --git a/dynamodb/tidy_data.py b/dynamodb/tidy_data.py new file mode 100644 index 0000000..3032d2b --- /dev/null +++ b/dynamodb/tidy_data.py @@ -0,0 +1,20 @@ +import json + +from dynamodb_helpers import * + +raw_data_path = get_raw_data_path() +raw_data_path.mkdir(parents=True, exist_ok=True) + +tidy_data_path = get_tidy_data_path() +tidy_data_path.mkdir(parents=True, exist_ok=True) + + +with open(get_raw_data_path() / 'rawdata.json', 'r') as f: + movie_item = json.load(f) + +if not isinstance(movie_item, list): + movie_item = [movie_item] + +tidy_movies = tidy_movie_data(movie_item) + +tidy_movies.to_parquet(tidy_data_path / 'current_race.parquet') diff --git a/formulaone/core.py b/formulaone/core.py deleted file mode 100644 index d76c319..0000000 --- a/formulaone/core.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- - - -def get_hmm(): - """Get a thought.""" - return 'hmmm...' diff --git a/formulaone/helpers.py b/formulaone/helpers.py deleted file mode 100644 index a172cd4..0000000 --- a/formulaone/helpers.py +++ /dev/null @@ -1,16 +0,0 @@ -from pathlib import Path - - -def get_path_to_data(): - """Return path to data.""" - return Path('Data/') - - -def get_raw_data_path(): - """Return path to raw data.""" - return get_path_to_data() / 'RawData' - - -def get_tidy_data_path(): - """Return path to tidy data.""" - return get_path_to_data() / 'TidyData' diff --git a/formulaone/load_latest_race.py b/formulaone/load_latest_race.py deleted file mode 100644 index eddffc4..0000000 --- a/formulaone/load_latest_race.py +++ /dev/null @@ -1,20 +0,0 @@ -import json -import requests - -from helpers import get_raw_data_path - -base_url = 'http://ergast.com/api/f1/' -endpoint = 'current/last/results.json' - - -response = requests.get( - url=base_url + endpoint -) - -data = response.json() - -raw_data_path = get_raw_data_path() -raw_data_path.mkdir(parents=True, exist_ok=True) - -with open(raw_data_path / 'current.json', 'w') as f: - json.dump(data, f) diff --git a/formulaone/tidy_data.py b/formulaone/tidy_data.py deleted file mode 100644 index 29caf33..0000000 --- a/formulaone/tidy_data.py +++ /dev/null @@ -1,14 +0,0 @@ -import json -import pandas as pd - -from helpers import get_raw_data_path, get_tidy_data_path - -tidy_data_path = get_tidy_data_path() -tidy_data_path.mkdir(parents=True, exist_ok=True) - -with open(get_raw_data_path() / 'current.json', 'r') as f: - d = json.load(f) - -df = pd.json_normalize(d['MRData']['RaceTable']['Races'][0]['Results']) - -df.to_parquet(tidy_data_path / 'current_race.parquet') diff --git a/setup.py b/setup.py index 8afcb48..b9a2afe 100755 --- a/setup.py +++ b/setup.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- -# Learn more: https://github.com/kennethreitz/setup.py - from setuptools import setup, find_packages @@ -12,13 +10,13 @@ with open('LICENSE') as f: license = f.read() setup( - name='formulaone', - version='0.1.1', # increase version by 0.0.1 - description='Downloads and prepares formula one data', + name='dynamodb', + version='0.1.2', # increase version by 0.0.1 + description='Downloads and prepares db movie data', long_description=readme, - author='Timo Schuerg', - author_email='t.schuerg@th-bingen.de', - url='https://github.com/kennethreitz/samplemod', + author='Safouan Er-Ryfy', + author_email='safouan.erryfy@stud.h-da.de', + url='https://code.fbi.h-da.de/safouan.erryfy/dynamodb', license=license, packages=find_packages(exclude=('tests', 'docs')) ) diff --git a/tests/test_basic.py b/tests/test_basic.py index c28980f..013452b 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -6,7 +6,7 @@ import sys sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) #from formulaone.sample.helpers import get_tidy_data_path -from formulaone.helpers import get_tidy_data_path +from dynamodb.helpers import get_tidy_data_path import pandas as pd diff --git a/tests/test_dynamodb.py b/tests/test_dynamodb.py index 8d47739..883d1f1 100644 --- a/tests/test_dynamodb.py +++ b/tests/test_dynamodb.py @@ -12,7 +12,7 @@ module_path = os.path.abspath(os.path.join(os.getcwd(), 'formulaone')) sys.path.insert(0, module_path) print(sys.path.insert(0, module_path)) -from formulaone.dynamodb_helpers import * +from dynamodb.dynamodb_helpers import * def test_aws_config_keys(): """Test the necessary AWS config keys.""" -- GitLab