From 110c0104083bfe47f87528b260bf9b79b9f74cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alo=C3=AFs=20Micard?= Date: Thu, 14 Nov 2024 17:12:55 +0100 Subject: [PATCH] Initial commit --- docker-compose.yml | 18 +++++++++ exif_database/__main__.py | 38 +++++++++++++++++- .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 182 bytes .../__pycache__/__main__.cpython-311.pyc | Bin 0 -> 1580 bytes requirements.txt | 2 +- 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 docker-compose.yml create mode 100644 exif_database/__pycache__/__init__.cpython-311.pyc create mode 100644 exif_database/__pycache__/__main__.cpython-311.pyc diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7119e47 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +services: + mongo: + image: mongo:latest + restart: always + environment: + MONGO_INITDB_ROOT_USERNAME: root + MONGO_INITDB_ROOT_PASSWORD: example + + mongo-express: + image: mongo-express:latest + restart: always + ports: + - "8081:8081" + environment: + ME_CONFIG_MONGODB_ADMINUSERNAME: root + ME_CONFIG_MONGODB_ADMINPASSWORD: example + ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/ + ME_CONFIG_BASICAUTH: false \ No newline at end of file diff --git a/exif_database/__main__.py b/exif_database/__main__.py index 54b08a6..9003267 100644 --- a/exif_database/__main__.py +++ b/exif_database/__main__.py @@ -1,2 +1,38 @@ +import hashlib +import os +import subprocess +import sys + +from pymongo import MongoClient + + +def _execute_exiftool(img_file: str) -> dict: + res = subprocess.run( + ['exiftool', img_file], + capture_output=True, + text=True, + ) + + exif_metadata = {} + + for line in res.stdout.splitlines(): + parts = line.split(':', 1) + exif_metadata[parts[0].strip().lower().replace(' ', '_')] = parts[1].strip() + + return exif_metadata + + if __name__ == '__main__': - pass + # Authenticate against MongoDB server + mongo = MongoClient(os.environ['MONGO_URI']) + database = mongo.exif_database + collection = database.pictures + + picture_metadata = _execute_exiftool(sys.argv[1]) + + # Append MongoDB identifier + picture_metadata['_id'] = hashlib.sha256(sys.argv[1].encode('utf-8')).hexdigest() + picture_metadata['path'] = sys.argv[1] + + # Insert into MongoDB + collection.insert_one(picture_metadata) diff --git a/exif_database/__pycache__/__init__.cpython-311.pyc b/exif_database/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d786499a64d09966aca35d5875061e5966eec99 GIT binary patch literal 182 zcmZ3^%ge<81pcCC=^*+sh=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09t%TqtJIJKx) zKe;G1H9Nm3tu#kJpfWilu_!m7C_gJTxujS>wIVZ3HzlzoF)6V)70io=^Wx((^D;}~ pbW>A-IHPtr<(J=#SY^ zDkn1N(1Q;-m=LfJKIr7SwGKY^SW2NiYQ=)ZK)}#bZYu7{r_8Lfs#OSdcK7|vd+(d~ zGy7vG6a;+LKUvJYPyqN#DBe=v3zxGJ00#g8B;~0H;8g9Oxm&cKR5N%Lv40(Rn z`7u{c`x{t8+Fh=F=v;0O2s_Vm7;A(067S5q`z3;J1>zdh%tA)rHuISI2&NTMO!q70 zcF_;sZE*R>?JT`!%k^a>)j)=K7s*ZKn0ud!2zTvDCfJp0QqJwN*lP4`J&zt8tZ*4T zv38Z3(ty`}JQ+cx9&^0YKISg0@x6cN)$s0v7vl24GioxAxi;hf6Vvbw0KQiSaU1;` zbln&Ekv5pKn9xgFlh;8az=wdV<~A*r@*4@6jiik-9|YD*6%#S~I0GM_~e595Y%-lTc6h%KhNGG~;SWv1p!-($l31efzh z8YfgDCc>k+XGo->7ce!DK@A2)JX6aCp_V0jIxW`K>U_$=#F|eNjGvasb|pXma3`HL zNZ}zV<#3u>^8zO+Ft!W}yPDqDbiH7hMO~jO@32uFS8=*RG3UJokSTtS=(F`RCw1^9 zIR0|36Byfn+|uHmXsi<&?fT)6?{C1#KZ4XBbcex5(fYR+;j!1j^YE>9_?8{M?SyZ4 zfvl#a9^HeT@c2RSRq*hOhGd6lobb$^+F4%x^XBg>f2{qsW-o6z%Nu*4eSEm|I(txj zRkS0sPGt5xa;F`+V@Kwk$lQ5ku^m}FvwnGCNA5e3`?j{!(v~iUCR%Xfl4lE;<`qZ8 z&;MMl(Cy@xOwmomVA-JAM2PvbhLz2mTO=d`6l;f1j!%X`WTvTGy+A1%1+41~8YJ_K zh0EL|E<}GaJ}YZ{zOcxAxR@>>%mP_lMP>$Dl#h#;MfwvUF^*5fPjRK)EtF6tkH03L zaaG(R%i*M}NRre6BX#%bfYFxsc0jQ1K3!i(nrtXtz}X3O*?-A2fWv#w+sb51ne2{$ zi9{><>B(4g;_PNKW=9vC=t2vQcYWYS@-TB$JXvo(J~Nu%ohR?LllOl0+sPFtxnjpx zo%rf`e7zlCx8o@%p5ih4DI3N*H)f8iC(_XivGK@;A78*g{hL;BirX9*Yk6-s2H+IW Hz^(cn$xdx& literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt index 2e1fc99..8929353 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -exif==1.6.0 \ No newline at end of file +pymongo==4.10.1 \ No newline at end of file