From 84de914c46ccb8a3d36d297dcf5f28890274043d Mon Sep 17 00:00:00 2001 From: Thomas Renger Date: Thu, 28 Dec 2023 22:27:47 +0100 Subject: [PATCH] import (outdated) daily reporting script version --- bloggers.yml | 235 ++++++++++++++++++++--------------------- daily-update.py | 58 ++++++++++ ledger | 28 ----- render.py | 123 ++------------------- scan-feeds.py | 69 ++++++++---- settings.py | 1 - templates/email.txt | 53 +--------- templates/users.tmpl | 49 ++++----- templates/week.tmpl | 127 +++------------------- update-participants.py | 2 +- 10 files changed, 264 insertions(+), 481 deletions(-) create mode 100755 daily-update.py delete mode 100644 ledger diff --git a/bloggers.yml b/bloggers.yml index 8f2a225..2b05064 100644 --- a/bloggers.yml +++ b/bloggers.yml @@ -1,170 +1,167 @@ -BarbaraHoisl: - links: - - [0, barbara's blog, 'http://www.barbarahoisl.com/', 'http://www.barbarahoisl.com/feed/'] - mail: barbara@barbarahoisl.com - name: Barbara Hoisl - start: 2012/10/08 -ChemieEmma: - links: - - [dent, dent in the world (Englisch), 'http://dentintheworld.com/', 'http://dentintheworld.com/feed/atom/'] - - [alpaka, the naked alpaca (Englisch), 'http://thenakedalpaca.com/', 'http://thenakedalpaca.com/feed/atom/'] - mail: missp@dentintheworld.com - name: Paula Schramm - start: 2012/09/24 DVDtoday: links: - [0, JKdigital, 'http://jkdigital.de/', 'http://jkdigital.de/feed/'] mail: jk@jkplus.de name: "J\xFCrgen Kaiser" - start: 2012/09/24 + twitter: false +Der_Ideealist: + links: + - [0, Der Ideealist, 'http://der-ideealist.de/', 'http://der-ideealist.de/feed/'] + mail: ideealist@steinhobelgruen.de + name: Jens Heim +EquilibriumBlog: + links: + - [0, Equilibrium, 'http://www.equilibriumblog.de', 'http://www.equilibriumblog.de/wordpress/feed/atom/'] + name: Stefan Rybkowski +FlorianSchweer: + links: + - [0, blorts - wir bloggen sport!, 'http://www.blorts.de/', 'http://www.blorts.de/feed.xml'] + mail: florian.schweer@blorts.de + name: Florian Schweer + twitter: false +Gedankenzirkus: + links: + - [0, Gedankenzirkus, 'http://www.gedankenzirkus.de/', 'http://www.gedankenzirkus.de/wordpress/feed/'] + name: Oliver Koch +HeimBau: + links: + - [0, Teeren und Federn | HEIM Tiefbau Blog, 'http://blog.heim-tuttlingen.de/', + 'http://blog.heim-tuttlingen.de/feed/'] + mail: info@heim-tuttlingen.de + name: Jens Heim HubertMayer: links: - [0, Hubert Mayer, 'http://hubert-mayer.de/', 'http://hubert-mayer.de/feed/'] - - [testet, Hubert Testet, 'http://hubert-testet.de/', 'http://hubert-testet.de/feed/'] + - [321blog, 321 Blog!, 'http://www.321blog.de/', 'http://www.321blog.de/author/dermayer/feed/'] mail: mayerwerbung@gmx.de name: Hubert Mayer - start: 2012/09/24 -TabTwo: +SMCST: links: - - [0, Nerd Residenz, 'http://www.nerd-residenz.de/blog/', 'http://www.nerd-residenz.de/blog/index.atom'] - mail: rmayer@nerd-residenz.de - name: Ralph Mayer - start: 2012/09/24 -affiliteur: + - [0, Social Media Club Stuttgart, 'http://www.smcst.de/', 'http://www.smcst.de/feed/'] + name: Markus Besch +SocialMediaInst: links: - - [0, Affiliate auf Partytour, 'http://www.affiliteur.com/', 'http://www.affiliteur.com/feed/atom'] - mail: info@affiliteur.com - name: Sascha Schilling - start: 2012/09/24 -cmsfunk: + - [0, SocialMedia Institute, 'http://www.socialmedia-institute.com/', 'http://www.socialmedia-institute.com/feed/'] + name: Markus Besch +_teecee: links: - - [0, Stattmarketing, 'http://stattmarketing.wordpress.com/', 'http://stattmarketing.wordpress.com/feed/'] - mail: christoph.funk28@gmail.com - name: Christoph Funk - start: 2012/09/24 + - [0, Thomas Christinck, 'http://christinck.de/', 'http://christinck.de/feed/'] + mail: thomas@christinck.de + name: Thomas Christinck dentaku: links: - - [0, Dentaku, 'http://dentaku.wazong.de/', 'http://dentaku.wazong.de/category/blog/feed'] + - [1, Dentaku Blog, 'http://dentaku.wazong.de/', 'http://dentaku.wazong.de/feed'] mail: dentaku@wazong.de name: Thomas Renger - start: 2012/09/24 -dirkhaun: +hensch: links: - - [0, Dirks Hirnableiter, 'http://hirnableiter.tinycities.de/', 'http://hirnableiter.tinycities.de/feeds/hirnableiter.rss'] - - [1, The Mobile Presenter (Englisch), 'http://www.themobilepresenter.com/', 'http://www.themobilepresenter.com/feeds/themobilepresenter.rss'] - mail: dirk@haun-online.de - name: Dirk Haun - start: 2012/09/24 -erikschimmel: - links: - - [0, Erik Schimmel, 'http://erikschimmel.de/', 'http://erikschimmel.de/feed/'] - mail: mail@erikschimmel.de - name: Erik Schimmel - start: 2012/10/01 -gordongeisler: - links: - - [0, (blog folgt), 'http://staging.wazong.de/', 'http://staging.wazong.de/feed/'] - mail: gordon.geisler@freiarbeiter.com - name: Gordon Geisler - start: 2012/12/31 + - [0, "Blog von Henning Sch\xFCrig", 'http://www.henningschuerig.de/blog/', 'http://www.henningschuerig.de/blog/feed/'] + mail: info@henningschuerig.de + name: "Henning Sch\xFCrig" hirnrinde: links: - [0, Hirnrinde, 'http://www.hirnrinde.de/', 'http://www.hirnrinde.de/hirnrinde.php'] mail: stefan.evertz@gmail.com name: Stefan Evertz - start: 2012/09/24 -hoomygumb: +hubert_testet: links: - - [0, it's a hoomygumb, 'http://hoomygumb.com/', 'http://hoomygumb.com/feed/'] - mail: hoomygumb@gmail.com - name: Jay F. Kay - start: 2012/09/24 -idrottning: - links: - - [0, (blog folgt), 'http://staging.wazong.de/', 'http://staging.wazong.de/feed/'] - mail: v.frankenberg@gmx.de - name: Viola Frankenberg - start: 2012/12/31 + - [testet, Hubert Testet, 'http://hubert-testet.de/', 'http://hubert-testet.de/feed/'] + mail: mayerwerbung@gmx.de + name: Hubert Mayer jantheofel: links: - [0, "Jans K\xFCchenleben", 'http://www.theofel.de/plog/', 'http://www.theofel.de/plog/index.xml'] - [1, Jans Technik-Blog, 'http://www.theofel.de/weblog/', 'http://www.theofel.de/weblog/index.xml'] + - [2, Schokolade geht immer, 'http://www.schokolade-geht-immer.de/', 'http://www.schokolade-geht-immer.de/feed/atom/'] + - [3, Contao-Anleitungen.de, 'http://www.contao-anleitungen.de/', 'http://www.contao-anleitungen.de/blog.xml'] + - [4, Brettspiel-Blog, 'http://www.brettspiel-blog.de/', 'http://www.brettspiel-blog.de/atom.xml'] mail: jan@theofel.de name: Jan Theofel - start: 2012/09/24 -lakritzplanet: +kLAWtext: links: - - [0, Lakritzplanet, 'http://www.lakritzplanet.de/', 'http://www.lakritzplanet.de/feed/'] - mail: mail@lakritzplanet.de - name: Christian Kaufmann - start: 2012/09/24 -momstagebuch: + - [0, kLAWtext, 'http://klawtext.blogspot.de/', 'http://klawtext.blogspot.com/feeds/posts/default'] + name: Sebastian Dosch +ma_y: links: - - [0, Mom's Tagebuch, 'http://momstagebuch.blogspot.de', 'http://momstagebuch.blogspot.com/feeds/posts/default'] - mail: hahn-elke@gmx.de - name: Elke Hahn - start: 2012/10/08 -musevg: + - [0, ma.y2, 'http://may2.wordpress.com/', 'http://may2.wordpress.com/feed/'] + mail: info@frauschuetze.de + name: "Frau Sch\xFCtze" +mahrko: links: - - [0, Abenteuer im Musenland, 'http://www.outsourcer.de/', 'http://www.outsourcer.de/feed/'] - - [b2s, Brain 2 Shirt, 'http://www.2shirt.org', 'http://www.2shirt.org/feed/atom/'] - - [allesso, Alles so, 'http://www.alles.so/', 'http://www.alles.so/feed/'] - mail: iron@muse.vg - name: Michael Schommer - start: 2012/09/24 -pNachhaltig: + - [0, blog.mahrko.de, 'http://blog.mahrko.de/', 'http://blog.mahrko.de/feed/'] + name: Marco Bereth +micialmedia: links: - - [0, praktisch Nachhaltig, 'http://praktisch-nachhaltig.de/news-und-presse/praktisch-nachhaltig-blog', - 'http://staging.wazong.de/feed/'] - mail: info@madiko.com - name: "Franziska K\xF6ppe" - start: 2012/12/31 -poster4nature: + - [0, Micial Media, 'http://micialmedia.de/', 'http://micialmedia.de/feed/'] + mail: info@michael-roth.de + name: Michael M. Roth +miradlo: links: - - [0, poster4nature, 'http://www.poster4nature.com/category/blog/', 'http://www.poster4nature.com/category/blog/feed/'] - mail: partner@poster4nature.com - name: Alexander Beck - start: 2012/09/24 -reichepoet: + - [0, miradlo bloggt, 'http://www.miradlo.net/bloggt/', 'http://www.miradlo.net/bloggt/feeds/atom.xml'] + - [1, uteles Blog, 'http://www.utele.eu/blog/', 'http://www.utele.eu/blog/feed'] + mail: miradlo@steinhobelgruen.de + name: Ute Hauth +nezzform: links: - - [0, Der Reiche Poet, 'http://reichepoet.blogspot.de/', 'http://reichepoet.blogspot.com/feeds/posts/default'] - mail: ute.muendlein@10-o-clock.de - name: "Ute M\xFCndlein" - start: 2012/09/24 + - [0, blog.nezzform, 'http://nezzform.blogspot.de/', 'http://nezzform.blogspot.com/feeds/posts/default'] + - [1, Mama im Job, 'http://mamaimjob.blogspot.de/', 'http://mamaimjob.blogspot.com/feeds/posts/default'] + mail: jastel@gmx.de + name: Jana Akyildiz +oliverg: + links: + - [0, OGOK oliver gassner online-kommunikation, 'http://www.ogok.de/', 'http://www.ogok.de/feeds/posts/default'] + - [321blog, 321 Blog!, 'http://www.321blog.de/', 'http://www.321blog.de/author/oliverg/feed/'] + mail: oliver@steinhobelgruen.de + name: Oliver Gassner +publizist: + links: + - [0, Publizist - Eigensinn verpflichtet!, 'http://publizist.wordpress.com/', 'http://publizist.wordpress.com/feed/'] + name: Immo Sennewald +quilthexle: + links: + - [0, Quilthexle, 'http://www.quilthexle.blogspot.de/', 'http://quilthexle.blogspot.com/feeds/posts/default'] + mail: quilthexle@steinhobelgruen.de + name: Frauke Schramm +ralphjschiel: + links: + - [0, das naturblau-blog, 'http://blog.naturblau.de/', 'http://blog.naturblau.de/feed/'] + mail: null + name: Ralph J. Schiel twitter: false roadkill: links: - [0, Hinten beim Bier, 'http://www.hintenbeimbier.de/', 'http://www.hintenbeimbier.de/feed/'] mail: st.sommer@gmail.com name: Stefan Sommer - start: 2012/09/24 schiri: links: - [0, Patrick Schneider, 'http://www.patrickschneider.net', 'http://www.patrickschneider.net/feed/'] mail: info@patrickschneider.net name: Patrick Schneider - start: 2012/09/24 -spacedani: +spaetzle_tweet: links: - - [0, Danigee, 'http://www.danigee.de/', 'http://www.danigee.de/feed/'] - mail: spacedani@gmail.com - name: Danijela Grgic - start: 2012/10/01 -sympatexter: + - [0, "Sp\xE4tzle mit So\xDF", 'http://spaetzlemitsoss.de/', 'http://spaetzlemitsoss.de/feed'] + mail: info@spaetzlemitsoss.de + name: Christian Mehler +startupstgt: links: - - [0, Sympatexter, 'http://www.sympatexter.de/', 'http://www.sympatexter.de/feed'] - mail: boehm.judith@gmail.com - name: "Judith B\xF6hm" - start: 2012/09/24 -werkstatt: + - [0, Startup Stuttgart, 'http://startup-stuttgart.de/', 'http://startup-stuttgart.de/feed/'] + mail: burn@startup-stuttgart.de + name: Team Startup Stuttgart +tilohensel: links: - - [0, Wissenswerkstatt, 'http://www.wissenswerkstatt.net/', 'http://www.wissenswerkstatt.net/feed/'] - mail: marc.scheloske@gmail.com - name: Marc Scheloske - start: 2012/09/24 -wunschgeburt: + - [0, Tilo Hensel Blog, 'http://www.tilo-hensel.de/', 'http://www.tilo-hensel.de/feed'] + mail: tilohensel@steinhobelgruen.de + name: Tilo Hensel +travellerblog: links: - - [0, Wunschgeburt, 'http://www.wunschgeburt.de/weblog/', 'http://www.wunschgeburt.de/feed/'] - mail: frau.kienberger@web.de - name: Mika Kienberger - start: 2012/10/08 + - [0, Travellerblog, 'http://travellerblog.eu/', 'http://travellerblog.eu/feed/'] + mail: mayerwerbung@gmx.de + name: Hubert Mayer +uliuli: + links: + - [0, dia-blog, 'http://www.dia-blog.de/', 'http://www.dia-blog.de/feed/'] + - [1, Nichtsblog, 'http://www.nichtsblog.de/', 'http://www.nichtsblog.de/feed/atom/'] + - [2, 'Wer ist dir lieber?', 'http://www.wer-ist-dir-lieber.de/', 'http://www.wer-ist-dir-lieber.de/feed/'] + mail: uliuli@steinhobelgruen.de + name: Ulrich Eder diff --git a/daily-update.py b/daily-update.py new file mode 100755 index 0000000..3570152 --- /dev/null +++ b/daily-update.py @@ -0,0 +1,58 @@ +#!/usr/bin/python +# This Python file uses the following encoding: utf-8 +import render +import os +import sys +import xmlrpclib +import subprocess +import datetime +import yaml +import settings + +config=settings.load_settings() + +dry_run = False +send_mail = True +quick_view = False + +args = sys.argv[1:] + +if len(args)>0: + if args[0] == '-q': + dry_run = True + quick_view = True + send_mail = False + + if args[0] == '-n': + dry_run = True + send_mail = False + +START = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) - datetime.timedelta(days=1) +date = START.strftime("%Y-%m-%d") + +email = render.render_template('templates/email.txt', date, start=START, mail=config['mail']) + +if len(email)==0: + print("No posts.") + exit(0) + +if not dry_run: + text = render.render_template('templates/week.tmpl', date, start=START) + + lines = text.split("\n") + title = lines[0] + body = "\n".join(lines[1:]) + + page = dict(title = title, description = body) + + x = xmlrpclib.ServerProxy(config['xmlrpc_endpoint']) + x.metaWeblog.newPost(config['blog_id'], config['username'], config['password'], page, True) + +if quick_view: + print(render.render_template('templates/quick_view.tmpl',date,start=START)) +if dry_run and not quick_view: + print email +if send_mail: + p = subprocess.Popen(['/usr/sbin/sendmail', '-oi', '-t'], + stdin=subprocess.PIPE) + p.communicate(email) diff --git a/ledger b/ledger deleted file mode 100644 index eb66fae..0000000 --- a/ledger +++ /dev/null @@ -1,28 +0,0 @@ -2012-10-01 Week 0 - User:musevg $-5 - Pool:Owed:musevg -2012-10-01 Week 0 - User:poster4nature $-5 - Pool:Owed:poster4nature - -2012-10-08 Week 1, Blog 0 - User:hirnrinde $-5 - Pool:Owed:hirnrinde -2012-10-08 Week 1, Blog 0 - User:jantheofel $-5 - Pool:Owed:jantheofel -2012-10-08 Week 1, Blog 0 - User:poster4nature $-5 - Pool:Owed:poster4nature -2012-10-08 Week 1, Blog 0 - User:werkstatt $-5 - Pool:Owed:werkstatt - - -2012-10-15 Week 2, Blog b2s - User:musevg $-5 - Pool:Owed:musevg - -2012-10-15 Schulden bezahlt - Pool:Owed:poster4nature $-10 - Pool:Paid diff --git a/render.py b/render.py index f371ccf..9003230 100755 --- a/render.py +++ b/render.py @@ -13,134 +13,23 @@ from mako.template import Template config=settings.load_settings() -START = datetime.datetime.strptime(config['start_date'],"%Y/%m/%d") HERE = os.path.dirname(__file__) -def get_balance(acct): - p = subprocess.Popen(['ledger', '-f', os.path.join(HERE,'ledger'), - '-n', 'balance', acct], - stdout=subprocess.PIPE) - (out, _) = p.communicate() - try: - return int(out.split()[0][1:]) - except: - return 0 - -def get_debts(): - p = subprocess.Popen(['ledger', '-f', os.path.join(HERE, 'ledger'), - '-n', 'balance', 'Pool:Owed:'], - stdout=subprocess.PIPE) - (out, _) = p.communicate() - debts = [] - for line in out.split("\n"): - if not line: continue - (val, acct) = line.split() - user = acct[len("Pool:Owed:"):] - val = int(val[len("$"):]) - debts.append((user, val)) - return debts - -def to_week_num(date): - return (parse(date, default=START) - START).days / 7 - -def parse_skip(rec): - spec = rec.get('skip', []) - out = [] - for s in spec: - if isinstance(s, list): - out.append(map(to_week_num, s)) - else: - out.append(to_week_num(s)) - return out - -def should_skip(skips, week): - for e in skips: - if e == week: - return True - if isinstance(e, list) and e[0] <= week and e[1] > week: - return True - return False - -def render_template(path, week=None, **kwargs): +def render_template(path, date, **kwargs): with open('out/report.yml') as r: report = yaml.safe_load(r) with open('bloggers.yml') as f: users = yaml.safe_load(f) - if week: - week = parse(week, default=START) - else: - week = START - week = (week - START).days / 7 - week_start = START + (week * datetime.timedelta(7)) - week_end = START + ((week + 1) * datetime.timedelta(7)) + posts = report.setdefault(date, []) - skip = [] - skipped_users = [] - userlist = [] - punted = [] - - class User(object): - pass - - for (un, rec) in users.items(): - u = User() - u.username = un - u.name = rec['name'] - u.mail = rec['mail'] - u.links = rec['links'] - u.twitter = rec.get('twitter') - u.start_de = datetime.datetime.strptime(rec['start'],"%Y/%m/%d").strftime("%d.%m.%Y") - u.start = rec['start'] - u.end = rec.get('end') - u.stop = rec.get('stop') - u.skip = parse_skip(rec) - u.posts = report.get(un, {}) - u.goodblogs = [] - u.lameblogs = [] - - userlist.append(u) - - # create a subset of punted users - if u.end: - u.end_de = datetime.datetime.strptime(rec.get('end'),"%Y/%m/%d").strftime("%d.%m.%Y") - punted.append(u) - - def user_key(u): - return (u.start, u.username) - - userlist.sort(key=user_key) - punted.sort(key=user_key) - - for u in userlist: - user_start = parse(u.start, default=START) - if u.stop: - continue - if u.end and parse(u.end, default=START) <= week_start: - continue - if should_skip(u.skip, week): - skipped_users.append(u) - continue - elif user_start > week_start: - skip.append(u) - continue - for blog in u.links: - b=blog[0] - weeks=u.posts[b] - if len(weeks) <= week or not weeks[week]: - u.lameblogs.append(b) - else: - u.goodblogs.append(b) - - debts = get_debts() + if len(date)>0 and len(posts)==0: + return "" return Template(filename=path, output_encoding='utf-8').render( - week=week, week_start=week_start,week_end=week_end, - skip=skip, skipped_users=skipped_users, userlist=userlist, - pool=(get_balance('Pool')-get_balance('Event')), paid=get_balance('Pool:Paid'), - event=get_balance('Pool:Event'), - debts=debts, punted=punted, **kwargs) + users=users, posts=posts, date=date, + **kwargs) if __name__ == '__main__': if len(sys.argv) < 2: diff --git a/scan-feeds.py b/scan-feeds.py index 88ff049..990f754 100755 --- a/scan-feeds.py +++ b/scan-feeds.py @@ -3,6 +3,7 @@ import yaml import feedparser import datetime import sys +import re import os from dateutil.parser import parse import dateutil.tz as tz @@ -21,13 +22,14 @@ try: except IOError: log = {} -START = datetime.datetime.strptime(config['start_date'],'%Y/%m/%d') +START = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) - datetime.timedelta(days=7) def parse_published(pub): try: return parse(pub).astimezone(tz.tzlocal()).replace(tzinfo=None) except: return parse(pub).replace(tzinfo=None) + def get_date(post): for k in ('published', 'created', 'updated'): if k in post: @@ -36,10 +38,34 @@ def get_date(post): def get_link(post): return post.link -def parse_feeds(weeks, uri): - feed = feedparser.parse(uri) +def remove_html_tags(txt): + p = re.compile(r'<[^<]*?/?>') + return p.sub('', txt) - print >>sys.stderr, "Parsing: %s" % uri +def remove_extra_spaces(txt): + p = re.compile(r'\s+') + return p.sub(' ', txt) + +def create_extract(txt): + stxt = remove_extra_spaces(remove_html_tags(txt)) + if len(stxt) < 250: + return stxt + if stxt.rfind('. ',200,250)>0: + return stxt[:stxt.rfind('. ',200,250)+1]+" [...]" + if stxt.rfind('! ',200,250)>0: + return stxt[:stxt.rfind('! ',200,250)+1]+" [...]" + if stxt.rfind('? ',200,250)>0: + return stxt[:stxt.rfind('? ',200,250)+1]+" [...]" + if stxt.rfind(', ',200,250)>0: + return stxt[:stxt.rfind(', ',200,250)+1]+" [...]" + if stxt.rfind(' ',200,250)>0: + return stxt[:stxt.rfind(' ',200,250)]+" [...]" + return stxt[:250]+"[...]" + +def parse_feeds(weeks, username, blog): + uri = blog[3] + # print >>sys.stderr, "Parsing ", uri + feed = feedparser.parse(uri) if not feed.entries: print >>sys.stderr, "WARN: no entries for ", uri @@ -48,34 +74,31 @@ def parse_feeds(weeks, uri): if date < START: continue - wn = (date - START).days / 7 + + key = date.strftime("%Y-%m-%d") - while len(weeks) <= wn: - weeks.append([]) + weeks.setdefault(key, []) if post.has_key('title'): post = dict(date=date, title=post.title, - url=get_link(post)) + url=get_link(post), + username=username, + blogname=blog[0], + description=create_extract(post.description)) if not post.has_key('title'): post = dict(date=date, title="", - url=get_link(post)) - if post['url'] not in [p['url'] for p in weeks[wn]]: - weeks[wn].append(post) + url=get_link(post), + username=username, + blogname=blog[0], + description=create_extract(post.description)) + if post['url'] not in [p['url'] for p in weeks[key]]: + weeks[key].append(post) -if len(sys.argv) > 1: - for username in sys.argv[1:]: - blogs = log.setdefault(username, {}) - for l in users[username]['links']: - weeks = blogs.setdefault(l[0], []) - parse_feeds(weeks, l[3]) -else: - for (username, u) in users.items(): - blogs = log.setdefault(username, {}) - for l in u['links']: - weeks = blogs.setdefault(l[0], []) - parse_feeds(weeks, l[3]) +for (username, u) in users.items(): + for l in u['links']: + parse_feeds(log, username, l) with open('out/report.yml', 'w') as f: yaml.safe_dump(log, f) diff --git a/settings.py b/settings.py index 5ceda41..fb4f447 100755 --- a/settings.py +++ b/settings.py @@ -6,7 +6,6 @@ def load_settings(): configfile.read('settings.cfg') config=dict() config['mail']=configfile.get("general","mail") - config['start_date']=configfile.get("general","start_date") config['username']=configfile.get("blogsettings","username") config['password']=configfile.get("blogsettings","password") diff --git a/templates/email.txt b/templates/email.txt index 8e555bd..0cf2382 100644 --- a/templates/email.txt +++ b/templates/email.txt @@ -1,56 +1,9 @@ ## -*- coding: utf-8 -*- From: ${mail} Content-Type: text/plain; charset=utf-8 -Subject: IRON BLOGGER results for the week beginning ${week_start.strftime("%F")} +Subject: Blogging BW on ${start.strftime("%F")} To: ${mail} -SLACKERS: -<% lame=0 %> -% for u in sorted(userlist, key=lambda u:u.name[u.name.rfind(' '):].lower()): - % for b in u.lameblogs: - <% lame+=1 %> - ${u.name} in ${b} - % endfor -% endfor - -% if punt: -PUNTED for balance ≥$30: ${", ".join(sorted(punt))} -% endif - -People who posted: -% for u in sorted(userlist, key=lambda u:u.name[u.name.rfind(' '):].lower()): - % for b in u.goodblogs: - ${u.name} in ${b} (${u.username}): - % for p in u.posts[b][week]: - - ${p['url']} - % endfor - % endfor -% endfor - -% if skip: -People who have not yet started: -% for u in sorted(skip, key=lambda u:u.username): - ${u.username} -% endfor -% endif - -% if skipped_users: -People who are currently skipped: -% for u in sorted(skipped_users, key=lambda u:u.username): - ${u.username} -% endfor -% endif - -Beer pool: -This Week: € ${5 * lame} -Total: € ${pool} -Paid: € ${paid} -Events: € ${event} -Individual debts: -% for (u, v) in sorted(debts, key=lambda p:p[1], reverse=True): -${u"%20s %d \u20AC" % (u, v)} -% endfor - -PREVIOUSLY PUNTED (pay € 30 balance to return): -% for (u) in sorted(punted, key=lambda p:p.username): -${"%20s (%s)" % (u.username, u.end)} +% for p in sorted(posts, key=lambda p:p['date']): +- ${p['title'] or "[ohne Titel]"} -- ${p['url']} % endfor diff --git a/templates/users.tmpl b/templates/users.tmpl index 6f18e47..084dd93 100644 --- a/templates/users.tmpl +++ b/templates/users.tmpl @@ -1,39 +1,30 @@ - +
- - - - + + -% for u in sorted(userlist, key=lambda u:u.name[u.name.rfind(' '):].lower()): +<% +blogs=[] +for username in users: + u=users[username] + for l in u['links']: + if u.get('twitter') != False: + blogs.append([l[2], l[1], u['name'], username]) + else: + blogs.append([l[2], l[1], u['name']]) +%> +% for b in sorted(blogs, key=lambda b:b[1].lower()): - + + - - - - - % endfor
NameTwitter BlogStartnicht gewertetAutorTwitter
${u.name} - % if u.twitter != False: - @${u.username} + ${b[1]} + ${b[2]} + % if len(b)==4: + @${b[3]} % endif - % if u.links: - % for a in u.links: - ${a[1]} - % endfor - % else: - fehlt noch - % endif - ${u.start_de} - % if u.end: - Ausgeschieden
- % endif - % if u.skip: - ${u.skip} - % endif -
diff --git a/templates/week.tmpl b/templates/week.tmpl index 5f31acc..3cf581f 100644 --- a/templates/week.tmpl +++ b/templates/week.tmpl @@ -1,117 +1,18 @@ -Zusammenfassung der Woche ab ${week_start.strftime("%d.%m.%Y")} -

Die Fleißigen:

-
-% for u in sorted(userlist, key=lambda u:u.name[u.name.rfind(' '):].lower()): -% for g in u.goodblogs: -% for b in u.links: -% if b[0] == g: -
${u.name} \ - % if u.twitter != False: - (@${u.username}) \ - % endif - % if len(u.links) != 1: - in ${b[1]} \ - % endif - :
-
- -
-% endif -% endfor -% endfor -% endfor -
- -

Die Faulen:

<% lame=0 %> +Blogging BW am ${start.strftime("%d.%m.%Y")} - -% if punt: -

Ausgeschieden wegen zu hoher Schulden:

- -% endif - -% if skip: -

Noch nicht dabei:

- -% endif - -% if skipped_users: -

Gerade im Urlaub:

- -% endif - -

Kasse:

- - - - - -
diese Woche: ${5 * lame} €
insgesamt: ${pool} €
beglichen: ${paid} €
verfeiert: ${event} €
- -

Schulden:

-<% i = 0 %> - -% for (u, v) in sorted(debts, key=lambda p:p[1], reverse=True): -% if i % 3 == 0: -\ -% endif -<% i += 1 %>\ -\ -% if i % 3 == 0: - -%endif -% endfor -% if i % 3 != 0: - -%endif -
${u} ${v} €
- -% if punted: -

Zuvor ausgeschieden (müssen 30 € für den Wiedereinstieg bezahlen):

- -% endif diff --git a/update-participants.py b/update-participants.py index bdcb012..d4efed1 100755 --- a/update-participants.py +++ b/update-participants.py @@ -12,7 +12,7 @@ config=settings.load_settings() x = xmlrpclib.ServerProxy(config['xmlrpc_endpoint']) page = x.wp.getPage(config['blog_id'], config['participants_page_id'], config['username'], config['password']) -text = render.render_template('templates/users.tmpl') +text = render.render_template('templates/users.tmpl', '') page['description'] = text x.wp.editPage(config['blog_id'], config['participants_page_id'], config['username'], config['password'],page,True)