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
|
2021-04-15 00:10:19 +03:00
|
|
|
import shutil
|
|
|
|
import os
|
2021-04-14 23:23:56 +03:00
|
|
|
|
|
|
|
class PicSorter:
|
|
|
|
def __init__(self):
|
|
|
|
self.dir_tmp = Path('R:/')
|
2021-04-15 00:10:19 +03:00
|
|
|
self.dir_input = Path('R:/input')
|
|
|
|
self.dir_processed = Path('R:/processed')
|
2021-04-14 23:23:56 +03:00
|
|
|
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)
|
2021-04-15 00:10:19 +03:00
|
|
|
self.dir_processed.mkdir(exist_ok=True)
|
2021-04-14 23:23:56 +03:00
|
|
|
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)
|
2021-04-15 00:10:19 +03:00
|
|
|
shutil.move(os.fspath(filename), os.fspath(self.dir_processed))
|
2021-04-14 23:23:56 +03:00
|
|
|
time.sleep(5)
|
|
|
|
except Exception as ex:
|
|
|
|
raise ex
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
PicSorter().process_folder()
|