fixed update of person_api
This commit is contained in:
parent
73723feb74
commit
545d4be04f
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,6 +4,7 @@
|
||||
*~
|
||||
settings.py
|
||||
database.sqlite
|
||||
!tests/settings.py
|
||||
|
||||
# Package building
|
||||
docs/_build/*
|
||||
|
@ -6,5 +6,6 @@ install:
|
||||
- pip install -r requirements.txt --use-mirrors
|
||||
- python extras/scripts/create_local_settings.py
|
||||
script:
|
||||
- export DJANGO_SETTINGS_MODULE=tests.settings
|
||||
- coverage run ./manage.py test tests && coverage report -m
|
||||
- pep8 --max-line-length=150 --exclude="urls.py," --statistics openslides
|
||||
|
@ -12,6 +12,7 @@ from django.core.management import execute_from_command_line
|
||||
from openslides.main import get_user_config_path, setup_django_environment
|
||||
|
||||
if __name__ == "__main__":
|
||||
if 'DJANGO_SETTINGS_MODULE' not in os.environ:
|
||||
setup_django_environment(
|
||||
get_user_config_path('openslides', 'settings.py'))
|
||||
execute_from_command_line(sys.argv)
|
||||
|
@ -12,7 +12,7 @@
|
||||
from django.db import models
|
||||
|
||||
from .forms import PersonFormField
|
||||
from .api import get_person, generate_person_id, Person
|
||||
from .api import get_person, generate_person_id
|
||||
|
||||
|
||||
class PersonField(models.fields.Field):
|
||||
@ -29,7 +29,7 @@ class PersonField(models.fields.Field):
|
||||
"""
|
||||
Convert string value to a User Object.
|
||||
"""
|
||||
if isinstance(value, Person):
|
||||
if isinstance(value, PersonMixin):
|
||||
return value
|
||||
elif value is None:
|
||||
return None
|
||||
@ -60,5 +60,11 @@ class PersonMixin(object):
|
||||
raise AttributeError("%s has to have a attribute 'person_prefix'"
|
||||
% self)
|
||||
|
||||
def __repr__(self):
|
||||
return 'Person: %s' % self.person_id
|
||||
def __unicode__(self):
|
||||
return 'MyPerson: %s' % self.person_id
|
||||
|
||||
def prepare_database_save(self, field):
|
||||
if type(field) is PersonField:
|
||||
return self.person_id
|
||||
else:
|
||||
return super(PersonMixin, self).prepare_database_save(field)
|
||||
|
0
tests/person_api/__init__.py
Normal file
0
tests/person_api/__init__.py
Normal file
46
tests/person_api/models.py
Normal file
46
tests/person_api/models.py
Normal file
@ -0,0 +1,46 @@
|
||||
from django.db import models
|
||||
from django.dispatch import receiver
|
||||
|
||||
from openslides.utils.person.models import PersonMixin, PersonField
|
||||
from openslides.utils.person.signals import receive_persons
|
||||
from openslides.utils.person.api import Person
|
||||
|
||||
|
||||
class TestPerson(PersonMixin, models.Model):
|
||||
person_prefix = 'test'
|
||||
name = models.CharField(max_length='255')
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class TestPersonToPerson(object):
|
||||
def __init__(self, person_prefix_filter=None, id_filter=None):
|
||||
self.person_prefix_filter = person_prefix_filter
|
||||
self.id_filter = id_filter
|
||||
|
||||
def __iter__(self):
|
||||
if (not self.person_prefix_filter or
|
||||
self.person_prefix_filter == TestPerson.person_prefix):
|
||||
if self.id_filter:
|
||||
try:
|
||||
yield TestPerson.objects.get(pk=self.id_filter)
|
||||
except TestPerson.DoesNotExist:
|
||||
pass
|
||||
else:
|
||||
for user in TestPerson.objects.all():
|
||||
yield user
|
||||
|
||||
|
||||
@receiver(receive_persons, dispatch_uid="test_person")
|
||||
def receive_persons(sender, **kwargs):
|
||||
return TestPersonToPerson(
|
||||
person_prefix_filter=kwargs['person_prefix_filter'],
|
||||
id_filter=kwargs['id_filter'])
|
||||
|
||||
|
||||
class TestModel(models.Model):
|
||||
person = PersonField()
|
||||
|
||||
def __unicode__(self):
|
||||
return self.person
|
34
tests/person_api/tests.py
Normal file
34
tests/person_api/tests.py
Normal file
@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
openslides.person_api.tests
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Unit test for the person api.
|
||||
|
||||
:copyright: 2011 - 2013 by OpenSlides team, see AUTHORS.
|
||||
:license: GNU GPL, see LICENSE for more details.
|
||||
"""
|
||||
|
||||
from django.test.client import Client
|
||||
from django.db.models.query import EmptyQuerySet
|
||||
|
||||
from openslides.utils.test import TestCase
|
||||
|
||||
from .models import TestPerson, TestModel
|
||||
|
||||
|
||||
class ItemTest(TestCase):
|
||||
def setUp(self):
|
||||
self.person1 = TestPerson.objects.create(name='test1')
|
||||
|
||||
def test_update_of_person_field(self):
|
||||
self.assertEqual(self.person1.person_id, 'test:1')
|
||||
|
||||
# save person field
|
||||
test_object = TestModel.objects.create(person=self.person1)
|
||||
self.assertEqual(test_object.person, self.person1)
|
||||
|
||||
# update person field
|
||||
test_object.save()
|
||||
self.assertEqual(TestModel.objects.get(pk=test_object.pk).person, self.person1)
|
36
tests/settings.py
Normal file
36
tests/settings.py
Normal file
@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import openslides.main
|
||||
from openslides.global_settings import *
|
||||
|
||||
# Use 'DEBUG = True' to get more details for server errors
|
||||
# (Default for releases: 'False')
|
||||
DEBUG = True
|
||||
TEMPLATE_DEBUG = DEBUG
|
||||
|
||||
DBPATH = u'database.sqlite'
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': DBPATH,
|
||||
'USER': '',
|
||||
'PASSWORD': '',
|
||||
'HOST': '',
|
||||
'PORT': '',
|
||||
}
|
||||
}
|
||||
|
||||
# Set timezone
|
||||
TIME_ZONE = 'Europe/Berlin'
|
||||
|
||||
# Make this unique, and don't share it with anybody.
|
||||
SECRET_KEY = 'secred'
|
||||
|
||||
# Add OpenSlides plugins to this list (see example entry in comment)
|
||||
INSTALLED_PLUGINS = (
|
||||
'tests.person_api',
|
||||
)
|
||||
|
||||
INSTALLED_APPS += INSTALLED_PLUGINS
|
Loading…
Reference in New Issue
Block a user