From 425d568af17075a4261d58c31b8e46a3914e3332 Mon Sep 17 00:00:00 2001 From: "Maksim A. Boyko" Date: Tue, 9 Oct 2012 17:00:13 -0400 Subject: tools: Add sj_user DB table migration --- manage.py | 2 +- scanneerjammer/__init__.py | 0 scanneerjammer/settings.py | 164 --------------------------------------------- scanneerjammer/urls.py | 21 ------ scanneerjammer/wsgi.py | 28 -------- scannerjammer/__init__.py | 0 scannerjammer/settings.py | 164 +++++++++++++++++++++++++++++++++++++++++++++ scannerjammer/urls.py | 21 ++++++ scannerjammer/wsgi.py | 28 ++++++++ tools/migrate_db.py | 53 ++++++++++++++- 10 files changed, 264 insertions(+), 217 deletions(-) delete mode 100644 scanneerjammer/__init__.py delete mode 100644 scanneerjammer/settings.py delete mode 100644 scanneerjammer/urls.py delete mode 100644 scanneerjammer/wsgi.py create mode 100644 scannerjammer/__init__.py create mode 100644 scannerjammer/settings.py create mode 100644 scannerjammer/urls.py create mode 100644 scannerjammer/wsgi.py diff --git a/manage.py b/manage.py index 639d758..2f8fb23 100755 --- a/manage.py +++ b/manage.py @@ -3,7 +3,7 @@ import os import sys if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "scanneerjammer.settings") + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "scannerjammer.settings") from django.core.management import execute_from_command_line diff --git a/scanneerjammer/__init__.py b/scanneerjammer/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/scanneerjammer/settings.py b/scanneerjammer/settings.py deleted file mode 100644 index 7a53b3f..0000000 --- a/scanneerjammer/settings.py +++ /dev/null @@ -1,164 +0,0 @@ -import os - -# Django settings for scanneerjammer project. - -DEBUG = True -TEMPLATE_DEBUG = DEBUG - -ADMINS = ( - # ('Your Name', 'your_email@example.com'), -) - -MANAGERS = ADMINS - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. - 'NAME': os.path.join(os.path.dirname(__file__), '..', 'sqlite.db',), # Or path to database file if using sqlite3. - 'USER': '', # Not used with sqlite3. - 'PASSWORD': '', # Not used with sqlite3. - 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. - 'PORT': '', # Set to empty string for default. Not used with sqlite3. - } -} - -# Local time zone for this installation. Choices can be found here: -# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name -# although not all choices may be available on all operating systems. -# On Unix systems, a value of None will cause Django to use the same -# timezone as the operating system. -# If running in a Windows environment this must be set to the same as your -# system time zone. -TIME_ZONE = 'America/Chicago' - -# Language code for this installation. All choices can be found here: -# http://www.i18nguy.com/unicode/language-identifiers.html -LANGUAGE_CODE = 'en-us' - -SITE_ID = 1 - -# If you set this to False, Django will make some optimizations so as not -# to load the internationalization machinery. -USE_I18N = True - -# If you set this to False, Django will not format dates, numbers and -# calendars according to the current locale. -USE_L10N = True - -# If you set this to False, Django will not use timezone-aware datetimes. -USE_TZ = True - -# Absolute filesystem path to the directory that will hold user-uploaded files. -# Example: "/home/media/media.lawrence.com/media/" -MEDIA_ROOT = '/home/boyko/www/scannerjammer.com/media/' - -# URL that handles the media served from MEDIA_ROOT. Make sure to use a -# trailing slash. -# Examples: "http://media.lawrence.com/media/", "http://example.com/media/" -MEDIA_URL = '/media/' - -# Absolute path to the directory static files should be collected to. -# Don't put anything in this directory yourself; store your static files -# in apps' "static/" subdirectories and in STATICFILES_DIRS. -# Example: "/home/media/media.lawrence.com/static/" -STATIC_ROOT = '/home/boyko/www/scannerjammer.com/static/' - -# URL prefix for static files. -# Example: "http://media.lawrence.com/static/" -STATIC_URL = '/static/' - -# Additional locations of static files -STATICFILES_DIRS = ( - # Put strings here, like "/home/html/static" or "C:/www/django/static". - # Always use forward slashes, even on Windows. - # Don't forget to use absolute paths, not relative paths. -) - -# List of finder classes that know how to find static files in -# various locations. -STATICFILES_FINDERS = ( - 'django.contrib.staticfiles.finders.FileSystemFinder', - 'django.contrib.staticfiles.finders.AppDirectoriesFinder', -# 'django.contrib.staticfiles.finders.DefaultStorageFinder', -) - -# Make this unique, and don't share it with anybody. -SECRET_KEY = '09r%5&=h+&ssi@ilx3#gflb7toyhy@wg!=ra4(-4a=lkg6+@^#' - -# List of callables that know how to import templates from various sources. -TEMPLATE_LOADERS = ( - 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', -# 'django.template.loaders.eggs.Loader', -) - -MIDDLEWARE_CLASSES = ( - 'django.middleware.common.CommonMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - #'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - # Uncomment the next line for simple clickjacking protection: - # 'django.middleware.clickjacking.XFrameOptionsMiddleware', -) - -ROOT_URLCONF = 'scanneerjammer.urls' - -# Python dotted path to the WSGI application used by Django's runserver. -WSGI_APPLICATION = 'scanneerjammer.wsgi.application' - -TEMPLATE_DIRS = ( - # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". - # Always use forward slashes, even on Windows. - # Don't forget to use absolute paths, not relative paths. -) - -INSTALLED_APPS = ( - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - #'django.contrib.sites', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'django_evolution', - 'backend', - 'frontend', - # Uncomment the next line to enable the admin: - 'django.contrib.admin', - # Uncomment the next line to enable admin documentation: - 'django.contrib.admindocs', -) - -# A sample logging configuration. The only tangible logging -# performed by this configuration is to send an email to -# the site admins on every HTTP 500 error when DEBUG=False. -# See http://docs.djangoproject.com/en/dev/topics/logging for -# more details on how to customize your logging configuration. -LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'filters': { - 'require_debug_false': { - '()': 'django.utils.log.RequireDebugFalse' - } - }, - 'handlers': { - 'mail_admins': { - 'level': 'ERROR', - 'filters': ['require_debug_false'], - 'class': 'django.utils.log.AdminEmailHandler' - } - }, - 'loggers': { - 'django.request': { - 'handlers': ['mail_admins'], - 'level': 'ERROR', - 'propagate': True, - }, - } -} - -AUTH_PROFILE_MODULE = 'backend.SJUserProfile' - -from datetime import datetime -START_TIME = datetime.now() diff --git a/scanneerjammer/urls.py b/scanneerjammer/urls.py deleted file mode 100644 index faaae0b..0000000 --- a/scanneerjammer/urls.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.conf.urls import patterns, include, url - -# Uncomment the next two lines to enable the admin: -from django.contrib import admin -admin.autodiscover() - -urlpatterns = patterns('', - # Examples: - # url(r'^$', 'scanneerjammer.views.home', name='home'), - # url(r'^scanneerjammer/', include('scanneerjammer.foo.urls')), - - # Uncomment the admin/doc line below to enable admin documentation: - url(r'^admin/doc/', include('django.contrib.admindocs.urls')), - - # Uncomment the next line to enable the admin: - url(r'^admin/', include(admin.site.urls)), - - # Backend - url(r'^api/', include('backend.urls')), - #url(r'.*', 'backend.views.redirect'), -) diff --git a/scanneerjammer/wsgi.py b/scanneerjammer/wsgi.py deleted file mode 100644 index 4c3d964..0000000 --- a/scanneerjammer/wsgi.py +++ /dev/null @@ -1,28 +0,0 @@ -""" -WSGI config for scanneerjammer project. - -This module contains the WSGI application used by Django's development server -and any production WSGI deployments. It should expose a module-level variable -named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover -this application via the ``WSGI_APPLICATION`` setting. - -Usually you will have the standard Django WSGI application here, but it also -might make sense to replace the whole Django WSGI application with a custom one -that later delegates to the Django one. For example, you could introduce WSGI -middleware here, or combine a Django application with an application of another -framework. - -""" -import os - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "scanneerjammer.settings") - -# This application object is used by any WSGI server configured to use this -# file. This includes Django's development server, if the WSGI_APPLICATION -# setting points here. -from django.core.wsgi import get_wsgi_application -application = get_wsgi_application() - -# Apply WSGI middleware here. -# from helloworld.wsgi import HelloWorldApplication -# application = HelloWorldApplication(application) diff --git a/scannerjammer/__init__.py b/scannerjammer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/scannerjammer/settings.py b/scannerjammer/settings.py new file mode 100644 index 0000000..6313f64 --- /dev/null +++ b/scannerjammer/settings.py @@ -0,0 +1,164 @@ +import os + +# Django settings for scannerjammer project. + +DEBUG = True +TEMPLATE_DEBUG = DEBUG + +ADMINS = ( + # ('Your Name', 'your_email@example.com'), +) + +MANAGERS = ADMINS + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. + 'NAME': os.path.join(os.path.dirname(__file__), '..', 'sqlite.db',), # Or path to database file if using sqlite3. + 'USER': '', # Not used with sqlite3. + 'PASSWORD': '', # Not used with sqlite3. + 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. + 'PORT': '', # Set to empty string for default. Not used with sqlite3. + } +} + +# Local time zone for this installation. Choices can be found here: +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name +# although not all choices may be available on all operating systems. +# On Unix systems, a value of None will cause Django to use the same +# timezone as the operating system. +# If running in a Windows environment this must be set to the same as your +# system time zone. +TIME_ZONE = 'America/Chicago' + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = 'en-us' + +SITE_ID = 1 + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True + +# If you set this to False, Django will not format dates, numbers and +# calendars according to the current locale. +USE_L10N = True + +# If you set this to False, Django will not use timezone-aware datetimes. +USE_TZ = True + +# Absolute filesystem path to the directory that will hold user-uploaded files. +# Example: "/home/media/media.lawrence.com/media/" +MEDIA_ROOT = '/home/boyko/www/scannerjammer.com/media/' + +# URL that handles the media served from MEDIA_ROOT. Make sure to use a +# trailing slash. +# Examples: "http://media.lawrence.com/media/", "http://example.com/media/" +MEDIA_URL = '/media/' + +# Absolute path to the directory static files should be collected to. +# Don't put anything in this directory yourself; store your static files +# in apps' "static/" subdirectories and in STATICFILES_DIRS. +# Example: "/home/media/media.lawrence.com/static/" +STATIC_ROOT = '/home/boyko/www/scannerjammer.com/static/' + +# URL prefix for static files. +# Example: "http://media.lawrence.com/static/" +STATIC_URL = '/static/' + +# Additional locations of static files +STATICFILES_DIRS = ( + # Put strings here, like "/home/html/static" or "C:/www/django/static". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. +) + +# List of finder classes that know how to find static files in +# various locations. +STATICFILES_FINDERS = ( + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', +# 'django.contrib.staticfiles.finders.DefaultStorageFinder', +) + +# Make this unique, and don't share it with anybody. +SECRET_KEY = '09r%5&=h+&ssi@ilx3#gflb7toyhy@wg!=ra4(-4a=lkg6+@^#' + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = ( + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', +# 'django.template.loaders.eggs.Loader', +) + +MIDDLEWARE_CLASSES = ( + 'django.middleware.common.CommonMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + #'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + # Uncomment the next line for simple clickjacking protection: + # 'django.middleware.clickjacking.XFrameOptionsMiddleware', +) + +ROOT_URLCONF = 'scannerjammer.urls' + +# Python dotted path to the WSGI application used by Django's runserver. +WSGI_APPLICATION = 'scannerjammer.wsgi.application' + +TEMPLATE_DIRS = ( + # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. +) + +INSTALLED_APPS = ( + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + #'django.contrib.sites', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'django_evolution', + 'backend', + 'frontend', + # Uncomment the next line to enable the admin: + 'django.contrib.admin', + # Uncomment the next line to enable admin documentation: + 'django.contrib.admindocs', +) + +# A sample logging configuration. The only tangible logging +# performed by this configuration is to send an email to +# the site admins on every HTTP 500 error when DEBUG=False. +# See http://docs.djangoproject.com/en/dev/topics/logging for +# more details on how to customize your logging configuration. +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'filters': { + 'require_debug_false': { + '()': 'django.utils.log.RequireDebugFalse' + } + }, + 'handlers': { + 'mail_admins': { + 'level': 'ERROR', + 'filters': ['require_debug_false'], + 'class': 'django.utils.log.AdminEmailHandler' + } + }, + 'loggers': { + 'django.request': { + 'handlers': ['mail_admins'], + 'level': 'ERROR', + 'propagate': True, + }, + } +} + +AUTH_PROFILE_MODULE = 'backend.SJUserProfile' + +from datetime import datetime +START_TIME = datetime.now() diff --git a/scannerjammer/urls.py b/scannerjammer/urls.py new file mode 100644 index 0000000..16fe4ac --- /dev/null +++ b/scannerjammer/urls.py @@ -0,0 +1,21 @@ +from django.conf.urls import patterns, include, url + +# Uncomment the next two lines to enable the admin: +from django.contrib import admin +admin.autodiscover() + +urlpatterns = patterns('', + # Examples: + # url(r'^$', 'scannerjammer.views.home', name='home'), + # url(r'^scannerjammer/', include('scannerjammer.foo.urls')), + + # Uncomment the admin/doc line below to enable admin documentation: + url(r'^admin/doc/', include('django.contrib.admindocs.urls')), + + # Uncomment the next line to enable the admin: + url(r'^admin/', include(admin.site.urls)), + + # Backend + url(r'^api/', include('backend.urls')), + #url(r'.*', 'backend.views.redirect'), +) diff --git a/scannerjammer/wsgi.py b/scannerjammer/wsgi.py new file mode 100644 index 0000000..b70598c --- /dev/null +++ b/scannerjammer/wsgi.py @@ -0,0 +1,28 @@ +""" +WSGI config for scannerjammer project. + +This module contains the WSGI application used by Django's development server +and any production WSGI deployments. It should expose a module-level variable +named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover +this application via the ``WSGI_APPLICATION`` setting. + +Usually you will have the standard Django WSGI application here, but it also +might make sense to replace the whole Django WSGI application with a custom one +that later delegates to the Django one. For example, you could introduce WSGI +middleware here, or combine a Django application with an application of another +framework. + +""" +import os + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "scannerjammer.settings") + +# This application object is used by any WSGI server configured to use this +# file. This includes Django's development server, if the WSGI_APPLICATION +# setting points here. +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() + +# Apply WSGI middleware here. +# from helloworld.wsgi import HelloWorldApplication +# application = HelloWorldApplication(application) diff --git a/tools/migrate_db.py b/tools/migrate_db.py index 16bf30c..c47ddee 100755 --- a/tools/migrate_db.py +++ b/tools/migrate_db.py @@ -1,8 +1,26 @@ #!/usr/bin/env python +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) +os.environ['DJANGO_SETTINGS_MODULE'] = 'scannerjammer.settings' + from db import db as DB from pprint import pprint +import django +from datetime import datetime + +from django.conf import settings +from django.contrib.auth.models import User + +from backend.models import SJLike +from backend.models import SJRoom +from backend.models import SJContent +from backend.models import SJSearch +from backend.models import SJUserProfile + class MigrateDB(DB): def __init__(self, *args, **kwargs): @@ -54,7 +72,36 @@ class MigrateDB(DB): if __name__ == '__main__': db = MigrateDB() db.connect() + + # migrate sj_user table for row in db.get_sj_user_table(): - for key, value in row.iteritems(): - print key, ', ', value, ', ', type(value) - print + try: + user = User.objects.get(username=row['username']) + except User.DoesNotExist: + user = User.objects.create_user( + row['username'], + '%s@example.com' % row['username'], + row['password'] + ) + try: + user_profile = user.get_profile() + except django.core.exceptions.ObjectDoesNotExist: + user_profile = SJUserProfile(user=user) + user_profile.lastseen_chat = datetime.fromtimestamp(0) + user_profile.lastseen_webcam = datetime.fromtimestamp(0) + user_profile.save() + + user.date_joined = datetime.fromtimestamp(row['joindate']) + user.last_login = datetime.fromtimestamp(row['seendate']) + user.save() + + user_profile.nickname = row['nickname'] or '' + user_profile.score = row['score'] + user_profile.access = row['access'] + user_profile.bio = row['bio'] or '' + user_profile.lastseen_chat = datetime.fromtimestamp(row['seendate']) + user_profile.save() + + #for key, value in row.iteritems(): + # print key, ', ', value, ', ', type(value) + #print -- cgit v1.2.3-70-g09d2