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
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()))
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')
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()))
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)
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))
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))