def new_podcast(req): uset = UserSettings.get_from_user(req.user) if payment_plans.has_reached_podcast_limit(uset): return _pmrender(req, 'dashboard/podcast/page_new_upgrade.html') ctx = {'PODCAST_CATEGORIES': json.dumps(list(CATEGORIES))} if not req.POST: return _pmrender(req, 'dashboard/podcast/page_new.html', ctx) try: pod = Podcast( slug=req.POST.get('slug'), name=req.POST.get('name'), subtitle=req.POST.get('subtitle'), cover_image=signer.unsign(req.POST.get('image-url')), description=req.POST.get('description'), is_explicit=req.POST.get('is_explicit', 'false') == 'true', homepage=req.POST.get('homepage'), language=req.POST.get('language'), copyright=req.POST.get('copyright'), author_name=req.POST.get('author_name'), owner=req.user) pod.save() # TODO: The following line can throw an exception and create a # duplicate podcast if something has gone really wrong pod.set_category_list(req.POST.get('categories')) except Exception as e: ctx.update(default=req.POST, error=True) return _pmrender(req, 'dashboard/podcast/page_new.html', ctx) return redirect('podcast_dashboard', podcast_slug=pod.slug)
def new_podcast(req): uset = UserSettings.get_from_user(req.user) if payment_plans.has_reached_podcast_limit(uset): return _pmrender(req, 'dashboard/podcast/page_new_upgrade.html') ctx = { 'LOCALES': constants.locales, 'PODCAST_CATEGORIES': json.dumps(list(CATEGORIES)), 'reached_podcast_limit': payment_plans.has_reached_podcast_limit(uset) } if not req.POST: return _pmrender(req, 'dashboard/podcast/page_new.html', ctx) # Basic validation if (not req.POST.get('slug') or not req.POST.get('name')): ctx.update(default=req.POST, error=True) return _pmrender(req, 'dashboard/podcast/page_new.html', ctx) try: pod = Podcast( slug=req.POST.get('slug'), name=req.POST.get('name'), subtitle=req.POST.get('subtitle'), cover_image=signer.unsign(req.POST.get('image-url')), description=req.POST.get('description'), is_explicit=req.POST.get('is_explicit', 'false') == 'true', homepage=req.POST.get('homepage'), language=req.POST.get('language'), copyright=req.POST.get('copyright'), author_name=req.POST.get('author_name'), owner=req.user) pod.clean() pod.save() except Exception as e: ctx.update(default=req.POST, error=True) return _pmrender(req, 'dashboard/podcast/page_new.html', ctx) try: pod.set_category_list(req.POST.get('categories')) except Exception: pass return redirect('podcast_dashboard', podcast_slug=pod.slug)
def start_import(req): try: parsed_items = json.loads(req.POST.get('items')) except Exception: return {'error': ugettext('Invalid JSON')} asset_requests = [] show_image_url = req.POST.get('cover_image') try: p = Podcast( owner=req.user, slug=req.POST.get('slug'), name=req.POST.get('name'), homepage=req.POST.get('homepage'), description=req.POST.get('description'), language=req.POST.get('language'), copyright=req.POST.get('copyright'), subtitle=req.POST.get('subtitle'), author_name=req.POST.get('author_name'), is_explicit=req.POST.get('is_explicit', 'false') == 'true', # This is just temporary for the feed, just so it's usable in the interim cover_image=show_image_url, ) p.save() p.set_category_list(req.POST.get('categories')) imp_req = AssetImportRequest.create( podcast=p, expiration=datetime.datetime.now() + datetime.timedelta(hours=1), image_source_url=p.cover_image) asset_requests.append(imp_req) except Exception as e: if p: try: p.delete() except Exception: pass return {'error': ugettext('There was a problem saving the podcast: %s') % str(e)} created_items = [] try: for item in parsed_items: i = PodcastEpisode( podcast=p, title=item['title'], subtitle=item['subtitle'], publish=datetime.datetime.fromtimestamp(time.mktime(item['publish'])), description=item['description'], duration=int(item['duration']), audio_url=item['audio_url'], audio_size=int(item['audio_size']), audio_type=item['audio_type'], image_url=item['image_url'] or show_image_url, copyright=item['copyright'], license=item['license'], awaiting_import=True) i.save() created_items.append(i) # Audio import request imp_req = AssetImportRequest.create( episode=i, expiration=datetime.datetime.now() + datetime.timedelta(hours=3), audio_source_url=i.audio_url) asset_requests.append(imp_req) if i.image_url == p.cover_image: continue # Image import request imp_req = AssetImportRequest.create( episode=i, expiration=datetime.datetime.now() + datetime.timedelta(hours=3), image_source_url=i.image_url) asset_requests.append(imp_req) except Exception as e: p.delete() for i in created_items: try: i.delete() except Exception: pass return {'error': ugettext('There was a problem saving the podcast items: %s') % str(e)} for ir in asset_requests: ir.save() payloads = (x.get_payload() for x in asset_requests) payloads = importer_worker.prep_payloads(payloads) importer_worker.push_batch(settings.SNS_IMPORT_BUS, payloads) return {'error': False, 'ids': [x.id for x in asset_requests]}
def get_search_results(request, api=False): # get q q = request.GET.get("q", None) if q: q = q.strip().lower() if len(q) > 30: q = q[:30] # get genre genre = request.GET.get("genre", None) if genre: try: genre = Genre.objects.get(name=genre) except Genre.DoesNotExist: genre = None # get lang language = request.GET.get("language", None) if language: try: language = Language.objects.get(name=language) except Language.DoesNotExist: language = None # get order order = request.GET.get("order", None) if api: view = None page = None show = request.GET.get("show", None) try: show = int(show) if show > 200: show = 200 elif show < 1: raise ValueError() except (TypeError, ValueError): show = 50 else: # get view view = request.GET.get("view", "grid") # page page = request.GET.get("page", None) try: page = int(page) if page < 1: raise ValueError() except (TypeError, ValueError): page = 1 # get show show = None # get url url = request.get_full_path() results = Podcast.search( url=url, q=q, genre=genre, language=language, show=show, page=page, order=order, view=view, api=api, ) return results