__author__ = "Peter Molnar" __copyright__ = "Copyright 2017-2019, Peter Molnar" __license__ = "apache-2.0" __maintainer__ = "Peter Molnar" __email__ = "mail@petermolnar.net" import os import re import argparse import logging from tempfile import gettempdir class nameddict(dict): __getattr__ = dict.get __setattr__ = dict.__setitem__ __delattr__ = dict.__delitem__ base = os.path.abspath(os.path.expanduser("~/Projects/petermolnar.net")) syncserver = "liveserver" pagination = 42 notinfeed = ["note"] flat = ["article", "journal"] displaydate = "YYYY-MM-DD HH:mm" mementostartime = 1560992400 licence = nameddict( { "article": "CC-BY-4.0", "journal": "CC-BY-NC-4.0", "_default": "CC-BY-NC-ND-4.0", } ) author = nameddict( { "@context": "http://schema.org", "@type": "Person", "image": "https://petermolnar.net/favicon.jpg", "email": "mail@petermolnar.net", "url": "https://petermolnar.net/", "name": "Peter Molnar", } ) site = nameddict( { "@context": "http://schema.org", "@type": "WebSite", "headline": "Peter Molnar", "url": "https://petermolnar.net", "name": "petermolnar.net", "image": "https://petermolnar.net/favicon.ico", "license": "https://spdx.org/licenses/%s.html" % (licence["_default"]), "sameAs": ["https://t.me/petermolnarnet"], "author": { "@context": "http://schema.org", "@type": "Person", "image": "https://petermolnar.net/favicon.jpg", "email": "mail@petermolnar.net", "url": "https://petermolnar.net/", "name": "Peter Molnar", "sameAs": [ "https://github.com/petermolnar", "https://petermolnar.net/cv.html", "xmpp:mail@petermolnar.net", "https://wa.me/447592011721", "https://t.me/petermolnar", "https://twitter.com/petermolnar", "https://mastodon.social/@petermolnar" "https://www.flickr.com/people/petermolnareu/", ], "follows": "https://petermolnar.net/following.opml", }, "publisher": { "@context": "http://schema.org", "@type": "Organization", "logo": { "@context": "http://schema.org", "@type": "ImageObject", "url": "https://petermolnar.net/favicon.jpg", }, "url": "https://petermolnar.net/", "name": "petermolnar.net", "email": "webmaster@petermolnar.net", }, "potentialAction": [ { "@context": "http://schema.org", "@type": "SearchAction", "target": "https://petermolnar.net/search.php?q={q}", "query-input": "required name=q", }, { "@context": "http://schema.org", "@type": "FollowAction", "name": "follow", "target": "https://petermolnar.net/follow/", }, { "@context": "http://schema.org", "@type": "DonateAction", "description": "Monzo", "name": "monzo", "recipient": author, "target": "https://monzo.me/petermolnar/", "price": "3", "priceCurrency": "GBP", }, { "@context": "http://schema.org", "@type": "DonateAction", "description": "Paypal", "name": "paypal", "recipient": author, "target": "https://paypal.me/petermolnar/", "price": "3", "priceCurrency": "GBP", }, ], } ) menu = nameddict( { "home": {"url": "%s/" % site["url"], "text": "home"}, "photo": { "url": "%s/category/photo/" % site["url"], "text": "photos", }, "journal": { "url": "%s/category/journal/" % site["url"], "text": "journal", }, "article": { "url": "%s/category/article/" % site["url"], "text": "IT", }, "note": { "url": "%s/category/note/" % site["url"], "text": "notes", }, } ) meta = nameddict( { "webmention": "https://webmention.io/petermolnar.net/webmention", "pingback": "https://webmention.io/petermolnar.net/xmlrpc", "hub": "https://petermolnar.superfeedr.com/", "authorization_endpoint": "https://indieauth.com/auth", "token_endpoint": "https://tokens.indieauth.com/token", "micropub": "https://petermolnar.net/micropub.php", "microsub": "https://aperture.p3k.io/microsub/83", } ) paths = nameddict( { "content": os.path.join(base, "content"), "tmpl": os.path.join(base, "nasg", "templates"), "watermark": os.path.join( base, "nasg", "templates", "watermark.png" ), "build": os.path.join(base, "www"), "remotewww": "/usr/local/www/petermolnar.net", "micropub": os.path.join(base, "content", "note"), "home": os.path.join(base, "content", "home", "index.md"), "category": "category", "feed": "feed", } ) filenames = nameddict( { "rss": "index.xml", "atom": "atom.xml", "json": "index.json", "md": "index.md", "txt": "index.md", "html": "index.html", "gopher": "gophermap", "sitemap": "sitemap.txt", "worldmap": "map.html", } ) datignore = [".git", ".dat", "**.php"] photo = nameddict( { "re_author": re.compile( r"(?:P[eé]ter Moln[aá]r)|(?:Moln[aá]r P[eé]ter)|(?:petermolnar\.(?:eu|net))" ), "default": 720, "sizes": { # 90 = s # 240: "_m", 720: "", 1280: "_b", }, "earlyyears": 2014, } ) mapbox = nameddict({"style": "outdoors-v11", "size": "720x480"}) rewrites = { "^/(?:sysadmin|it|linux-tech-coding|sysadmin-blog)/?(page.*)?$": "category/article/", "^/(?:fotography|photoblog)/?(page.*)?$": "/category/photo/", "^blog/?(page.*)?$": "/category/journal/", "^blips/?(page.*)?$": "/category/note/", "^/r/?(page.*)?$": "/category/note/", "^/(?:linux-tech-coding|it|sysadmin-blog|sysadmin|fotography|blips|blog|photoblog|article|journal|photo|note|r)/((?!page).*)": "/", "^(/.well-known/(host-meta|webfinger).*)": "https://fed.brid.gy$1", } gones = [ "^/cache/.*$", "^/tag/.*$", "^/comment/.*$", "^/files/.*$", "^/wp-content/.*$", "^/broadcast/wp-ffpc\.message$", ] formerdomains = [ # "cadeyrn.webporfolio.hu", # "blog.petermolnar.eu", # "petermolnar.eu", ] formercategories = { # "article": [ # "linux-tech-coding", # "diy-do-it-yourself", # "sysadmin-blog", # "sysadmin", # "szubjektiv-technika", # "wordpress", # ], # "note": ["blips", "blog", "r"], # "journal": ["blog"], # "photo": ["photoblog", "fotography"], } if os.path.isdir("/dev/shm") and os.access("/dev/shm", os.W_OK): tmpdir = "/dev/shm/nasg" else: tmpdir = os.path.join(gettempdir(), "nasg") if not os.path.isdir(tmpdir): os.makedirs(tmpdir) _parser = argparse.ArgumentParser(description="Parameters for NASG") _booleanparams = { "regenerate": "force (re)downsizing images", "force": "force (re)rendering HTML", "debug": "set logging to debug level", "quiet": "show only errors", "offline": "offline mode - no syncing, no querying services, etc.", "noping": "make dummy webmention entries and don't really send them", "noservices": "skip querying any service but do sync the website", } for k, v in _booleanparams.items(): _parser.add_argument( "--%s" % (k), action="store_true", default=False, help=v ) args = vars(_parser.parse_args()) if args.get("debug", False): loglevel = 10 elif args.get("quiet", False): loglevel = 40 else: loglevel = 20 logger = logging.getLogger("NASG") logger.setLevel(loglevel) console_handler = logging.StreamHandler() formatter = logging.Formatter( "%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) console_handler.setFormatter(formatter) logger.addHandler(console_handler) logging.getLogger("asyncio").setLevel(loglevel)