src/backend/mirrors.py \
src/backend/misc.py \
src/backend/netboot.py \
- src/backend/news.py \
src/backend/nopaste.py \
- src/backend/planet.py \
src/backend/releases.py \
src/backend/settings.py \
src/backend/talk.py \
src/web/handlers_iuse.py \
src/web/handlers_mirrors.py \
src/web/handlers_nopaste.py \
- src/web/handlers_rss.py \
src/web/handlers_talk.py \
src/web/ui_modules.py
import mirrors
import netboot
import nopaste
-import news
import releases
import settings
import talk
self.mirrors = mirrors.Mirrors(self)
self.netboot = netboot.NetBoot(self)
self.nopaste = nopaste.Nopaste(self)
- self.news = news.News(self)
self.releases = releases.Releases(self)
self.talk = talk.Talk(self)
+++ /dev/null
-#!/usr/bin/python
-
-from misc import Object
-
-class News(Object):
- def get(self, uuid, locale=None):
- res = self.db.get("SELECT * FROM news WHERE uuid = %s \
- AND published IS NOT NULL AND published <= NOW()", uuid)
-
- if res and locale:
- res = self._translate_news_one(res, locale=locale)
-
- return res
-
- def get_by_id(self, id, locale=None):
- res = self.db.get("SELECT * FROM news WHERE id = %s \
- AND published IS NOT NULL AND published <= NOW()", id)
-
- if res and locale:
- res = self._translate_news_one(res, locale=locale)
-
- return res
-
- def get_by_slug(self, slug, locale=None):
- res = self.db.get("SELECT * FROM news WHERE slug = %s \
- AND published IS NOT NULL AND published <= NOW()", slug)
-
- if res:
- return res
-
- res = self.db.get("SELECT news_id FROM news_translations WHERE slug = %s", slug)
- if res:
- return self.get_by_id(res.news_id, locale=locale)
-
- def get_latest(self, author=None, locale=None, limit=1, offset=0):
- query = "SELECT * FROM news WHERE published IS NOT NULL AND published <= NOW()"
- args = []
-
- if author:
- query += " AND author_id = %s"
- args.append(author)
-
- query += " ORDER BY published DESC"
-
- if limit:
- query += " LIMIT %s"
- args.append(limit)
-
- if offset:
- query += " OFFSET %s"
- args.append(offset)
-
- news = self.db.query(query, *args)
-
- if locale:
- news = self._translate_news(news, locale=locale)
-
- return news
-
- def get_by_year(self, year, locale=None):
- res = self.db.query("SELECT * FROM news \
- WHERE published IS NOT NULL AND published <= NOW() \
- AND EXTRACT(YEAR FROM published) = %s ORDER BY published DESC", year)
-
- if res and locale:
- res = self._translate_news(res, locale=locale)
-
- return res
-
- def _translate_news(self, news, locale):
- ret = []
-
- for n in news:
- n = self._translate_news_one(n, locale)
- ret.append(n)
-
- return ret
-
- def _translate_news_one(self, news, locale):
- lang = locale.code[:2]
-
- res = self.db.get("SELECT * FROM news_translations \
- WHERE news_id = %s AND lang = %s", news.id, lang)
-
- if res:
- news.update(res)
-
- return news
-
- @property
- def years(self):
- query = self.db.query("SELECT DISTINCT EXTRACT(YEAR FROM published)::integer AS year FROM news \
- WHERE published IS NOT NULL AND published <= NOW() ORDER BY year DESC")
-
- return [r.year for r in query]
from handlers_iuse import *
from handlers_mirrors import *
from handlers_nopaste import *
-from handlers_rss import *
from handlers_talk import *
class LangCompatHandler(BaseHandler):
self.render("admin-mirrors-details.html", mirror=mirror)
-class AdminNewsBaseHandler(AdminBaseHandler):
- @property
- def news(self):
- return self.backend.news
-
-
-class AdminNewsHandler(AdminNewsBaseHandler):
- @tornado.web.authenticated
- def get(self):
- news = self.news.get_all()
-
- self.render("admin-news.html", news=news)
-
-
-class AdminNewsCreateHandler(AdminNewsBaseHandler):
- @tornado.web.authenticated
- def get(self, id=None):
- # if XXX
-
-
- self.render("admin-news-create.html", news=news)
-
-
-class AdminNewsEditHandler(AdminNewsCreateHandler):
- pass
-
-
class AdminDownloadsHandler(AdminBaseHandler):
@tornado.web.authenticated
def get(self):
def netboot(self):
return self.backend.netboot
- @property
- def news(self):
- return self.backend.news
-
@property
def config(self):
return self.backend.settings
+++ /dev/null
-#!/usr/bin/python
-
-import logging
-import textile
-
-from .. import database
-
-from handlers_base import *
-
-class RSSHandler(BaseHandler):
- _default_limit = 10
- _default_offset = 0
-
- def prepare(self):
- self.set_header("Content-Type", "application/rss+xml")
-
- @property
- def limit(self):
- value = self.get_argument("limit", None)
-
- try:
- return int(value)
- except (TypeError, ValueError):
- return self._default_limit
-
- @property
- def offset(self):
- value = self.get_argument("offset", None)
-
- try:
- return int(value)
- except (TypeError, ValueError):
- return self._default_offset
-
- def get(self, *args, **kwargs):
- url = "%s%s" % (self.request.host, self.request.path)
-
- rss_id = "rss-%s-locale=%s-limit=%s-offset=%s" % \
- (url, self.locale.code, self.limit, self.offset)
-
- rss = self.memcached.get(rss_id)
- if not rss:
- logging.debug("Generating RSS feed (%s)..." % rss_id)
- rss = self.generate(*args, **kwargs)
-
- self.memcached.set(rss_id, rss, 900)
-
- self.finish(rss)
-
- def generate(self):
- raise NotImplementedError
-
-
-class RSSNewsHandler(RSSHandler):
- def generate(self):
- news = self.news.get_latest(locale=self.locale,
- limit=self.limit, offset=self.offset)
-
- items = []
- for n in news:
- # Get author information
- n.author = self.get_account(n.author_id)
-
- # Render text
- n.text = textile.textile(n.text.decode("utf-8"))
-
- item = database.Row({
- "title" : n.title,
- "author" : n.author,
- "published" : n.published,
- "url" : "https://www.ipfire.org/news/%s" % n.slug,
- "markup" : n.text,
- })
- items.append(item)
-
- return self.render_string("feeds/news.xml", items=items)