From a7899e011916c0a47a5c8881af2101fec8a51769 Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 11 Nov 2010 01:28:12 +0000 Subject: [PATCH] Added version-validation of dependent packages upon server start. --- game/evennia.py | 4 +++- game/manage.py | 8 +++++-- src/utils/utils.py | 55 +++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/game/evennia.py b/game/evennia.py index 6b3417241..775180b50 100755 --- a/game/evennia.py +++ b/game/evennia.py @@ -186,4 +186,6 @@ def main(): else: parser.print_help() if __name__ == '__main__': - main() + from src.utils.utils import check_evennia_dependencies + if check_evennia_dependencies(): + main() diff --git a/game/manage.py b/game/manage.py index 93610f900..052f4be45 100755 --- a/game/manage.py +++ b/game/manage.py @@ -113,7 +113,9 @@ except Exception: """ % __file__ print string sys.exit(1) - + +# check required versions + if __name__ == "__main__": from django.core.management import execute_manager if _CREATED_SETTINGS: @@ -124,4 +126,6 @@ if __name__ == "__main__": """ sys.exit() # run the django setups - execute_manager(settings) + from src.utils.utils import check_evennia_dependencies + if check_evennia_dependencies(): + execute_manager(settings) diff --git a/src/utils/utils.py b/src/utils/utils.py index b9dad415d..c0d213696 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -4,7 +4,7 @@ General helper functions that don't fit neatly under any given category. They provide some useful string and conversion methods that might be of use when designing your own game. """ -import os +import os, sys import textwrap import datetime from twisted.internet import threads @@ -368,3 +368,56 @@ def run_async(async_func, at_return=None, at_err=None): logger.log_trace(e) deferred.addErrback(default_errback) + +def check_evennia_dependencies(): + """ + Checks the versions of Evennia's dependencies. + + Returns False if a show-stopping version mismatch is found. + """ + + # defining the requirements + python_min = '2.5' + twisted_min = '10.0' + django_min = '1.2' + south_min = '0.7' + + errstring = "" + no_error = True + + # Python + pversion = ".".join([str(num) for num in sys.version_info if type(num) == int]) + if pversion < python_min: + errstring += "\n WARNING: Python %s used. Evennia recommends version %s or higher (but not 3.x)." % (pversion, python_min) + no_error = False + # Twisted + try: + import twisted + tversion = twisted.version.short() + if tversion < twisted_min: + errstring += "\n WARNING: Twisted %s found. Evennia recommends version %s or higher." % (twisted.version.short(), twisted_min) + except ImportError: + errstring += "\n ERROR: Twisted does not seem to be installed." + no_error = False + # Django + try: + import django + dversion = ".".join([str(num) for num in django.VERSION if type(num) == int]) + if dversion < django_min: + errstring += "\n ERROR: Django version %s found. Evennia requires version %s or higher." % (dversion, django_min) + no_error = False + except ImportError: + errstring += "\n ERROR: Django does not seem to be installed." + no_error = False + # South + try: + import south + sversion = south.__version__ + if sversion < south_min: + errstring += "\n WARNING: South version %s found. Evennia recommends version %s or higher." % (sversion, south_min) + except ImportError: + pass + errstring = errstring.strip() + if errstring: + print "%s\n %s\n%s" % ("-"*78, errstring, '-'*78) + return no_error