From e78719d41488d610e692111a63d3937601b41bdb Mon Sep 17 00:00:00 2001 From: kirbylife Date: Thu, 2 Nov 2023 02:14:32 -0600 Subject: [PATCH] Initial commit --- README.md | 0 dist/nvexpo-0.1.0-py3-none-any.whl | Bin 0 -> 2672 bytes dist/nvexpo-0.1.0.tar.gz | Bin 0 -> 2140 bytes nvexpo/__init__.py | 51 +++++++++ nvexpo/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2331 bytes nvexpo/__pycache__/nvexpo.cpython-311.pyc | Bin 0 -> 6259 bytes nvexpo/nvexpo.py | 107 +++++++++++++++++++ poetry.lock | 111 ++++++++++++++++++++ pyproject.toml | 51 +++++++++ test.env | 1 + tests/__init__.py | 0 11 files changed, 321 insertions(+) create mode 100644 README.md create mode 100644 dist/nvexpo-0.1.0-py3-none-any.whl create mode 100644 dist/nvexpo-0.1.0.tar.gz create mode 100644 nvexpo/__init__.py create mode 100644 nvexpo/__pycache__/__init__.cpython-311.pyc create mode 100644 nvexpo/__pycache__/nvexpo.cpython-311.pyc create mode 100644 nvexpo/nvexpo.py create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 test.env create mode 100644 tests/__init__.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/dist/nvexpo-0.1.0-py3-none-any.whl b/dist/nvexpo-0.1.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..6c19651b24cfe222baed2808cbe2410e31b4b557 GIT binary patch literal 2672 zcmZ`*2{e@J8y{DlAX+m8B3@sjD6oyRCYo|n6ispjAe*~ zEL~e&+mNj+_fEI}zfSJ)edjsvIo~r6k=8~ zJjo|&Rs1&KoXq`u&BjH1KGs{iH}34#zp*KS4v$t?g-2Blc4$ouhjZv;KIWOU;=wl{ zPiiSO;8KpC)&bq7&RvSZ@%DraB?({jcYM15p-L%ZBM1i?3au4_FWNWERWas=zVoS9 zVC3%`@L)8!>iKrjS#Kp==)}BV>8N;Tf1rG5bb#n3$I;UJ<0meJKJ*>l09MUOH>aCR z-hj9p1t1JLo}&aG`Fz>RfuC_0!V~&C-2Ki5_a-?as~ze4+j(v0@=XinKvHdj%%tll zB9u`69~oj$7faf`RHCkWb(t>h7MlpowJ3=lR z?UztL^rFa=Ze@TT2QfA6!r8P~m8JtfDI)NVH@Tj3s+Ox`pwnae`NJ7Zdd4=+Uspw> zG{%`1L)^vIHrGU;(Bb$>{fg;4A(z6`|4RLms#2{^OdM88|1HRmDEHOHum8Kw6#PN}zB8HFQUJPB|Sz z)P-QNL%z-Y7}Dyn4j-uf26mc3w>8_)M_3{3R#8KFCDX_N(zK!r7<|c__eAYaQSJclFW3$ zNqwdpjh0yracU+|uZs4U5TTUyf>lJc_Qlky(zay9^>xvLh57%QIF{Jj8I4JlseBP5jmQa36{T{-5#Gj zc?suj8a?F=4$6t+PiXV}OW8SLts~N@;pxPTGx>nTN+X-}1-K&c0k|m9rY0jjL*|5R z@cwR2<9YhtPKqgOC?~1FPjkwFfbu{P(AmQeBjD`$4Npl+86)JDCBjrcW99Z=rmoTg+Hab#cF`1ej8ryOLQXf@P^QM?KE83KE^3up^&N;TvxFW%&CDNuVy>{ps z>=wIo1tvCcV91BPt6J11Rv1qlEvIwcHX&j~&(H@woj>+_IXY+bABa%O5T}I1(dD?H zFup-ZAG8Mw;|Ih9Vq%T^`epk1_2SPN1G{A>eRFf{PFa+j~ztlKGEuEkCVe?R83)ouDL5>y146~fjjk7awtlllgsRpDw?GIKwoOz>GX~zea)U?dn%)vyhAARDfx(1PC|tba zMeF5^A(Q1q?I`6(+}*p2t!CpT%t%+qNk1+_lDe9$$eM8&*1_ECvF4mKoBLStx*0Yx zT2b*?ozF2?v2iOg!f~B3Nd1c$$Qj@IW(R`+Y#CnsSFf`Tk z9Xgl+6*ULV(PIi_pZ|Rd?tEYVJG30eAHF?*paFn_JEaua{)hj0mmWqRw)Zcz4&DFJ zN1FXG*rlI&m89A-M);lG&1j%GUC?}teL)6PFhskDwAS>BK4h8fUN@&W+# Ol=u5dSonR!1pEV8eo;~Y literal 0 HcmV?d00001 diff --git a/dist/nvexpo-0.1.0.tar.gz b/dist/nvexpo-0.1.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..eb6a95cbc001fd1bbe5af6a00ffb8c8c83c4c48a GIT binary patch literal 2140 zcmV-i2&4BOiwFn+00002|890=cyMnmFfK7JFfMdqascgGZExE+63%D+3ZAYXY`|75 z`7JT(qPaG^S6tc#>0b5#pU+?{+SW!AwGx%s$mYM_3`xn7o%E7Jn-5z~fLJ8wjYD$y zjBMx7IedFg*MDc!XX(Lrp^l=*K0BRmZ~Kh>ZpU-I1F}AN0m?H$Q!sz<*5PhC{FC^_-r2><$M<)`6ivJ;gU{o$z+Yah=ZL#p%iWkEc%LfBW-4==B~y|M2Yg z`d-KDdP5h_zw5b!1JW_)|GSf8^1sRdMgBi_-Ju7Gpzj_HddDXJ|7iJNH4bO9AP&TA z<|Lb!$p4V{J(d3leQ(%z;rw@da1EIJ{{r;azZ_l#@nNzND;`@`5G6bnB-><`wMcnH z)RrK+U$rdD^4Wq!G>98b(tbmNSd1(JMAKzP#whN<nx;H`T=p@CQhGbPp((D3 za%?m$9F4gkGz=T|*hXj9WWiJT508aV^N9=PDqA2D(5sN4vAcWOg(|hSs^YH%l^(4;`qP2kN;hR|6c_E4{P|}8y*cDfM3T$1OI8H!t<;letz(pwMta!wrfH)+!qqiI&85?Zh=&r$3;l9HYs7O%2k?^fq(Us8~=1Y*PDkGf!1dw8jz(1{y=OW3)7A4;X zVpZ`3eQ++Cgk}WWTX2YIIt*flP`W;XBuB>bLqpR#c+}Vv$LoSfa~_Kzt{~MtEUxrE z2*kH@+DE-QbZS_~31g%}RD#ygPN4KU#!MCfWmz#<*mq#!etah_+}koH6+a;|CBG90 z7Qr%1tw*E$>qAk7mUEkeFkt)Gc7Edki))SmM%FV)QmA}qS9y5dph7@lBR4uuW7;C~ z$RFXx)N?^kkqLcN%%w@GrU7#U5w)f6$sO|C+r{2erK}Q}=V{8ot}g8M_MNK4(Zmx& zR#mu-8fw{_VGC#E!1*d-uvdRPvXoD9y5>lp_!Jglr?9E)o+`H<)D^#SZCkfjoGTaT zIeuZtbPc;zRW4u6>x3t0u0=lam_5biN`y<@D#|it6_b(WAd_XTR89WC=z_=6j&df- zmYCsemGR=WirY}`?n_AHuO6HYwjr#wysCp;rih3p4H#EEEgV+q5)&uv zqo$HlM;!)RGSQ5&`pyJYUTLw=@_kN*)<<%M|4_?aTWHATl7j@9?B4E0)eU~(#B8h1 zJudnydpGhcTSo5nJe~`PDMYZ*ysIU71{s6cuNnzwBHfTQkBirXuiiGd8t%)ds$Mm7 zu(!Q9w#QXpP8`k;0s~l}Ok|DX!qv0hOWw{rmEm{|x^B7T^DM@Xr~#!+wA0 znPc^%)&I#RN%?PVE*!z5@SC3huhjo;Z=iqwG3fONy)K-8Z`kRY`u`soXgzmL1nu`@zrG|YSq*t3TSTORse0&RAO7J+M zLFmkR^v0fADcm*6PWgi)fGSl_9G^jr?X!3uuxx6nZzoaUKV9bti}xC{@(B1e8Yw3* z!tXS8RWDPXCt%=a$4Htl7SaUHv};?@CfUfg>kJ&Xs>KmBy9Nm;3nD6CDo9z~bZiSS zpI~V@P()L|B7ttHyXY=7Bk$CL-3U0RU5R|M=^ja)tR1p=DOO|G>sSGLF50(&4;{U# z4hPLot&D|mlI6OboSi|~gJsN94Ev-&VD{<1PT~C7t+M02+v(JsJEPrtvsY=JpIvm0 z-75btUQHYryiQHzrxUp9Z3{vftg$+%cw3#2itN<-J?Db8GqI7Jw$F2rv5QcY{aHfi z3>WMw4?@2U7#nI@+;+d`L8@LP*lIJh=MWJvrWmj2{2DfdjJet?IP63;<1sX764=(C zI{%;l^iUiY*aX8TJ2&K+P~=#$t!mx+Bu-i#ryw_f)^{X2Z2 z8!Q3_iqBKNOlcHh);y!}GN(&MM$oVB19<8_m)|*hw#4zXCEU*QMO^Fs_G)dv<8XsO zPWxq(z(NSN7Kae@YoFi7a9h+H$dDmJ Sh71|1(0>6xs|BV2Pyhg3Kr*cW literal 0 HcmV?d00001 diff --git a/nvexpo/__init__.py b/nvexpo/__init__.py new file mode 100644 index 0000000..5720ac4 --- /dev/null +++ b/nvexpo/__init__.py @@ -0,0 +1,51 @@ +#!/bin/python + +import sys + +from nvexpo import nvexpo + + +def main() -> int: + args = sys.argv + if len(args) <= 1: + nvexpo.help() + return 0 + if len(args) == 2 and args[1] in ["--load"]: + nvexpo.load() + return 0 + + if args[1] in ["--unset"]: + nvexpo.unset_env(args[2:]) + return 0 + + if args[1] in ["init"]: + try: + nvexpo.init(args[2]) + except IndexError: + nvexpo.init() + return 0 + + raw_vars = args[1:] + if not all("=" in x for x in raw_vars): + nvexpo.help() + return 1 + + variables = {} + for raw_var in raw_vars: + try: + key, value = raw_var.split("=", 1) + except ValueError: + nvexpo.help() + return 1 + key = key.strip("=") + value = value.strip("=").strip("\"") + variables[key] = value + if not key or not value: + nvexpo.help() + return 1 + nvexpo.set_env(variables) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/nvexpo/__pycache__/__init__.cpython-311.pyc b/nvexpo/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5cf4592acfe6f741fbe9be919d30bba0d7e5005f GIT binary patch literal 2331 zcma)7TWcFf6rS0g)y2A4wXM`rQ7RnAsodCVNCPdn2E`5}4RKrI8e$rR?A@druUF3O zT9(2psKteK5mfY{79})(a$E8*()3*lf{F!$p)d7Q1*Ty9)HAC{ij=x!cIM3O%y+&s zb7uBupRW%=I{17>8XyS$$vUkBeLEfAfodCxNW=G&1_3>O7wRXi0kn&u2c?++2j8?y%yGbm=3>}#s2M4{mbM&J($}fF z{6g2R7%~s#@CT6FNPlVWUK=%!^fm*8j2@dJUa>W4PY_?&kmF@h^OT z+W=2OZAg)1P>+o^tN*gmvs!@Fr@I(BTF{`$i|8A!W9yY&1)9=&k`0vQZ=ns$c9OB`=AOs;U`vO{dk{8so;QOhLKKMS|8^# z+P)TZgX^}_yeqN3xdV2=DBH^eCSv%3V`4%{r$lHuCnnZaP150_6Iqq@<@U7&O?I^} zLODDQ;yP^KHU!LVR~|yfz!|iFw&Ce1y4j-<}Y`TfCOj zERv#kGZwE%DrH_<>d`eL)L0eN~-RfIN zDeF>mT+nnXuUSsmTDCCeuq|koi>5Y`nH1G5H%K|Pq)3|Od@*S8D^ku9G7Lsz?@QE9 z)NeCl-qTTNG7{R~a8L!b=kXUmD9r9T`^@*h%5COKiLW0P9`3pPMbDP6=reuw{(yPE zXSzIEzW?al&SE7Thuo{Y@AR07&5hE#6=wu8OxIk)<)Lz_yi{I#G+cF!)LbJK*NBbW zQhul63`1^kygR(-9VlKelk#VeoKk@j1Ho<2_nz`hH4v=@qJIR&o(INu^lIRIEpXlx>Y>x7yL4vDU+*8V zEtJpN)vGpa3;#Hf;MtrjeOM)t8i`a$r0(&W7c_SGPs8EMm(bHok(nU>+Yko%EEJl( z$UVClxe^q9AHpClS2D?>C7Fyl=m0Eg#xyUhx*b4lUQMk^$)rW3tgKTH(_z09JJgO{ zQ>$rlU6H0~493`tpxp-n=Yui0jy;7w_U)rkr8_qq=djOQZXl?7#XLsDYd(0+hbnxi hPP~Pg&8z0TIlr|~T&R+v8X2mza)U=C3|cm&e*s^d@7DkT literal 0 HcmV?d00001 diff --git a/nvexpo/__pycache__/nvexpo.cpython-311.pyc b/nvexpo/__pycache__/nvexpo.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5147bb9fccf53bd93c801ed0e14a337ef99d3c1 GIT binary patch literal 6259 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 IO[Any]: + return ENV_VARS.open(mode.value) + +def _get_saved_vars() -> Dict[str, str]: + output = {} + with _get_file(Mode.R) as file: + for line in file: + line = line.strip() + if not line: + continue + key, value = line.split("=", 1) + output[key] = value + return output + +def _save_vars(variables: Dict[str, str]): + new_variables = [f"{key}={value}" for key, value in variables.items()] + + with _get_file(Mode.W) as file: + file.write("\n".join(new_variables)) + + +def _print_bulk(attrs: List[str], cmd: Cmd): + for attr in attrs: + print(f"{cmd.value} {attr}") + +def _load(): + current_vars = _get_saved_vars() + attrs = [f"{key}={value}" for key, value in current_vars.items()] + _print_bulk(attrs, Cmd.Set) + + +def set_env(variables: Dict[str, str]): + current_vars = _get_saved_vars() + current_vars.update(variables) + _save_vars(current_vars) + _load() + + +def unset_env(variables: List[str]): + current_vars = _get_saved_vars() + for var in variables: + current_vars.pop(var, None) + _save_vars(current_vars) + _print_bulk(variables, Cmd.Unset) + + +def help(error: None | str = None): + msg = """ + nx: Non-Volatile Export + + Basic usage: + - Set a simple var + $ nx VAR1="hello world" + $ echo VAR1 + hello world + + - Unset the variable + $ nx --unset VAR1 + $ echo VAR1 + + + - Persist into bash sessions + $ bash + $ nx VAR1="hello world" + $ exit + $ bash + $ echo $VAR1 + hello world + """.strip() + msg = "\n".join(map(str.strip, msg.splitlines())) + print(msg, file=sys.stderr) + + +def init(shell: str | None = None): + if shell is None: + shell = "bash" + + if shell == "bash": + cmd = """ + function nx(){ + eval "$(poetry run nvexpo $@)" + } + """ + print(cmd) + _load() + + +if not os.path.exists(ENV_VARS): + _get_file(Mode.W).close() diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..82d68fd --- /dev/null +++ b/poetry.lock @@ -0,0 +1,111 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "mypy" +version = "1.6.1" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"}, + {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"}, + {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"}, + {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"}, + {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"}, + {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"}, + {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"}, + {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"}, + {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"}, + {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"}, + {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"}, + {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"}, + {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"}, + {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"}, + {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"}, + {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"}, + {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"}, + {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"}, + {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "ruff" +version = "0.1.3" +description = "An extremely fast Python linter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.1.3-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:b46d43d51f7061652eeadb426a9e3caa1e0002470229ab2fc19de8a7b0766901"}, + {file = "ruff-0.1.3-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:b8afeb9abd26b4029c72adc9921b8363374f4e7edb78385ffaa80278313a15f9"}, + {file = "ruff-0.1.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca3cf365bf32e9ba7e6db3f48a4d3e2c446cd19ebee04f05338bc3910114528b"}, + {file = "ruff-0.1.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4874c165f96c14a00590dcc727a04dca0cfd110334c24b039458c06cf78a672e"}, + {file = "ruff-0.1.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eec2dd31eed114e48ea42dbffc443e9b7221976554a504767ceaee3dd38edeb8"}, + {file = "ruff-0.1.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:dc3ec4edb3b73f21b4aa51337e16674c752f1d76a4a543af56d7d04e97769613"}, + {file = "ruff-0.1.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e3de9ed2e39160800281848ff4670e1698037ca039bda7b9274f849258d26ce"}, + {file = "ruff-0.1.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c595193881922cc0556a90f3af99b1c5681f0c552e7a2a189956141d8666fe8"}, + {file = "ruff-0.1.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f75e670d529aa2288cd00fc0e9b9287603d95e1536d7a7e0cafe00f75e0dd9d"}, + {file = "ruff-0.1.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:76dd49f6cd945d82d9d4a9a6622c54a994689d8d7b22fa1322983389b4892e20"}, + {file = "ruff-0.1.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:918b454bc4f8874a616f0d725590277c42949431ceb303950e87fef7a7d94cb3"}, + {file = "ruff-0.1.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d8859605e729cd5e53aa38275568dbbdb4fe882d2ea2714c5453b678dca83784"}, + {file = "ruff-0.1.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0b6c55f5ef8d9dd05b230bb6ab80bc4381ecb60ae56db0330f660ea240cb0d4a"}, + {file = "ruff-0.1.3-py3-none-win32.whl", hash = "sha256:3e7afcbdcfbe3399c34e0f6370c30f6e529193c731b885316c5a09c9e4317eef"}, + {file = "ruff-0.1.3-py3-none-win_amd64.whl", hash = "sha256:7a18df6638cec4a5bd75350639b2bb2a2366e01222825562c7346674bdceb7ea"}, + {file = "ruff-0.1.3-py3-none-win_arm64.whl", hash = "sha256:12fd53696c83a194a2db7f9a46337ce06445fb9aa7d25ea6f293cf75b21aca9f"}, + {file = "ruff-0.1.3.tar.gz", hash = "sha256:3ba6145369a151401d5db79f0a47d50e470384d0d89d0d6f7fab0b589ad07c34"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "e3514d4266e70488cfa20fc30eeb51f431b8ac9831665219b843d1cbf51de209" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8e114ba --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,51 @@ +[tool.poetry] +name = "nvexpo" +version = "0.1.0" +description = "" +authors = ["kirbylife "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.8" + + +[tool.poetry.scripts] +nvexpo = "nvexpo:main" + +[tool.poetry.group.dev.dependencies] +ruff = "^0.1.3" +mypy = "^1.6.1" + +[tool.poe.tasks] +format = "ruff format ." +linter = "ruff nvexpo" +typing = "mypy nvexpo" + + +[tool.ruff] +target-version = "py38" +line-length=120 +indent-width=4 + +[tool.ruff.lint] +select = ["ALL"] +ignore = [ + "EXE001", + "D100", + "D101", + "D103", + "D104", + "PLR0911", + "T201", + "PLR2004", + "FA102" +] +fixable = ["ALL"] + +[tool.ruff.format] +quote-style = "double" +indent-style = "space" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/test.env b/test.env new file mode 100644 index 0000000..2864150 --- /dev/null +++ b/test.env @@ -0,0 +1 @@ +HELLO=10 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29