Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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},
    }
Пример #4
0
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]}