[Sync] Album post update
This commit is contained in:
1 parent
0698343592
commit
2f2ce72839
2 files changed
+37
-101
No files matched your search
@@ -131,6 +131,7 @@ collection_pages = 'pages'
|
|||||||
|
|
||||||
hash_salt_articles = '3'
|
hash_salt_articles = '3'
|
||||||
hash_salt_pages = '1'
|
hash_salt_pages = '1'
|
||||||
|
hash_salt_albums = '0'
|
||||||
|
|
||||||
provider_name = value('provider')['name'] # env('SYNC_PROVIDER', 'fs')
|
provider_name = value('provider')['name'] # env('SYNC_PROVIDER', 'fs')
|
||||||
provider_root = value('provider')['root'] # env('SYNC_PROVIDER', 'fs')
|
provider_root = value('provider')['root'] # env('SYNC_PROVIDER', 'fs')
|
||||||
|
|||||||
+36
-101
@@ -8,7 +8,8 @@ import lxml.html
|
|||||||
import kazimir
|
import kazimir
|
||||||
import settings
|
import settings
|
||||||
from db import collection
|
from db import collection
|
||||||
from sync import create_date_and_title_from_folder_name, images_from_html, create_post_from_image_list, create_date
|
from sync import create_date_and_title_from_folder_name, images_from_html, create_post_from_image_list, create_date, \
|
||||||
|
create_post
|
||||||
from sync.data import Provider, list_images
|
from sync.data import Provider, list_images
|
||||||
from sync.models import Model
|
from sync.models import Model
|
||||||
from sync.models.Image import Image
|
from sync.models.Image import Image
|
||||||
@@ -44,16 +45,11 @@ class Album(Model):
|
|||||||
os.path.basename(path)
|
os.path.basename(path)
|
||||||
)
|
)
|
||||||
|
|
||||||
images = list_images(provider, path)
|
|
||||||
images = [os.path.relpath(i, path) for i in images]
|
|
||||||
|
|
||||||
# CREATE BASIC_MANIFEST BASED ON FOLDER NAME AND IMAGE CONTENT
|
# CREATE BASIC_MANIFEST BASED ON FOLDER NAME AND IMAGE CONTENT
|
||||||
document = {
|
document = {
|
||||||
'folder': path,
|
'folder': path,
|
||||||
'date': date,
|
'date': date,
|
||||||
'title': title,
|
'title': title,
|
||||||
'post': create_post_from_image_list(images),
|
|
||||||
'images': images
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# TRY TO FILL UP BASIC_MANIFEST WITH MD_MANIFEST
|
# TRY TO FILL UP BASIC_MANIFEST WITH MD_MANIFEST
|
||||||
@@ -73,19 +69,27 @@ class Album(Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, provider, file, params=None):
|
def __init__(self, provider, file, params=None):
|
||||||
# self.__id_template: str = '{category}-{file}'
|
self.__hash_salt = settings.hash_salt_albums
|
||||||
# self.__url_template: str = settings.document_url_template
|
|
||||||
# self.__url_preview_template: str = settings.document_url_preview_template
|
|
||||||
|
|
||||||
self.sizes = settings.image_sizes
|
|
||||||
self.version = '1'
|
self.version = '1'
|
||||||
|
|
||||||
self.origin = settings.origin
|
self.origin = settings.origin
|
||||||
self.post = None
|
self.post = None
|
||||||
self.images = None
|
self.images = []
|
||||||
|
self.documents = []
|
||||||
|
self.preview = None
|
||||||
super().__init__(provider, store, file, params=params)
|
super().__init__(provider, store, file, params=params)
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
|
if self.has_param('content'):
|
||||||
|
images, documents = kazimir.extract_files(self.get_param('content'))
|
||||||
|
else:
|
||||||
|
images = list_images(self.provider, self.file)
|
||||||
|
images = [os.path.relpath(i, self.file) for i in images]
|
||||||
|
documents = []
|
||||||
|
self.params['images'] = images
|
||||||
|
self.params['documents'] = documents
|
||||||
|
|
||||||
self.__set_id()
|
self.__set_id()
|
||||||
self.__set_hash()
|
self.__set_hash()
|
||||||
|
|
||||||
@@ -98,55 +102,24 @@ class Album(Model):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
async def build(self, **kwargs):
|
async def build(self, **kwargs):
|
||||||
params = self.params
|
sizes = kwargs['sizes']
|
||||||
image_id = id_from_file
|
folder = self.get_param('folder')
|
||||||
images = []
|
|
||||||
|
|
||||||
create_album_id = lambda date, title: '{date}-{title}'.format(
|
if self.has_param('content'):
|
||||||
date=date.strftime('%Y'),
|
markdown_post = self.get_param('content')
|
||||||
title=url_encode_text(title)
|
else:
|
||||||
)
|
markdown_post = create_post_from_image_list(self.get_param('images'))
|
||||||
|
|
||||||
# params['id'] = params['id'] if 'id' in params else create_album_id(params['date'], params['title'])
|
post, images, documents = await create_post(self.provider, folder, markdown_post, sizes)
|
||||||
|
self.post = post
|
||||||
# if 'album' in params:
|
self.images = images
|
||||||
# params['album'] = self.create_products(params, image_path)
|
self.documents = documents
|
||||||
|
|
||||||
async def process_post_image(src):
|
|
||||||
url = url_creator(
|
|
||||||
self.id,
|
|
||||||
id_from_file(src)
|
|
||||||
)
|
|
||||||
|
|
||||||
image_path = os.path.join(params['folder'], src)
|
|
||||||
image = await Image.new(self.provider, image_path, self.sizes, url)
|
|
||||||
if image:
|
|
||||||
images.append(image)
|
|
||||||
return image.get_size('big')['url']
|
|
||||||
return None
|
|
||||||
|
|
||||||
post_html = await create_post(params['post'], process_post_image)
|
|
||||||
|
|
||||||
if self.has_param('preview'):
|
if self.has_param('preview'):
|
||||||
preview = self.get_param('preview')
|
preview = self.get_param('preview')
|
||||||
preview = self._get_relpath(preview)
|
preview = self._get_relpath(preview)
|
||||||
preview = await Image.new(self.provider, preview, sizes=self.sizes)
|
preview = await Image.new(self.provider, preview, sizes=sizes)
|
||||||
else:
|
self.preview = preview
|
||||||
# preview = 'https://art.shlisselburg.org/entrance.jpg'
|
|
||||||
preview = None
|
|
||||||
|
|
||||||
self.post = post_html
|
|
||||||
self.images = images
|
|
||||||
self.preview = preview
|
|
||||||
|
|
||||||
# sizes = kwargs['sizes']
|
|
||||||
# post, images = await create_post(self.provider, self.id, self.params, sizes)
|
|
||||||
# self.post = post
|
|
||||||
# self.images = images
|
|
||||||
#
|
|
||||||
# post, images = await create_post(self.provider, self.id, self.params, sizes)
|
|
||||||
# self.post = kazimir.html_from_tree(post)
|
|
||||||
# self.images = images
|
|
||||||
|
|
||||||
def create_products(self, doc, image_file_fn):
|
def create_products(self, doc, image_file_fn):
|
||||||
pass
|
pass
|
||||||
@@ -174,7 +147,8 @@ class Album(Model):
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
**self.params,
|
**self.params,
|
||||||
'images': [i.ref for i in self.images],
|
'images': [x.ref for x in self.images],
|
||||||
|
'documents': [x.ref for x in self.documents],
|
||||||
'preview': preview,
|
'preview': preview,
|
||||||
'post': self.post,
|
'post': self.post,
|
||||||
'id': self.id,
|
'id': self.id,
|
||||||
@@ -204,7 +178,7 @@ class Album(Model):
|
|||||||
|
|
||||||
self.hash = hash_str(files)
|
self.hash = hash_str(files)
|
||||||
self.hash = hash_str(
|
self.hash = hash_str(
|
||||||
combine([hash_str(self.params)] + files)
|
combine([self.__hash_salt] + [hash_str(self.params)] + files)
|
||||||
)
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
@@ -213,51 +187,12 @@ class Album(Model):
|
|||||||
|
|
||||||
def get_manifest(provider, filepath):
|
def get_manifest(provider, filepath):
|
||||||
data = provider.read(filepath).read().decode('utf-8')
|
data = provider.read(filepath).read().decode('utf-8')
|
||||||
y, m = read_yaml_md(data)
|
manifest = parse_yaml_front_matter(data)
|
||||||
|
|
||||||
data = {**y} if y else {}
|
if 'date' in manifest:
|
||||||
_ = lambda key, d=None: data[key] if key in data else d
|
manifest['date'] = create_date(str(manifest['date']), settings.date_formats_direct)
|
||||||
|
|
||||||
date = create_date(str(_('date')), settings.date_formats_direct)
|
if 'id' in manifest:
|
||||||
if date:
|
manifest['id'] = str(manifest['id'])
|
||||||
data['date'] = date
|
|
||||||
|
|
||||||
album_id = _('id')
|
return manifest
|
||||||
if album_id:
|
|
||||||
data['id'] = str(album_id)
|
|
||||||
|
|
||||||
post = {'post': m} if m else {}
|
|
||||||
return {**data, **post}
|
|
||||||
|
|
||||||
|
|
||||||
def create_url(a, i, s, e):
|
|
||||||
return 'https://static.shlisselburg.org/art/images/product-{album}-{id}-{size}{ext}'.format(
|
|
||||||
album=a,
|
|
||||||
id=i,
|
|
||||||
size=s,
|
|
||||||
ext=e
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def url_creator(aid, pid):
|
|
||||||
return lambda file, size, ext: create_url(aid, pid, size, ext.lower())
|
|
||||||
|
|
||||||
|
|
||||||
def id_from_file(i):
|
|
||||||
return url_encode_text(
|
|
||||||
os.path.splitext(i)[0]
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
async def create_post(md, image_path_fn):
|
|
||||||
html = lxml.html.fromstring(md)
|
|
||||||
|
|
||||||
for img in html.cssselect('img'):
|
|
||||||
src = img.get('src')
|
|
||||||
path = await image_path_fn(src)
|
|
||||||
|
|
||||||
if path:
|
|
||||||
img.set('src', path)
|
|
||||||
img.set('class', settings.album_html_img_class)
|
|
||||||
img.set('data-file', src)
|
|
||||||
return etree.tounicode(html)
|
|
||||||
Reference in new issue
Block a user