Esempio n. 1
0
def download(modeladmin, request, selected):
    buf = StringIO('This is the content of the file')
    return StreamingHttpResponse(FileWrapper(buf))
Esempio n. 2
0
def container_stats(request, container_id):
    container = Container.objects.get_container(container_id, request.user)
    if container:
        return StreamingHttpResponse(stream_response_generator(container))
    return render(request, 'no_access.html')
Esempio n. 3
0
def host_stats(request):
    return StreamingHttpResponse(stream_host_stats())
Esempio n. 4
0
def dataset_detail(request, slug, tablename=""):
    try:
        dataset = Dataset.objects.get(slug=slug)
    except Dataset.DoesNotExist:
        context = {'message': 'Dataset does not exist'}
        return render(request, '404.html', context, status=404)

    if not tablename:
        tablename = dataset.get_default_table().name
        return redirect(
            reverse(
                "core:dataset-table-detail",
                kwargs={
                    "slug": slug,
                    "tablename": tablename
                },
            ))

    try:
        table = dataset.get_table(tablename)
    except Table.DoesNotExist:
        context = {'message': 'Table does not exist'}
        return render(request, '404.html', context, status=404)

    querystring = request.GET.copy()
    page_number = querystring.pop("page", ["1"])[0].strip() or "1"
    download_csv = querystring.pop("format", [""]) == ["csv"]
    try:
        page = int(page_number)
    except ValueError:
        context = {'message': 'Invalid page number.'}
        return render(request, '404.html', context, status=404)

    version = dataset.version_set.order_by("-order").first()
    fields = table.fields

    all_data = table.get_model().objects.filter_by_querystring(querystring)

    if download_csv:
        if all_data.count() > max_export_rows:
            context = {"message": "Max rows exceeded."}
            return render(request, '404.html', context, status=400)

        filename = "{}-{}.csv".format(slug, uuid.uuid4().hex)
        pseudo_buffer = Echo()
        writer = csv.writer(pseudo_buffer, dialect=csv.excel)
        csv_rows = queryset_to_csv(all_data, fields)
        response = StreamingHttpResponse(
            (writer.writerow(row) for row in csv_rows),
            content_type="text/csv;charset=UTF-8",
        )
        response["Content-Disposition"] = 'attachment; filename="{}"'.format(
            filename)
        response.encoding = "UTF-8"
        return response

    paginator = Paginator(all_data, 20)
    data = paginator.get_page(page)

    for key, value in list(querystring.items()):
        if not value:
            del querystring[key]
    context = {
        "data": data,
        "dataset": dataset,
        "table": table,
        "fields": fields,
        "max_export_rows": max_export_rows,
        "query_dict": querystring,
        "querystring": querystring.urlencode(),
        "slug": slug,
        "table": table,
        "total_count": all_data.count(),
        "version": version,
    }
    return render(request, "dataset-detail.html", context)
Esempio n. 5
0
 def download(self, request: Request, token=None):
     media: Media = self.get_object()
     response = StreamingHttpResponse(media.file, content_type=media.mime)
     response[
         'Content-Disposition'] = f'attachment; filename={media.filename}'
     return response
Esempio n. 6
0
 def retrieve(self, request: Request, token=None):
     media: Media = self.get_object()
     return StreamingHttpResponse(media.file, content_type=media.mime)
Esempio n. 7
0
def video_feed(request):
    return StreamingHttpResponse(
        gen(VideoCamera()),
        content_type='multipart/x-mixed-replace; boundary=frame')
