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-15 12:30:26 +03:00
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
2021-04-14 23:23:56 +03:00
from iqdb import Iqdb
from library import Library
from metadata import Metadata
class PicSorter:
def __init__(self):
2021-04-15 12:30:26 +03:00
self.config = Config.load('config.yml')
2021-04-14 23:23:56 +03:00
self.setup_logging()
def setup_logging(self):
2021-04-15 12:30:26 +03:00
filename = datetime.now().strftime('%Y-%m-%d.log')
logfile = Path(self.config.dir_logs, filename)
2021-04-14 23:23:56 +03:00
logging.basicConfig(
2021-04-15 12:30:26 +03:00
filename=os.fspath(logfile),
2021-04-14 23:23:56 +03:00
level=logging.INFO,
format='%(asctime)s %(levelname)s %(module)s: %(message)s',
datefmt='%H:%M:%S',
)
def process_folder(self):
2021-04-15 12:30:26 +03:00
config = self.config
library = Library(config.dir_library)
metadata = Metadata(config.dir_tmp)
2021-04-14 23:23:56 +03:00
db = Database()
2021-04-15 12:30:26 +03:00
files = {p for p in config.dir_input.iterdir()
if p.suffix in [".jpg", ".png"]}
2021-04-15 00:38:10 +03:00
for filename in files:
2021-04-15 12:30:26 +03:00
print("Process", filename)
2021-04-14 23:23:56 +03:00
try:
2021-04-15 12:30:26 +03:00
url = Iqdb.search(filename)
2021-04-14 23:23:56 +03:00
if url is None:
2021-04-15 12:30:26 +03:00
logging.warning("%s not found", filename)
2021-04-14 23:23:56 +03:00
library.move_to_orphan(Path(filename))
continue
2021-04-15 12:30:26 +03:00
m = re.search(r".*posts/(\d{3,})", url)
2021-04-14 23:23:56 +03:00
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 12:30:26 +03:00
shutil.move(os.fspath(filename), os.fspath(config.dir_processed))
2021-04-14 23:23:56 +03:00
time.sleep(5)
except Exception as ex:
raise ex
2021-04-15 12:30:26 +03:00
2021-04-14 23:23:56 +03:00
if __name__ == '__main__':
PicSorter().process_folder()