Merge pull request #1588 from ostcar/python_requirements
Updated python requirements.
This commit is contained in:
commit
e6bc1c5016
@ -14,8 +14,12 @@ def test(args=None):
|
|||||||
Runs the tests.
|
Runs the tests.
|
||||||
"""
|
"""
|
||||||
module = getattr(args, 'module', '')
|
module = getattr(args, 'module', '')
|
||||||
|
if module == '':
|
||||||
|
module = 'tests'
|
||||||
|
else:
|
||||||
|
module = 'tests.{}'.format(module)
|
||||||
return call("DJANGO_SETTINGS_MODULE='tests.settings' coverage run "
|
return call("DJANGO_SETTINGS_MODULE='tests.settings' coverage run "
|
||||||
"./manage.py test tests.%s" % module)
|
"./manage.py test {}".format(module))
|
||||||
|
|
||||||
|
|
||||||
@argument('--plain', action='store_true')
|
@argument('--plain', action='store_true')
|
||||||
@ -84,10 +88,10 @@ def min_requirements(args=None):
|
|||||||
Uses requirements_production.txt by default.
|
Uses requirements_production.txt by default.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from pip.req import parse_requirements
|
import pip
|
||||||
|
|
||||||
def get_lowest_versions(requirements_file):
|
def get_lowest_versions(requirements_file):
|
||||||
for line in parse_requirements(requirements_file):
|
for line in pip.req.parse_requirements(requirements_file, session=pip.download.PipSession()):
|
||||||
yield '%s==%s' % (line.req.key, line.req.specs[0][1])
|
yield '%s==%s' % (line.req.key, line.req.specs[0][1])
|
||||||
|
|
||||||
print('pip install %s' % ' '.join(get_lowest_versions(args.requirements)))
|
print('pip install %s' % ' '.join(get_lowest_versions(args.requirements)))
|
||||||
@ -95,7 +99,7 @@ def min_requirements(args=None):
|
|||||||
|
|
||||||
@command('clear',
|
@command('clear',
|
||||||
help='Deletes unneeded files and folders')
|
help='Deletes unneeded files and folders')
|
||||||
def clear(args=None):
|
def clean(args=None):
|
||||||
"""
|
"""
|
||||||
Deletes all .pyc and .orig files and empty folders.
|
Deletes all .pyc and .orig files and empty folders.
|
||||||
"""
|
"""
|
||||||
@ -103,24 +107,6 @@ def clear(args=None):
|
|||||||
call('find -name "*.orig" -delete')
|
call('find -name "*.orig" -delete')
|
||||||
call('find -type d -empty -delete')
|
call('find -type d -empty -delete')
|
||||||
|
|
||||||
@command('po',
|
|
||||||
help="Generates the po-file for javascript")
|
|
||||||
def po(args=None):
|
|
||||||
# TODO: in the value "" there has to be the entry:
|
|
||||||
# "plural_forms: nplurals=2; plural=(n != 1);"
|
|
||||||
call('find openslides/ -iname "*.js" -or -iname "*.html" | '
|
|
||||||
'xargs xgettext --from-code=UTF-8 --language=JavaScript '
|
|
||||||
'--output=openslides/locale/en/javascript.po')
|
|
||||||
|
|
||||||
|
|
||||||
@argument('-l', '--language')
|
|
||||||
@command('po2json',
|
|
||||||
help="Generates json for a translated po file")
|
|
||||||
def po2json(args=None):
|
|
||||||
lang = args.language
|
|
||||||
call('node_modules/.bin/po2json openslides/locale/%s/javascript.po openslides/static/i18n/%s.json' %
|
|
||||||
(lang, lang))
|
|
||||||
|
|
||||||
|
|
||||||
@command('isort',
|
@command('isort',
|
||||||
help='Sorts all imports in all python files.')
|
help='Sorts all imports in all python files.')
|
||||||
|
16
openslides/agenda/migrations/0002_auto_20150630_0144.py
Normal file
16
openslides/agenda/migrations/0002_auto_20150630_0144.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('agenda', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='item',
|
||||||
|
name='type',
|
||||||
|
field=models.IntegerField(verbose_name='Type', choices=[(1, 'Agenda item'), (2, 'Organizational item')], default=1),
|
||||||
|
),
|
||||||
|
]
|
@ -120,8 +120,7 @@ class Item(RESTModelMixin, models.Model):
|
|||||||
Flag, if the item is finished.
|
Flag, if the item is finished.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type = models.IntegerField(max_length=1, choices=ITEM_TYPE,
|
type = models.IntegerField(choices=ITEM_TYPE, default=AGENDA_ITEM, verbose_name=ugettext_lazy("Type"))
|
||||||
default=AGENDA_ITEM, verbose_name=ugettext_lazy("Type"))
|
|
||||||
"""
|
"""
|
||||||
Type of the agenda item.
|
Type of the agenda item.
|
||||||
|
|
||||||
|
@ -83,7 +83,6 @@ INSTALLED_APPS = (
|
|||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'django.contrib.humanize',
|
'django.contrib.humanize',
|
||||||
'haystack', # full-text-search
|
'haystack', # full-text-search
|
||||||
'ckeditor',
|
|
||||||
'rest_framework',
|
'rest_framework',
|
||||||
'openslides.poll', # TODO: try to remove this line
|
'openslides.poll', # TODO: try to remove this line
|
||||||
'openslides.agenda',
|
'openslides.agenda',
|
||||||
|
@ -179,7 +179,6 @@ class Motion(RESTModelMixin, models.Model):
|
|||||||
use_version.version_number = version_number + 1
|
use_version.version_number = version_number + 1
|
||||||
|
|
||||||
# Necessary line if the version was set before the motion got an id.
|
# Necessary line if the version was set before the motion got an id.
|
||||||
# This is probably a Django bug.
|
|
||||||
use_version.motion = use_version.motion
|
use_version.motion = use_version.motion
|
||||||
|
|
||||||
use_version.save()
|
use_version.save()
|
||||||
@ -339,6 +338,10 @@ class Motion(RESTModelMixin, models.Model):
|
|||||||
attributes, it is populated with the data from the last version
|
attributes, it is populated with the data from the last version
|
||||||
object if such object exists.
|
object if such object exists.
|
||||||
"""
|
"""
|
||||||
|
if self.pk is None:
|
||||||
|
# Do not reference the MotionVersion object to an unsaved motion
|
||||||
|
new_version = MotionVersion(**kwargs)
|
||||||
|
else:
|
||||||
new_version = MotionVersion(motion=self, **kwargs)
|
new_version = MotionVersion(motion=self, **kwargs)
|
||||||
if self.versions.exists():
|
if self.versions.exists():
|
||||||
last_version = self.get_last_version()
|
last_version = self.get_last_version()
|
||||||
|
@ -5,7 +5,7 @@ from openslides.utils.rest_api import router
|
|||||||
|
|
||||||
urlpatterns = patterns(
|
urlpatterns = patterns(
|
||||||
'',
|
'',
|
||||||
url(r'^(?P<url>.*[^/])$', RedirectView.as_view(url='/%(url)s/')),
|
url(r'^(?P<url>.*[^/])$', RedirectView.as_view(url='/%(url)s/', permanent=True)),
|
||||||
url(r'^rest/', include(router.urls)),
|
url(r'^rest/', include(router.urls)),
|
||||||
url(r'^agenda/', include('openslides.agenda.urls')),
|
url(r'^agenda/', include('openslides.agenda.urls')),
|
||||||
url(r'^assignments/', include('openslides.assignments.urls')),
|
url(r'^assignments/', include('openslides.assignments.urls')),
|
||||||
|
28
openslides/users/migrations/0002_auto_20150630_0143.py
Normal file
28
openslides/users/migrations/0002_auto_20150630_0143.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('users', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='groups',
|
||||||
|
field=models.ManyToManyField(
|
||||||
|
verbose_name='groups',
|
||||||
|
related_query_name='user',
|
||||||
|
to='auth.Group',
|
||||||
|
related_name='user_set',
|
||||||
|
help_text='The groups this user belongs to. A user will get all '
|
||||||
|
'permissions granted to each of their groups.',
|
||||||
|
blank=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='last_login',
|
||||||
|
field=models.DateTimeField(verbose_name='last login', blank=True, null=True),
|
||||||
|
),
|
||||||
|
]
|
@ -1,16 +1,14 @@
|
|||||||
# Requirements for OpenSlides in production in alphabetical order
|
# Requirements for OpenSlides in production in alphabetical order
|
||||||
Django>=1.7,<1.8
|
Django>=1.7.1,<1.9
|
||||||
beautifulsoup4>=4.1,<4.4
|
beautifulsoup4>=4.1,<4.4
|
||||||
bleach>=1.4,<1.5
|
bleach>=1.4,<1.5
|
||||||
django-ckeditor-updated>=4.2.3,<4.4
|
django-haystack>=2.1,<2.5
|
||||||
django-haystack>=2.1,<2.4
|
|
||||||
djangorestframework>=3.0.5,<3.2.0
|
djangorestframework>=3.0.5,<3.2.0
|
||||||
jsonfield>=0.9.19,<1.1
|
jsonfield>=0.9.19,<1.1
|
||||||
natsort>=3.2,<3.6
|
natsort>=3.2,<4.1
|
||||||
reportlab>=3.0,<3.2
|
reportlab>=3.0,<3.3
|
||||||
roman>=2.0,<2.1
|
roman>=2.0,<2.1
|
||||||
setuptools>=2.2,<18.0
|
setuptools>=2.2,<19.0
|
||||||
sockjs-tornado>=1.0,<1.1
|
sockjs-tornado>=1.0,<1.1
|
||||||
tornado>=2.1,<4.1
|
whoosh>=2.5.6,<2.8
|
||||||
whoosh>=2.5.6,<2.6
|
|
||||||
|
|
||||||
|
@ -268,7 +268,8 @@ class MarkElectedOtherUser(TestCase):
|
|||||||
self.assertTrue(Assignment.objects.get(pk=self.assignment.pk).elected.filter(username='test_user_Oonei3rahji5jugh1eev').exists())
|
self.assertTrue(Assignment.objects.get(pk=self.assignment.pk).elected.filter(username='test_user_Oonei3rahji5jugh1eev').exists())
|
||||||
|
|
||||||
def test_mark_unelected(self):
|
def test_mark_unelected(self):
|
||||||
self.assignment.set_elected(get_user_model().objects.get(username='test_user_Oonei3rahji5jugh1eev'))
|
user = get_user_model().objects.get(username='test_user_Oonei3rahji5jugh1eev')
|
||||||
|
self.assignment.set_elected(user)
|
||||||
response = self.client.delete(
|
response = self.client.delete(
|
||||||
reverse('assignment-mark-elected', args=[self.assignment.pk]),
|
reverse('assignment-mark-elected', args=[self.assignment.pk]),
|
||||||
{'user': self.user.pk})
|
{'user': self.user.pk})
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
from unittest import skip
|
|
||||||
|
|
||||||
from openslides.core.config import config
|
from openslides.core.config import config
|
||||||
from openslides.motions.exceptions import WorkflowError
|
from openslides.motions.exceptions import WorkflowError
|
||||||
from openslides.motions.models import Motion, State, Workflow
|
from openslides.motions.models import Motion, State, Workflow
|
||||||
@ -56,14 +54,6 @@ class ModelTest(TestCase):
|
|||||||
self._title
|
self._title
|
||||||
self.assertEqual(motion.title, 'v3')
|
self.assertEqual(motion.title, 'v3')
|
||||||
|
|
||||||
@skip
|
|
||||||
def test_absolute_url(self):
|
|
||||||
motion_id = self.motion.id
|
|
||||||
|
|
||||||
self.assertEqual(self.motion.get_absolute_url('detail'), '/motions/%d/' % motion_id)
|
|
||||||
self.assertEqual(self.motion.get_absolute_url('update'), '/motions/%d/edit/' % motion_id)
|
|
||||||
self.assertEqual(self.motion.get_absolute_url('delete'), '/motions/%d/del/' % motion_id)
|
|
||||||
|
|
||||||
def test_supporter(self):
|
def test_supporter(self):
|
||||||
self.assertFalse(self.motion.is_supporter(self.test_user))
|
self.assertFalse(self.motion.is_supporter(self.test_user))
|
||||||
self.motion.supporters.add(self.test_user)
|
self.motion.supporters.add(self.test_user)
|
||||||
|
@ -87,9 +87,6 @@ class TestFunctions(TestCase):
|
|||||||
inner_function()
|
inner_function()
|
||||||
browser_mock.open.assert_called_with('http://localhost:8234')
|
browser_mock.open.assert_called_with('http://localhost:8234')
|
||||||
|
|
||||||
def test_get_database_path_from_settings_memory(self):
|
|
||||||
self.assertEqual(main.get_database_path_from_settings(), ':memory:')
|
|
||||||
|
|
||||||
def test_translate_customizable_strings(self):
|
def test_translate_customizable_strings(self):
|
||||||
self.assertEqual(config['general_event_description'], 'Presentation and assembly system')
|
self.assertEqual(config['general_event_description'], 'Presentation and assembly system')
|
||||||
main.translate_customizable_strings('de')
|
main.translate_customizable_strings('de')
|
||||||
|
Loading…
Reference in New Issue
Block a user