On 7/25/07, Andrey Khavryuchenko <[EMAIL PROTECTED]> wrote: > > Nimrod, > > NAA> On 7/25/07, Andrey Khavryuchenko <[EMAIL PROTECTED]> wrote: > >> >> Yes, I read carefuly your question and thought the answer was > >> >> straighforward. I don't understand why you don't want decorators, > but you > >> >> could just check the decorator definition to read what it does and copy > >> >> it's code. All you need is decorator name and grep over django > sources :) > >> > NAA> Aren't decorators usable only in views? > >> > >> Decorators are python feature. Django views are regular functions, just > as > >> any other. > > NAA> Sorry I wasn't very clear on that last message, I meant the Django > NAA> db.transactions decorator functions. I am thinking they only work when > NAA> you use them in a view. When you try to use them elsewhere, e.g. a > NAA> Django-based command line app, see below... > > No, you're wrong. Transaction decorators work not only in view functions. > They work anywhere in the web app, provided transaction middleware is > included.
Ah, there we go :) but that's for web apps, though I must admit that I have never really tried adding decorators to non-view methods. But now that you mention it, I have a few non-view method call that need it. So thanks for pointing that out. After mucking around in the Django sources, I eventually figured out that I needed the calls to enter_transaction_management() and friends from within the command line app. > NAA> At least that's what I think. I have a project that required a > NAA> separately running process (running as daemon) that needed access to > NAA> the Django models. Since the code in the daemon is not run in the > NAA> context of a view (no triggering of TransactionMiddleware), > NAA> transactions decorators do not work. I get: > >> > NAA> TransactionManagementError: This code isn't under transaction management > >> > >> Not having read transaction code, can't say what haven't worked in your > >> case. Definitely, something wasn't initialized :) > > NAA> You're right. The app I am talking about is not a web app, rather a > NAA> command line app that I made as a supplement to the web app I made > NAA> using Django. Since it makes no sense to reinvent the wheel, I just > NAA> used Django's ORM system in the command line app. When I tried using > NAA> transactions using the transaction decorator functions I get the error > NAA> above. Likely cause is that the command line app is not using > NAA> middleware, ergo not using TransactionMiddleware, then I needed a way > NAA> to initialize and manage transactions manually. > > A ticket in my queue is similar, so I understand you perfectly. > > Quick glance on django.middleware.transaction shows: > > def process_request(self, request): > """Enters transaction management""" > transaction.enter_transaction_management() > transaction.managed(True) > > def process_exception(self, request, exception): > """Rolls back the database and leaves transaction management""" > if transaction.is_dirty(): > transaction.rollback() > transaction.leave_transaction_management() > > def process_response(self, request, response): > """Commits and leaves transaction management.""" > if transaction.is_managed(): > if transaction.is_dirty(): > transaction.commit() > transaction.leave_transaction_management() > return response > > So in cmd line app you have to call > transaction.enter_transaction_management() > transaction.managed(True) > in initialization and > transaction.leave_transaction_management() > in the end. Not tested, but should work. > > -- > Andrey V Khavryuchenko > Django NewGate - http://www.kds.com.ua/djiggit/ > Development - http://www.kds.com.ua > Call akhavr1975 on www.gizmoproject.com > > > > -- _nimrod_a_abing_ http://abing.gotdns.com/ http://www.preownedcar.com/ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---