def _make_episode_slug(self, show, slug):
     if slug == "":
         raise Exception()
     episode = Episode(show=show, slug=slug, status=Episode.STATUS[1][0])
     try:
         episode.save()
     except:
         from django.db import connection
         connection._rollback()
         raise
     return episode
Example #2
0
 def form_valid(self, form):
     s = Show.objects.get(slug=self.kwargs['slug'])
     if form.instance.episode_id is None:
         qs = Episode.objects.filter(slug=form.cleaned_data['slug'], show=s)
         if qs.count() > 0:
             msg = u"An episode with this slug already exists in this show"
             form._errors["slug"] = form.error_class([msg])
             return super(EpisodeCreateView, self).form_invalid(form)
         e = Episode(slug=form.cleaned_data['slug'], show=s)
         e.save()
         s.nextEpisodeNumber+=1
         s.save()
         form.instance.episode = e
     return super(EpisodeCreateView, self).form_valid(form)
Example #3
0
    def importer_ical(self, data):
        try:
            show = Show.objects.get(slug=data["show"])
        except Show.DoesNotExist:
            return

        for uid, e in data["entries"].iteritems():
            if not ICalEpisodeSource.objects.filter(identifier=uid).count():
                source = ICalEpisodeSource(identifier=uid, source=show.icalfeed)
                source.save()
                ep = Episode(show=show, source=source, slug=e["slug"], status=Episode.STATUS[2][0])
                ep.save()
                epp = EpisodePart(episode=ep)
                epp.begin = dateutil.parser.parse(e["begin"], ignoretz=True)
                epp.save()
                ep.current_part = epp
                ep.save()
            else:
                source = ICalEpisodeSource.objects.get(identifier=uid)
                try:
                    ep = source.episode
                except Episode.DoesNotExist:
                    text = "No episode created for uid %s as the previously" " created episode was deleted" % uid
                    m = Message(message_object=show, origin="importer.ical", message=text, severity=3)
                    m.save()
                    continue

            ep.slug = e["slug"]
            ep.save()

            epp = ep.current_part
            epp.begin = dateutil.parser.parse(e["begin"], ignoretz=True)
            if "end" in e:
                epp.end = dateutil.parser.parse(e["end"], ignoretz=True)
            if "url" in e:
                epp.url = e["url"]
            if "description" in e:
                epp.description = e["description"][:200]
            if "title" in e:
                epp.title = e["title"]
            epp.save()
        if show.icalfeed.delete_missing and False:
            ICalEpisodeSource.objects.exclude(identifier__in=data["entries"].keys()).filter(
                episode__status="UPCOMING"
            ).delete()
Example #4
0
 def feed_updated(self, data):
     if data['global']['type'] == 'calendar':
         try:
             show = Show.objects.get(slug=data['showid'])
         except Show.DoesNotExist:
             return
         for id, e in data['entries'].iteritems():
             slug = e['title'].split()[0]  # get first word from title
             slug = re.sub("\W", "", slug)  # remove non alpha numeric chars
             try:
                 ep = Episode.objects.get(
                     show=show, slug=slug, status=Episode.STATUS[2][0])
             except Episode.DoesNotExist:
                 ep = Episode(
                     show=show, slug=slug, status=Episode.STATUS[2][0])
                 ep.save()
                 epp = EpisodePart(episode=ep)
                 epp.begin = dateutil.parser.parse(
                     e['begin'], ignoretz=True)
                 epp.save()
                 ep.current_part = epp
                 ep.save()
             epp = ep.current_part
             epp.begin = dateutil.parser.parse(e['begin'], ignoretz=True)
             if 'end' in e:
                 epp.end = dateutil.parser.parse(e['end'], ignoretz=True)
             if 'url' in e:
                 epp.url = e['url']
             if 'description' in e:
                 epp.description = e['description'][:200]
             title = e['title'].split(None, 1)
             if len(title) == 2:
                 epp.title = title[1]
             else:
                 epp.title = ""
             epp.save()
     elif data['global']['type'] == 'podcast':
         try:
             show = Show.objects.get(slug=data['showid'])
         except Show.DoesNotExist:
             return
         limit = {'url': 180, 'description': 180, 'abstract': 400}
         for item in ('url', 'description', 'abstract'):
             if item in data['global']:
                 setattr(show, item, data['global'][item][:limit[item]])
         show.save()
         if 'icon' in data['global']:
             # print "got icon url: ", data['global']['icon']
             fetch_icon = True
             if show.icon:
                 # print "existing icon"
                 local_modtime = show.icon.get_source_modtime()
                 request = urllib2.Request(data['global']['icon'])
                 request.get_method = lambda: 'HEAD'
                 response = urllib2.urlopen(request)
                 time_s = response.headers['last-modified']
                 time_d = dateutil.parser.parse(time_s)
                 remote_modtime = time_d.strftime("%s")
                 # print "local time", local_modtime
                 # print "remote time", remote_modtime
                 # print "comparison: ", (int(remote_modtime) <=
                 # int(local_modtime))
                 if int(remote_modtime) <= int(local_modtime):
                     # print "don't fetch"
                     fetch_icon = False
             # print "fetch icon: ", fetch_icon
             if fetch_icon:
                 fname = urlparse.urlsplit(
                     data['global']['icon']).path.split("/")[-1]
                 path = show._meta.get_field_by_name("icon")[0].upload_to
                 fname = os.path.join(settings.MEDIA_ROOT,
                                      path, "%s-%s" % (show.slug, fname))
                 # print "name to save to:", fname
                 file, info = urllib.urlretrieve(
                     data['global']['icon'], fname)
                 # print "retrieve result: ", file, info
                 options = show._meta.get_field_by_name(
                     "icon")[0].resize_source
                 thumbnailer = easy_thumbnails.files.get_thumbnailer(file)
                 content = thumbnailer.generate_thumbnail(options)
                 # print content
                 show.icon = content
                 show.save()