def podcast_new_ep(req, podcast_slug): pod = get_podcast(req, podcast_slug) tz_delta = UserSettings.get_from_user(req.user).get_tz_delta() latest_episode = pod.get_most_recent_episode() ctx = { 'podcast': pod, 'latest_ep': latest_episode, } if not req.POST: base_default = EmptyStringDefaultDict() base_default['publish'] = datetime.datetime.strftime( datetime.datetime.now() + tz_delta, '%Y-%m-%dT%H:%M' # 2015-07-09T12:00 ) ctx['default'] = base_default return _pmrender(req, 'dashboard/episode/page_new.html', ctx) try: publish_parsed = datetime.datetime.strptime(req.POST.get('publish').split('.')[0], ISO_FORMAT) image_url = req.POST.get('image-url') ep = PodcastEpisode( podcast=pod, title=req.POST.get('title'), subtitle=req.POST.get('subtitle'), publish=publish_parsed, description=req.POST.get('description'), duration=int(req.POST.get('duration-hours')) * 3600 + int(req.POST.get('duration-minutes')) * 60 + int(req.POST.get('duration-seconds')), audio_url=signer.unsign(req.POST.get('audio-url')), audio_size=int(req.POST.get('audio-url-size')), audio_type=req.POST.get('audio-url-type'), image_url=signer.unsign(image_url) if image_url else pod.cover_image, copyright=req.POST.get('copyright'), license=req.POST.get('license'), explicit_override=req.POST.get('explicit_override')) ep.set_flair(req.POST, no_save=True) ep.save() if req.POST.get('feedback_prompt'): prompt = EpisodeFeedbackPrompt(episode=ep, prompt=req.POST.get('feedback_prompt')) prompt.save() except Exception as e: raise e ctx['error'] = True ctx['default'] = req.POST return _pmrender(req, 'dashboard/episode/page_new.html', ctx) return redirect('podcast_dashboard', podcast_slug=pod.slug)
def podcast_new_ep(req, podcast_slug): pod = get_podcast(req, podcast_slug) tz_delta = UserSettings.get_from_user(req.user).get_tz_delta() latest_episode = pod.get_most_recent_episode() ctx = { 'podcast': pod, 'latest_ep': latest_episode, } if not req.POST: base_default = EmptyStringDefaultDict() base_default['publish'] = datetime.datetime.strftime( datetime.datetime.now() + tz_delta, '%Y-%m-%dT%H:%M' # 2015-07-09T12:00 ) ctx['default'] = base_default return _pmrender(req, 'dashboard/episode/page_new.html', ctx) try: publish_parsed = datetime.datetime.strptime(req.POST.get('publish').split('.')[0], ISO_FORMAT) image_url = req.POST.get('image-url') ep = PodcastEpisode( podcast=pod, title=req.POST.get('title'), subtitle=req.POST.get('subtitle'), publish=publish_parsed, description=req.POST.get('description'), duration=int(req.POST.get('duration-hours') or 0) * 3600 + int(req.POST.get('duration-minutes') or 0) * 60 + int(req.POST.get('duration-seconds') or 0), audio_url=signer.unsign(req.POST.get('audio-url')), audio_size=int(req.POST.get('audio-url-size')), audio_type=req.POST.get('audio-url-type'), image_url=signer.unsign(image_url) if image_url else pod.cover_image, copyright=req.POST.get('copyright'), license=req.POST.get('license'), explicit_override=req.POST.get('explicit_override')) ep.set_flair(req.POST, no_save=True) ep.save() if req.POST.get('feedback_prompt'): prompt = EpisodeFeedbackPrompt(episode=ep, prompt=req.POST.get('feedback_prompt')) prompt.save() except Exception as e: rollbar.report_exc_info(sys.exc_info(), req) ctx['error'] = True ctx['default'] = req.POST return _pmrender(req, 'dashboard/episode/page_new.html', ctx) 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')[:50], name=req.POST.get('name')[:256], homepage=req.POST.get('homepage')[:500], description=req.POST.get('description'), language=req.POST.get('language')[:16], copyright=req.POST.get('copyright')[:1024], subtitle=req.POST.get('subtitle')[:512], author_name=req.POST.get('author_name', 'Anonymous')[:1024], 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 rollbar.report_exc_info(sys.exc_info(), req) return { 'error': ugettext('There was a problem saving the podcast: %s') % str(e) } created_items = [] try: for item in parsed_items: time_tup = tuple(item.get('publish', ())) i = PodcastEpisode( podcast=p, title=item.get('title', '')[:1023], subtitle=item.get('subtitle', '')[:1023], publish=datetime.datetime.fromtimestamp(time.mktime(time_tup)), description=item.get('description', ''), duration=int(item.get('duration', '0') or 0), audio_url=item.get('audio_url', '')[:512], audio_size=int(item.get('audio_size', '0')), audio_type=item.get('audio_type', 'audio/mp3')[:64], image_url=(item.get('image_url', '') or show_image_url)[:512], copyright=item.get('copyright', '')[:1023], license=item.get('license', '')[:1023], 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 rollbar.report_exc_info(sys.exc_info(), req) return { 'error': ugettext('There was a problem saving the podcast items: %s') % str(e) } for ir in asset_requests: ir.save() payloads = importer_worker.prep_payloads(x.get_payload() for x in asset_requests) importer_worker.push_batch(settings.SNS_IMPORT_BUS, payloads) return { 'error': False, 'ids': [x.id for x in asset_requests], 'elems': {x.id: x.get_json_payload() for x in asset_requests}, }
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]}