def import_from_rss(rss_as_bytes): rss = objectify.fromstring(rss_as_bytes) current_site = Site.objects.get_current() for item in rss.channel.item: blob = unicode(item['{%s}encoded' % item.nsmap['content']]) category, _ = Category.objects.get_or_create( slug=my_slugify(unicode(item.category.text)), title=unicode(item.category.text) ) entry = Entry() cms_content = Content() cms_content.save() process_html_blob(blob, cms_content) entry.content_ptr = cms_content entry.title = unicode(item.title.text) entry.creation_date = parse_rss_date(unicode(item.pubDate)) entry.slug = my_slugify(entry.title) entry.save() entry.sites.add(current_site) entry.categories.add(category) link = unicode(item.link.text) _url_cache[link] = entry.get_absolute_url() _url_cache[re.sub("^https", "http", link)] = entry.get_absolute_url() add_redirect(link, entry.get_absolute_url())
def save(self, *args, **kwargs): if self.pk is None: # or if there is no entry? What is a good check? # take action on first save # NB! Try to make sure that the slug is unique so we can have separate links to separate messages entry = Entry( title=self.create_entry_title(), content=self.create_entry_content(), status=HIDDEN, ) entry.save() entry.slug = self.create_entry_slug() + '-' + str(entry.pk) entry.sites.add(Site.objects.get(pk=settings.SITE_ID)) entry.authorized_users.add(self.user) entry.content_template += '.%s' % (self.__class__.__name__.lower()) entry.detail_template += '.%s' % (self.__class__.__name__.lower()) entry.save() # Should we perhaps save somewhere this Site.objects.get(pk=settings.SITE_ID) so we don't have to query it every time? Though, I guess, it is not such a big deal here, as we are rarely saving things that have associated blog posts. We are not generating blog posts (entries) every second... self.entry = entry else: if self.entry is None: pass # QUESTION. Should we still post? Better late than never? Though, with transactions, we'd never get here. super(PrivatelyPublishedModelMixin, self).save(*args, **kwargs)