verejny kontaktnicek #71

Merged
ticvac merged 10 commits from kontaktnicek_pro_vsecny into master 2024-11-12 21:15:25 +01:00
2 changed files with 17 additions and 16 deletions
Showing only changes of commit c8dd54e8ba - Show all commits

View file

@ -44,15 +44,15 @@ urlpatterns = [
org_required(views.SoustredeniAbstraktyView.as_view()), org_required(views.SoustredeniAbstraktyView.as_view()),
name='soustredeni_abstrakty' name='soustredeni_abstrakty'
), ),
path( path(
'kontaktnicek_pdf', 'kontaktnicek_pdf',
views.soustredeniKontaktnicekPdfView, views.soustredeniKontaktnicekPdfView,
name='soustredeni_kontaktnicek' name='soustredeni_kontaktnicek'
), ),
path( path(
'kontaktnicek_vcf', 'kontaktnicek_vcf',
views.soustredeniKontaktnicekVcfView, views.soustredeniKontaktnicekVcfView,
name='soustredeni_kontaktnicek' name='soustredeni_kontaktnicek'

Stejný name pro obě URL nevypadá moc správně :-(

Stejný `name` pro obě URL nevypadá moc správně :-(
), ),
zelvuska marked this conversation as resolved
Review

Tady je nějaké divné odsazení…

Tady je nějaké divné odsazení…
path( path(
'fotogalerie/', 'fotogalerie/',
@ -60,5 +60,5 @@ urlpatterns = [
), ),
] ]
) )
) )
] ]

View file

@ -2,6 +2,7 @@ from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse from django.http import HttpResponse
from django.views import generic from django.views import generic
from django.contrib.staticfiles.finders import find from django.contrib.staticfiles.finders import find
from django.http import Http404
import csv import csv
import tempfile import tempfile
@ -118,12 +119,12 @@ def soustredeniKontaktnicekView(request, soustredeni, typ):
soustredeni = get_object_or_404(Soustredeni, id=soustredeni) soustredeni = get_object_or_404(Soustredeni, id=soustredeni)
if (not request.user in [u.osoba.user for u in soustredeni.ucastnici.all()]): if (not request.user in [u.osoba.user for u in soustredeni.ucastnici.all()]):
if not request.user.je_org: if not request.user.je_org: # nebyl jsi tam, nebo nejsi org

Asi bych napsal popisnější hlášku, vynechal bych tu část z orgem, a naopak bych tam připsal, že nejsi přihlášený (to se stane asi častěji než že bych se dostal na špatný kontaktníček).

Také si nejsem jistý, jestli HttpResponse je to správné. (Jakože vrátí to něco, co moc nevypadá jako M&M stránky, ne?)

Asi bych napsal popisnější hlášku, vynechal bych tu část z orgem, a naopak bych tam připsal, že nejsi přihlášený (to se stane asi častěji než že bych se dostal na špatný kontaktníček). Také si nejsem jistý, jestli HttpResponse je to správné. (Jakože vrátí to něco, co moc nevypadá jako M&M stránky, ne?)

Uh, je to ekvivalentní s if request.user not in […] and not request.user.is_org:?

Uh, je to ekvivalentní s `if request.user not in […] and not request.user.is_org:`?
return HttpResponse("Nebyl jsi tam nebo nejsi org") raise Http404()
if not soustredeni.kontaktnicek_pdf and typ == "pdf": if not soustredeni.kontaktnicek_pdf and typ == "pdf": # není k dispozici
return HttpResponse("Kontaktníček není k dispozici") raise Http404()

404 není správný návratový kód (kontaktníček zjevně existuje, ale nemám k němu přístup), má být 403 (PermissionDenied se myslím jmenuje ta Djangová výjimka).

404 není správný návratový kód (kontaktníček zjevně existuje, ale nemám k němu přístup), má být 403 (`PermissionDenied` se myslím jmenuje ta Djangová výjimka).
elif not soustredeni.kontaktnicek_vcf and typ == "vcf": elif not soustredeni.kontaktnicek_vcf and typ == "vcf": # není k dispozici

Poněkud se mi nelíbí místní duplikace kódu, když se tam mění dohromady tři věci (až přidáme další, tak někde něco zapomeneme přepsat a bude to bug…). Co třeba:

# typ -> (field, mime_type, otevreni)
kontaktnicky = {
|   'pdf': (soustredeni.kontaktnicek_pdf, 'applcation/pdf', 'rb'),
|   'vcf': (soustredeni.kontaktnicek_vcf, 'text/vcard', 'r'), # vcf je texťák, nevím, jestli je potřeba ho otevítat binárně.
}
try:
	field, mime, otevreni = kontaktnicky[typ]
except KeyError as e:
	raise ValueError("Neznámý typ kontaktníčku") from e
if not field:
|   ...
with open(field.path, otevreni) as soubor:
|   return HttpResponse(soubor.read(), content_type=mime)
Poněkud se mi nelíbí místní duplikace kódu, když se tam mění dohromady tři věci (až přidáme další, tak někde něco zapomeneme přepsat a bude to bug…). Co třeba: ```python3 # typ -> (field, mime_type, otevreni) kontaktnicky = { | 'pdf': (soustredeni.kontaktnicek_pdf, 'applcation/pdf', 'rb'), | 'vcf': (soustredeni.kontaktnicek_vcf, 'text/vcard', 'r'), # vcf je texťák, nevím, jestli je potřeba ho otevítat binárně. } try: field, mime, otevreni = kontaktnicky[typ] except KeyError as e: raise ValueError("Neznámý typ kontaktníčku") from e if not field: | ... with open(field.path, otevreni) as soubor: | return HttpResponse(soubor.read(), content_type=mime) ```

Uh, ten if not field: ... byl náznak toho, že není potřeba výčet typů v if (not soustredeni.kontaktnicek_pdf and typ == "pdf") or (not soustredeni.kontaktnicek_vcf and typ == "vcf"):, sorry za neexplicitnost.

Uh, ten `if not field: ...` byl náznak toho, že není potřeba výčet typů v `if (not soustredeni.kontaktnicek_pdf and typ == "pdf") or (not soustredeni.kontaktnicek_vcf and typ == "vcf"):`, sorry za neexplicitnost.
return HttpResponse("Kontaktníček není k dispozici") raise Http404()
if typ == "pdf": if typ == "pdf":
with open(soustredeni.kontaktnicek_pdf.path, 'rb') as pdf: with open(soustredeni.kontaktnicek_pdf.path, 'rb') as pdf:
@ -134,4 +135,4 @@ def soustredeniKontaktnicekView(request, soustredeni, typ):
response = HttpResponse(vcf.read(), content_type='text/vcard') response = HttpResponse(vcf.read(), content_type='text/vcard')
return response return response
else: else:
return HttpResponse("Neplatný typ kontaktníčku") raise ValueError("Nepodporovaný typ kontaktníčku")