diff --git a/openslides/utils/user/__init__.py b/openslides/utils/user/__init__.py index 36c0e9b86..87b167d8c 100644 --- a/openslides/utils/user/__init__.py +++ b/openslides/utils/user/__init__.py @@ -13,7 +13,7 @@ from openslides.utils.user.signals import receiv_users from openslides.utils.user.api import generate_uid, split_uid, get_user, Users from openslides.utils.user.forms import UserFormField, MultipleUserFormField -from openslides.utils.user.model import UserField, UserMixin +from openslides.utils.user.models import UserField, UserMixin class EmtyUser(UserMixin): diff --git a/openslides/utils/user/api.py b/openslides/utils/user/api.py index 13976aad8..02191896d 100644 --- a/openslides/utils/user/api.py +++ b/openslides/utils/user/api.py @@ -12,6 +12,7 @@ from openslides.utils.user.signals import receiv_users + class Users(object): """ A Storage for a multiplicity of different User-Objects. @@ -48,6 +49,6 @@ def get_user(uid): try: user_prefix, id = split_uid(uid) except TypeError: + from openslides.utils.user import EmtyUser return EmtyUser() - return Users(user_prefix=user_prefix, id=id)[0] diff --git a/openslides/utils/user/forms.py b/openslides/utils/user/forms.py index 436517a82..383754402 100644 --- a/openslides/utils/user/forms.py +++ b/openslides/utils/user/forms.py @@ -14,6 +14,7 @@ from django import forms from openslides.utils.user.api import Users, get_user + class UserChoices(object): def __init__(self, field): self.field = field @@ -40,7 +41,6 @@ class UserFormField(forms.fields.ChoiceField): result = super(forms.fields.ChoiceField, self).__deepcopy__(memo) return result - def _get_choices(self): # If self._choices is set, then somebody must have manually set # the property self.choices. In this case, just return self._choices. diff --git a/openslides/utils/user/model.py b/openslides/utils/user/model.py deleted file mode 100644 index 5c461da88..000000000 --- a/openslides/utils/user/model.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" - openslides.utils.user.models - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Models and ModelFields for the OpenSlides user api. - - :copyright: 2011, 2012 by OpenSlides team, see AUTHORS. - :license: GNU GPL, see LICENSE for more details. -""" - -from django.db import models - -from openslides.utils.user.forms import UserFormField -from openslides.utils.user.api import get_user, generate_uid - - -class UserField(models.fields.Field): - __metaclass__ = models.SubfieldBase - - def __init__(self, *args, **kwargs): - super(UserField, self).__init__(max_length=255, *args, **kwargs) - # TODO: Validate the uid - - def get_internal_type(self): - return "CharField" - - def to_python(self, value): - """ - Convert string value to a User Object. - """ - if hasattr(value, 'uid'): - user = value - else: - user = get_user(value) - - user.prepare_database_save = lambda unused: UserField() \ - .get_prep_value(user) - return user - - def get_prep_value(self, value): - return value.uid - - def value_to_string(self, obj): - value = self._get_val_from_obj(obj) - return self.get_prep_value(value) - - def formfield(self, **kwargs): - defaults = {'form_class': UserFormField} - defaults.update(kwargs) - return super(UserField, self).formfield(**defaults) - - -class UserMixin(object): - @property - def uid(self): - try: - return generate_uid(self.user_prefix, self.pk) - except AttributeError: - raise AttributeError("%s has to have a attribute 'user_prefix'" - % self) - - def __repr__(self): - return 'User: %s' % self.uid diff --git a/openslides/utils/user/models.py b/openslides/utils/user/models.py index 31a8a57c7..c826be061 100644 --- a/openslides/utils/user/models.py +++ b/openslides/utils/user/models.py @@ -1,73 +1,64 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- """ - openslides.utils.user.forms - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + openslides.utils.user.models + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Forms and FormFields for the OpenSlides user api + Models and ModelFields for the OpenSlides user api. :copyright: 2011, 2012 by OpenSlides team, see AUTHORS. :license: GNU GPL, see LICENSE for more details. """ +from django.db import models -class UserChoices(object): - def __init__(self, field): - self.field = field - - def __iter__(self): - if self.field.empty_label is not None: - yield (u"", self.field.empty_label) - for user in Users(): - yield (user.uid, user) +from openslides.utils.user.forms import UserFormField +from openslides.utils.user.api import get_user, generate_uid -class UserFormField(forms.fields.ChoiceField): - def __init__(self, required=True, initial=None, empty_label=u"---------", - *args, **kwargs): - if required and (initial is not None): - self.empty_label = None - else: - self.empty_label = empty_label - forms.fields.Field.__init__(self, required=required, initial=initial, - *args, **kwargs) - self.widget.choices = self.choices - - def __deepcopy__(self, memo): - result = super(forms.fields.ChoiceField, self).__deepcopy__(memo) - return result - - - def _get_choices(self): - # If self._choices is set, then somebody must have manually set - # the property self.choices. In this case, just return self._choices. - if hasattr(self, '_choices'): - return self._choices - return UserChoices(self) - - choices = property(_get_choices, forms.fields.ChoiceField._set_choices) - - def to_python(self, value): - return get_user(value) - - def valid_value(self, value): - return super(UserFormField, self).valid_value(value.uid) - - -class MultipleUserFormField(UserFormField): - widget = forms.widgets.SelectMultiple +class UserField(models.fields.Field): + __metaclass__ = models.SubfieldBase def __init__(self, *args, **kwargs): - super(MultipleUserFormField, self).__init__(empty_label=None, - *args, **kwargs) + super(UserField, self).__init__(max_length=255, *args, **kwargs) + # TODO: Validate the uid + + def get_internal_type(self): + return "CharField" def to_python(self, value): - if hasattr(value, '__iter__'): - return [super(MultipleUserFormField, self).to_python(v) - for v in value] - return super(MultipleUserFormField, self).to_python(value) + """ + Convert string value to a User Object. + """ + if hasattr(value, 'uid'): + user = value + else: + user = get_user(value) - def valid_value(self, value): - if hasattr(value, '__iter__'): - return [super(MultipleUserFormField, self).valid_value(v) - for v in value] - return super(MultipleUserFormField, self).valid_value(value) + user.prepare_database_save = ( + lambda unused: UserField().get_prep_value(user)) + return user + + def get_prep_value(self, value): + return value.uid + + def value_to_string(self, obj): + value = self._get_val_from_obj(obj) + return self.get_prep_value(value) + + def formfield(self, **kwargs): + defaults = {'form_class': UserFormField} + defaults.update(kwargs) + return super(UserField, self).formfield(**defaults) + + +class UserMixin(object): + @property + def uid(self): + try: + return generate_uid(self.user_prefix, self.pk) + except AttributeError: + raise AttributeError("%s has to have a attribute 'user_prefix'" + % self) + + def __repr__(self): + return 'User: %s' % self.uid