def handle(self, *args, **options): # couchdbkit doesn't preserve microseconds start_time = datetime.utcnow().replace(microsecond=0) excluded_tags = settings.DIRECTORY_EXCLUDED_TAGS tags = args or Tag.all() for n, tag in enumerate(tags): if not isinstance(tag, basestring): tag = str(tag) label = utils.remove_control_chars(tag.strip()) if not label: continue tag_obj = Tag(tag) podcast_ids, weights = utils.unzip(list(tag_obj.get_podcasts())) podcast_objs = Podcast.get_multi(podcast_ids) podcasts = [] for podcast, weight in zip(podcast_objs, weights): e = CategoryEntry() e.podcast = podcast.get_id() e.weight = float(weight * podcast.subscriber_count()) podcasts.append(e) category = Category.for_tag(label) if not category: if not label or label in excluded_tags: continue category = Category() category.label = label category.spellings = [] # delete if it has been excluded after it has been created if label in excluded_tags: category.delete() continue # we overwrite previous data if category.updated != start_time: category.podcasts = [] category.merge_podcasts(podcasts) category.updated = start_time if 'weight' in category: del category['weight'] category.save() try: utils.progress(n % 1000, 1000, category.label.encode('utf-8')) except: pass
def get_tags(podcast, user): tags = {} for t in Tag.for_podcast(podcast): tag_str = t.lower() tags[tag_str] = False if not user.is_anonymous(): users_tags = Tag.for_user(user, podcast.get_id()) for t in users_tags.get(podcast.get_id(), []): tag_str = t.lower() tags[tag_str] = True tag_list = [{'tag': key, 'is_own': value} for key, value in tags.iteritems()] tag_list.sort(key=lambda x: x['tag']) if len(tag_list) > MAX_TAGS_ON_PAGE: tag_list = filter(lambda x: x['is_own'], tag_list) tag_list.append({'tag': '...', 'is_own': False}) return tag_list
def mytags(request): tags_podcast = {} tags_tag = defaultdict(list) for podcast_id, taglist in Tag.for_user(request.user).items(): podcast = Podcast.get(podcast_id) tags_podcast[podcast] = taglist for tag in taglist: tags_tag[ tag ].append(podcast) return render(request, 'mytags.html', { 'tags_podcast': tags_podcast, 'tags_tag': dict(tags_tag.items()), })