verejny kontaktnicek #71
Merged
ticvac
merged 10 commits from kontaktnicek_pro_vsecny
into master
2 days ago
Loading…
Reference in new issue
There is no content yet.
Delete Branch 'kontaktnicek_pro_vsecny'
Deleting a branch is permanent. It CANNOT be undone. Continue?
Určitě bez bugů
veřejný kontaktníček v pdf a vcf
'kontaktnicek_vcf',
views.soustredeniKontaktnicekVcfView,
name='soustredeni_kontaktnicek'
),
Tady je nějaké divné odsazení…
help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti)')
kontaktnicek_vcf = models.FileField('kontaktníček vcf', upload_to=generate_filename_kontaktnicek, blank=True,)
kontaktnicek_pdf = models.FileField('kontaktníček pdf', upload_to=generate_filename_kontaktnicek, blank=True,)
Nemá to být
null=True
? (Ale já tomu nerozumím…)if (not request.user in [u.osoba.user for u in soustredeni.ucastnici.all()]):
if not request.user.je_org:
return HttpResponse("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?)
Promiň, jestli jsou připomínky moc „takhle ne“ a málo „takhle ano“. Jen jsem se na to teď kouknu (měl jsem chuť to zamergeovat) a tohle jsem našel a nemám moc času na „takhle ano“. Klidně to tu nech viset, já někdy vyrobím „takhle ano“, případně to rozebereme v úterý…
# generate random string
length = 32
fname = "kontaktnicky/" + timezone.now().strftime('%Y-%m-%d-%H_%M')
fname += ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(length))
Tohle nezachvá příponu, což je spíš bug – když se dívám na soubory na Gimlim, tak chci vědět, co jsou zač.
length = 32
fname = "kontaktnicky/" + timezone.now().strftime('%Y-%m-%d-%H_%M')
fname += ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(length))
return os.path.join(settings.KOREKTURY_PDF_DIR, fname)
Prosím ne
KOREKTURY_PDF_DIR
!!Also: možná je snazší a bezpečnější použít
pathlib
nežos.path.join
…path(
'kontaktnicek_vcf',
views.soustredeniKontaktnicekVcfView,
name='soustredeni_kontaktnicek'
Stejný
name
pro obě URL nevypadá moc správně :-(template_name = 'soustredeni/export_do_abstraktu.html'
pk_url_kwarg = 'soustredeni' # v url bude <int:soustredeni> místo defaultně požadovaného <int:pk>
# kontaktnicek
Diakritika maybe?
return soustredeniKontaktnicekView(request, soustredeni, "pdf")
def soustredeniKontaktnicekVcfView(request, soustredeni):
return soustredeniKontaktnicekView(request, soustredeni, "vcf")
Ty views jsou OK-ish. (Šlo by mít URL typu
kontaktnicek_<typ:str>
a rovnou používat výsledný view, ale asi to nepřidává moc a spíš to zhoršuje čitelnost…)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.je_org: # nebyl jsi tam, nebo nejsi org
Uh, je to ekvivalentní s
if request.user not in […] and not request.user.is_org:
?if not request.user.je_org: # nebyl jsi tam, nebo nejsi org
raise Http404()
if not soustredeni.kontaktnicek_pdf and typ == "pdf": # 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).raise Http404()
if not soustredeni.kontaktnicek_pdf and typ == "pdf": # není k dispozici
raise Http404()
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:
Uh, ten
if not field: ...
byl náznak toho, že není potřeba výčet typů vif (not soustredeni.kontaktnicek_pdf and typ == "pdf") or (not soustredeni.kontaktnicek_vcf and typ == "vcf"):
, sorry za neexplicitnost.if typ == "pdf":
with open(soustredeni.kontaktnicek_pdf.path, 'rb') as pdf:
response = HttpResponse(pdf.read(), content_type='application/pdf')
return response
Možno rovnou:
verejny kontaktnicekto WIP: verejny kontaktnicek 2 days agoWIP: verejny kontaktnicekto verejny kontaktnicek 2 days ago5ccb94d155
into master 2 days agoReviewers
5ccb94d155
.