Esempio n. 8
0
def displayMap(request, arg):
    if request.method == 'POST':
        if request.POST.get('reportReason', "").strip() != "":
            checkReports = Reports.objects.filter(user_id=request.user.id,
                                                  ex_id=arg,
                                                  ex_name='maps')
            if not checkReports:
                checkReports = Reports.objects.filter(ex_id=arg,
                                                      ex_name='maps')
                infringement = request.POST.get('infringement', False)
                if infringement == "true":
                    infringement = True
                transac = Reports(
                    user_id=request.user.id,
                    reason=request.POST['reportReason'].strip(),
                    ex_id=arg,
                    ex_name='maps',
                    infringement=infringement,
                    posted=timezone.now(),
                )
                transac.save()
                Maps.objects.filter(id=arg).update(
                    amount_reports=F('amount_reports') + 1)
                misc.send_email_to_admin_OnReport({
                    'addr':
                    request.META['HTTP_HOST'] + '/maps/' + arg,
                    'user_id':
                    request.user.id,
                    'reason':
                    request.POST['reportReason'].strip(),
                    'infringement':
                    infringement
                })
                misc.send_email_to_user_OnReport({
                    'addr':
                    request.META['HTTP_HOST'] + '/maps/' + arg,
                    'owner_id':
                    Maps.objects.get(id=arg).user_id,
                    'reason':
                    request.POST['reportReason'].strip(),
                    'resource_type':
                    'map'
                })
                return HttpResponseRedirect('/maps/' + arg)
        elif request.POST.get('mapInfo', False) is not False:
            if request.user.is_superuser:
                Maps.objects.filter(id=arg).update(
                    info=request.POST['mapInfo'].strip())
            else:
                Maps.objects.filter(id=arg, user_id=request.user.id).update(
                    info=request.POST['mapInfo'].strip())
            return HttpResponseRedirect('/maps/' + arg)
        elif request.FILES.get('screenshot', False) is not False:

            handlers.addScreenshot(request, arg, 'map')

        elif request.POST.get('comment', "") != "":
            account_age = misc.user_account_age(request.user)
            if account_age < 24:
                template = loader.get_template('index.html')
                template_args = {
                    'content': 'new_user_action_blocked.html',
                    'hours_remaining': 24 - int(account_age),
                    'title': ' - Action Blocked',
                }

                return StreamingHttpResponse(
                    template.render(template_args, request))

            transac = Comments(
                item_type='maps',
                item_id=int(arg),
                user=request.user,
                content=request.POST['comment'].strip(),
                posted=timezone.now(),
                is_removed=False,
            )
            transac.save()

            commented_map_obj = Maps.objects.get(id=arg)
            if commented_map_obj.user != request.user:
                misc.send_email_to_user_OnComment('maps',
                                                  arg,
                                                  commented_map_obj.user.email,
                                                  info="owner")

            comsObj = Comments.objects.filter(item_type='maps',
                                              item_id=arg,
                                              is_removed=False)
            if comsObj:
                for com in comsObj:
                    if com.user != request.user and com.user != commented_map_obj.user:

                        unsubObj = UnsubscribeComments.objects.filter(
                            item_type='maps', item_id=arg, user=com.user)

                        if not unsubObj:
                            misc.send_email_to_user_OnComment(
                                'maps', arg, com.user.email)

            return HttpResponseRedirect('/maps/' + arg + '/')

    path = os.path.join(settings.BASE_DIR,
                        __name__.split('.')[0], 'data', 'maps', arg)
    oramap_filename = misc.first_oramap_in_directory(path)
    if not oramap_filename:
        return HttpResponseRedirect('/')

    try:
        mapObject = Maps.objects.get(id=arg)
    except:
        return HttpResponseRedirect('/')

    disk_size = os.path.getsize(os.path.join(path, oramap_filename))
    disk_size = misc.sizeof_fmt(disk_size)

    lints = []
    lintObject = Lints.objects.filter(map_id=mapObject.id, item_type='maps')
    lintObject = sorted(lintObject, key=lambda x: (x.posted), reverse=False)
    for lint_item in lintObject:
        lints.append([
            lint_item.version_tag, lint_item.pass_status, lint_item.lint_output
        ])

    reportedByUser = False
    reports = []
    reportObject = Reports.objects.filter(ex_id=mapObject.id, ex_name='maps')
    for item in reportObject:
        try:
            usr = User.objects.get(pk=item.user_id)
            reports.append(
                [usr.username, item.reason, item.infringement, item.posted])
        except:
            pass
        if item.user_id == request.user.id:
            reportedByUser = True

    luaNames = []

    listContent = os.listdir(os.path.join(path, 'content'))

    for fn in listContent:
        if fn.endswith('.lua'):
            luaNames.append(os.path.splitext(fn)[0])

    mapsFromAuthor = Maps.objects.filter(
        author=mapObject.author,
        next_rev=0).exclude(id=mapObject.id).distinct('map_hash').order_by(
            'map_hash', '-posted').exclude(map_hash=mapObject.map_hash)
    if len(mapsFromAuthor) >= 8:
        mapsFromAuthor = random.sample(list(mapsFromAuthor), 8)
    else:
        mapsFromAuthor = random.sample(list(mapsFromAuthor),
                                       len(mapsFromAuthor))

    similarMaps = Maps.objects.filter(
        next_rev=0,
        game_mod=mapObject.game_mod,
        tileset=mapObject.tileset,
        players=mapObject.players,
        map_type=mapObject.map_type,
        width=mapObject.width,
        height=mapObject.height).exclude(map_hash=mapObject.map_hash)[0:8]

    duplicates = Maps.objects.filter(map_hash=mapObject.map_hash).exclude(
        id=mapObject.id)
    if duplicates:
        duplicates = True

    screenshots = Screenshots.objects.filter(ex_name="maps", ex_id=arg)

    try:
        played_counter = urllib.request.urlopen(
            "http://master.openra.net/map_stats?hash=%s" %
            mapObject.map_hash).read().decode()
        played_counter = json.loads(played_counter)
        if played_counter:
            played_counter = played_counter["played"]
        else:
            played_counter = 0
    except:
        played_counter = 'unknown'

    ratesAmount = Rating.objects.filter(ex_id=mapObject.id, ex_name='map')
    ratesAmount = len(ratesAmount)

    comments = misc.get_comments_for_all_revisions(request, 'maps', arg)

    # showing upgrade map button
    show_upgrade_map_button = True

    if not (request.user == mapObject.user or request.user.is_superuser):
        show_upgrade_map_button = False

    if mapObject.next_rev != 0:
        show_upgrade_map_button = False  # upgrade only the latest revision

    if not any([
            mapObject.parser in v
            for v in settings.OPENRA_UPDATE_VERSIONS.values()
    ]):
        show_upgrade_map_button = False  # no compatible update targets

    ###

    map_preview = None
    for sc_item in screenshots:
        if sc_item.map_preview:
            map_preview = sc_item

    license, icons = misc.selectLicenceInfo(mapObject)
    userObject = User.objects.get(pk=mapObject.user_id)
    Maps.objects.filter(id=mapObject.id).update(viewed=mapObject.viewed + 1)

    has_upgrade_logs = mapObject.mapupgradelogs_set.count() > 0

    template = loader.get_template('index.html')
    template_args = {
        'content': 'displayMap.html',
        'request': request,
        'title': ' - Map details - ' + mapObject.title,
        'map': mapObject,
        'userid': userObject,
        'arg': arg,
        'license': license,
        'icons': icons,
        'reports': reports,
        'reported': reportedByUser,
        'luaNames': luaNames,
        'mapsFromAuthor': mapsFromAuthor,
        'similarMaps': similarMaps,
        'screenshots': screenshots,
        'disk_size': disk_size,
        'duplicates': duplicates,
        'played_counter': played_counter,
        'ratesAmount': ratesAmount,
        'REPORTS_PENALTY_AMOUNT': settings.REPORTS_PENALTY_AMOUNT,
        'lints': lints,
        'comments': comments,
        'show_upgrade_map_button': show_upgrade_map_button,
        'map_preview': map_preview,
        'last_parser': settings.OPENRA_VERSIONS[0],
        'has_upgrade_logs': has_upgrade_logs
    }
    return StreamingHttpResponse(template.render(template_args, request))