Commit f8880ad0 authored by Michal Čihař's avatar Michal Čihař

Move requirements check to separate module

It really does not belong to models.
parent 717da786
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
# #
from south.signals import post_migrate from south.signals import post_migrate
from django.db.models.signals import post_syncdb
from django.dispatch import receiver from django.dispatch import receiver
...@@ -32,3 +33,25 @@ def create_permissions_compat(app, **kwargs): ...@@ -32,3 +33,25 @@ def create_permissions_compat(app, **kwargs):
from django.db.models import get_app from django.db.models import get_app
from django.contrib.auth.management import create_permissions from django.contrib.auth.management import create_permissions
create_permissions(get_app(app), (), 0) create_permissions(get_app(app), (), 0)
@receiver(post_syncdb)
@receiver(post_migrate)
def check_versions(sender, app, **kwargs):
'''
Check required versions.
'''
appname = 'weblate.trans.models'
if app == 'trans' or getattr(app, '__name__', '') == appname:
from weblate.trans.requirements import get_versions, check_version
versions = get_versions()
failure = False
for version in versions:
failure |= check_version(*version)
if failure:
raise Exception(
'Some of required modules are missing or too old! '
'Check above output for details.'
)
...@@ -71,11 +71,7 @@ from weblate.trans.validators import ( ...@@ -71,11 +71,7 @@ from weblate.trans.validators import (
validate_repo, validate_repo,
) )
from django.db.models.signals import post_syncdb
from django.dispatch import receiver from django.dispatch import receiver
from south.signals import post_migrate
from distutils.version import LooseVersion
logger = logging.getLogger('weblate') logger = logging.getLogger('weblate')
...@@ -2997,151 +2993,3 @@ class Change(models.Model): ...@@ -2997,151 +2993,3 @@ class Change(models.Model):
class IndexUpdate(models.Model): class IndexUpdate(models.Model):
unit = models.ForeignKey(Unit) unit = models.ForeignKey(Unit)
source = models.BooleanField(default=True) source = models.BooleanField(default=True)
def get_version_module(module, name, url):
try:
mod = __import__(module)
except ImportError:
raise Exception('Failed to import %s, please install %s from %s' % (
module,
name,
url,
))
return mod
def get_versions():
'''
Returns list of used versions.
'''
result = []
name = 'Django'
url = 'https://www.djangoproject.com/'
mod = get_version_module('django', name, url)
result.append((
name,
url,
mod.get_version(),
'1.4',
))
name = 'Django-registration'
url = 'https://bitbucket.org/ubernostrum/django-registration/'
mod = get_version_module('registration', name, url)
result.append((
name,
url,
mod.get_version(),
'0.8',
))
name = 'Translate Toolkit'
url = 'http://toolkit.translatehouse.org/'
mod = get_version_module('translate', name, url)
result.append((
name,
url,
mod.__version__.sver,
'1.9.0',
))
name = 'Whoosh'
url = 'http://bitbucket.org/mchaput/whoosh/'
mod = get_version_module('whoosh', name, url)
result.append((
name,
url,
mod.versionstring(),
'2.3',
))
name = 'GitPython'
url = 'https://github.com/gitpython-developers/GitPython'
mod = get_version_module('git', name, url)
result.append((
name,
url,
mod.__version__,
'0.3',
))
name = 'Git'
url = 'http://git-scm.com/'
mod = get_version_module('git', name, url)
try:
result.append((
name,
url,
mod.Git().version().replace('git version ', ''),
'1.0',
))
except TypeError:
# Happens with too old GitPython
pass
name = 'PyCairo'
url = 'http://cairographics.org/pycairo/'
mod = get_version_module('cairo', name, url)
result.append((
name,
url,
mod.version,
'1.8',
))
name = 'Pango (PyGtk)'
url = 'http://www.pygtk.org/'
mod = get_version_module('pango', name, url)
result.append((
name,
url,
mod.version_string(),
'1.2',
))
name = 'South'
url = 'http://south.aeracode.org/'
mod = get_version_module('south', name, url)
result.append((
name,
url,
mod.__version__,
'0.7',
))
return result
def check_version(name, url, version, expected):
'''
Check for single module version.
'''
if expected is None:
return
if LooseVersion(version) < expected:
print '*** %s <%s> is too old! ***' % (name, url)
print 'Installed version %s, required %s' % (version, expected)
return True
return False
@receiver(post_syncdb)
@receiver(post_migrate)
def check_versions(sender, app, **kwargs):
'''
Check required versions.
'''
if app == 'trans' or getattr(app, '__name__', '') == 'weblate.trans.models':
versions = get_versions()
failure = False
for version in versions:
failure |= check_version(*version)
if failure:
raise Exception(
'Some of required modules are missing or too old! '
'Check above output for details.'
)
# -*- coding: utf-8 -*-
#
# Copyright © 2012 - 2013 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <http://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from distutils.version import LooseVersion
def get_version_module(module, name, url):
'''
Returns module object, on error raises verbose
exception with name and URL.
'''
try:
mod = __import__(module)
except ImportError:
raise Exception('Failed to import %s, please install %s from %s' % (
module,
name,
url,
))
return mod
def get_versions():
'''
Returns list of used versions.
'''
result = []
name = 'Django'
url = 'https://www.djangoproject.com/'
mod = get_version_module('django', name, url)
result.append((
name,
url,
mod.get_version(),
'1.4',
))
name = 'Django-registration'
url = 'https://bitbucket.org/ubernostrum/django-registration/'
mod = get_version_module('registration', name, url)
result.append((
name,
url,
mod.get_version(),
'0.8',
))
name = 'Translate Toolkit'
url = 'http://toolkit.translatehouse.org/'
mod = get_version_module('translate', name, url)
result.append((
name,
url,
mod.__version__.sver,
'1.9.0',
))
name = 'Whoosh'
url = 'http://bitbucket.org/mchaput/whoosh/'
mod = get_version_module('whoosh', name, url)
result.append((
name,
url,
mod.versionstring(),
'2.3',
))
name = 'GitPython'
url = 'https://github.com/gitpython-developers/GitPython'
mod = get_version_module('git', name, url)
result.append((
name,
url,
mod.__version__,
'0.3',
))
name = 'Git'
url = 'http://git-scm.com/'
mod = get_version_module('git', name, url)
try:
result.append((
name,
url,
mod.Git().version().replace('git version ', ''),
'1.0',
))
except TypeError:
# Happens with too old GitPython
pass
name = 'PyCairo'
url = 'http://cairographics.org/pycairo/'
mod = get_version_module('cairo', name, url)
result.append((
name,
url,
mod.version,
'1.8',
))
name = 'Pango (PyGtk)'
url = 'http://www.pygtk.org/'
mod = get_version_module('pango', name, url)
result.append((
name,
url,
mod.version_string(),
'1.2',
))
name = 'South'
url = 'http://south.aeracode.org/'
mod = get_version_module('south', name, url)
result.append((
name,
url,
mod.__version__,
'0.7',
))
return result
def check_version(name, url, version, expected):
'''
Check for single module version.
'''
if expected is None:
return
if LooseVersion(version) < expected:
print '*** %s <%s> is too old! ***' % (name, url)
print 'Installed version %s, required %s' % (version, expected)
return True
return False
...@@ -32,8 +32,9 @@ from django.utils.safestring import mark_safe ...@@ -32,8 +32,9 @@ from django.utils.safestring import mark_safe
from weblate.trans.models import ( from weblate.trans.models import (
Project, SubProject, Translation, Unit, Check, Project, SubProject, Translation, Unit, Check,
Dictionary, Change, get_versions Dictionary, Change,
) )
from weblate.trans.requirements import get_versions
from weblate.lang.models import Language from weblate.lang.models import Language
from weblate.trans.checks import CHECKS from weblate.trans.checks import CHECKS
from weblate.trans.forms import ( from weblate.trans.forms import (
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment