diff options
-rw-r--r-- | accounts/utils/console.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/accounts/utils/console.py b/accounts/utils/console.py index 8af3fb3..fb55030 100644 --- a/accounts/utils/console.py +++ b/accounts/utils/console.py @@ -78,3 +78,42 @@ class TablePrinter(object): def _print_row(self, row): print(self.format_string % tuple(row)) + + +class ConsoleForm(object): + _ready = False + + def __init__(self, formcls, **kwargs): + self.form = formcls() + self._fill(kwargs) + self._ready = True + + def _fill(self, data): + for key, value in data.items(): + field = getattr(self.form, key, None) + if field is not None: + field.data = value + + def print_errors(self): + for field, errors in self.form.errors.items(): + if len(errors) > 1: + print('%s:' % field) + for error in errors: + print(' %s' % error) + else: + print('%s: %s' % (field, errors[0])) + + def __getattr__(self, name): + return getattr(self.form, name) + + def __setattr__(self, name, value): + if self._ready and name not in self.__dict__: + setattr(self.form, name, value) + else: + super(ConsoleForm, self).__setattr__(name, value) + + def __delattr__(self, name): + if self._ready and name not in self.__dict__: + delattr(self.form, name) + else: + super(ConsoleForm, self).__delattr__(name) |