1
0
mirror of https://gist.github.com/6ba37e4d4084e858f917e271550ce5f6.git synced 2024-09-20 00:34:20 +03:00
picsorter/picsorter.py

69 lines
2.1 KiB
Python
Raw Normal View History

2021-04-14 23:23:56 +03:00
from iqdb import Iqdb
from library import Library
from metadata import Metadata
from database import Database
from datetime import datetime
from pathlib import Path
import re
import logging
import time
class PicSorter:
def __init__(self):
self.dir_tmp = Path('R:/')
self.dir_input = Path('./input')
self.dir_logs = Path('./logs')
self.dir_library = Path('./library')
self.setup_folders()
self.setup_logging()
def setup_folders(self):
self.dir_tmp.mkdir(exist_ok=True)
self.dir_logs.mkdir(exist_ok=True)
self.dir_library.mkdir(exist_ok=True)
def setup_logging(self):
logfile = Path(self.dir_logs, datetime.now().strftime('%Y-%m-%d.log'))
logging.basicConfig(
filename=logfile,
level=logging.INFO,
format='%(asctime)s %(levelname)s %(module)s: %(message)s',
datefmt='%H:%M:%S',
)
def process_folder(self):
iqdb = Iqdb()
library = Library(self.dir_library)
metadata = Metadata(self.dir_tmp)
db = Database()
for filename in self.dir_input.rglob('*.jpg'):
print("Process ", filename)
try:
url = iqdb.search(filename)
if url is None:
logging.warn("%s not found", filename)
library.move_to_orphan(Path(filename))
continue
m = re.search(r".*posts\/(\d{3,})", url)
if not m:
continue
post_id = int(m.group(1))
if db.is_exists(post_id):
logging.info("Skipping exists post %d", post_id)
continue
meta_result = metadata.process(url)
if meta_result is None:
continue
image_path, tags = meta_result
library.move(image_path, tags)
db.add(post_id, tags.tags_string)
time.sleep(5)
except Exception as ex:
raise ex
if __name__ == '__main__':
PicSorter().process_folder()