From c2d15c7150f0490e292a50d72039172d66f407be Mon Sep 17 00:00:00 2001 From: manetta Date: Tue, 25 Aug 2020 14:36:30 +0200 Subject: [PATCH] installed a pelican instance in this folder! wooh! --- Makefile | 73 +++++++++++ .../1-what-is-digital-infrapuncture?.md | 15 +++ .../2-systematic-causes-of-pain.md | 15 +++ .../1-what-types-of-bots-are-there.md | 15 +++ content/pages/about.md | 7 ++ pelicanconf.py | 38 ++++++ publishconf.py | 24 ++++ tasks.py | 118 ++++++++++++++++++ 8 files changed, 305 insertions(+) create mode 100644 Makefile create mode 100644 content/Part 1 - Digital Infrapuncture/1-what-is-digital-infrapuncture?.md create mode 100644 content/Part 1 - Digital Infrapuncture/2-systematic-causes-of-pain.md create mode 100644 content/Part 2 - What are Bots?/1-what-types-of-bots-are-there.md create mode 100644 content/pages/about.md create mode 100644 pelicanconf.py create mode 100644 publishconf.py create mode 100644 tasks.py diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..79d4f2f --- /dev/null +++ b/Makefile @@ -0,0 +1,73 @@ +PY?=python3 +PELICAN?=pelican +PELICANOPTS= + +BASEDIR=$(CURDIR) +INPUTDIR=$(BASEDIR)/content +OUTPUTDIR=$(BASEDIR)/output +CONFFILE=$(BASEDIR)/pelicanconf.py +PUBLISHCONF=$(BASEDIR)/publishconf.py + + +DEBUG ?= 0 +ifeq ($(DEBUG), 1) + PELICANOPTS += -D +endif + +RELATIVE ?= 0 +ifeq ($(RELATIVE), 1) + PELICANOPTS += --relative-urls +endif + +SERVER ?= "0.0.0.0" + +PORT ?= 0 +ifneq ($(PORT), 0) + PELICANOPTS += -p $(PORT) +endif + + +help: + @echo 'Makefile for a pelican Web site ' + @echo ' ' + @echo 'Usage: ' + @echo ' make html (re)generate the web site ' + @echo ' make clean remove the generated files ' + @echo ' make regenerate regenerate files upon modification ' + @echo ' make publish generate using production settings ' + @echo ' make serve [PORT=8000] serve site at http://localhost:8000' + @echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 ' + @echo ' make devserver [PORT=8000] serve and regenerate together ' + @echo ' make ssh_upload upload the web site via SSH ' + @echo ' make rsync_upload upload the web site via rsync+ssh ' + @echo ' ' + @echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html ' + @echo 'Set the RELATIVE variable to 1 to enable relative urls ' + @echo ' ' + +html: + "$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) + +clean: + [ ! -d "$(OUTPUTDIR)" ] || rm -rf "$(OUTPUTDIR)" + +regenerate: + "$(PELICAN)" -r "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) + +serve: + "$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) + +serve-global: + "$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) -b $(SERVER) + +devserver: + "$(PELICAN)" -lr "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) + +devserver-global: + $(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -b 0.0.0.0 + +publish: + "$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(PUBLISHCONF)" $(PELICANOPTS) + + +.PHONY: html help clean regenerate serve serve-global devserver publish \ No newline at end of file diff --git a/content/Part 1 - Digital Infrapuncture/1-what-is-digital-infrapuncture?.md b/content/Part 1 - Digital Infrapuncture/1-what-is-digital-infrapuncture?.md new file mode 100644 index 0000000..7fd30e5 --- /dev/null +++ b/content/Part 1 - Digital Infrapuncture/1-what-is-digital-infrapuncture?.md @@ -0,0 +1,15 @@ +Title: What is digital infrapuncture? +Slug: digital-infrapuncture-1 +Date: 2020-08-25 12:00 + +What is digital infrastructure? And why do should they be rethought in terms of capacity and care? + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse in libero viverra risus pulvinar congue. Sed pellentesque condimentum cursus. Quisque vestibulum ex quis tincidunt faucibus. Etiam porta nec eros quis ornare. Curabitur posuere lorem a lectus tincidunt fermentum. Nunc efficitur neque in mattis ullamcorper. Nullam aliquam nunc et elit tempor hendrerit. Proin eu erat sit amet nisl ultrices feugiat. Suspendisse dignissim ipsum sed ex porttitor molestie. Aenean elementum vitae justo eget scelerisque. Phasellus in quam vulputate, tempus libero eu, ornare tellus. Etiam sollicitudin venenatis hendrerit. Ut dolor dolor, commodo sit amet arcu eget, porttitor aliquam justo. Fusce maximus laoreet turpis sit amet molestie. Nulla facilisi. + +Curabitur ut sapien et velit rutrum laoreet. Cras ac aliquet massa. Pellentesque elementum ornare orci. Donec mattis auctor lacus, quis dignissim arcu sollicitudin sit amet. Etiam imperdiet, risus sed condimentum interdum, ante est mattis sem, a tempor mi odio eget tortor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Proin sed justo ac nisi aliquam efficitur nec venenatis turpis. + +Nulla pretium, purus vitae pretium porttitor, elit purus sagittis leo, ut blandit arcu nisl a metus. Nunc sit amet arcu ac magna finibus suscipit. Sed malesuada sem arcu, id egestas risus pharetra at. Sed sed pulvinar massa, at ornare odio. Donec quis magna sed turpis rhoncus dignissim. Aenean scelerisque sapien nec interdum suscipit. Donec sit amet tincidunt odio, in fermentum eros. Morbi varius augue nulla. Aliquam erat volutpat. Sed sit amet ligula hendrerit nisl posuere venenatis placerat quis sem. Phasellus in iaculis urna. Etiam mollis arcu eget dui volutpat molestie. Pellentesque sodales leo nec mi interdum interdum. Proin at gravida ante. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. + +Donec non massa sapien. Aenean ligula lectus, iaculis ut tempus quis, scelerisque sit amet dui. Donec varius dui sed elit consectetur rhoncus non in leo. Quisque feugiat lobortis magna, eu auctor nisi sodales et. Fusce nec iaculis arcu. Morbi placerat pellentesque felis sed eleifend. Vivamus consectetur felis fringilla urna porta aliquam. + +Nam rhoncus lacus libero, ut tincidunt lorem ultricies vel. Proin nibh neque, tempor quis nulla ac, vulputate dapibus metus. Proin rhoncus a diam quis hendrerit. Ut laoreet est id erat gravida, vitae aliquet lorem suscipit. Mauris eu tempor metus, sit amet blandit erat. Aenean viverra imperdiet orci, at condimentum nunc euismod ac. Suspendisse lectus augue, venenatis ullamcorper sollicitudin vel, venenatis vitae dui. In in velit feugiat, molestie nibh vitae, finibus elit. Nulla mattis metus eu finibus laoreet. Nullam lobortis dui ac feugiat dictum. \ No newline at end of file diff --git a/content/Part 1 - Digital Infrapuncture/2-systematic-causes-of-pain.md b/content/Part 1 - Digital Infrapuncture/2-systematic-causes-of-pain.md new file mode 100644 index 0000000..239fad3 --- /dev/null +++ b/content/Part 1 - Digital Infrapuncture/2-systematic-causes-of-pain.md @@ -0,0 +1,15 @@ +Title: Systematic causes of pain? +Slug: digital-infrapuncture-2 +Date: 2020-08-25 12:00 + +How do we amend systematic causes of pain? + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse in libero viverra risus pulvinar congue. Sed pellentesque condimentum cursus. Quisque vestibulum ex quis tincidunt faucibus. Etiam porta nec eros quis ornare. Curabitur posuere lorem a lectus tincidunt fermentum. Nunc efficitur neque in mattis ullamcorper. Nullam aliquam nunc et elit tempor hendrerit. Proin eu erat sit amet nisl ultrices feugiat. Suspendisse dignissim ipsum sed ex porttitor molestie. Aenean elementum vitae justo eget scelerisque. Phasellus in quam vulputate, tempus libero eu, ornare tellus. Etiam sollicitudin venenatis hendrerit. Ut dolor dolor, commodo sit amet arcu eget, porttitor aliquam justo. Fusce maximus laoreet turpis sit amet molestie. Nulla facilisi. + +Curabitur ut sapien et velit rutrum laoreet. Cras ac aliquet massa. Pellentesque elementum ornare orci. Donec mattis auctor lacus, quis dignissim arcu sollicitudin sit amet. Etiam imperdiet, risus sed condimentum interdum, ante est mattis sem, a tempor mi odio eget tortor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Proin sed justo ac nisi aliquam efficitur nec venenatis turpis. + +Nulla pretium, purus vitae pretium porttitor, elit purus sagittis leo, ut blandit arcu nisl a metus. Nunc sit amet arcu ac magna finibus suscipit. Sed malesuada sem arcu, id egestas risus pharetra at. Sed sed pulvinar massa, at ornare odio. Donec quis magna sed turpis rhoncus dignissim. Aenean scelerisque sapien nec interdum suscipit. Donec sit amet tincidunt odio, in fermentum eros. Morbi varius augue nulla. Aliquam erat volutpat. Sed sit amet ligula hendrerit nisl posuere venenatis placerat quis sem. Phasellus in iaculis urna. Etiam mollis arcu eget dui volutpat molestie. Pellentesque sodales leo nec mi interdum interdum. Proin at gravida ante. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. + +Donec non massa sapien. Aenean ligula lectus, iaculis ut tempus quis, scelerisque sit amet dui. Donec varius dui sed elit consectetur rhoncus non in leo. Quisque feugiat lobortis magna, eu auctor nisi sodales et. Fusce nec iaculis arcu. Morbi placerat pellentesque felis sed eleifend. Vivamus consectetur felis fringilla urna porta aliquam. + +Nam rhoncus lacus libero, ut tincidunt lorem ultricies vel. Proin nibh neque, tempor quis nulla ac, vulputate dapibus metus. Proin rhoncus a diam quis hendrerit. Ut laoreet est id erat gravida, vitae aliquet lorem suscipit. Mauris eu tempor metus, sit amet blandit erat. Aenean viverra imperdiet orci, at condimentum nunc euismod ac. Suspendisse lectus augue, venenatis ullamcorper sollicitudin vel, venenatis vitae dui. In in velit feugiat, molestie nibh vitae, finibus elit. Nulla mattis metus eu finibus laoreet. Nullam lobortis dui ac feugiat dictum. \ No newline at end of file diff --git a/content/Part 2 - What are Bots?/1-what-types-of-bots-are-there.md b/content/Part 2 - What are Bots?/1-what-types-of-bots-are-there.md new file mode 100644 index 0000000..5e8743e --- /dev/null +++ b/content/Part 2 - What are Bots?/1-what-types-of-bots-are-there.md @@ -0,0 +1,15 @@ +Title: What types of bots are there? +Slug: what-types-of-bots-are-there +Date: 2020-08-25 12:00 + +What types of bots are there? + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse in libero viverra risus pulvinar congue. Sed pellentesque condimentum cursus. Quisque vestibulum ex quis tincidunt faucibus. Etiam porta nec eros quis ornare. Curabitur posuere lorem a lectus tincidunt fermentum. Nunc efficitur neque in mattis ullamcorper. Nullam aliquam nunc et elit tempor hendrerit. Proin eu erat sit amet nisl ultrices feugiat. Suspendisse dignissim ipsum sed ex porttitor molestie. Aenean elementum vitae justo eget scelerisque. Phasellus in quam vulputate, tempus libero eu, ornare tellus. Etiam sollicitudin venenatis hendrerit. Ut dolor dolor, commodo sit amet arcu eget, porttitor aliquam justo. Fusce maximus laoreet turpis sit amet molestie. Nulla facilisi. + +Curabitur ut sapien et velit rutrum laoreet. Cras ac aliquet massa. Pellentesque elementum ornare orci. Donec mattis auctor lacus, quis dignissim arcu sollicitudin sit amet. Etiam imperdiet, risus sed condimentum interdum, ante est mattis sem, a tempor mi odio eget tortor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Proin sed justo ac nisi aliquam efficitur nec venenatis turpis. + +Nulla pretium, purus vitae pretium porttitor, elit purus sagittis leo, ut blandit arcu nisl a metus. Nunc sit amet arcu ac magna finibus suscipit. Sed malesuada sem arcu, id egestas risus pharetra at. Sed sed pulvinar massa, at ornare odio. Donec quis magna sed turpis rhoncus dignissim. Aenean scelerisque sapien nec interdum suscipit. Donec sit amet tincidunt odio, in fermentum eros. Morbi varius augue nulla. Aliquam erat volutpat. Sed sit amet ligula hendrerit nisl posuere venenatis placerat quis sem. Phasellus in iaculis urna. Etiam mollis arcu eget dui volutpat molestie. Pellentesque sodales leo nec mi interdum interdum. Proin at gravida ante. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. + +Donec non massa sapien. Aenean ligula lectus, iaculis ut tempus quis, scelerisque sit amet dui. Donec varius dui sed elit consectetur rhoncus non in leo. Quisque feugiat lobortis magna, eu auctor nisi sodales et. Fusce nec iaculis arcu. Morbi placerat pellentesque felis sed eleifend. Vivamus consectetur felis fringilla urna porta aliquam. + +Nam rhoncus lacus libero, ut tincidunt lorem ultricies vel. Proin nibh neque, tempor quis nulla ac, vulputate dapibus metus. Proin rhoncus a diam quis hendrerit. Ut laoreet est id erat gravida, vitae aliquet lorem suscipit. Mauris eu tempor metus, sit amet blandit erat. Aenean viverra imperdiet orci, at condimentum nunc euismod ac. Suspendisse lectus augue, venenatis ullamcorper sollicitudin vel, venenatis vitae dui. In in velit feugiat, molestie nibh vitae, finibus elit. Nulla mattis metus eu finibus laoreet. Nullam lobortis dui ac feugiat dictum. \ No newline at end of file diff --git a/content/pages/about.md b/content/pages/about.md new file mode 100644 index 0000000..6db8e1f --- /dev/null +++ b/content/pages/about.md @@ -0,0 +1,7 @@ +Title: About this Module +Date: 2020-08-25 12:00 +Slug: about-this-module + + +This is the online module Bots as Digital Infrapuncture, commissioned by the University of Utrecht + diff --git a/pelicanconf.py b/pelicanconf.py new file mode 100644 index 0000000..1148336 --- /dev/null +++ b/pelicanconf.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- # + +AUTHOR = 'Cristina Cochior & Manetta Berends' +SITENAME = 'Bots as Digital Infrapuncture' +SITEURL = '' + +PATH = 'content' +USE_FOLDER_AS_CATEGORY = True + +TIMEZONE = 'Europe/Paris' + +DEFAULT_LANG = 'en' + +# Feed generation is usually not desired when developing +FEED_ALL_ATOM = None +CATEGORY_FEED_ATOM = None +TRANSLATION_FEED_ATOM = None +AUTHOR_FEED_ATOM = None +AUTHOR_FEED_RSS = None + +# Blogroll +# LINKS = (('Pelican', 'https://getpelican.com/'), +# ('Python.org', 'https://www.python.org/'), +# ('Jinja2', 'https://palletsprojects.com/p/jinja/'), +# ('You can modify those links in your config file', '#'),) + +# Social widget +# SOCIAL = (('You can add links in your config file', '#'), +# ('Another social link', '#'),) + +DEFAULT_PAGINATION = False + +# Uncomment following line if you want document-relative URLs when developing +#RELATIVE_URLS = True + +STATIC_PATHS = ['extra/favicon.ico', 'images', 'pdfs', 'stream'] + diff --git a/publishconf.py b/publishconf.py new file mode 100644 index 0000000..5fdc7d2 --- /dev/null +++ b/publishconf.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- # + +# This file is only used if you use `make publish` or +# explicitly specify it as your config file. + +import os +import sys +sys.path.append(os.curdir) +from pelicanconf import * + +# If your site is available via HTTPS, make sure SITEURL begins with https:// +SITEURL = '' +RELATIVE_URLS = False + +FEED_ALL_ATOM = 'feeds/all.atom.xml' +CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml' + +DELETE_OUTPUT_DIRECTORY = True + +# Following items are often useful when publishing + +#DISQUS_SITENAME = "" +#GOOGLE_ANALYTICS = "" \ No newline at end of file diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..f517267 --- /dev/null +++ b/tasks.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- + +import os +import shlex +import shutil +import sys +import datetime + +from invoke import task +from invoke.main import program +from invoke.util import cd +from pelican import main as pelican_main +from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer +from pelican.settings import DEFAULT_CONFIG, get_settings_from_file + +SETTINGS_FILE_BASE = 'pelicanconf.py' +SETTINGS = {} +SETTINGS.update(DEFAULT_CONFIG) +LOCAL_SETTINGS = get_settings_from_file(SETTINGS_FILE_BASE) +SETTINGS.update(LOCAL_SETTINGS) + +CONFIG = { + 'settings_base': SETTINGS_FILE_BASE, + 'settings_publish': 'publishconf.py', + # Output path. Can be absolute or relative to tasks.py. Default: 'output' + 'deploy_path': SETTINGS['OUTPUT_PATH'], + # Host and port for `serve` + 'host': 'localhost', + 'port': 8000, +} + +@task +def clean(c): + """Remove generated files""" + if os.path.isdir(CONFIG['deploy_path']): + shutil.rmtree(CONFIG['deploy_path']) + os.makedirs(CONFIG['deploy_path']) + +@task +def build(c): + """Build local version of site""" + pelican_run('-s {settings_base}'.format(**CONFIG)) + +@task +def rebuild(c): + """`build` with the delete switch""" + pelican_run('-d -s {settings_base}'.format(**CONFIG)) + +@task +def regenerate(c): + """Automatically regenerate site upon file modification""" + pelican_run('-r -s {settings_base}'.format(**CONFIG)) + +@task +def serve(c): + """Serve site at http://$HOST:$PORT/ (default is localhost:8000)""" + + class AddressReuseTCPServer(RootedHTTPServer): + allow_reuse_address = True + + server = AddressReuseTCPServer( + CONFIG['deploy_path'], + (CONFIG['host'], CONFIG['port']), + ComplexHTTPRequestHandler) + + sys.stderr.write('Serving at {host}:{port} ...\n'.format(**CONFIG)) + server.serve_forever() + +@task +def reserve(c): + """`build`, then `serve`""" + build(c) + serve(c) + +@task +def preview(c): + """Build production version of site""" + pelican_run('-s {settings_publish}'.format(**CONFIG)) + +@task +def livereload(c): + """Automatically reload browser tab upon file modification.""" + from livereload import Server + build(c) + server = Server() + # Watch the base settings file + server.watch(CONFIG['settings_base'], lambda: build(c)) + # Watch content source files + content_file_extensions = ['.md', '.rst'] + for extension in content_file_extensions: + content_blob = '{0}/**/*{1}'.format(SETTINGS['PATH'], extension) + server.watch(content_blob, lambda: build(c)) + # Watch the theme's templates and static assets + theme_path = SETTINGS['THEME'] + server.watch('{}/templates/*.html'.format(theme_path), lambda: build(c)) + static_file_extensions = ['.css', '.js'] + for extension in static_file_extensions: + static_file = '{0}/static/**/*{1}'.format(theme_path, extension) + server.watch(static_file, lambda: build(c)) + # Serve output path on configured host and port + server.serve(host=CONFIG['host'], port=CONFIG['port'], root=CONFIG['deploy_path']) + + +@task +def publish(c): + """Publish to production via rsync""" + pelican_run('-s {settings_publish}'.format(**CONFIG)) + c.run( + 'rsync --delete --exclude ".DS_Store" -pthrvz -c ' + '-e "ssh -p {ssh_port}" ' + '{} {ssh_user}@{ssh_host}:{ssh_path}'.format( + CONFIG['deploy_path'].rstrip('/') + '/', + **CONFIG)) + + +def pelican_run(cmd): + cmd += ' ' + program.core.remainder # allows to pass-through args to pelican + pelican_main(shlex.split(cmd)) \ No newline at end of file