diff --git a/shared/jekyll_import.py b/shared/jekyll_import.py index c348b692e905fc4fc883ba64e0b04a13b835f1ff..5af217027b9c0a47efadcad2e43897a241f2b01c 100644 --- a/shared/jekyll_import.py +++ b/shared/jekyll_import.py @@ -151,38 +151,59 @@ def get_or_create_image( except FileNotFoundError: pass - # ani cesta "assets/img/posts" nefunguje, jdeme zkusit assets server a.pirati.cz + # na disku jsme nenašli, zkusíme stáhnout z webu fallback_name = ( "".join(random.choice(string.ascii_lowercase) for _ in range(10)) + ".jpg" ) # někdy je název obrzau spojený s poznámkou apod., připravíme si fallback name img_name = file_path.split("/")[-1] or fallback_name - img_assets_folder = repo_name.split(".")[0] # např. "praha" z praha.pirati.cz - img_url = "https://a.pirati.cz/resize/4000x-/{}/img/{}".format( - img_assets_folder, file_path.split("#")[0] # cistime nazev od poznamek apod - ) img_path = os.path.join(path, img_name) - try: - urllib.request.urlretrieve(img_url, img_path) - except (HTTPError, UnicodeEncodeError, InvalidURL, IsADirectoryError): + + # zkusíme, jestli obrázek není hardcoded (posty ve zlinském kraji) + if file_path.startswith("https://"): try: - # druhý pokus s "posts" přidáno do URL (obvykle je ve file_path) - img_url = "https://a.pirati.cz/resize/4000x-/{}/img/posts/{}".format( - img_assets_folder, img_name.split()[0] - ) - urllib.request.urlretrieve(img_url, img_path) + urllib.request.urlretrieve(file_path, img_path) except (HTTPError, UnicodeEncodeError, InvalidURL, IsADirectoryError): msg = "Nedohledán obrázek při importu článků - ani na disku, ani na URL" - log_message = "{}: cesta {}, URL {}\n".format(msg, file_path, img_url) + log_message = "{}: URL {}\n".format(msg, file_path) logger.warning( log_message, extra={ "file_path": file_path, "img_name": img_name, - "img_url": img_url, + "img_url": file_path, }, ) return None, log_message + # opačném případě jdeme zkusit assets server a.pirati.cz + else: + img_assets_folder = repo_name.split(".")[0] # např. "praha" z praha.pirati.cz + img_url = "https://a.pirati.cz/resize/4000x-/{}/img/{}".format( + img_assets_folder, file_path.split("#")[0] # cistime nazev od poznamek apod + ) + + try: + urllib.request.urlretrieve(img_url, img_path) + except (HTTPError, UnicodeEncodeError, InvalidURL, IsADirectoryError): + try: + # druhý pokus s "posts" přidáno do URL (obvykle je ve file_path) + img_url = "https://a.pirati.cz/resize/4000x-/{}/img/posts/{}".format( + img_assets_folder, img_name.split()[0] + ) + urllib.request.urlretrieve(img_url, img_path) + except (HTTPError, UnicodeEncodeError, InvalidURL, IsADirectoryError): + msg = "Nedohledán obrázek při importu článků - ani na disku, ani na URL" + log_message = "{}: cesta {}, URL {}\n".format(msg, file_path, img_url) + logger.warning( + log_message, + extra={ + "file_path": file_path, + "img_name": img_name, + "img_url": img_url, + }, + ) + return None, log_message + file = ImageFile(open(img_path, "rb"), name=img_path) image = Image(title=file_path, file=file, collection=collection) @@ -498,10 +519,18 @@ class JekyllArticleImporter: meta_dict.update({key: value}) return meta_dict - @staticmethod - def handle_tags(article, meta): + def handle_tags(self, article, meta): for tag_name in meta.get("tags", []): - article.tags.add(tag_name) + try: + article.tags.add(tag_name) + except ValueError: + try: + article.tags.add(str(tag_name)) + except Exception as E: + msg = "Nelze importovat tag" + logger.warning(msg, extra={"tag": tag_name}) + self.page_log += "{} - {}\n".format(msg, tag_name) + return None def import_post(self, file_path):