staff_member_required(views.NoteDeleteView.as_view(), login_url='login'),
),
url(r'^new-note/$', staff_member_required(views.NoteAddView.as_view(), login_url='login')),
+ url(r'^feeds/(?P<sub>[\w:-]+)/atom$', views.AtomFeed()),
+ url(r'^feed/atom$', views.AtomFeed()),
url(r'^tag/(?P<tag>[\w:-]+)/$', views.ListOnTagView.as_view()),
url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[\w:-]+)/$', views.NoteView.as_view()),
url(r'^(?P<slug>[\w:-]+)/$', views.NoteView.as_view()),
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+import urllib.parse
+
+from django.conf import settings
+from django.contrib.syndication.views import Feed
from django.core.exceptions import PermissionDenied
from django.http import Http404
+from django.utils.feedgenerator import Atom1Feed
from django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView, TemplateView
from .models import Note
if not self.request.user.is_staff:
qs = qs.filter(published=True)
return qs
+
+
+class Atom1FeedWithBaseXml(Atom1Feed):
+ def root_attributes(self):
+ root_attributes = super(Atom1FeedWithBaseXml, self).root_attributes()
+ scheme, netloc, path, params, query, fragment = urllib.parse.urlparse(self.feed['feed_url'])
+ root_attributes['xml:base'] = urllib.parse.urlunparse((scheme, netloc, '/', params, query, fragment))
+ return root_attributes
+
+
+class AtomFeed(Feed):
+ title = settings.SITE_TITLE
+ link = '/'
+ feed_type = Atom1FeedWithBaseXml
+ author_name = settings.SITE_AUTHOR
+
+ def get_object(self, request, *args, **kwargs):
+ self.sub = kwargs.get('sub', 'default')
+ return super(AtomFeed, self).get_object(request, *args, **kwargs)
+
+ def items(self):
+ qs = Note.objects.filter(published=True)
+ if self.sub == 'default':
+ pass
+ elif self.sub == 'gnome-en':
+ qs = qs.filter(tags__name__in=['gnome']).filter(tags__name__in=['lang-en'])
+ else:
+ qs = qs.filter(tags__name__in=[self.sub])
+ return qs.select_related()[:20]
+
+ def item_description(self, item):
+ return item.text
+
+ def item_guid(self, item):
+ legacy_id = None
+ for tag in item.tags.all():
+ if tag.name.startswith('old-post-id-'):
+ return 'http://www.0d.be/posts/%s' % tag.name.split('-')[-1]
+ return 'https://www.0d.be' + item.get_absolute_url()
+
+ def item_title(self, item):
+ return item.title
+
+ def item_pubdate(self, item):
+ return item.creation_timestamp