[django, misc] adds create_or_update to djangos ETLCommand class, adds getitem/setitem/contains dunders to ValueHolder.

This commit is contained in:
Romain Dorgueil
2017-10-22 16:22:28 +02:00
parent 42c1fee6f1
commit 0c58d21b12
2 changed files with 36 additions and 6 deletions

View File

@ -9,9 +9,34 @@ from bonobo.commands.run import get_default_services
from bonobo.ext.console import ConsoleOutputPlugin
from bonobo.util.term import CLEAR_EOL
class ETLCommand(BaseCommand):
GraphType = bonobo.Graph
def create_or_update(self, model, *, defaults=None, save=True, **kwargs):
"""
Create or update a django model instance.
:param model:
:param defaults:
:param kwargs:
:return: object, created, updated
"""
obj, created = model._default_manager.get_or_create(defaults=defaults, **kwargs)
updated = False
if not created:
for k, v in defaults.items():
if getattr(obj, k) != v:
setattr(obj, k, v)
updated = True
if updated and save:
obj.save()
return obj, created, updated
def get_graph(self, *args, **options):
def not_implemented():
raise NotImplementedError('You must implement {}.get_graph() method.'.format(self))

View File

@ -1,7 +1,3 @@
import functools
from functools import partial
def get_name(mixed):
try:
return mixed.__name__
@ -146,10 +142,10 @@ class ValueHolder:
return divmod(other, self._value)
def __pow__(self, other):
return self._value**other
return self._value ** other
def __rpow__(self, other):
return other**self._value
return other ** self._value
def __ipow__(self, other):
self._value **= other
@ -220,6 +216,15 @@ class ValueHolder:
def __len__(self):
return len(self._value)
def __contains__(self, item):
return item in self._value
def __getitem__(self, item):
return self._value[item]
def __setitem__(self, key, value):
self._value[key] = value
def get_attribute_or_create(obj, attr, default):
try: