Example #1
0
  def testSetProgramming(self):
    collection = Collection(name='test')
    collection.put()
    media1 = fake_video(collection, 100)
    media2 = fake_video(collection, 360)
    
    channel = Channel.add('test')
    ChannelCollection.add(channel=channel, collection=collection)

    duration = media1[0].duration + 5
    programs = Programming.set_programming(channel.id, duration=duration)    
    self.assertEquals(len(programs), 1)
    self.assertEquals(programs[0].media.last_programmed, programs[0].time)
    self.assertEquals(programs[0].media.id, media2[0].id)

    # Check memcache
    programming = memcache.get('programming') or {}
    next_programs = Programming.next_programs(programming.get(channel.id), duration=1200, prelude=120)
    self.assertEquals(len(next_programs), 1)

    # Schedule second program
    memcache.set('programming', []) # Sidestep next_program check
    programs = Programming.set_programming(channel.id, duration=1200)
    self.assertEquals(len(programs), 1)
    self.assertEquals(programs[0].media.id, media1[0].id)
    
    
    
    # Clear memcache
    memcache.set('programming', [])
    print programs[0].media.last_programmed
    programs = Programming.set_programming(channel.id)
    print programs[0].time
Example #2
0
 def post(self, cid):
   channel = Channel.get_by_key_name(cid)
   if self.current_user.id in SUPER_ADMINS or self.current_user in channel.admins.fetch(None):
     channel.online = (self.request.get('online') == '1' or self.request.get('online') == 'true')
     channel.put()
     if channel.online:
         Programming.set_programming(channel.id, queue='programming',
                                     fetch_twitter=(not constants.DEVELOPMENT))
     self.response.out.write(simplejson.dumps(channel.toJson()))
Example #3
0
 def get(self):
   channel_name = self.request.get('channel')
   twitter = self.request.get('fetch') == 'true'
   duration = self.request.get('duration') or 600
   if channel_name:
     channels = Channel.all().filter('name =', channel_name).fetch(1)
   else:
     channels = Channel.get_public()
   for channel in channels:
     Programming.set_programming(channel.id, duration=int(duration),
                                 fetch_twitter=(not constants.DEVELOPMENT and twitter))
   self.response.out.write('done')
Example #4
0
 def post(self):
   if self.current_user.id in SUPER_ADMINS and self.request.get('uid'):
     channel = Channel.get_by_key_name(self.request.get('channel_id'))
     admin = User.get_by_key_name(self.request.get('uid'))
     ca = ChannelAdmin(channel=channel, admin=admin)
     ca.put()
     self.response.out.write('done')
   elif self.current_user.id in SUPER_ADMINS:
     name = self.request.get('name')
     if name:
       channel = Channel.get_or_insert(key_name=Channel.make_key(name), name=name)
       if channel.online:
         Programming.set_programming(channel.id, queue='programming',
                                     fetch_twitter=(not constants.DEVELOPMENT))
       self.response.out.write(simplejson.dumps(channel.toJson()))
Example #5
0
  def testNextPrograms(self):
    programming = memcache.get('programming') or {}

    channel = Channel(name='test')
    channel.put()
    duration = 1200
    self.assertEquals(len(Programming.next_programs(programming.get(channel.id), duration, prelude=120)), 0)
Example #6
0
    def get(self):
      name = self.request.get('channel')
      sim = self.request.get('sim')
      pending = self.request.get('pending') == '1' or False
      limit = int(self.request.get('limit')) if self.request.get('limit') else 100
      offset = int(self.request.get('offset')) if self.request.get('offset') else 0
      template_data = {}

      channel = Channel.all().filter('name =', name or 'Broken News').get()
      cols = channel.get_collections()
      medias = []
      for col in cols:
        medias += col.get_medias(limit=limit, offset=offset, pending=pending)
      template_data['raw_medias'] = medias
      viewers = ['1240963']

      for i, m in enumerate(medias):
        m.seen_percent = int(float(len(m.seen))/len(viewers) * 100)
        if sim:
          # Mark a random set of medias seen, opt-in, opt-out:
          if i%2 == 0 and not '1240963' in m.seen:
            m.seen.append('1240963')
          if i%3 == 0 and not '1240963' in m.opt_in:
            m.opt_in.append('1240963')
          if i%5 == 0 and not '1240963' in m.opt_out:
            m.opt_out.append('1240963')
          if i%(len(medias)/2 - 1) == 0:
            m.comment_count = 10
            
      for media in medias:
        media.have_seen = Programming.have_seen(media, viewers)

      # Don't repeat the same program within an hour
      medias = [c for c in medias if not c.last_programmed or
                (datetime.datetime.now() - c.last_programmed).seconds > 1600]

      # At most, 30% of the audience has already seen this program
      medias = [m for m in medias if not len(viewers) or
               float(len(Programming.have_seen(m, viewers)))/len(viewers) < .3]

      # StorySort it
      sorted_medias = Programming.story_sort(medias)
      template_data['sorted_medias'] = sorted_medias

      path = os.path.join(os.path.dirname(__file__), '../templates/storysort.html')
      self.response.out.write(template.render(path, template_data))
Example #7
0
 def post(self):
   if self.request.get('channel_id'):
     channel = Channel.get_by_key_name(self.request.get('channel_id'))
     if self.current_user.id in constants.SUPER_ADMINS or self.current_user in channel.admins.fetch(None):
       Programming.set_programming(channel.id, queue='programming', schedule_next=False,
                                   fetch_twitter=(not constants.DEVELOPMENT))