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()
|