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

import logging
import os
import re
import shutil
import time
from datetime import datetime
from pathlib import Path
from config import Config
from database import Database
from iqdb import Iqdb
from library import Library
from metadata import Metadata
class PicSorter:
def __init__(self):
self.config = Config.load('config.yml')
self.setup_logging()
def setup_logging(self):
filename = datetime.now().strftime('%Y-%m-%d.log')
logfile = Path(self.config.dir_logs, filename)
logging.basicConfig(
filename=os.fspath(logfile),
level=logging.INFO,
format='%(asctime)s %(levelname)s %(module)s: %(message)s',
datefmt='%H:%M:%S',
)
def process_folder(self):
config = self.config
library = Library(config.dir_library)
metadata = Metadata(config.dir_tmp)
db = Database()
files = {p for p in config.dir_input.iterdir()
if p.suffix in [".jpg", ".png"]}
for filename in files:
print("Process", filename)
try:
url = Iqdb.search(filename)
if url is None:
logging.warning("%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)
shutil.move(os.fspath(filename), os.fspath(config.dir_processed))
time.sleep(5)
except Exception as ex:
raise ex
if __name__ == '__main__':
PicSorter().process_folder()