From bf5f5daa08f2b627be18819700af279d2837e0e0 Mon Sep 17 00:00:00 2001 From: Tue Herlau <tuhe@dtu.dk> Date: Thu, 2 Sep 2021 15:34:31 +0200 Subject: [PATCH] Version committed to pypi --- LICENSE | 19 ++++++ README.md | 6 +- __init__.py | 35 ----------- dist/codesnipper-0.0.1-py3-none-any.whl | Bin 0 -> 8527 bytes dist/codesnipper-0.0.1.tar.gz | Bin 0 -> 8446 bytes pyproject.toml | 6 ++ setup.py | 56 +++++++++++------- src/codesnipper.egg-info/PKG-INFO | 22 +++++++ src/codesnipper.egg-info/SOURCES.txt | 13 ++++ src/codesnipper.egg-info/dependency_links.txt | 1 + src/codesnipper.egg-info/requires.txt | 1 + src/codesnipper.egg-info/top_level.txt | 1 + src/snip.egg-info/PKG-INFO | 22 +++++++ src/snip.egg-info/SOURCES.txt | 13 ++++ src/snip.egg-info/dependency_links.txt | 1 + src/snip.egg-info/requires.txt | 1 + src/snip.egg-info/top_level.txt | 1 + src/snipper/__init__.py | 1 + .../__pycache__/snip_dir.cpython-38.pyc | Bin 1920 -> 1978 bytes .../__pycache__/snipper.cpython-38.pyc | Bin 12439 -> 12807 bytes src/snipper/snip_dir.py | 6 +- src/snipper/snipper.py | 32 ++++++++-- src/snipper/version.py | 1 - 23 files changed, 167 insertions(+), 71 deletions(-) create mode 100644 LICENSE delete mode 100644 __init__.py create mode 100644 dist/codesnipper-0.0.1-py3-none-any.whl create mode 100644 dist/codesnipper-0.0.1.tar.gz create mode 100644 pyproject.toml create mode 100644 src/codesnipper.egg-info/PKG-INFO create mode 100644 src/codesnipper.egg-info/SOURCES.txt create mode 100644 src/codesnipper.egg-info/dependency_links.txt create mode 100644 src/codesnipper.egg-info/requires.txt create mode 100644 src/codesnipper.egg-info/top_level.txt create mode 100644 src/snip.egg-info/PKG-INFO create mode 100644 src/snip.egg-info/SOURCES.txt create mode 100644 src/snip.egg-info/dependency_links.txt create mode 100644 src/snip.egg-info/requires.txt create mode 100644 src/snip.egg-info/top_level.txt create mode 100644 src/snipper/__init__.py delete mode 100644 src/snipper/version.py diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..335ea9d --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018 The Python Packaging Authority + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index cacf928..9faf7d6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -# snipper - - -## Deployment info +# Snip +A lightweight framework for removing code from student solutions. Currently used at DTU. diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e6c4c87..0000000 --- a/__init__.py +++ /dev/null @@ -1,35 +0,0 @@ -import os - -# DONT't import stuff here since install script requires __version__ - -def cache_write(object, file_name, verbose=True): - import compress_pickle - dn = os.path.dirname(file_name) - if not os.path.exists(dn): - os.mkdir(dn) - if verbose: print("Writing cache...", file_name) - with open(file_name, 'wb', ) as f: - compress_pickle.dump(object, f, compression="lzma") - if verbose: print("Done!") - - -def cache_exists(file_name): - # file_name = cn_(file_name) if cache_prefix else file_name - return os.path.exists(file_name) - - -def cache_read(file_name): - import compress_pickle # Import here because if you import in top the __version__ tag will fail. - # file_name = cn_(file_name) if cache_prefix else file_name - if os.path.exists(file_name): - try: - with open(file_name, 'rb') as f: - return compress_pickle.load(f, compression="lzma") - except Exception as e: - print("Tried to load a bad pickle file at", file_name) - print("If the file appears to be automatically generated, you can try to delete it, otherwise download a new version") - print(e) - # return pickle.load(f) - else: - return None - diff --git a/dist/codesnipper-0.0.1-py3-none-any.whl b/dist/codesnipper-0.0.1-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..aaf5ead48e7a089977e5499028f603aea1e06382 GIT binary patch literal 8527 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%0DC*vJFq&t+cThySx!^%)Sb-nO#{!$2b@LU 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 J6ZdaV{{sWvZj1l` literal 0 HcmV?d00001 diff --git a/dist/codesnipper-0.0.1.tar.gz b/dist/codesnipper-0.0.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..10f2113f9f53428f684c11322062001fb42571d2 GIT binary patch literal 8446 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 literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..b5a3c46 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,6 @@ +[build-system] +requires = [ + "setuptools>=42", + "wheel" +] +build-backend = "setuptools.build_meta" \ No newline at end of file diff --git a/setup.py b/setup.py index 5b02a2c..72a886d 100644 --- a/setup.py +++ b/setup.py @@ -1,38 +1,48 @@ -from setuptools import setup +# Use this guide: +# https://packaging.python.org/tutorials/packaging-projects/ +# from unitgrade2.version import __version__ import setuptools -from src.snipper.version import __version__ +# with open("src/unitgrade2/version.py", "r", encoding="utf-8") as fh: +# __version__ = fh.read().split(" = ")[1].strip()[1:-1] +# long_description = fh.read() with open("README.md", "r", encoding="utf-8") as fh: long_description = fh.read() -setup( - name="example-pkg-YOUR-USERNAME-HERE", - version=__version__, +setuptools.setup( + name="codesnipper", + version="0.0.1", author="Tue Herlau", author_email="tuhe@dtu.dk", - description="A small example package", + description="A lightweight framework for censoring student solutions files and extracting code + output", long_description=long_description, long_description_content_type="text/markdown", - url="https://compute.dtu.dk/tuhe/snipper", - # project_urls={ - #"Bug Tracker": "https://github.com/pypa/sampleproject/issues", - # }, + license="MIT", + url='https://lab.compute.dtu.dk/tuhe/snipper', + project_urls={ + "Bug Tracker": "https://lab.compute.dtu.dk/tuhe/snipper/issues", + }, classifiers=[ "Programming Language :: Python :: 3", - # "License :: OSI Approved :: MIT License", + "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], - package_dir={"src"}, + package_dir={"": "src"}, packages=setuptools.find_packages(where="src"), - python_requires=">=3.6", - install_requires=['numpy', 'jinja2', 'tabulate', 'sklearn', 'compress_pickle', "pyfiglet"], - # name='homework-snipper-tuhe', - # version=__version__, - # packages=['snipper'], - # url='https://lab.compute.dtu.dk/tuhe/unitgrade', - # license='Apache', - # author='Tue Herlau', - # author_email='tuhe@dtu.dk', - # description='A lightweight student evaluation framework build on unittest', - # include_package_data=True, + python_requires=">=3.8", + install_requires=['jinja2',], ) + +# setup( +# name='unitgrade', +# version=__version__, +# packages=['unitgrade2'], +# url=, +# license='MIT', +# author='Tue Herlau', +# author_email='tuhe@dtu.dk', +# description=""" +# A student homework/exam evaluation framework build on pythons unittest framework. This package contains all files required to run unitgrade tests as a student. To develop tests, please use unitgrade_private. +# """, +# include_package_data=False, +# ) diff --git a/src/codesnipper.egg-info/PKG-INFO b/src/codesnipper.egg-info/PKG-INFO new file mode 100644 index 0000000..487bc49 --- /dev/null +++ b/src/codesnipper.egg-info/PKG-INFO @@ -0,0 +1,22 @@ +Metadata-Version: 2.1 +Name: codesnipper +Version: 0.0.1 +Summary: A lightweight framework for censoring student solutions files and extracting code + output +Home-page: https://lab.compute.dtu.dk/tuhe/snipper +Author: Tue Herlau +Author-email: tuhe@dtu.dk +License: UNKNOWN +Project-URL: Bug Tracker, https://lab.compute.dtu.dk/tuhe/snipper/issues +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Requires-Python: >=3.8 +Description-Content-Type: text/markdown +License-File: LICENSE + +# Snip +A lightweight framework for removing code from student solutions. Currently used at DTU. + + + diff --git a/src/codesnipper.egg-info/SOURCES.txt b/src/codesnipper.egg-info/SOURCES.txt new file mode 100644 index 0000000..8b9ec96 --- /dev/null +++ b/src/codesnipper.egg-info/SOURCES.txt @@ -0,0 +1,13 @@ +LICENSE +MANIFEST.in +README.md +pyproject.toml +setup.py +src/codesnipper.egg-info/PKG-INFO +src/codesnipper.egg-info/SOURCES.txt +src/codesnipper.egg-info/dependency_links.txt +src/codesnipper.egg-info/requires.txt +src/codesnipper.egg-info/top_level.txt +src/snipper/__init__.py +src/snipper/snip_dir.py +src/snipper/snipper.py \ No newline at end of file diff --git a/src/codesnipper.egg-info/dependency_links.txt b/src/codesnipper.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/codesnipper.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/codesnipper.egg-info/requires.txt b/src/codesnipper.egg-info/requires.txt new file mode 100644 index 0000000..7f7afbf --- /dev/null +++ b/src/codesnipper.egg-info/requires.txt @@ -0,0 +1 @@ +jinja2 diff --git a/src/codesnipper.egg-info/top_level.txt b/src/codesnipper.egg-info/top_level.txt new file mode 100644 index 0000000..76fe621 --- /dev/null +++ b/src/codesnipper.egg-info/top_level.txt @@ -0,0 +1 @@ +snipper diff --git a/src/snip.egg-info/PKG-INFO b/src/snip.egg-info/PKG-INFO new file mode 100644 index 0000000..8ea5f2f --- /dev/null +++ b/src/snip.egg-info/PKG-INFO @@ -0,0 +1,22 @@ +Metadata-Version: 2.1 +Name: snip +Version: 0.0.1 +Summary: A lightweight framework for censoring student solutions files and extracting code +Home-page: https://lab.compute.dtu.dk/tuhe/snipper +Author: Tue Herlau +Author-email: tuhe@dtu.dk +License: UNKNOWN +Project-URL: Bug Tracker, https://lab.compute.dtu.dk/tuhe/snipper/issues +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Requires-Python: >=3.8 +Description-Content-Type: text/markdown +License-File: LICENSE + +# Snip +A lightweight framework for removing code from student solutions. Currently used at DTU. + + + diff --git a/src/snip.egg-info/SOURCES.txt b/src/snip.egg-info/SOURCES.txt new file mode 100644 index 0000000..bd0aac6 --- /dev/null +++ b/src/snip.egg-info/SOURCES.txt @@ -0,0 +1,13 @@ +LICENSE +MANIFEST.in +README.md +pyproject.toml +setup.py +src/snip.egg-info/PKG-INFO +src/snip.egg-info/SOURCES.txt +src/snip.egg-info/dependency_links.txt +src/snip.egg-info/requires.txt +src/snip.egg-info/top_level.txt +src/snipper/__init__.py +src/snipper/snip_dir.py +src/snipper/snipper.py \ No newline at end of file diff --git a/src/snip.egg-info/dependency_links.txt b/src/snip.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/snip.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/snip.egg-info/requires.txt b/src/snip.egg-info/requires.txt new file mode 100644 index 0000000..7f7afbf --- /dev/null +++ b/src/snip.egg-info/requires.txt @@ -0,0 +1 @@ +jinja2 diff --git a/src/snip.egg-info/top_level.txt b/src/snip.egg-info/top_level.txt new file mode 100644 index 0000000..76fe621 --- /dev/null +++ b/src/snip.egg-info/top_level.txt @@ -0,0 +1 @@ +snipper diff --git a/src/snipper/__init__.py b/src/snipper/__init__.py new file mode 100644 index 0000000..b437600 --- /dev/null +++ b/src/snipper/__init__.py @@ -0,0 +1 @@ +__version__ == "0.0.1" diff --git a/src/snipper/__pycache__/snip_dir.cpython-38.pyc b/src/snipper/__pycache__/snip_dir.cpython-38.pyc index 90c94e065160551d01fbfaf907b3f93611e62869..50eb77d4a6c15593ccc6bfb963a021aa51a4b489 100644 GIT binary patch delta 567 zcmYjO&ubGw6rMNP%x>2G(RHnB8)?%+)rwW=AxH!T5kwC~`~{}A8nfGUYuTo=167#? zF(7zLn2RUbh~mMM*Zu?E`~y7q<UzzgAUHF4aA1b-eeZqWyqWjPKk&W#u4^N?zT8;u zH2jhG4jzm?FP|Snff(9`(%>L5Xk6t;Mws4aB!&UJ240~X%q*?Z&v~c`8y40+s*oFF z0K}`YF@p*s8JiQyVL<Fi>BK~3naezG450L5b1cmYvxf>Rwqmq1^%imSI$FP0)bzE1 zK97nwun>m4#*T4&01n#3%4hFT96<f%G<U}^guKa)b62`Xv7_TBL)dHn=kl+PKId*` zYyN~%$|w5V8v<>LIXn+D;tIY{`Ne9YkLwSc+>+hgd4!9o@U+I@kyJ!Vkxw);tC%6C zD-4x&g#l$Jb!M7JaTp=h4V~!U(OKEoL>%I)i;HV{miGGzU2oidk#)D|ZkE1GvtA=k zY0_o8G)?lBI9vG!=ft1NhoJ3c$^K)SY$i0xx=G#^pNw137Qc;4mf3ll_d9G$oUXnX z->W;|i_7Fx7|8klAkX$Yw3pK<8Bk9!axvIeg9i%?aKM(^5nsth(30d5UcI+u(NNXS PiiUZH%qiFstLDmIBY&CT delta 625 zcmYjPJ8u&~5Z>8)+P*u-cJPr9S<r+S34x$UnxsG|LKG3=RUjTQ?D+_f6JD<rgl1)g z8;~d*ZG)5qooNvK1WFnjY6{c4q2v#+dvU=QtC??RzWMZNzExjWqg!EECi?xocDnN= z+KWEG#@^?%1B5Z<Yr<hLgg1Z|-xO}{X%v76l3Pa+g0zt!W%PhbNBGP_huI5cpD+jQ zeR60Ii~c8&Q?$px-xn-80&>(TU5%8`)m5sQ%Xx*lx_Xg_K!m8r^N4w4Ekb%Jkv{Vo zc~*T#(7R0TU6Lh1H1%BZ*VIQiHK=1rG_X8`fOM%@)BDLPDaZ=*Wq`h(`hJ(nP)5bf zJceT!LBA!AVW@XCSy1FxM$l{h$35%g+Zbl$0*}q)7-SWr5%5+@SjeISsy1j0$JK3m zZtzR^*wjYUG1Nv_#t00sxk_YU*b6P!wU&6MWdUQ&7aP9*wAis|kP+pJ+VB%529hn! zbjPd_6Qh++3rmZt=AB}2gS6+jUMbsJ^}NlUmpfUiwyhs<My=SNYLh5Sb|3JhoA4xi zl=LU+w|x~RYS~#+sdMOiornDw9r0LM?sKTAp1a&==<ArcPj@>!?en@$_?-Ico)5d` mY`_N_0w}9L?)}=j2HJG%X4~gY)3>DVcq{Hn6RxYb-i3dS?W17; diff --git a/src/snipper/__pycache__/snipper.cpython-38.pyc b/src/snipper/__pycache__/snipper.cpython-38.pyc index 76ee5eb7cb4c254035e4eadec59eb0389b6faf46..71b07e1eb0fc48f94614ddd3c0c39e38faeb6047 100644 GIT binary patch delta 2132 zcmZ8iYj6`)6uxJ7vw1YBg|<oGP0|8gplPj)ya&pgaV(=$Wdd5;+)bN4l5&%1fei>0 zi!&C%>sSSmmnbkY$W&zp!5`{4j=%7qvws}@;UE7o%s8W>p0k01X0u<ud+xcf^PPJ# z)jPpUp9utf3_n9wTkqeU$4cwq$72h|OoNy6igAdS@k$;XXYpA)#H;XkHlNRHcrEsn z^98(~Hz2Fv3wa|CBdg@CJi?>Mf;`5Xcr&sPZ{u_LTx3<eozLSf$f~)rl^Ks-{cEZW z;?r-<dL6)=j+9pe49evdtDrEwr{WGkLXHNPmvG#j@DP|X5-f*)`F(I#;{X{_j+J1L zz;W^t8<KsYHhqL>T26&p+eeA+B+v-v6J!Z;1my&k2u47Z63@#!p-Ai{qAwGS5v(QH zMX;M-4}nGCtUD;zRxN=8(^l0g1@_7tH9PcIs52oOYPZ9P++90gFYZEKs%_JYi_4#C z>me`i)<(gS;kqE~k&Ek|Ydner6AHrp4{geYuZnN>D|xxDs{TuhS!y*aXqI*wxN-&x zF3ZJX$aNINrRiVl>fqT4mIUtO-f@pra@u!>tz!qF;J5r7su?c{F=8uNj#>Iaz>yk` zeAUv^3ilTR*cU*rQY&zRom3p(zzSw5mS1jaXoN@PKtr}JiQ92va}mTr;twnEd&2@5 zZmrx$!Od17^fQY+Usiy_%!1SG3=6Si%1&)-ag+g~8hs2!IFsr$+nWRrO^MAY;AAAB z&J^~C+7#*A9ojrHI&6-Z>0CIOPbYGzOgh|`;k!f=y6twk!{`(?O5~=-4!78WHltKp zjZe;V1dMB@5F^D!oaHEeY*#Wh){}J8TC3%6jf?gvK`2v$5Cos*10RUD(QCth6mp}5 zUPqyINH~g;f`Y<5jtnZ-#=Qj<gUz@r2ZM^GS_;=E74Du?cW4Ez;KE0@G_;~TmY!7c zig>$hNDGit;VQirC(YiLpM@nq%*1J~_k-oGU<Ge_Sq>~HN+>?JbPGbPAJPiOTjy@e zeS&e%Nfjm3x!3Yw%SWw#6t&>BG+yFjxSo44ZXE^oTJ9uWPQQFFQss@iH+DX~rgP(Z z`DtV&Ov&4kj@Vw@hoiQwBoek_nxY#m7s1wsOmp-hy<%wYkXxcPx(0q_nM-D(4IL7V zsP%E0B;oKbLlujtIdex1ckvd!PuAn|dbGazBvD5jowVueXeV(fHyC)Jv^)&rl>9Tg z1#J05(<=QexgU{7o1(KelOv@Q13%P&I6wV$QyfZ;putvq^JC(yY?%{_;z5KB!q!A? zELS|lgUmaJ&RueBP8*z?zA$GB;EY^7uTuXI&EjLZeco%jleAZ;KDma_x?d_SOPlP{ zM24F^iOlFOk?J4F89s5IhB(!SuD7@(UuZG(4~U+XlP&c%mx-=KuvK9u#Z_v4LU2WX z(-Ohj_iM{axF(y8r^@z`d7R)Ffs}`gSmgwr)+y*17Qgd~ZL&nG-`9*z9P^Pf&{7U6 z1%_GUWa*@`LoKj^ilv01@@iMNpm5_=q%;?&h`SyrVr#rF-)}4FHMW|_|36lCNy1EL zGXhV|%{OL5Qal>oo7o_4PJd^-qxi4jq_&pNC6|apa(Ll#jOc}htLElu!A@FG6*FAy zC+mab_Q^o&mH^fM`_-a!Ch$MV{jEy^PT^lq4%H$nzin+<bB(6BL{LF6L2#IWw6HyW zy;(EeJ7Nl|yrMvGfM6RzF$%Ih7D~~-g;7`B8mVTxMtgGuS=%e}>7Hb2*v#5~qM3ZI zho=N~V1({<1hSdoJXNQj;Z!yk_uq??Gpcw*Cu^_Ml6&OUSg@A<T;h7h@rbJ;!^IcW zc>_WI9IJ=8{3q57@5<&jv-uVp4d^mpg8|+5zu4?H+}&NyW7Nox+M0Cd=%eyh+w#XA woYOh>jM~L4rKA^5+?*)fq~<NTw0$l-E?;bKt~7krJ{P`WpU3B8;5>K#1p%4u@&Et; delta 1976 zcmZuxO>7%g5Z>9f*FUlILw@Wej^o&FnoUU3M3vgomK53w2|+^DAj-DFB!0H*#<kPu zb?bz6Qks;u5>;tmrBsSq9Li4%g#(s)K;pom5(fk)IP4LS5JKX_34zMYT1_tadB2^R zH*e;>Z{E%&wl>rFs^9OG@E1L@edd(|*Be9d-SwgJ>;0^iwXK5Q%-UJUs-(BD01M*# zDb~rl@ZHL`vk>b+k2W^I!mJmicBZii>qDu74YDYUp%h?4EY7x}6lC&INqf5HhP7s} zYSor^0n)YM)=q#q@j}}KEY&Wx{RO~;*|E1bg<Ilog7l_js~%EMik~_bdb1>++Vq** zbhLePA|Du4^JFZDyMf^yXGr7(4uU}fgP=svO3;p=`FSJBXKw`iM$VB`CRiXiNU%uo z7J*4nA+WbLC#HhCVWoCCI3dHb__phW`Zi56G1z?^^5UKDLAAaK@vwVTt>+ehboann z;R!{96v>j)^Ol?{>+W<mmrC$bo}1!e=(XwVIGL0Yp8WhMIPp>NDLw>A%19NNK}9hY zLo%fmn3LWE{-r6IN~ctDn2stic>^j=)5&1YiF0>qe}+QvqA6dNm^UD0U>8Op&1|U3 z8&W{3dYHOlTQQ=#0=UkB>sC!QFSCY<k9^l9<}-ck(rqOJ;>~a`_{I5fF_ghw*__=+ zf0DO~mlI9BL*jmK*uCh8_02{!ulTWdT-N-eG4gU$cceH!U3V9>kcw$J)7f$&?ZQ(Q zpA{D(JC~smI%p_f@B&{$pCnFh{#2A)_)x)$2M`z@J_{9KZl*BDDpX`5i8&28g-14l zsaIv@x~iOTRFsMXhtpKh3Z0VaOe=VCJ(CvXIps(q>tbJDi+Y@b|16I7iDd&!sPn@= zHdPad&AgmJ)|hI#kR#V^B|w_nbfe}WEh7h{ipO*?uT#P_u3cEleUj-hU1|DK8Yb;* zJd9a*4B>aG{@)N?bjKpoQ-`LWi7Ylna@l;U7!ga+LAWLEN5@;2$(<Ot<YW?WQi@ND z;f_GxFmcy~b_skC$Kl2iMA;4f(D+z&2rU*KzKQc1@O6A~X3LYB!grFo`T1yS{R3GS z3$dQ~W?e0nYBW1OM2W~MVQ6nt1n-&nDmDeW@Wv<9DuucxrsC0-1LR1Bq8)VszgxQy z*P-DW8Z2d|ROVIj+qRLYE~mH!+;VWEY}D_?W=_6=&WFXW{!!SdW%}0u-WQLzx2qqb znSUy}2Cjtdi}-+ad)3y`9NNm_n}Izsy)ju}sYJ3czreGZlZNKycWHs$A&7K-PxNS- z`T>bm@sifl^%;r#5iEtL()<fjKPPw~R<u5NLwuy|hno0BJJNif%oho65Zn}p21nYL z=<IgiMUtonKH$e{LqoS@AMMq0l#KLl{*L%zcrPBQVPvBJEG>Qx0qe0T^9y7>Phe+A ziusYLZPXGqncF9~TiO4d{A=;+$Zo&g9S@UxCpUyPI<Q=$Soa9p2rd&`As{j=_v}nD zm7h7C;?$1#62S_=F#`Gu`5l600tbTSN+gN~PhcZMO$*hxPDEPH`5EJ6QTJerOHi*X z>ONjt&L;{bBf+v9XObw@XZ*!Nu4H5j`9v;TG<07wl`j@}eX`C$6+`L{He1TnyK)EW z_BFL&j?*Qx`?RhW>H!sAV7i=tURN*)b{G3hO_J0t>GHWb-GTXvy0d7c%7&$&V#&pE z@y}oo`%o@*QC!-Q3O~Z28cb?1{p3HXxuz%Wp>>Mpv6yPJcSh_P+dHyFmCf81RrXDz kYs_uxZ6Y6uPsaLTr}%y>-Wqqed!61+Z^Y}8z#jkp2iWAnNB{r; diff --git a/src/snipper/snip_dir.py b/src/snipper/snip_dir.py index 4d2ff27..ca98568 100644 --- a/src/snipper/snip_dir.py +++ b/src/snipper/snip_dir.py @@ -12,7 +12,9 @@ def snip_dir(source_dir, dest_dir, exclude=None, clean_destination_dir=True): exclude = [] if not os.path.exists(dest_dir): os.makedirs(dest_dir) - if os.path.samefile(source_dir, dest_dir): + source_dir = os.path.abspath(source_dir) + dest_dir = os.path.abspath(dest_dir) + if os.path.samefile( source_dir, dest_dir): raise Exception("Source and destination is the same") if clean_destination_dir: shutil.rmtree(dest_dir) @@ -25,7 +27,7 @@ def snip_dir(source_dir, dest_dir, exclude=None, clean_destination_dir=True): # def fix_hw(info, hw, out, run_files=False, cut_files=False, students_irlc_tools=None, **kwargs): # CE = info['CE'] # paths = get_paths() - print(f"Fixing {hw['base']} -> {out}") + print(f"[snipper] Synchronizing directories: {hw['base']} -> {out}") if os.path.exists(out): shutil.rmtree(out) diff --git a/src/snipper/snipper.py b/src/snipper/snipper.py index 1c0a3d3..386a360 100644 --- a/src/snipper/snipper.py +++ b/src/snipper/snipper.py @@ -286,17 +286,22 @@ def fix_f(lines, debug): comments = [id + c for c in comments] if len(comments) > 0: lines2 += comments[0].split("\n") - lines2 += [id+"#!b"] - lines2 += (id+funrem.strip()).split("\n") + # lines2 += [id+"#!b"] + f = [id + l.strip() for l in funrem.splitlines()] + f[0] = f[0] + "#!b" + + # lines2 += (id+funrem.strip()).split("\n") errm = l_head if len(l_head) > 0 else "Implement function body" - lines2 += [f'{id}#!b {errm}'] + f[-1] = f[-1] + f' #!b {errm}' + lines2 += f + # lines2 += [f'{id}#!b {errm}'] else: lines2.append(l) i += 1 return lines2 -def fix_b2(lines): +def fix_b2(lines, keep=False): stats = {'n': 0} def block_fun(lines, start_extra, end_extra, art, stats=None, **kwargs): id = indent(lines[0]) @@ -307,8 +312,12 @@ def fix_b2(lines): if len(ee) >= 2 and ee[0] == '"': ee = ee[1:-1] start_extra = start_extra.strip() - l2 = ([id+start_extra] if len(start_extra) > 0 else []) + [id + f"# TODO: {cc} lines missing.", - id+f'raise NotImplementedError("{ee}")'] + if keep: + l2 = ['GARBAGE'] * cc + else: + l2 = ([id+start_extra] if len(start_extra) > 0 else []) + [id + f"# TODO: {cc} lines missing.", id+f'raise NotImplementedError("{ee}")'] + + # if "\n".join(l2).find("l=l")>0: # a = 2342342 stats['n'] += cc @@ -386,6 +395,17 @@ def full_strip(lines, tags=None): lines = strip_tag(lines, t) return lines + +def censor_code(lines, keep=True): + # lines = code.split("\n") + dbug = True + lines = fix_f(lines, dbug) + lines, nB, cut = fix_b2(lines, keep=True) + return lines + + # print("safs") + + def censor_file(file, info, paths, run_files=True, run_out_dirs=None, cut_files=True, solution_list=None, censor_files=True, include_path_base=None, diff --git a/src/snipper/version.py b/src/snipper/version.py deleted file mode 100644 index f102a9c..0000000 --- a/src/snipper/version.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "0.0.1" -- GitLab