From d160bf3e7b191dd9eb2821a2b42ff8308640c549 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 15 Jun 2022 12:05:29 +0200 Subject: [PATCH] add phototags --- .gitignore | 4 ++ accounts/__pycache__/__init__.cpython-39.pyc | Bin 126 -> 0 bytes accounts/__pycache__/admin.cpython-39.pyc | Bin 167 -> 0 bytes accounts/__pycache__/apps.cpython-39.pyc | Bin 407 -> 0 bytes accounts/__pycache__/managers.cpython-39.pyc | Bin 1468 -> 0 bytes accounts/__pycache__/models.cpython-39.pyc | Bin 791 -> 0 bytes accounts/migrations/0001_initial.py | 38 --------------- accounts/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-39.pyc | Bin 1935 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 137 -> 0 bytes api/__pycache__/__init__.cpython-39.pyc | Bin 121 -> 0 bytes api/__pycache__/admin.cpython-39.pyc | Bin 162 -> 0 bytes api/__pycache__/apps.cpython-39.pyc | Bin 392 -> 0 bytes api/__pycache__/models.cpython-39.pyc | Bin 159 -> 0 bytes .../photolog_generator.cpython-39.pyc | Bin 1487 -> 0 bytes .../photolog_layout.cpython-39.pyc | Bin 3241 -> 0 bytes api/__pycache__/serializers.cpython-39.pyc | Bin 2323 -> 0 bytes api/__pycache__/urls.cpython-39.pyc | Bin 1076 -> 0 bytes api/__pycache__/views.cpython-39.pyc | Bin 7312 -> 0 bytes api/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 132 -> 0 bytes api/photolog_generator.py | 0 api/photolog_layout.py | 0 api/serializers.py | 14 ++++-- api/urls.py | 6 +++ api/views.py | 23 ++++++++- config/__pycache__/__init__.cpython-39.pyc | Bin 124 -> 0 bytes config/__pycache__/settings.cpython-39.pyc | Bin 3017 -> 0 bytes config/__pycache__/urls.cpython-39.pyc | Bin 1685 -> 0 bytes config/__pycache__/wsgi.cpython-39.pyc | Bin 525 -> 0 bytes config/package-lock.json | 0 config/settings.py | 38 ++++++++++++--- photo_log/__pycache__/__init__.cpython-39.pyc | Bin 127 -> 0 bytes photo_log/__pycache__/admin.cpython-39.pyc | Bin 315 -> 0 bytes photo_log/__pycache__/apps.cpython-39.pyc | Bin 409 -> 0 bytes photo_log/__pycache__/models.cpython-39.pyc | Bin 4610 -> 0 bytes photo_log/admin.py | 3 +- photo_log/migrations/0001_initial.py | 36 -------------- .../migrations/0002_auto_20220105_1757.py | 23 --------- .../migrations/0003_alter_photo_ocr_text.py | 19 -------- .../migrations/0004_alter_photo_group.py | 20 -------- photo_log/migrations/0005_photolog.py | 26 ---------- .../migrations/0006_alter_photolog_slides.py | 19 -------- .../migrations/0007_alter_photolog_slides.py | 20 -------- .../migrations/0008_auto_20220118_1847.py | 24 ---------- photo_log/migrations/0009_photolog_pdf.py | 19 -------- .../migrations/0010_photo_bbox_coords.py | 19 -------- .../migrations/0011_alter_photo_ocr_text.py | 18 ------- photo_log/migrations/0012_photo_rotate.py | 18 ------- .../migrations/0013_photo_intersections.py | 19 -------- photo_log/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-39.pyc | Bin 1340 -> 0 bytes .../0002_auto_20220105_1757.cpython-39.pyc | Bin 691 -> 0 bytes .../0003_alter_photo_ocr_text.cpython-39.pyc | Bin 738 -> 0 bytes .../0004_alter_photo_group.cpython-39.pyc | Bin 781 -> 0 bytes .../__pycache__/0005_photolog.cpython-39.pyc | Bin 1091 -> 0 bytes .../0006_alter_photolog_slides.cpython-39.pyc | Bin 772 -> 0 bytes .../0007_alter_photolog_slides.cpython-39.pyc | Bin 855 -> 0 bytes .../0008_auto_20220118_1847.cpython-39.pyc | Bin 759 -> 0 bytes .../0009_photolog_pdf.cpython-39.pyc | Bin 655 -> 0 bytes .../0010_photo_bbox_coords.cpython-39.pyc | Bin 777 -> 0 bytes .../0011_alter_photo_ocr_text.cpython-39.pyc | Bin 607 -> 0 bytes .../0012_photo_rotate.cpython-39.pyc | Bin 580 -> 0 bytes .../0013_photo_intersections.cpython-39.pyc | Bin 776 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 138 -> 0 bytes photo_log/models.py | 17 +++++++ req.txt | 13 ----- requirements.txt | 45 ++++++++++++++++++ templates/photolog.tex | 0 69 files changed, 138 insertions(+), 343 deletions(-) mode change 100644 => 100755 .gitignore delete mode 100755 accounts/__pycache__/__init__.cpython-39.pyc delete mode 100755 accounts/__pycache__/admin.cpython-39.pyc delete mode 100755 accounts/__pycache__/apps.cpython-39.pyc delete mode 100755 accounts/__pycache__/managers.cpython-39.pyc delete mode 100755 accounts/__pycache__/models.cpython-39.pyc delete mode 100755 accounts/migrations/0001_initial.py delete mode 100755 accounts/migrations/__init__.py delete mode 100755 accounts/migrations/__pycache__/0001_initial.cpython-39.pyc delete mode 100755 accounts/migrations/__pycache__/__init__.cpython-39.pyc delete mode 100755 api/__pycache__/__init__.cpython-39.pyc delete mode 100755 api/__pycache__/admin.cpython-39.pyc delete mode 100755 api/__pycache__/apps.cpython-39.pyc delete mode 100755 api/__pycache__/models.cpython-39.pyc delete mode 100644 api/__pycache__/photolog_generator.cpython-39.pyc delete mode 100644 api/__pycache__/photolog_layout.cpython-39.pyc delete mode 100644 api/__pycache__/serializers.cpython-39.pyc delete mode 100644 api/__pycache__/urls.cpython-39.pyc delete mode 100644 api/__pycache__/views.cpython-39.pyc delete mode 100755 api/migrations/__init__.py delete mode 100755 api/migrations/__pycache__/__init__.cpython-39.pyc mode change 100644 => 100755 api/photolog_generator.py mode change 100644 => 100755 api/photolog_layout.py delete mode 100755 config/__pycache__/__init__.cpython-39.pyc delete mode 100644 config/__pycache__/settings.cpython-39.pyc delete mode 100644 config/__pycache__/urls.cpython-39.pyc delete mode 100755 config/__pycache__/wsgi.cpython-39.pyc mode change 100644 => 100755 config/package-lock.json delete mode 100755 photo_log/__pycache__/__init__.cpython-39.pyc delete mode 100644 photo_log/__pycache__/admin.cpython-39.pyc delete mode 100755 photo_log/__pycache__/apps.cpython-39.pyc delete mode 100644 photo_log/__pycache__/models.cpython-39.pyc delete mode 100755 photo_log/migrations/0001_initial.py delete mode 100755 photo_log/migrations/0002_auto_20220105_1757.py delete mode 100644 photo_log/migrations/0003_alter_photo_ocr_text.py delete mode 100644 photo_log/migrations/0004_alter_photo_group.py delete mode 100644 photo_log/migrations/0005_photolog.py delete mode 100644 photo_log/migrations/0006_alter_photolog_slides.py delete mode 100644 photo_log/migrations/0007_alter_photolog_slides.py delete mode 100644 photo_log/migrations/0008_auto_20220118_1847.py delete mode 100644 photo_log/migrations/0009_photolog_pdf.py delete mode 100644 photo_log/migrations/0010_photo_bbox_coords.py delete mode 100644 photo_log/migrations/0011_alter_photo_ocr_text.py delete mode 100644 photo_log/migrations/0012_photo_rotate.py delete mode 100644 photo_log/migrations/0013_photo_intersections.py delete mode 100755 photo_log/migrations/__init__.py delete mode 100755 photo_log/migrations/__pycache__/0001_initial.cpython-39.pyc delete mode 100755 photo_log/migrations/__pycache__/0002_auto_20220105_1757.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0003_alter_photo_ocr_text.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0004_alter_photo_group.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0005_photolog.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0006_alter_photolog_slides.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0007_alter_photolog_slides.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0008_auto_20220118_1847.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0009_photolog_pdf.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0010_photo_bbox_coords.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0011_alter_photo_ocr_text.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0012_photo_rotate.cpython-39.pyc delete mode 100644 photo_log/migrations/__pycache__/0013_photo_intersections.cpython-39.pyc delete mode 100755 photo_log/migrations/__pycache__/__init__.cpython-39.pyc delete mode 100644 req.txt mode change 100644 => 100755 templates/photolog.tex diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index f71aea7..957fdeb --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ static/* ./*/*pycache*/* +**/__pycache__ +*/migrations/* +env/ +static_bk/ diff --git a/accounts/__pycache__/__init__.cpython-39.pyc b/accounts/__pycache__/__init__.cpython-39.pyc deleted file mode 100755 index 6efdebe8d2a29b7d0c479ba516c64d7aa7501398..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmYe~<>g`kf>|b&i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o2B*KO;XkRX;be vC|SR}yj(vqIXS;HucTN%K0Y%qvm`!Vub}c4hfQvNN@-529Z2(MAZ7pn>OC4T diff --git a/accounts/__pycache__/admin.cpython-39.pyc b/accounts/__pycache__/admin.cpython-39.pyc deleted file mode 100755 index b4f6bf665fccea3b200c2023f3982070581a8746..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmYe~<>g`kf>|b&iS|JHF^Gc(44TX@fuanW zjJH@5Q*tx&{4|-O_)@YG^V0M6lJoOQiZYXmKnAR2C}IXuVB(j8enx(7s(x-_QL=t{ mdAWXKa&mrYUP-Y&*a*FX%3B;Zx%nxjIjMGxKuw>4m;nIMEG2pX diff --git a/accounts/__pycache__/apps.cpython-39.pyc b/accounts/__pycache__/apps.cpython-39.pyc deleted file mode 100755 index 44e3960da96c51d431e0e46b4cd739634204b4e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmYjNJ5Izf5Vhm16!t@bXc4q&l7#34?!T3R>)6*u5YZmGBe z72_m`9ckYDo}Wh}R;xKd`?%bTcZ^@II5Z!NHM+S#00LBzil&s3djcM?Hv&x3SC)F< zZ%H`&MivRFJxZG9R@Zr1WUg~)6pJ;wIYp2pr9kjCO&NHp4-8d&dz@sM?(5Es8ZT$? zBStNa@?@Fn_24bRb!kG;?uSF#}w{y;s-7A+bIe+ejnkFY8bJ44g z3)JBGAmY2(Cu!Y12KYITA9W?;O0-$L+wJ1NUt-ZTCTjLAL#jKFaS%|S4xLTN>|$Ej bFEN|Pr)2n_gwtI(d zH5cH_Z`hHz_?i=cffH4phbH17#Uodj%jK%__tjYL?~e$Kf9{^kX+p@qxY!*G z77t^n5OUIS)!7cWIXr;C&-xktB<7Be^_mP zleIk722A_yv35?scA}Ksd4`U=BZ9?4n3jXkWJVR4MT*X16{+|=nK8vw0^dXpAkm(` z_PDjKsdjR7XCn?{W#=s<=T)P0$*WZjd@d3Z&=SRSRX9`YtWJZxAF`W zju`Mo;pX8=$Hkeh*SAEcQ)%s@F=|yTM(A!H!quM!94bJOA8Bs2^GSeaJn*AGW!dVd z#x%xL;jh+>sbpDnS_BWD1YCUzhr}klXIRZRfv+xegE;u%b~6RujTC@zsjO#6&fmlw zfYaxnr}L)L(@L6bx>zixGRvB_b`~t5b?oHy++WVZtpy&$=CxNq5XNXqNAw2FA?pL61-Y!9=OQGDp_+HUr-gVcm4`H zgALm!tfzgHM+L-1jW7e8S0WqYd4|E1Iq3oERXd4A|qR51vG*UyK!0nB!Z?{qWwZ_y-g`EV=<2@fVu$j`RQk diff --git a/accounts/__pycache__/models.cpython-39.pyc b/accounts/__pycache__/models.cpython-39.pyc deleted file mode 100755 index 8452a44bff373490b9c53ed60a36ac48976da48d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmYjPv2NQi5G5s9k{zi*(xvFsj$Y)g=ui|5VxnQ||IF_iw1Y?Ii z=~X`QJM7D#8juihzy~s_ViIHY9`TSz-w}@l-uq<8;{_TIAD|K%W1C#8v{9@uODz=e zuxhxF8c^DHM`6ajxA$&s{1U2z&jMWf0Y!9@MpMN5C0`$+z$!$}KNySt#*>1NJRuoNJ z8$Ic#k$u_Oh*B67rDv|D2La*x^GAi*Aw5oQOli$3L8%>43I$r}a6;)_%j6*ww=h75 zl@FEdD0kgml|pihX(!P>SuXPV?BXV;SJ(N6sXd+NAD7qjeA@Gca*f%jS#3mNv`T?> z%^Zcq{fi*P;M%bm2l(6zaNvbrmzj-6_Br3MdfjA2QyW#TGS-^gtnXa8PVMlpfUkPF z&knpbrPLWbpIS?1%BEKC?$uMbC$9SEp*x-3Sx3s;)Rhxt<2U_?-nt9ZPH2MR^Ai6r D5GcO~ diff --git a/accounts/migrations/0001_initial.py b/accounts/migrations/0001_initial.py deleted file mode 100755 index 5656586..0000000 --- a/accounts/migrations/0001_initial.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 3.2.8 on 2021-10-27 11:22 - -from django.db import migrations, models -import django.utils.timezone - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ] - - operations = [ - migrations.CreateModel( - name='CustomUser', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), - ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')), - ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), - ], - options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'abstract': False, - }, - ), - ] diff --git a/accounts/migrations/__init__.py b/accounts/migrations/__init__.py deleted file mode 100755 index e69de29..0000000 diff --git a/accounts/migrations/__pycache__/0001_initial.cpython-39.pyc b/accounts/migrations/__pycache__/0001_initial.cpython-39.pyc deleted file mode 100755 index b91b2e5504c9f685556c34f282993bc246d9861a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1935 zcmZuyOOqQl5T2L4w%5)&yVYEx;1Y>h;IX$uyvA5 zB4{DjhBmaIa}uGvjdI87bfI?=BXR+eZM4{dK3sIjuCobY4=%yJLoS~qudR`TwbkqJ z#@gylhlKDJyuC)=L8L>w^WOZzd>)fuCE{i9qVIl_iO!WPoL1Mb-qs+&W5>3HuFC;67 zT;)&c%Cu3H5zcCAy3eURE){iNO>04vT9y({f54i#8lUeYdkC2hCl~@Rr%cptp1S!U zHjQIW#8Z=qigT~qWhz(If=U~F{pb!=Y$`AsmFgMMI53skrF2GAN;pqZwO~rwj!KtI z&&o=t^u>a+G1GjNVr=Mui7A@WBCGr7&Qqm{t`tVG1$06xu1$MJ`6Ac!g+_5wg=}z0k7=rXNs*4!TW0AKp(v;0HK$A{ zO$nssB*jBXwPlQq$7Ln7%1qN6nQg#QedY0jj@g8b|J9q5(pGz2nXKM%J3l&a-rD)uv@i|p*;3}ZYj5+=o_TWoq0uZnwiGt<63BhpWMcaXLtR!}c? zZZr7%2RbD(?Ef3T2J$g`kf>|b&i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o2BxKO;XkRX;be zC|SR}yj(vqIXS;HucTN%H#5B`u_QA;uUJ1mJ~J<~BtBlRpz;=nO>TZlX-=vg$ehnW G%m4sMDITW) diff --git a/api/__pycache__/__init__.cpython-39.pyc b/api/__pycache__/__init__.cpython-39.pyc deleted file mode 100755 index 26c808b468af0740d01d7784db46546f9a7c41bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmYe~<>g`kg2t;?6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HVenx(7s(x-_ qQL=t{dAWXKL8g9ud}dx|NqoFsLFFwDo80`A(wtN~kiO4A%m4to85rpR diff --git a/api/__pycache__/admin.cpython-39.pyc b/api/__pycache__/admin.cpython-39.pyc deleted file mode 100755 index 8b5697e2c878c32651aeccd575066cc598a64cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmYe~<>g`kg2t;?6YYWYV-N=!FabFZKwK;UBvKes7;_kM8KW2(8B&;n88n$+0!0}# z8E>&BrsQVk`Drpm@ug%X=B4NBCFkdr6lEqAfecv5P{a(Rz{D?U{fzwFRQ=qsh))K>@DGs& zARkyX`9&6sxIbAn&23#}MZTfRv2je6=@3A|rCvI151msmneOaXX_TvM z&`aulvzD$f!2UdWs!NlUy4@sw-zWG1dgJ2ewH3&si#URiOFmTAk?^y_n#61a8b;jz Uv12sDnh&qW{jTW}j<|F22e~|4fdBvi diff --git a/api/__pycache__/models.cpython-39.pyc b/api/__pycache__/models.cpython-39.pyc deleted file mode 100755 index 4efe7e8a1f7cc45c5f741ab8aed473fbb59506e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmYe~<>g`kg2t;?6D@)CV-N=!FabFZKwK;UBvKes7;_kM8KW2(8B&;n88n$+0!0}# z8E>)W=BK3Q6#Hp1-QrBiO3X{o*Gow%0%=~!P{abHz{D>Z{fzwFRQ=qW-{tAa=K{QT_aXa9chxg3v&1lo6>-Ifm%LjJdF1V(jO!#%ydKH49^?biW1h%iJ<3O*r+n}$ z$umCWBk0FG<74QLID0`RN4F4(OsI=~ylhQ-K4EUGM8kzDOk1q^g?q4Q>vbhXVMM)_ zr2)lHfY0DL*q>KIau}pq7*jP%eM|ctv!!T+@(yCRK;xkWpy2;K{Q7GUmgtm|7sQYi zT`>z6|DAS}la5)s3Ra>16#8ftcdSXh1vHDtXXg-^ReX{t#Lgw{d?gk}yI?7d8!uG5 zUJG7Sb-5HSY|2`=qgGYRsww5(8f=xE1TJ0U{fmmb$ZIaB>g69q-G^=e{(N@X)?!wd zYB9UIx|+?)#VY`5R<5g=UoG2ZvA=Gsrt52W0`VchvRIeqvY21P#u?uB7zCjqd`Ix7 zbjVVw-Ur(P&wpqmP#`~gfc^xf0w|WG3oQA8{Pe5~Z3z7rU1TFpUNQA#b7~{Yex~Xh zLu_7asr3_eukDc^AXc;hxd_H07 zV_3V0(PQ6`%@ls0?q7j|9NF-Oy<}b7C7gCCXNDplfLjQ2$xU2Q#2FF2VcpOU0n6b0 zm+X*jQ^3t7i?%VMF_XXtRTxBtAOOZhiOp7M<04ZT3CYi)65VKD+c;2sJ1Tfsn~r9dumL4LXTL;PW}nQAyWwF z;j{Es3pC5c9m~*4O z8GyM^$U%PZ?o_h8Znvff2`jG04A1h;m9X5EPlogi4z-oy8NOV;ZZnp$W17*7WkH&y GkN*Yz^m)zz diff --git a/api/__pycache__/photolog_layout.cpython-39.pyc b/api/__pycache__/photolog_layout.cpython-39.pyc deleted file mode 100644 index 28ec4e55365f3dc69286dde1c630833419a39c2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3241 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 diff --git a/api/__pycache__/urls.cpython-39.pyc b/api/__pycache__/urls.cpython-39.pyc deleted file mode 100644 index 9588929c4b65a20846fbbef7fab75ecc6d3b16fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1076 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/', UpdatePhotoLogAPIView.as_view()), path('updatephoto//', UpdatePhotoAPIView.as_view()), path('generatephotolog//', GeneratePhotoLogAPIView.as_view()), + path('phototag/', CreatePhotoTagAPIView.as_view()), + path('phototags/', PhotoTagsAPIView.as_view()), + path('phototag//', RetrieveUpdateDestroyPhotoTagAPIView.as_view()), ] diff --git a/api/views.py b/api/views.py index bb572c6..70cc96a 100755 --- a/api/views.py +++ b/api/views.py @@ -1,7 +1,7 @@ from rest_framework import generics, views, status from rest_framework.response import Response from django.shortcuts import get_list_or_404 -from photo_log.models import PhotoGroup, Photo, PhotoLog +from photo_log.models import PhotoGroup, Photo, PhotoLog, PhotoTag from .serializers import ( PhotoGroupSerializer, PhotosSerializer, @@ -9,6 +9,7 @@ from .serializers import ( PhotoUpdateSerializer, PhotoLogSerializer, PhotoLogsSerializer, + PhotoTagSerializer, ) from .photolog_generator import generate_photolog_from_latex @@ -22,6 +23,21 @@ from io import BytesIO from PIL import Image, ExifTags +class PhotoTagsAPIView(generics.ListAPIView): + queryset = PhotoTag.objects.all() + serializer_class = PhotoTagSerializer + + +class CreatePhotoTagAPIView(generics.CreateAPIView): + queryset = PhotoTag.objects.all() + serializer_class = PhotoTagSerializer + + +class RetrieveUpdateDestroyPhotoTagAPIView(generics.RetrieveUpdateDestroyAPIView): + queryset = PhotoTag.objects.all() + serializer_class = PhotoTagSerializer + + class PhotoGroupAPIView(generics.ListAPIView): queryset = PhotoGroup.objects.all() serializer_class = PhotoGroupSerializer @@ -135,7 +151,7 @@ class GeneratePhotoLogAPIView(generics.RetrieveAPIView): if log_bytes: photolog.pdf.save('log.pdf', ContentFile(log_bytes)) - return Response({'pdf': 'https://server.riezel.com%s' % str(photolog.pdf.url)}) + return Response({'pdf': 'https://zierle-training.riezel.com%s' % str(photolog.pdf.url)}) return Response({"error": "Not Found"}, status=status.HTTP_404_NOT_FOUND) @@ -191,6 +207,9 @@ def rotateByExif(img): exif = img._getexif() + if not exif: + return img + if exif[orientation] == 3: img=img.rotate(180, expand=True) elif exif[orientation] == 6: diff --git a/config/__pycache__/__init__.cpython-39.pyc b/config/__pycache__/__init__.cpython-39.pyc deleted file mode 100755 index ae7f3af2a32cd28d434748c0572e1951db64e0c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 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 diff --git a/config/__pycache__/wsgi.cpython-39.pyc b/config/__pycache__/wsgi.cpython-39.pyc deleted file mode 100755 index aec702a4af1584c69c4ecc99d630a03cecb9ffd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmYk3&2AGh5XZev+JvR0J)qu@e2oNa)ZQvowNgtI1nD6~NV#mxda`lkkJZ}El3o$- zL65u;2VXhy3Y?f^RVgER?D5$1|7k`X9;O8C{A?|LB!v9g1iRM7;1ZXAi%ya$k%^=_ znI^b*G&P-RCn1n5yFd42SMEJhj5^=RbYId58SFp&PQOfsBUU&&S0$Uf`srBJZV5%m z(sUFUe5;%X&%y#&`(9`*zG`5?Gr^3L_Zr@4Sb=6MQLAmr3ImeOW}>RJDnwAu&SqHe zJ&G7t15+0D%r?QC#p24dxzg~Od4O~gLgmjnm#*-cTnbydC#J#~4wj!~r+nd>;JAcJ zyR`uuc;idO)4$jaG9D!HWeFkQ+~qqM@#Ol$)p&TDPj2q+M&scm|8#r(`Qy#QQQL>i zLkP;2e$b1(JV$~&kJR~i+;U_E;%A$xHAS7+1G`eSvoXbw66WGwhxmL)@E55!W8Aub nuMpY*H=-_h(=@!*+=6G-I`-eS?YzKo6W>SIeb%Q3^acG7%3GlR diff --git a/config/package-lock.json b/config/package-lock.json old mode 100644 new mode 100755 diff --git a/config/settings.py b/config/settings.py index 86d6407..d214bc5 100755 --- a/config/settings.py +++ b/config/settings.py @@ -26,7 +26,7 @@ SECRET_KEY = 'django-insecure-z465dl_(vk55hxbm0bj*mp-ok3!*=ssw#!$5s2nrxa!9j+67z+ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = ['server.riezel.com', 'localhost', '127.0.0.1', '192.168.1.244'] +ALLOWED_HOSTS = ['zierle-training.riezel.com', 'localhost', '127.0.0.1', '192.168.1.244'] # Application definition @@ -45,6 +45,7 @@ INSTALLED_APPS = [ 'corsheaders', 'drf_yasg', 'django_tex', + 'colorfield', # local 'accounts', @@ -110,8 +111,8 @@ ASGI_APPLICATION = 'config.asgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'www_db', - 'USER': 'www_db_user', + 'NAME': 'zierle_training_db', + 'USER': 'zierle_training_db_user', 'PASSWORD': 'UI&hWG,El7G{A2c0n=qIULv:b', 'HOST': 'localhost', 'PORT': '5432', @@ -157,12 +158,37 @@ USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.2/howto/static-files/ -STATIC_URL = '/static/' -STATIC_ROOT = os.path.join(BASE_DIR, "static/") -#STATICFILES_DIRS = [os.path.join(BASE_DIR, "static/")] # Default primary key field type # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + + +MINIO = False +if MINIO: + # MinIO S3 Object-Storage + DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' + STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage' + + AWS_ACCESS_KEY_ID = 'zierle-trainig-minio' + AWS_SECRET_ACCESS_KEY = 'iGWJt7IFlKzufMtVTnl4W4kGmHz0TTBG' + AWS_STORAGE_BUCKET_NAME = 'zierle-training' + AWS_S3_ENDPOINT_URL = 'https://minio.riezel.com' + AWS_DEFAULT_ACL = 'public' + + MEDIA_URL = 'https://minio.riezel.com/zierle-training/' + STATIC_URL = 'https://minio.riezel.com/zierle-training/' + + AWS_S3_OBJECT_PARAMETERS = { + 'CacheControl': 'public, max-age=86400', + } +else: + #MEDIA_URL = 'media/' + #MEDIA_ROOT = BASE_DIR / 'media' + + STATIC_URL = '/static/' + STATIC_ROOT = os.path.join(BASE_DIR, "static/") + #STATICFILES_DIRS = [os.path.join(BASE_DIR, "static/")] + diff --git a/photo_log/__pycache__/__init__.cpython-39.pyc b/photo_log/__pycache__/__init__.cpython-39.pyc deleted file mode 100755 index a9908c2d4751725639300090b5122fc92068f0ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmYe~<>g`kf}2OKCW7e4AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUSQ{fzwFRQ=q< wqGbK@@^bxxjQo=P_?-N7{rLFIyv&mLc)fzkTO2mI`6;D2sdgaUpMjVG0Fxja#{d8T diff --git a/photo_log/__pycache__/admin.cpython-39.pyc b/photo_log/__pycache__/admin.cpython-39.pyc deleted file mode 100644 index 1449c44a921dcd123bea280472fc08d61e619c6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 315 zcmYjMy-ve05cb7(u&R`amk2}s0tm6efDjT}7UafOnqtS1ohssOU}WHhJRvdl6__|j z9eUDz_kDM|Keb-32%5b9QQsJUvp6@3;toANAZVh&5(fMsLgMe3R*c>#o4kYGU-5?dC_^qe%viA~a|f)!qYhu}SU1%`TM z;uV;*^FfzbR# zqydC?Eb4tDi$&ZI=FVN(Dl76Obq4n)~uyM5t;2&LYlp^nhvsqpJ}qPrA|s!FO$t?ll*;?DCe5kJ=FrabfSi!&qKcJ hEF$4Y`<01V2P8?{fAKCGVbAx^x-HM?G!1db;unoKWEcPd diff --git a/photo_log/__pycache__/models.cpython-39.pyc b/photo_log/__pycache__/models.cpython-39.pyc deleted file mode 100644 index 9357bed8afd1894c54584404660d25cd8a486c68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4610 zcmb_gOK%*<5uTpc&OZ5&NXnESo7hUSPCyDs;*;Z0FDi~D!hqxi85kH1x0}mZ&Caa5 zXHAiyPSPO=!T>qvLLK=Ze8?%tZ|G}I`UQEy$X7kPOD-wFLEs^}r@N=Ry1TmS`)V0C zn>7oM_d~gzUbd{iQRnRAqO*abY-U;9;w-fWEM$z@c4`lt&@pW%bq8MPnYNqygGyL2 zZ7&VN0J2_M4Xbx8?(@oXi&uoxuRU|ZIuCgDxfM2ejo0yR@&<3>-GXF`&p~o-EIB7U zwC4K@Vvf%r*?fU7KDVB+aB)0-X*_<3UpC{H`4V4-rX{|@ui(85jc@Q(Xj~m@T$yTI zF&eL4&{&SYIo0SrusUzOB3IPAoZx@Bey#eK#M7^+7DV>w9~9>)UbnvB>!PkhT(~d2hY6z}j$MSE5K2 zGKy%TvQb&=VDWU%Yva#bI7$#jv|1GDS`TJ$WKOw26)kwCnx`(Eu8v}k8L)ZQu+7+oTOm(3_MmBn)n|Ph_J@}r*|55^71ln> zR4$7|$f9GLT}WEG;~0Iql5h7#w@|v-6GfEEs4E5bcxFFld!$`2lL!|(@hB}KW5OQY z<|TYn0V<36%x3o2@(r}R#)LGAhjuyL>3itVPLJ(F_JVzGKeeAaoE1*t9(ykk9f!`2 zy^MS9*joozRS_3ScRiO$FUjIGN(OOHsP${=nmX~doh$7Q<6>6_YM3U4cv5Hwx2WCG zDB;?p`X?u@4w4LtvaZm?c6_dd4&f+IFj*rmDi5EumPE-8L1!HVe1=b zHICenkaJ!vkY2PF#UI^W`Z@P z0vaWGMk2WsNiX|E?3Ykge{knvboz z0~LWP{Qioqh0mt&Qil@hH_ML~HNJ zd|+B?Uln3t1on1C*6!v~3N_3#o@BlDqx*s<@g`+jELb^3Mr6?E68y1$yy zjoztl?%?*^137bhdCI?q8ypQOY2)R!C&g|%6MIH&d8eCjRD1Y%tJ9FTVMOD*as@5z zfbPt7>&ER|sI9!X^CSU-PA^}6L=%2a6h&VmhVv2Mg;(;Ad>G=b#9YOw8^tdBFaVfAvxI}!OI0(5W#Ga(C<)PV0mQg6P5?d zR{8;0-45y34RO3@_}mF==+{jTnLOkhqKQ8mBN^g)lC1D5xE~{;MOnaMVSd2?levq`es<^D#3Tjz;yZA zfm6Mn^zK9C5Ji!XO-Qe#y+%oC|8adoe1G@rpf!@8@prN|6$8OUdIZ7WL}mog@@Ek4 zc=91$uf&rL`Y`M8h5`PFar48ce$d=SuiC z?*l9IwQimjGTB}m=Bns{+ShjI*Ss>0qN`&ezFp>VbCZ6e036+2Nyw!G^0*=y2;-dP zP6>{*cc1Tdve)+FCnyl0MQ4|?od8{e!=2gLZ)U!oCGYpU4vsg!|H0q29OqA? zd^kK*9^zX*KmiVr%!vqoX-1cBP9}0XU@2F zg&59{W2(E$Bv!miWM1m_Qi90Jxmo*g3{ZK9Z}}GrVWUPANaV&&J_T2X^iHp6I88bSoXE+qf3MKHOasIDk)V^iR5$izWOF5WB|!HIl`Oehu@_>c zgHou3XUV0|;V(kXWGPtAmqL3+Uj2qVTJHHPmWe#B&UL%alb1C*0HTcvI@Vb>rYb~N z-CiUjgHpF_B09)K%;zhXz}VHTS;q4hY8(C3mT?|PmBdNTGlu!Z;&S-0UQQ7`sEbT; zV3pMUxspX8VB@{@k&4c)+BMJ?f8XHya;{hJ6_Tt&5QWG=O##tt@puPy@7d$$?Bwz3@y|bC-^oI3?&e!ZeT{*vc>mS(TrR~FyKO$b zxVV_!1exAm=IPPV(S5d|Xi}_{`F#ZVmiJKj)T5r~5lVN+kPQBz|9XC-jmUtE$RRm= zkG8+>)I~AKVxx&EI8mU28PF$$PV;?jwv1 bd0T8V`^Mn=-!`4_z#M4lqwq0#pZM;7hft4P diff --git a/photo_log/migrations/__pycache__/0002_auto_20220105_1757.cpython-39.pyc b/photo_log/migrations/__pycache__/0002_auto_20220105_1757.cpython-39.pyc deleted file mode 100755 index beff0419deea0c6c4cfab52c888967626898d978..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmY*X&2H2%5VqrFo20uHCyF>Dq`frRm8xD)RW3yw=mk!>SZ>CoUYt1ON2~S<*L@Hk zh>OLI6R%LIg0Z(t+p#>Fna}#>&tf)93CgQqKSdc3^4mF&B}C^8Z~qz<5TKgWw4ilR z1eClZ5CHp5fJwSy-&nyQ{7B}}AAC#ZflX^wbz)Ga>FuO8Aa!3l=&{7;oZ;=yQAtuz zAVmPQq6L%TDsl@?5w1y_w4l+ZTvfSr|{XLvtBn9Y z7(`Ov9&bb~5q3KItfU5eU^-Q)M(8d3&EY-y(=f8rZXYLbF;8sFJrCzL$->OpqrE^Ehp;Jxd|2W)CudB2Juq&q~|tJ~A;%G5He zMOS9)^*Z}Ms_bER84hj9#fURp=F4Ti$dCEr)&0>Lz}=#G?h7mOJB4v)PoN-ZLJr`XX7{9_D@|uz3cKB`v(5T+nQKz_&rgE{TD*@*M zj&Vl#DrLxnIw-LqZNx*4#i$*(ahtTMc-9_q!lP}#N3h2{-V&Z{F`y@W47F36d^pqu z0?BHr21TW+?MYD-bIR7>&WriHI4#cT>G|2YjXcK2s?u~2H^coLh-3kfXE#)ez8;pJ zt}kVubpJ$Sj53G{s(W_(ZT=# diff --git a/photo_log/migrations/__pycache__/0004_alter_photo_group.cpython-39.pyc b/photo_log/migrations/__pycache__/0004_alter_photo_group.cpython-39.pyc deleted file mode 100644 index fb65cae9fb81ffb6a26fe3007983014d7e5c448b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcmY*X!EV$r5Oo|Uo1`u50gwt@Ipnfg34}PHs+HK~0QA!3l8fbCPt#44cyY2?$`!8t z5Ppb*uZRP`fP~7}X}86ZCo|*m%zHBydwU7N_3YOV@rn}i(;9adL*o#4`x1pD(yK`A zRFpse$L!K$iufp`jUMkl7UwazWVt<(i4&fzws_fsY&W(p+&b;O>4qhNvPW6 zg+05wVl)nMw+ASI1FR91VHrbG?%;p7+>?O}FPR)%`WSmp zMp!vE@rRp|SU+B!sZQ}q75V;nJbuna)q&={S1mN};B%J;&Ne}z)p|Ai@?d*u!NN5&IXf+OpnB>R;p4u$hcaEvjuq>K)aG?Y1cvL`#FdU?wn8RyA zS&F7mhRV5#988>o**Tfa_?yY}=;QmDNz@9ir}LfY$C%BDKa=cC)sWRfFS5;Mlg-8A z9C2mazGSy!&9JR6{%fl%KU!UA`;sEu?a(SdyvMYC*MkelIj^x}C?n&-% uoumHIjBW_%hnOoLZjoG{yH>cAw={a~3C5e~b>Hy=+rlfgc5Z$%cj^iY4(k}`~oH*bENriw@g<4t_RiX$9PPtf{%*L_1w!_+?gex4l z+>k z7@KFe*E%`}xQicn2r{HV@J%$LLmRU?V1X^%qyY?n4!F=*vWW#AVjeWXUsCj1=rx6( zw30ToE2M)+r;1ryTF6*Oe+~UE?%vWyWJ9bc-K3XnB%8Oanzgy4RcsfwmJGIG$K;4y zxU;lS*A{GJmAkrmc2gae+MG@EG7n`Q>7Bj3y{93UrBGpwMk=4rwD;CfUL(Vb;r)rW zPLBho+kB33Ve!~BzbnOdf02-D@v})u#ho`5Z@Y!OB?aP zR+yL69G1N16ei=uH*t-*>LN|}5 zT&>Jw>_KgMrtC6Kh3c9Rr_6ybFfz}j;91RSpJt_q#46Z@glAE%8{<4HRXoz(EHBDP zp^p0|g@33NU(}I)J`=0){!Y|md|Vw@`-5qoiUHo^cyMuXF&OdjIhHf{HzI@o-^Boj zLYYs{!(H4nhHYIlhf&MgqHA=6c5y$svi`8^iWfB0LuBa(wd(##bpJ+k re`1T#;Z@wY2JDmF2(m+Ugs&w_jh*3)Aev#lxc>?b?3<@&Pwp diff --git a/photo_log/migrations/__pycache__/0006_alter_photolog_slides.cpython-39.pyc b/photo_log/migrations/__pycache__/0006_alter_photolog_slides.cpython-39.pyc deleted file mode 100644 index 08275fd62fafeb4e5f8932d23b68f9119ec1591d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 772 zcmYjPv2NQi5T!&)mSnrglC3S!QHy01Xs4n`mKGVB4$Y*6pnZ%Yg_2xShLNuA>JRBJ zaSG5Wzfhn^kF=ebf{u6M_B$QS{jX4Mr?Mj2B|-JGBGrwt9m8nu5Y`X%YrFN*B|x)lu{^m;Q6x)?49(IGg%*M~FNzdOa!DD1yS7UQKSCd% zuf(Z9r@TUeB0W-e?4cBRo71={N|r zGH0j5;JLu5KA{2ox5DFY=@veaI^Z7nA*`c1u9G@F*^TNkCp_4>XbBH_w8Ir9^{9Tv zW1gUw?tHBBoX3c1q?7jtEC?)F-*$aRMOPMQ^Z9&1ndm`M8^s`1qT-;6_z=+H5c!z7 znzS1s9(+Wb5uGlX0(w({;5t|e*51hoPc%{07r4%dOwf~tqmDS-u#M>D$XxYN93u#A zSp!(p*ud7wraGoJOsP&O#k7q8+>a^!ykWwm8jr&oS`O{10wuARj!rKPi?JE|SPnze)XOW}&ul}$8Y`vA{ImS5E)NFk3 zkp#r`@LT*PkM=Z+_4z<`wr4s!5Sc;**wsZ1K diff --git a/photo_log/migrations/__pycache__/0008_auto_20220118_1847.cpython-39.pyc b/photo_log/migrations/__pycache__/0008_auto_20220118_1847.cpython-39.pyc deleted file mode 100644 index dace80e13edc8f3e866660935f27013a988050d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcmYjP&5qMB5VrHvCh2yy;s9dbAeW}CkhVxGv|JW(pcgphV!0iYChNq(NmOx$Yo7!0 zO1^SHyuwN=7$=h4iB9hT+Iv(5TKHjG^M4J zI@J1(bW`sg0T;aQ1Ux|t|C^io;Cv*p{|948?3k#`GtJvvRgD>y3WRLdTg#n}0G%6L z%^Hm$DFu=`Kr@=U!YeQ%xMEa{!NXgEVpN3SA6yt6j_la7JrhB2pq9y;bOIqNiA?z6 zC;|0^^-i^lNtKz)`FwuGxNL=HJ&GV}WDcS+eh--GR;#)e!19u3;#2GzeyI;LBE~ShlLGf= zjD6|2v?;6yq81g1YMYBj<2w-(y|tQeZF24QzmI=JR~>BTr6Zf=9pnDZf)femL;>a0DB)et`}MP)%x@)7r~D z>aeF-&fgPYz`qjUidOy?miyp+B#HkE-;l(!aa|Uj97@ylHmD6K-Cyin?C}W^Y|#2M zbc*B@NbUhGXwDR`Fe5M(R5ReH5>`PKfq%mwxM9eMVTO94jXvB7p=#9b&0vH!g+0x( zY%S!7aFwlA*>brS%k|kS8%`WYVJ%#KN|^PxS~gdfH>1`z8e457h{0eao+=lOtQCfx z_b*GO;UalrLoxjq!p1@%Z`2C!PlfnAO6|A~fofF)s@avQ?>y|%hVKB*U5<`97@e0| z9kK85^Fj^cu0nwYidGJL8=F@B8|OFDog#B`zc=aL)GDoIw@VL)L%Nl_D-=xc=a4?^ zA;pQj{xA2Uz3$w$XK4K#UC6v!?sMwl_v{b9ouWx#BdBCkm<4R7CZ^K!`Mt>ExZuup aFg{ymz{D8nVAEhOoB) diff --git a/photo_log/migrations/__pycache__/0010_photo_bbox_coords.cpython-39.pyc b/photo_log/migrations/__pycache__/0010_photo_bbox_coords.cpython-39.pyc deleted file mode 100644 index 27ff04d44d3930a1e22939e4d7fe1061710505c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 777 zcmYjOv69m;5S1+{v7LlDD!QXi6B{~a80M}3hJtHIzpoz&IRs%g#ZM+nxr0{e(g6j zr437&N8S^lz`he;l2-g1O*wd<$dVs0hg>av6E)>lXG5vl-b@+=vhE9ece*T(3*7x0 zLAqB`AH1!XQpqX~K2SNSrd3ddRdiy_syQ&=FxmSsg#eK|KZIz{VYa7OVF3*J%uV?5 zfd`TbyK6NlQLAnGG)aW=%nEvRyqG*6!;1fSM88 zV4n3-Y)V;!VSV{k9;|Rnu4i}{p4VA>qXV>cXkl(IDavA{5N*~-EN79s63Zth5bn1S zCK3X}cC|!%F2v_uR@+ePf$U@pvMoy4YsQi;zY?+cc-mDQ{4R-LO}g{#+m2i_wp~hcel%lIUl=N9h+D^^spLR l(9bZ}gvTJrod~WMSKyKKXg#;l!Rt}ZH@4;8vIx90`VVB!*Uta| diff --git a/photo_log/migrations/__pycache__/0011_alter_photo_ocr_text.cpython-39.pyc b/photo_log/migrations/__pycache__/0011_alter_photo_ocr_text.cpython-39.pyc deleted file mode 100644 index 902c519612050fb6692171f3200185d82055b280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmYjO&2HN;43;c8wT*V@Y3mad$fZv2#n7U_HegsU+sPL}Hd!aBY-O^8WasUgH`ojG zP5KPF?o@0~Fra8Dr++j^=;KH5BWb<2moc)>|NiRVoUuOvyf#VTl)O8n01UWc4KH{T z6%l728AKp{F%Zb-;-@GC$ggZ1-%>3bM?Pz2wbT8~ww)g}7SME6pk7--;FP?ZP(W62 zU_}JH=7m5xkAnb?<~txECLe7C>}&+F2_z(y`t-|_1_`E%sqL*Yw)Sr)ljDin;VT@NsE$dqp$rwKCY&{nX2LX$(=>FuQ7XgOm#~zMP?f z3(`;2kXOoQN>Sa?AiZ~$`o7dA)CL5&z!tErX4tui^n7+^dUPK`7bij@J)i0=_L*Ja z$bK>P!2N>a}MOoOxxE1b@9o`cKi2Xoh~f7FCG9G C^rox; diff --git a/photo_log/migrations/__pycache__/0012_photo_rotate.cpython-39.pyc b/photo_log/migrations/__pycache__/0012_photo_rotate.cpython-39.pyc deleted file mode 100644 index 285a97c3982dbeee4555425a511f6e0243f247f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmYjO%}(1u5Z*sKjs+4ID)j}Be2Jmws!fFir*dgezN|K$X-HUm!`e~G8II&Zc%{8^ z;uR`Ybk>2wtme~xGvk^0)@FY{XJlVbuV?q1vByZ>n<6qL?~Vw70k^E-6>mf(I6G$` zK;AKs$d~d~Rua??RwPeU%L)eBU2TQ?6MkB?7Iw6Q&Uy^Ffq>mGmi zAsKi`z3WYnKk2(AZDfEeYysPPft?p5D`ejQ&SDQQBhAmOGyM<~0^ZOUOR&M1P4ox~T0y{sXW1n%4jT diff --git a/photo_log/migrations/__pycache__/0013_photo_intersections.cpython-39.pyc b/photo_log/migrations/__pycache__/0013_photo_intersections.cpython-39.pyc deleted file mode 100644 index c9742d338c79ea6b43ae78ebbd3ebb3214cc73a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 zcmY*XJ#X7E5T!)YmK3{4rf%tM6tL2CEsA7mkfB+crCJC|$0$AP_Vp3-BE_VM{aG zvWx}ff&c~fg8);s=HF??A^1WT{1JP|)grV>Ta{W4Ro@vqX?swODO_%UIUHxW%{3b3 zPsu_E${?eP)f_^gYEn<@sE+Go&pW7Rz<|SK8^RPKwA{xG;w^_{OL4*+7~(mw@#kk8 z2r6FP_Cqh4zO+XtC+|+h80&tJgR^*nGoOBvT>y@0<}^dsII7#(GG--&H+Ao028QXSN3*V^xdGV+(xV345d~mzdyv- zLT52Hfb)4JA{$`(=vUz z>J(Ldzf<);8JDYj?S8B&ZgYqxqTv(cEC}&A{llJob}_NXBah{d#`2lPawMT&W3P>O fMUZQP7W$v~eh+;E?_W#e&!v diff --git a/photo_log/migrations/__pycache__/__init__.cpython-39.pyc b/photo_log/migrations/__pycache__/__init__.cpython-39.pyc deleted file mode 100755 index ae863b5f1da3cb77034c5cf715d8fc0a4f5867e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmYe~<>g`kg3gOq6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!H%enx(7s(x-_ zQL=t{dAWW;Mt(_td`^D4er{%ZQDRAEeqOPDe0*kJW=VX!UP0w84x8Nkl+v73JCH%2 HftUdR;c_4Q diff --git a/photo_log/models.py b/photo_log/models.py index 26319a2..bb06e04 100755 --- a/photo_log/models.py +++ b/photo_log/models.py @@ -2,12 +2,22 @@ from django.contrib.postgres.fields import ArrayField from django.db import models from django.dispatch import receiver +from colorfield.fields import ColorField + from datetime import date import os import uuid +class PhotoTag(models.Model): + name = models.CharField(unique=True, null=False, blank=False, max_length=100) + color = ColorField(default='#FFE5B4') + + def __str__(self): + return self.name + + class PhotoGroup(models.Model): name = models.CharField(unique=True, null=False, max_length=200) date = models.DateField(null=True) @@ -63,6 +73,13 @@ class Photo(models.Model): default=get_default_photogroup ) ocr_text = models.CharField(max_length=200, null=True, blank=True) + tag = models.ForeignKey( + PhotoTag, + null=True, + blank=False, + on_delete=models.SET_NULL, + default=None, + ) def __str__(self): return "Photo #" + str(self.id) diff --git a/req.txt b/req.txt deleted file mode 100644 index 15c513e..0000000 --- a/req.txt +++ /dev/null @@ -1,13 +0,0 @@ -imageio==2.13.5 -imutils==0.5.4 -networkx==2.6.3 -numpy==1.22.0 -opencv-python==4.5.5.62 -packaging==21.3 -Pillow==9.0.0 -pyparsing==3.0.6 -pytesseract==0.3.8 -PyWavelets==1.2.0 -scikit-image==0.19.1 -scipy==1.7.3 -tifffile==2021.11.2 diff --git a/requirements.txt b/requirements.txt index d0a0935..c0c9bb4 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,19 +1,64 @@ asgiref==3.4.1 +attrs==21.4.0 +autobahn==22.4.2 +Automat==20.2.0 beautifulsoup4==4.10.0 certifi==2021.10.8 +cffi==1.15.0 +channels==3.0.4 charset-normalizer==2.0.7 +constantly==15.1.0 +coreapi==2.3.3 +coreschema==0.0.4 +cryptography==37.0.2 +daphne==3.0.2 Django==3.2.8 +django-cors-headers==3.12.0 +django-filter==21.1 +django-tex==1.1.10 djangorestframework==3.13.1 +drf-yasg==1.20.0 gunicorn==20.1.0 +hyperlink==21.0.0 idna==3.3 +imageio==2.13.5 +imutils==0.5.4 +incremental==21.3.0 +inflection==0.5.1 +itypes==1.2.0 +Jinja2==3.1.2 lxml==4.6.3 +Markdown==3.3.7 +MarkupSafe==2.1.1 +networkx==2.6.3 +numpy==1.22.0 +opencv-python==4.5.5.62 +packaging==21.3 Pillow==9.0.0 psycopg2==2.9.1 +pyasn1==0.4.8 +pyasn1-modules==0.2.8 +pycparser==2.21 +pyOpenSSL==22.0.0 +pyparsing==3.0.6 +pytesseract==0.3.8 python-dateutil==2.8.2 pytz==2021.3 +PyWavelets==1.2.0 requests==2.26.0 +ruamel.yaml==0.17.21 +ruamel.yaml.clib==0.2.6 +scikit-image==0.19.1 +scipy==1.7.3 +service-identity==21.1.0 six==1.16.0 soupsieve==2.2.1 sqlparse==0.4.2 +tifffile==2021.11.2 tqdm==4.62.3 +Twisted==22.4.0 +txaio==22.2.1 +typing_extensions==4.2.0 +uritemplate==4.1.1 urllib3==1.26.7 +zope.interface==5.4.0 diff --git a/templates/photolog.tex b/templates/photolog.tex old mode 100644 new mode 100755