aboutsummaryrefslogtreecommitdiffstats
path: root/aggregator
diff options
context:
space:
mode:
Diffstat (limited to 'aggregator')
-rw-r--r--aggregator/README.org5
-rw-r--r--aggregator/__init__.py0
-rw-r--r--aggregator/feeds.py23
-rw-r--r--aggregator/management/__init__.py0
-rw-r--r--aggregator/management/commands/__init__.py0
-rw-r--r--aggregator/management/commands/loadfeeds.py101
-rw-r--r--aggregator/migrations/0001_initial.py40
-rw-r--r--aggregator/migrations/__init__.py0
-rw-r--r--aggregator/models.py14
-rw-r--r--aggregator/templates/aggregator/base.html46
-rw-r--r--aggregator/templates/aggregator/posts.html43
-rw-r--r--aggregator/templatetags/__init__.py0
-rw-r--r--aggregator/templatetags/posts_extras.py20
-rw-r--r--aggregator/views.py22
14 files changed, 0 insertions, 314 deletions
diff --git a/aggregator/README.org b/aggregator/README.org
deleted file mode 100644
index 1bca9e7..0000000
--- a/aggregator/README.org
+++ /dev/null
@@ -1,5 +0,0 @@
-* aggregator
-
- A simple django app that collects posts from specified feeds. It
- keeps track of which was last updated when and copies the data to
- its own tables.
diff --git a/aggregator/__init__.py b/aggregator/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/aggregator/__init__.py
+++ /dev/null
diff --git a/aggregator/feeds.py b/aggregator/feeds.py
deleted file mode 100644
index 75e5d4f..0000000
--- a/aggregator/feeds.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from django.contrib.syndication.views import Feed
-
-from .models import Post
-
-class LatestPostsFeed(Feed):
- title = "ryuslash's RSS feed"
- link = "/"
- description = "Updates by ryuslash"
-
- def items(self):
- return Post.objects.all()[:20]
-
- def item_title(self, item):
- return item.title
-
- def item_description(self, item):
- return item.body
-
- def item_link(self, item):
- return "/post/%d/" % item.pk
-
- def item_pubdate(self, item):
- return item.updated
diff --git a/aggregator/management/__init__.py b/aggregator/management/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/aggregator/management/__init__.py
+++ /dev/null
diff --git a/aggregator/management/commands/__init__.py b/aggregator/management/commands/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/aggregator/management/commands/__init__.py
+++ /dev/null
diff --git a/aggregator/management/commands/loadfeeds.py b/aggregator/management/commands/loadfeeds.py
deleted file mode 100644
index f826312..0000000
--- a/aggregator/management/commands/loadfeeds.py
+++ /dev/null
@@ -1,101 +0,0 @@
-import feedparser
-import datetime
-import markdown
-import re
-import os
-import urllib2
-
-from django.core.management.base import BaseCommand
-
-from aggregator.models import Post
-import settings
-
-class Command(BaseCommand):
- help = "Load data from saved feeds."
-
- def prep_feedname(self, value):
- value = re.sub('[^\w\s-]', '', value).strip().lower()
- return re.sub('[-\s]+', '-', value)
-
- def get_ext(self, options):
- if 'favicon_ext' in options.keys():
- return options['favicon_ext']
- else:
- return 'ico'
-
- def get_logopath(self, feedname, options):
- ext = self.get_ext(options)
- filename = self.prep_feedname(feedname) + '.' + ext
- basedir = os.path.dirname(os.path.abspath(settings.__file__))
- return os.path.join(basedir, 'static/images/logos', filename)
-
- def have_logo(self, feedname, options):
- logopath = self.get_logopath(feedname, options)
- return os.path.exists(logopath)
-
- def save_logo(self, feedname, options):
- ext = self.get_ext(options)
- url = options['base_url'] + '/favicon.' + ext
-
- try:
- logo = urllib2.urlopen(url)
- except:
- return
-
- save = open(self.get_logopath(feedname, options), 'w')
-
- save.write(logo.read())
- save.close()
- logo.close()
-
- def construct_feed_url(self, feed):
- return feed['base_url'] + feed['feed_url']
-
- def handle(self, *args, **kwargs):
- for feedname, feedoptions in settings.FEEDS.iteritems():
- parsed = \
- feedparser.parse(self.construct_feed_url(feedoptions))
- icon = self.prep_feedname(feedname) + '.' \
- + self.get_ext(feedoptions)
- newcount = 0
-
- if not self.have_logo(feedname, feedoptions):
- self.save_logo(feedname, feedoptions)
-
- for entry in parsed.entries:
- if Post.objects.filter(post_id=entry.id).exists():
- continue
-
- dt = entry.updated_parsed \
- or entry.published_parsed
-
- if dt:
- updated = datetime.datetime(
- dt.tm_year, dt.tm_mon, dt.tm_mday,
- dt.tm_hour, dt.tm_min, dt.tm_sec)
- else:
- updated = datetime.datetime.now()
-
- if 'content' in entry.keys():
- content = entry.content[0]['value']
- else:
- content = entry.summary
-
- if feedoptions['markdown']:
- content = markdown.markdown(content)
-
- if feedoptions.get('nl2br'):
- content = re.sub('\n', '</br>\n', content)
-
- post = Post(post_id=entry.id,
- title=entry.title,
- category=feedoptions['category'],
- link=entry.link,
- updated=updated,
- icon=icon,
- content=content)
-
- post.save()
- newcount += 1
-
- print 'Grabbed %d new feeds from %s' % (newcount, feedname)
diff --git a/aggregator/migrations/0001_initial.py b/aggregator/migrations/0001_initial.py
deleted file mode 100644
index 550a389..0000000
--- a/aggregator/migrations/0001_initial.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Adding model 'Post'
- db.create_table('aggregator_post', (
- ('post_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255, primary_key=True)),
- ('title', self.gf('django.db.models.fields.CharField')(max_length=500)),
- ('category', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('link', self.gf('django.db.models.fields.URLField')(max_length=255)),
- ('updated', self.gf('django.db.models.fields.DateTimeField')()),
- ('content', self.gf('django.db.models.fields.TextField')()),
- ('icon', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ))
- db.send_create_signal('aggregator', ['Post'])
-
- def backwards(self, orm):
- # Deleting model 'Post'
- db.delete_table('aggregator_post')
-
- models = {
- 'aggregator.post': {
- 'Meta': {'ordering': "['-updated']", 'object_name': 'Post'},
- 'category': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'content': ('django.db.models.fields.TextField', [], {}),
- 'icon': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'link': ('django.db.models.fields.URLField', [], {'max_length': '255'}),
- 'post_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'primary_key': 'True'}),
- 'title': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {})
- }
- }
-
- complete_apps = ['aggregator'] \ No newline at end of file
diff --git a/aggregator/migrations/__init__.py b/aggregator/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/aggregator/migrations/__init__.py
+++ /dev/null
diff --git a/aggregator/models.py b/aggregator/models.py
deleted file mode 100644
index 34fb5a3..0000000
--- a/aggregator/models.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from django.db import models
-
-class Post(models.Model):
- post_id = models.CharField(max_length=255, unique=True,
- primary_key=True)
- title = models.CharField(max_length=500)
- category = models.CharField(max_length=255)
- link = models.URLField(max_length=255)
- updated = models.DateTimeField()
- content = models.TextField()
- icon = models.CharField(max_length=255)
-
- class Meta:
- ordering = [ '-updated' ]
diff --git a/aggregator/templates/aggregator/base.html b/aggregator/templates/aggregator/base.html
deleted file mode 100644
index 215ec7e..0000000
--- a/aggregator/templates/aggregator/base.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html>
-
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <title>ryuslash</title>
- <link href="/static/main.css" rel="stylesheet" />
- <link rel="shortcut icon" href="/static/favicon.png" />
- {% block head %}{% endblock %}
- </head>
- <body>
-
- <header>
- <img src="/static/logo.png" alt="ryuslash.org" title="ryuslash.org"/>
- <h1>
- <a href="http://ryuslash.org">
- <span id="logo-blue">ryu</span><span id="logo-orange">slash</span>
- </a>
- </h1>
-
- <nav>
- <ul>
- {% if category == 'post' %}
- <li class="selected top">
- {% else %}
- <li class="top">
- {% endif %}
- <a href="/">posts</a>
- </li>
-
- {% if category == 'activity' %}
- <li class="selected bottom">
- {% else %}
- <li class="bottom">
- {% endif %}
- <a href="/activity/">activities</a>
- </li>
- </ul>
- </nav>
- </header>
-
- <section class="content">
- {% block content %}{% endblock %}
- </div>
- </body>
-</html>
diff --git a/aggregator/templates/aggregator/posts.html b/aggregator/templates/aggregator/posts.html
deleted file mode 100644
index b70cb0d..0000000
--- a/aggregator/templates/aggregator/posts.html
+++ /dev/null
@@ -1,43 +0,0 @@
-{% extends "aggregator/base.html" %}
-{% load posts_extras %}
-
-{% block head %}
-<link href="/feeds/posts/" rel="alternate" type="application/rss+xml"
- title="All posts" />
-{% endblock %}
-
-{% block content %}
- {% for post in list.object_list %}
- <article class="post">
- (<span class="keyword">defpost</span>
- <a href="{{ post.link }}"
- class="variable-name">{{ post.title|slugify|nameless|truncate:48 }}</a>
- (<img src="/static/images/logos/{{ post.icon }}" width="16"
- height="16"/>)
- <div class="doc">
- {% autoescape off %}{{ post.content }}{% endautoescape %}
- </div>
- <span class="string">&quot;{{ post.updated }}&quot;</span>)
- </article>
- {% endfor %}
-
-<div id="pager">
- {% if list.has_previous %}
- <span class="nav-prev">
- <a href="/{{ category }}/{{ list.previous_page_number }}/"
- id="previous">[previous]</a>
- </span>
- {% endif %}
-
- <span id="current">
- {{ list.number }} / {{ list.paginator.num_pages }}
- </span>
-
- {% if list.has_next %}
- <span class="nav-next">
- <a href="/{{ category }}/{{ list.next_page_number }}/"
- id="next">[next]</a>
- </span>
- {% endif %}
-</div>
-{% endblock %}
diff --git a/aggregator/templatetags/__init__.py b/aggregator/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/aggregator/templatetags/__init__.py
+++ /dev/null
diff --git a/aggregator/templatetags/posts_extras.py b/aggregator/templatetags/posts_extras.py
deleted file mode 100644
index 64718a2..0000000
--- a/aggregator/templatetags/posts_extras.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import re
-
-from django import template
-from django.template.defaultfilters import stringfilter
-
-register = template.Library()
-
-@stringfilter
-def nameless(value):
- return re.sub(r'(^|by[- ])(ryuslash|tom)[- ]?', '', value)
-
-@stringfilter
-def truncate(value, length):
- if len(value) > length:
- value = value[:length-3] + '...'
-
- return value
-
-register.filter('nameless', nameless)
-register.filter('truncate', truncate)
diff --git a/aggregator/views.py b/aggregator/views.py
deleted file mode 100644
index bb3c1b7..0000000
--- a/aggregator/views.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from django.core.paginator import Paginator, InvalidPage, EmptyPage
-from django.http import Http404
-from django.shortcuts import render
-
-from .models import Post
-
-def posts(request, cat, page=1):
- category = cat or 'post'
- queryset = Post.objects.filter(category=category)
- paginator = Paginator(queryset, 20)
-
- if page == None:
- page = 1
-
- try:
- object_list = paginator.page(page)
- except (EmptyPage, InvalidPage):
- raise Http404
-
- return render(request, 'aggregator/posts.html',
- { 'list': object_list,
- 'category': category })