Archive for the ‘code’ Category

Python: Nie będziesz używał **kwargs nadaremnie

Pra­wi­dłowe uży­cie: def foo(bar, *args, **kwargs): frobnicate(bar) baz(*args, **kwargs) Nigdy tak¹: def foo(bar, *args, **kwargs): frobnicate(bar) baz() ¹ Z wyjąt­kiem kilku API, które wyraź­nie rezer­wują sobie moż­li­wość wpro­wa­dze­nia dodat­ko­wych para­me­trów. Dzia­łają tak np. wbu­do­wane sygnały w Django. Ciche poły­ka­nie śmieci w para­me­trach w malow­ni­czy spo­sób zemści się przy pierw­szej lite­rówce w kodzie. I będzie ci […]

To jest mój wątek i nie oddam go nikomu

Bez­sta­no­wość pro­to­kołu HTTP jest fak­tem. Nie­za­leż­nie od tego, czego chciałby autor danej apli­ka­cji. Na przy­kład nie jest prawdą, że jeden pro­ces lub wątek ser­wera jest przy­pi­sany jed­nemu, kon­kret­nemu odwie­dza­ją­cemu stronę. Wybacz­cie zatem łzy, które zakrę­ciły mi się w oczach na widok tego: def _get_taxprocessor(request=None): taxpro­ces­sor = get_thread_variable(‘taxer’, None) if not taxpro­ces­sor: if requ­est: user = request.user […]

Być jak Satchmo

Z pew­no­ścią naczy­ta­łeś się już, jakie to Satchmo nie jest dosko­nałe, zazdro­ścisz i chciał­byś stwo­rzyć coś rów­nie wspa­nia­łego. Dość jed­nak nie­prze­spa­nych nocy, albo­wiem przy­go­to­wa­łem krótki porad­nik, który w kilku kro­kach pozwoli ci dorów­nać mistrzom. Się­gaj tam, gdzie import nie sięga Tak jest, zacznij od stwo­rze­nia modułu z myśl­ni­kiem w nazwie. Nie­stety, oczy­wi­sta nazwa email-auth.py została […]

Python: finanse

Nie dalej jak wczo­raj kolega pode­słał mi łatkę do mojej biblio­teki do słow­nego zapisu liczb i kwot. Nie zdra­dzę od kogo, by chro­nić nie­win­nego. Grunt, że łatka wyglą­dała tak: — to_words_pl.py (upstream) +++ to_words_pl.py (wor­king copy) @@ –82,7 +82,7 @@ ite­ra­tion += 1 if unit: result.append(unit) — result.append(u’%d/100′ % int(remainder * 100)) + result.append(u’%d/100′ % int(round(remainder […]

Python: wyjątkowo głupi pomysł

Nigdy nie rób­cie tak: try: # … except FooExcep­tion, e: # … raise e Wyjątki prze­pusz­cza się tak: try: # … except FooExcep­tion: # … raise Istotna róż­nica polega na nie­znisz­cze­niu całego stosu wywo­łań. Z góry dziękuję.

Django: abstrakcji ciąg dalszy

Tym razem inne podej­ście, natu­ralne dzie­dzi­cze­nie abs­trak­cyj­nych modeli z dwoma dodat­ko­wymi meto­dami. W prze­ci­wień­stwie do poprzed­niego przy­kładu, pozwala uży­wać super() w abs­trak­cyj­nych kla­sach pośred­nich. from django.db import models class AbstractMixin(object): _classcache = {} @classmethod def contribute(cls): return {} @classmethod def construct(cls, *args, **kwargs): attrs = cls.contribute(*args, **kwargs) attrs.update({ ‘__module__’: cls.__module__, ‘Meta’: type(‘Meta’, (), {‘abs­tract’: True}), […]

Django: zabawa z abstrakcją

Zasta­na­wia­li­śmy się ostat­nimi czasy, w jaki spo­sób zbu­do­wać apli­ka­cję tak, by z jed­nej strony była uni­wer­salna (abs­trak­cyjne modele bazowe), a z dru­giej zawie­rała całą nie­zbędną logikę. Pro­blem polega na tym, że — z oczy­wi­stych wzglę­dów — klu­cza obcego do modelu abs­trak­cyj­nego stwo­rzyć się nie da. Pozo­staje więc zwa­lić pracę na pro­gra­mi­stę, który kon­kre­ty­zuje abs­trak­cyjne prototypy, […]

twojastara.py

fat = uni­code print type(ur’mom’) is fat Tak, tak, poni­żej kry­tyki. Za to już nie­długo: seria nie­wy­ja­śnio­nych zna­le­zisk w kodzie Satchmo (czyli jak Pythona uży­wać nie należy).

Django: TestCase i testowanie szablonów

Bar­dzo brzydki hack, oparty o załącz­nik do tic­ketu 7611. Czy­ści wewnętrzny cache Django, ale pozwala testo­wać dzia­ła­nie kodu opie­ra­ją­cego się o ren­de­ro­wa­nie sza­blo­nów bez ryzyka, że apli­ka­cja owe sza­blony nad­pi­sze: import os import sys from django.conf import set­tings from django.template import loader from django.test import Test­Case class TemplateTestCase(TestCase): def _pre_setup(self): self._template_setup() super(TemplateTestCase, self)._pre_setup() def _post_teardown(self): […]

Django: pluralize

Naj­waż­niej­szą rze­czą, jaką powin­ni­ście wie­dzieć na temat fil­tra plu­ra­lize jest ta, żeby go nigdy nie uży­wać. Nigdy. Jego ist­nie­nie wynika z leni­stwa ludzi, któ­rzy nigdy w życiu nie przy­go­to­wy­wali apli­ka­cji do tłu­ma­cze­nia. Jeśli nie wyra­zi­łem się dość jasno, uży­wa­nie fil­tra plu­ra­lize wywoła u cie­bie raka, ste­reo­po­roże i zatwar­dze­nie roz­siane. Jak­kol­wiek spryt­nie by nie wyglą­dał, ten […]

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Poland
This work by Patryk Zawadzki is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Poland.