コード例 #1
0
ファイル: views.py プロジェクト: gruzilla/NewsBlur
def opml_upload(request):
    xml_opml = None
    message = "OK"
    code = 1
    payload = {}

    if request.method == 'POST':
        if 'file' in request.FILES:
            logging.user(request, "~FR~SBOPML upload starting...")
            file = request.FILES['file']
            xml_opml = file.read()
            try:
                UploadedOPML.objects.create(user_id=request.user.pk,
                                            opml_file=xml_opml)
            except (UnicodeDecodeError, ValidationError, InvalidStringData):
                folders = None
                code = -1
                message = "There was a Unicode decode error when reading your OPML file. Ensure it's a text file with a .opml or .xml extension. Is it a zip file?"

            opml_importer = OPMLImporter(xml_opml, request.user)
            try:
                folders = opml_importer.try_processing()
            except TimeoutError:
                folders = None
                ProcessOPML.delay(request.user.pk)
                feed_count = opml_importer.count_feeds_in_opml()
                logging.user(
                    request,
                    "~FR~SBOPML upload took too long, found %s feeds. Tasking..."
                    % feed_count)
                payload = dict(folders=folders,
                               delayed=True,
                               feed_count=feed_count)
                code = 2
                message = ""
            except AttributeError:
                code = -1
                message = "OPML import failed. Couldn't parse XML file."
                folders = None

            if folders:
                code = 1
                feeds = UserSubscription.objects.filter(
                    user=request.user).values()
                payload = dict(folders=folders, feeds=feeds)
                logging.user(
                    request,
                    "~FR~SBOPML Upload: ~SK%s~SN~SB~FR feeds" % (len(feeds)))
                UserSubscription.queue_new_feeds(request.user)
                UserSubscription.refresh_stale_feeds(request.user,
                                                     exclude_new=True)
        else:
            message = "Attach an .opml file."
            code = -1

    return HttpResponse(json.encode(
        dict(message=message, code=code, payload=payload)),
                        content_type='text/html')
コード例 #2
0
def ProcessOPML(user_id):
    user = User.objects.get(pk=user_id)
    logging.user(user, "~FR~SBOPML upload (task) starting...")

    opml = UploadedOPML.objects.filter(user_id=user_id).first()
    opml_importer = OPMLImporter(opml.opml_file.encode('utf-8'), user)
    opml_importer.process()

    feed_count = UserSubscription.objects.filter(user=user).count()
    user.profile.send_upload_opml_finished_email(feed_count)
    logging.user(
        user, "~FR~SBOPML upload (task): ~SK%s~SN~SB~FR feeds" % (feed_count))

    UserSubscription.queue_new_feeds(user)
    UserSubscription.refresh_stale_feeds(user, exclude_new=True)