From c583a69362f86fcc8e1b35a45a06dd8377d6308f Mon Sep 17 00:00:00 2001
From: mjfernez I don't like spam!
tag is hit up to and including the + closing
tag. Expects an HTML style file + """ + with open(self.FULL_PATH) as f: + in_body = False + paragraphs = 0 + description = "" + for line in f.readlines(): + if paragraphs >= self.PARAGRAPHS: + break + line = line.strip() + if line.startswith(""): + in_body = True + if in_body: + description += line + if line.endswith("
"): + in_body = False + paragraphs += 1 + + return ''.join(description) + + def file_last_modified(self): + return ctime(os.stat(self.FULL_PATH).st_ctime) + + def get_uri(self): + return '/'.join(self.FULL_PATH.split('/')[2:]) + + +def get_rss_channel(): + items = [] + for root, dirs, files in os.walk(siteconfig.BASE_DIR): + for f in files: + path = os.path.join(root, f) + if ( + path.endswith(".html") or f.endswith(".html!") + ) and path not in siteconfig.RSS_OMIT: + items.append(RSS_Item(path)) + return items diff --git a/server.py b/server.py index 545f4b6..c5522b9 100644 --- a/server.py +++ b/server.py @@ -6,6 +6,7 @@ from flask import Flask from siteconfig import siteconfig from flask_compress import Compress from flask_caching import Cache +from rss_generator import RSS_Item, get_rss_channel app = Flask(__name__) compress = Compress() @@ -41,11 +42,12 @@ def setup(): app.config.update( {'COMPRESS_MIMETYPES': siteconfig.COMPRESS_MIMETYPES} ) + app.config.update({'RSS_CHANNEL': get_rss_channel()}) # Setup needs to come first to be compatible with wsgi setup() +compress.init_app(app) +cache.init_app(app) if __name__ == "__main__": - compress.init_app(app) - cache.init_app(app) app.run() diff --git a/siteconfig.py b/siteconfig.py index 412dfce..f42875b 100644 --- a/siteconfig.py +++ b/siteconfig.py @@ -7,20 +7,30 @@ class siteconfig: # REQUIRED SETTINGS# DOMAIN = "example.net" # Your site here! - HOME_TITLE = "WELCOME" # Goes right under - # your site + HOME_TITLE = "WELCOME" LINKS_FILE = ".links" # ".lnx" if you like DESC_FILE = ".description" # ".desc" DEFAULT_MIMETYPE = "application/octet-stream" # ^This usually prompts a browser to download a file if the mime # type is unknown. A good alternative might be "text/plain" + # This setting is required, don't change it unless you're running + # things in different directories + BASE_DIR = "./templates/site/" # Add your desired mimetypes to the csv file MIMETYPES = {} with open('mimetypes.csv') as f: for line in f.readlines(): ext, mime = line.strip().split(',') MIMETYPES.update({ext: mime}) + # This reads your omit file. + # Entries should be the full path from the site directory. + # For example "dontread.txt" in this project is entered as + # 'thoughts/rants/donread.txt' + RSS_OMIT = [] + with open('omit') as f: + for line in f.readlines(): + RSS_OMIT.append(BASE_DIR + line.strip()) # OPTIONAL SETTINGS # @@ -33,35 +43,51 @@ class siteconfig: # Most of the time, you don't need to set this! SECRET_KEY = None # Something random. - # Option for Flask Compress + # Options for Flask Compress # see here https://pypi.org/project/Flask-Compress/ COMPRESS_MIMETYPES = list(MIMETYPES.values()) - # Option for Flask Caching + # Options for Flask Caching # https://flask-caching.readthedocs.io/en/latest/#configuring-flask-caching cache_config = { - 'CACHE_TYPE' : "SimpleCache", - 'CACHE_DEFAULT_TIMEOUT' : 300, + 'CACHE_TYPE': "SimpleCache", + 'CACHE_DEFAULT_TIMEOUT': 300, # You should only fill ONE of the sections below # uswgi - 'CACHE_UWSGI_NAME' : None, + 'CACHE_UWSGI_NAME': None, ## # memcache - 'CACHE_MEMCACHED_SERVERS' : None, - 'CACHE_MEMCACHED_USERNAME' : None, - 'CACHE_MEMCACHED_PASSWORD' : None, + 'CACHE_MEMCACHED_SERVERS': None, + 'CACHE_MEMCACHED_USERNAME': None, + 'CACHE_MEMCACHED_PASSWORD': None, ## # redis - 'CACHE_REDIS_HOST' : None, - 'CACHE_REDIS_PORT' : None, - 'CACHE_REDIS_PASSWORD' : None, - 'CACHE_REDIS_DB' : None, - 'CACHE_REDIS_URL' : None, - 'CACHE_REDIS_SENTINELS' : None, - 'CACHE_REDIS_SENTINEL_MASTER' : None, - 'CACHE_REDIS_CLUSTER' : None, + 'CACHE_REDIS_HOST': None, + 'CACHE_REDIS_PORT': None, + 'CACHE_REDIS_PASSWORD': None, + 'CACHE_REDIS_DB': None, + 'CACHE_REDIS_URL': None, + 'CACHE_REDIS_SENTINELS': None, + 'CACHE_REDIS_SENTINEL_MASTER': None, + 'CACHE_REDIS_CLUSTER': None, ## # filesystem - 'CACHE_DIR' : None, + 'CACHE_DIR': None, # add more options as needed from the URL above } + + # RSS Settings + rss_channel_config = { + 'TITLE': "RSS Feed for example.net", + 'LINK': "http://127.0.0.1:5000/", + 'DESCRIPTION': "My example feed", + 'LANGUAGE': "en-us", + 'PUBDATE': "", + 'LASTBUILDDATE': "", + 'DOCS': "https://git.mjfer.net/ezcms.git/", + 'GENERATOR': "EZCMS", + 'AUTHOR': "editor@example.net", + 'WEBMASTER': "webmaster@example.net", + # Max amount of paragraphs to print in each description + 'DESCRIPTION_LENGTH': 3, + } diff --git a/static/main.css b/static/main.css index f8837d0..9b8c6db 100644 --- a/static/main.css +++ b/static/main.css @@ -14,7 +14,7 @@ body { body { font-size: 200% } - .loicense { + .license { font-size: 75%; } } diff --git a/static/rss.svg b/static/rss.svg new file mode 100644 index 0000000..39bef06 --- /dev/null +++ b/static/rss.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index 6476091..5e71e6b 100644 --- a/templates/base.html +++ b/templates/base.html @@ -15,6 +15,8 @@ {% for dir in navbar %} {{ dir }}/ | {% endfor %} + +