Are circular imports in python evil?

Circular imports can be confusing because import does two things:
1. executes imported module code
2. adds imported module to global symbol table of importing module
The former is done only once, while the latter at each import statement. Circular import creates situation when importing module uses imported one with partially executed code. In consequence it will not see objects created after import statement, below code sample demonstrates it.

main.py

print 'import b'
import b
print 'a in globals() {}'.format('a' in globals())
print 'import a'
import a
print 'a in globals() {}'.format('a' in globals())
if __name__ == '__main__':
print 'imports done'
print 'b has y {}, a is b.a {}'.format(hasattr(b, 'y'), a is b.a)

b.by

print "b in, __name__ = {}".format(__name__)
x = 3
print 'b imports a'
import a
y = 5
print "b out"

a.py

print 'a in, __name__ = {}'.format(__name__)
print 'a imports b'
import b
print 'b has x {}'.format(hasattr(b, 'x'))
print 'b has y {}'.format(hasattr(b, 'y'))
print "a out"

python main.py output with comments

import b
b in, __name__ = b # b code execution started
b imports a
a in, __name__ = a # a code execution started
a imports b # b code execution is already in progress
b has x True
b has y False # b defines y after a import,
a out # module a code executed
b out
a in globals() False # import only adds a to main global symbol table
import a
a in globals() True
imports done
b has y True, a is b.a True # all b objects are available

Circular imports are not the ultimate evil to be avoided at all cost. In some frameworks like Flask they are quite natural and tweaking your code to eliminate them does not make the code better.

Migracja WordPress

Za sprawą polityki cenowej dostawcy usługi coroczna migracja ijbd.eu stała się tradycją. W home.pl, którego używam co łatwo sprawdzić za pomocą magicznych zaklęć nslookup i whois, jest duża różnica między regularną i promocyjną ceną usługi hostingowej. Ponieważ nie popieram dyskryminacji stałych klientów korzystam z promocyjnej oferty i co roku zmieniam serwer. Oczywiście trzeba przenieść usługę ze starego serwera na nowy i po to żeby operacja przebiegała sprawnie napisałem tę instrukcję. Mam nadzieję, że instrukcja będzie użyteczna także przy zmianie dostawcy usługi. Czytaj dalej

Narzędzia w Agile w praktyce

Narzędzia w Agile były tematem #107 spotkania Agile Warsaw. Pierwszy punkt Agile Manifesto stawia ludzi i współpracę między nimi ponad narzędziami i procesami (Individuals and interactions over processes and tools) i dlatego dobór narzędzi jest ważny. Złe narzędzia zamiast pomagać będą szkodzić niepotrzebnie kierując uwagę zespołu na utrzymanie narzędzi. Czytaj dalej

Poczta Polityka Prywatność

W ostatnich dniach wypłynęła informacja o ważnym urzędniku amerykańskim, który używał prywatnej poczty elektronicznej do celów służbowych. Tym urzędnikiem jest nie kto inny jak Hilary Clinton, była szefowa Departamentu Stanu ( U.S. State Department) i potencjalna kandydatka partii demokratycznej w wyborach roku 2016. Czytaj dalej

Carbanak – Zorganizowana przestępczość oparta na wiedzy

Niedawno pojawiła się wiadomość o największym jak do tej pory przestępstwie komputerowym. Z kliku banków wykradziono duże sumy, mówi się o łącznej kwocie między 300 a 1000 milionów dolarów. Do ataku wykorzystano mechanizm, który można uznać za konia trojańskiego wspieranego przez zespół analityków. W ataku niezwykła jest skala prowadzonej operacji, która trwała wiele miesięcy a nawet lat i dotknęła kilkudziesięciu banków. Czytaj dalej

Startegiczny outsourcing w chmurach

Jakiś czas temu modne były kontrakty na strategiczny outsourcing, w których globalne koncerny powierzały innym globalnym koncernom kompleksową obsługę informatyczną na ogół przekazując w ramach tej samej umowy znaczną część swojego działu IT. Istniała nawet osobna liga Mega Kontraktów, których całkowita wartość przekraczała miliard dolarów. Potem mega kontrakty popadły w niełaskę, uznano je zna mało elastyczne i tworzące nazbyt skomplikowane więzi z dostawcą. Ostatni jednak zaczęły odżywać w chmurach. Czytaj dalej