Files
hudozka/utils/Sync/sync/__init__.py
T

119 lines
2.5 KiB
Python

import re
from datetime import datetime
from markdown import markdown
from db import db
from utils.fn import lmap, key_mapper
def create_date(date_str, date_formats=None):
"""
2016
2016.10
2016.10.10
-> datetime
:param date_str:
:return:
"""
if not date_formats:
date_formats = [
'%Y',
'%Y.%m',
'%Y.%m.%d'
]
for format in date_formats:
try:
return datetime.strptime(date_str, format)
except:
continue
return None
# 2016 На крыльях бабочек
# 2016.10 На крыльях бабочек
# 2016.10.10 На крыльях бабочек
folder_name_pattern = re.compile('([\d.]+)(.*)')
def untouched(documents, store):
return lmap(
lambda i: i[0],
filter(
lambda i: (i[1] is None) or ('hash' not in i[1]) or (i[0]['hash'] != i[1]['hash']),
map(
lambda i: (i, store.read(i)),
documents
)
))
def create_date_and_title_from_folder_name(folder_name, date_formats=None):
m = folder_name_pattern.findall(folder_name)
if not m:
return None, None
date_str, title = m[0]
title = title.strip()
date = create_date(date_str, date_formats)
if not date:
return None, title
return date, title
create_post_from_image_list = lambda images: markdown(
'\n'.join(map(
lambda i: '![]({img})'.format(img=i),
images
))
)
class Sync:
def __init__(self):
super().__init__()
self.collection = None
def read(self, document):
if isinstance(document, list):
return lmap(self.read, document)
q = {'id': document['id']}
try:
return self.collection.find_one(q)
except ValueError:
pass
return None
def update(self, document):
if isinstance(document, list):
return lmap(self.update, document)
q = {'id': document['id']}
try:
self.collection.update_one(q, {'$set': document}, upsert=True)
return self.read(document)
except ValueError:
pass
return None
def compile(self, document):
return document
def query(self, q):
return self.collection.find(q)
def delete(self, q):
return self.collection.find_one_and_delete(q)
def create_id(self, document):
return None
def create_hash(self, document):
return None