http://shell.appspot.com/
http://lotrepls.appspot.com/
-
21Oct
-
15Oct
Идея в том, что мы делаем дамп объекта cPickle и сохраняем его в нем же. А после, чтоб узнать, изменился ли объект – делаем его дамп еще раз и проверяем результаты. Так что кода строчек 5
вот что у меня получилось:
-
from cPickle import dumps
-
-
#base class for monitoring changes
-
class ChangesMonitor:
-
_cm_last_dump = None
-
def is_chaged(self):
-
prev_dump = self._cm_last_dump
-
self._cm_last_dump = None
-
cur_dump = dumps(self, -1)
-
self._cm_last_dump = cur_dump
-
return ( ( prev_dump is not None ) and ( prev_dump != cur_dump ) )
-
-
if __name__ == '__main__':
-
print 'Test Example'
-
-
#mix monitoring class with your common class
-
class MyGreateObject(ChangesMonitor,object):
-
one_val = 5
-
second_val = 7
-
def some_changes(self):
-
self.second_val += 5
-
-
#and testing
-
my_obj = MyGreateObject()
-
print my_obj.is_chaged()
-
print my_obj.is_chaged()
-
my_obj.some_changes()
-
print my_obj.is_chaged()
-
print my_obj.is_chaged()
[?]Tags: changes, cPickle, monitoring, Python
-
-
08Oct
Tags: bsd, Google, Linux & Unix, os, window
-
01Oct
Я уже посягал на суверинитет джанги. Но это было давно и не правда. Более того, меня тогда убедили, что делаю я глупости, и я даже убедился сам, в последствии, что на самом деле делаю глупости. Но мысть о том, что urls.py не нужен – не перестает меня беспакоить. Поэтому очередно фин, аморальный бред – называйте как хотите, но мне безумно нравится.
Идея проста. Вьюха и урла всегда вместе – а значит одно должно быть декоратаром для другого.
Итак главный urls.py имеет обычный вид
-
from django.conf.urls.defaults import *
-
-
urlpatterns = patterns('',
-
(r'^someurl/',include('someapp.url_view')),
-
)
/someapp/url_view.py – тут у нас сбстно и хранятся вьюхи с урлами. Как видите, декоратор tourl нам земенил запись в urls.py
-
from django.http import HttpResponse
-
from tourl import tourl
-
-
@tourl(r'^and/$')
-
def and_(request):
-
return HttpResponse('and')
-
-
@tourl(r'^gg/$')
-
def index(request):
-
return HttpResponse('OK')
/someapp/tourl.py – ну и код самого декоратора
-
from django.conf.urls.defaults import *
-
import sys
-
import functools
-
def tourl(url_patern,*args,**kwargs):
-
def paramed_decorator(func):
-
@functools.wraps(func)
-
def decorated(self):
-
return func(self)
-
module =sys.modules[func.__module__]
-
-
if not hasattr(module, 'urlpatterns'):
-
module.urlpatterns = patterns('',)
-
-
module.urlpatterns += patterns('',
-
url(url_patern,decorated,*args,**kwargs),
-
)
-
return decorated
-
return paramed_decorator
Помоему и симпотично и по производительности не бьет. Вобщем конфетка! Что скажите?
PS: Добавил снипет.
PSS: В снипетсах посоветовали добавить functools.wraps
PSS: А еще можно использовать и так
-
from django.http import HttpResponse
-
from tourl import tourl, patterns,url
-
-
-
-
@tourl(r'^and/$')
-
def and_(request):
-
return HttpResponse('and')
-
-
-
def index(request):
-
return HttpResponse('OK')
-
-
tourl(r'^gg/$')(index)
-
-
-
def ordinary(request):
-
return HttpResponse('Ordinary')
-
-
urlpatterns += patterns('',
-
url(r'^ord/$',ordinary)
-
)
[?] -






Recent Comments