Compare commits

...

120 Commits

Author SHA1 Message Date
Felipe 94d51dac79 Update layout.html 2013-09-17 16:13:49 +02:00
Felipe d4edfdb2bc Update about.html 2013-09-17 16:13:10 +02:00
Felipe dc54252660 Updated deploy script to match github repository 2013-09-17 15:46:31 +02:00
Felipe b93544fc58 Updated base requirements (django security update) 2013-09-16 13:16:57 +02:00
Felipe Martín 7ad3c3e675 Added Achievements to the public 2013-06-03 18:04:12 +02:00
Felipe Martín 41e6549742 [utils.miner] Added -sort of- mob miner 2013-06-03 17:42:45 +02:00
Felipe Martín aba1fa1dc0 [utils.miner] Typo: fetched -> found 2013-06-03 16:57:20 +02:00
Felipe Martín ffd32c9fc8 [utils.miner] configuration SAVE defaults to False 2013-06-03 16:57:09 +02:00
Felipe Martín cb025ee214 [utils.miner] Added achievement mining 2013-06-03 16:51:36 +02:00
Felipe Martín d89bd44f8b [utils.miner] Improved output with colouring in python scripts 2013-06-03 16:51:14 +02:00
Felipe Martín 676cd2bf65 [utils.miner] Added coloring utils 2013-06-03 16:50:38 +02:00
Felipe Martín 68d1611c60 Added database.achievements 2013-06-03 16:50:02 +02:00
Felipe Martín 463b7f4a83 Added possibility to show the version list as blocks instead of a list (same as items/blocks). Only internal, no public interface provided. 2013-05-30 18:49:47 +02:00
Felipe Martín a449af2fdc Some improvements:
+ Version list reverse name is now "versions_list" and all sites are using it
+ Blog pages now have a title
2013-05-30 18:34:17 +02:00
Felipe Martín 0f73dcb540 Added more intensity to the blog renderer for dark textures 2013-05-30 11:50:34 +02:00
Felipe Martín 503a0f2cd6 Told DDT to now intercept redirect on development 2013-05-30 11:50:12 +02:00
Felipe Martín 718c3729f6 Added blocks header and footer to the main layout, also container div is now inside the content block, so it's optional 2013-05-30 11:49:51 +02:00
Felipe Martín 46244b9add Fixed user.is_authenticated() in template being a function and not a variable (django tmpl -> jinja) 2013-05-30 11:01:32 +02:00
Felipe Martín c0bc749213 Fixed 404 error using request context variable that wasn't set 2013-05-30 11:00:50 +02:00
Felipe Martín afcd702cec Added django debug toolbar to development settings 2013-05-30 11:00:30 +02:00
Felipe Martin 4d41db4192 Block rotation is now correct 2013-05-29 23:18:57 +02:00
Felipe Martin 89b405d49a Added base block renderer javascript.
Added block renderer to block detail template only for logged in users
2013-05-29 22:11:07 +02:00
Felipe Martin 40e8fec52b Fixed block showing wrong data value 2013-05-29 22:10:29 +02:00
Felipe Martin 217dcf79a3 Navbar is no loger responsive 2013-05-29 20:21:06 +02:00
Felipe Martín 45f37ecf2a Using fixed data_value instead of adding 256 to its value 2013-05-29 18:02:44 +02:00
Felipe Martín 680de44cdf Added draft and user attributes to BlogEntry. 2013-05-29 17:54:01 +02:00
Felipe Martín 24c54e50e5 Added item/block details only to logged in users 2013-05-29 17:38:36 +02:00
Felipe Martín 199dae3695 Added internal_id attribute to blocks and models to store the mined id from java files 2013-05-29 17:06:08 +02:00
Felipe Martín b9ab39991c Improved blocks and items listing layout a lot. Added details URL only viewable by admins 2013-05-29 14:33:33 +02:00
Felipe Martín c2f2588331 Added variables.sass 2013-05-29 14:33:04 +02:00
Felipe Martín 9017bbcb31 Added helper to admin that match items and blocks with a minecraftwiki URL based on their translation name 2013-05-29 14:32:52 +02:00
Felipe Martín 0302aa73e1 Added CSS helper to style links in black instead of their original colour 2013-05-29 14:32:21 +02:00
Felipe Martín ade7ec2284 Added custom action to fix icons matching not only name but also class name with texture type 2013-05-29 13:14:43 +02:00
Felipe Martín b8a1aa33d5 Fixed null fields 2013-05-29 12:42:05 +02:00
Felipe Martín ba908ba0e9 Added version field to Items and blocks.
Added ModelAttributes to admin
2013-05-29 12:39:39 +02:00
Felipe Martín c007605f1f Added ModelAttribute model 2013-05-29 12:29:58 +02:00
Felipe Martín 13a44293e5 Merge branch 'master' into develop
* master:
  Fixed deploy script
2013-05-29 12:24:53 +02:00
Felipe Martín 19db8c9f7d Added SASS thingies to install.sh script 2013-05-29 12:24:39 +02:00
Felipe Martín 21624f14b8 Fixed deploy script 2013-05-29 11:58:24 +02:00
Felipe Martín c9eeb45025 Migrated LESS to SASS 2013-05-29 11:55:06 +02:00
Felipe Martín 6260faf47b Improved sentry error logging.
Minimun logging is now WARNING (up from DEBUG)
Using sentry_id for 500 errors.
Using custom 404 template & view: added sentry logger there.
2013-05-29 11:36:19 +02:00
Felipe Martín 6b78bf286a Updated gitignore file 2013-05-28 17:55:28 +02:00
Felipe Martín 4be098dd2d Added LESS files to controls icons appearance on the site. 2013-05-28 17:54:30 +02:00
Felipe Martín 92fe0f6ba8 Fix: LanguageString.content is now a TextField (up from a Char(512)) - Fixes unicode length problems 2013-05-28 17:04:44 +02:00
Felipe Martín f3c034efb9 Merge branch 'miner-languages' into develop
* miner-languages:
  Blocks and Items now have a name() method who searches for the correct key to obtain its name. Default to ID 14 = English US
  Finished languages miner
  Added Language and LanguageString models
  Added language step to the miner! KEEP IN MIND THAT SNAPSHOT ONLY HAVE ENGLISH!
2013-05-28 16:51:42 +02:00
Felipe Martín a19b8501be Blog finished:
+ Added RedactorJS to the admin (with jquery 2.0 under libs)
+ Added custom styling for default images (centred)
+ Re-sorted less files (shit happens)
+ Added a js script to load redactor under .redactor-editor classname
2013-05-28 16:49:57 +02:00
Felipe Martín 301686a7f3 Blocks and Items now have a name() method who searches for the correct key to obtain its name. Default to ID 14 = English US 2013-05-28 15:45:49 +02:00
Felipe Martín 5b0d0601fc Finished languages miner 2013-05-28 15:45:10 +02:00
Felipe Martín 60b867cf9c Added Language and LanguageString models 2013-05-28 15:44:47 +02:00
Felipe Martín ae7843f9c2 TIME_ZONE is not UTC (from Europe/Madrid)
Added blog app urls to urls.py
Added blog link to navigation menu
Added timezone info to footer
2013-05-28 15:17:29 +02:00
Felipe Martín ffea80c049 Added blog app:
+ BlogEntry model
+ Views for news lists and news detail
+ Migrations
+ Custom date time filter based on settings timezone
2013-05-28 15:15:12 +02:00
Felipe Martín 513946e6fe Added pytz to requirements 2013-05-28 14:38:43 +02:00
Felipe Martín ae475f0dcd Added language step to the miner! KEEP IN MIND THAT SNAPSHOT ONLY HAVE ENGLISH! 2013-05-28 14:02:20 +02:00
Felipe Martín 57a9cee9ba Added blocks to miner, url, views and template (start work) 2013-05-27 17:38:47 +02:00
Felipe Martín e89dd7c12d Added Items mining and saving, views, urls and templates (start work) 2013-05-27 17:30:02 +02:00
Felipe Martín d63c07efd8 Fixed paginator on versions list 2013-05-27 17:27:22 +02:00
Felipe Martín 15a39dbbe8 Ignoring custom CSS 2013-05-27 17:02:58 +02:00
Felipe Martín 53f6fb2281 Added textures up to 1.6_13w21a 2013-05-27 17:01:57 +02:00
Felipe Martín 828fffc589 Added rsanchezbalo to about page 2013-05-27 17:00:46 +02:00
Felipe Martín 3087443dc8 Added html comment at the top of the layout 2013-05-27 16:51:55 +02:00
Felipe Martín 9e87367acb HTMLCleaner middleware only removes comments with an space after the two colons 2013-05-27 16:48:29 +02:00
Felipe Martín 2b588786fe Added a top bar information saying that we are in alpha and there's poor data :) 2013-05-27 16:47:56 +02:00
Felipe Martín 270bf8ee30 Modified design: Added custom LESS files and base border radius (for bootstrap) is now zero. 2013-05-27 16:47:29 +02:00
Felipe Martín 1c94d6883e Added ALLOWED_HOSTS variable to development settings if you wan't to text without debug = true 2013-05-27 16:29:04 +02:00
Felipe Martín d2e0fb1f4e Added custom 404 & 500 error templates 2013-05-27 16:28:40 +02:00
Felipe Martín 95fe6a55d0 TextureAdmin: Added search params 2013-05-27 16:15:42 +02:00
Felipe Martín 1c27064369 Added conf.SAVE parameter to select if you want the database involved or not 2013-05-27 16:13:53 +02:00
Felipe Martín 5fa96a08bb [Miner] textures are now saved to database.
Added local settings for the miner
2013-05-27 16:12:51 +02:00
Felipe Martín 85a52f23c1 Added Texture model 2013-05-27 16:11:45 +02:00
Felipe Martín c87e5028b0 [Miner] Fixed modifications output 2013-05-27 16:11:15 +02:00
Felipe Martín e659a7c762 Improved nginx proxy configuration to bind real addresses. 2013-05-27 13:16:24 +02:00
Felipe Martin aa28fdc965 Drop caches script shows memory before and after the cleaning. 2013-05-25 11:43:25 +02:00
Felipe Martin d4f45fac07 Fixed all links that sentry marked as errors:
+ Some versions don't getting reverse URLs
+ Pages wasn't linking property
+ Using reverse for all URLs
+ Version details can show info from more than one release
2013-05-25 11:27:07 +02:00
Felipe Martín c5b9517573 Fixed header selected classes for navigation 2013-05-24 17:55:47 +02:00
Felipe Martín cdacd63508 Download buttons <button /> -> <a /> 2013-05-24 17:51:29 +02:00
Felipe Martín 8beacd688a Forgot to commit the last fix (download buttons) on version detail 2013-05-24 17:48:29 +02:00
Felipe Martín 6c81aee115 Added separation between download buttons on versions list and detail cause the spaceless middlewarre made them be together. 2013-05-24 17:45:27 +02:00
Felipe Martín 9190ff5fdd Added new info to versions, with a single page for each version.
Added downloads to list
2013-05-24 17:34:36 +02:00
Felipe Martín 0d43f0b3c7 Fixed google analytics position 2013-05-24 15:33:12 +02:00
Felipe Martín db2a9ab0a6 Version have it's jar files on self.jarfiles, also added snapshot boolean. 2013-05-24 13:57:22 +02:00
Felipe Martín 9f6ee806af Added JarFile model 2013-05-24 13:39:28 +02:00
Felipe Martín 829332c930 Base about page 2013-05-24 13:20:45 +02:00
Felipe Martín d6fe24b3fc Fixed layout 2013-05-24 13:17:08 +02:00
Felipe Martín 1d8f89799a Added head template for google analytics 2013-05-24 12:37:53 +02:00
Felipe Martín 16a270c9ef Customized local development version 2013-05-24 12:37:37 +02:00
Felipe Martín 1d63c5c39c Added SITE_TITLE and layout block head_title to manage <title /> tag 2013-05-24 12:37:27 +02:00
Felipe Martín 71411af9bf Added google analytics and app_version to the new template context 2013-05-24 12:21:32 +02:00
Felipe Martín e92e43bd32 Replaced appVersionContext with templateContext with get variables from settings.TEMPLATE_CONTEXT as tuples of key, value 2013-05-24 12:19:39 +02:00
Felipe Martín b84551f78b Fixed fabric script local settings for development not removing correctly 2013-05-24 12:18:16 +02:00
Felipe Martín db488fbb66 Added handler for /favicon.ico 2013-05-24 11:59:20 +02:00
Felipe Martín e94057a908 Added robots.txt handler. 2013-05-24 11:52:12 +02:00
Felipe Martín 3cf1bb4586 Sentry handling all errors now 2013-05-23 19:24:20 +02:00
Felipe Martín f0aff65337 Changed error level for sentry to DEBUG (from ERROR) 2013-05-23 19:05:46 +02:00
Felipe Martín b79b67ac09 Fixed supervisor-gunicorn configuration 2013-05-23 18:55:19 +02:00
Felipe Martín 3bac8469c0 Added supervisor/gunicorn handlers on deploy script. 2013-05-23 18:27:41 +02:00
Felipe Martín d3063e861a Added email. 2013-05-23 18:13:08 +02:00
Felipe Martín fcb52ada1e Added custom context to send git describe to templates 2013-05-23 16:31:44 +02:00
Felipe Martín 2f07391ade Fixed server.sh path on deploy script 2013-05-23 13:42:44 +02:00
Felipe Martín fea572bd83 Finished server configuration with a bash script to start gunicorn monitored by supervisor 2013-05-23 13:40:47 +02:00
Felipe Martín df77cac478 Deploy fixes: supervisor script execution, local settings for logging with raven and logging disabled on main settings 2013-05-23 13:02:19 +02:00
Felipe Martín 1bb173312f Copy supervisor script correctly 2013-05-23 12:49:24 +02:00
Felipe Martín b7ece75cb5 Added supervisor conf 2013-05-23 12:44:09 +02:00
Felipe Martín 8657dad379 drop_caches script chmoed +x 2013-05-23 12:31:11 +02:00
Felipe Martín 85aca4ae39 Added drop caches maintenance scripts 2013-05-23 12:28:46 +02:00
Felipe Martín 6016bb571c Added supervisor install command to install script 2013-05-23 12:12:24 +02:00
Felipe Martín 3d9b207f67 Updated LOGGING settings due to gunicorn failure 2013-05-23 12:12:12 +02:00
Felipe Martín 389d1d20b9 Debug activated on development environment 2013-05-23 12:11:28 +02:00
Felipe Martín 36c843249a Updated production environment:
+ Install script now creates some needed folders and files for the app user
+ Updated nginx.conf file
+ The nginx.conf file is copied to the $HOME/conf folder
+ git describe output is stored.
+ Added raven to requirements and configuration is added to the local_settings file
+ Added unicorn to requirements and configuration is added to the local_settings file
2013-05-23 12:00:50 +02:00
Felipe Martín e39c3fec79 Added base nginx configuration. Added 127.0.0.1 to ALLOWED_HOSTS for nginx reverse proxy 2013-05-22 19:00:13 +02:00
Felipe Martín 1670a42975 Deploy script now compiles bootstrap less files 2013-05-22 18:53:51 +02:00
Felipe Martín 2f239971b8 Install script now starts and enables nginx webserver 2013-05-22 18:53:37 +02:00
Felipe Martín 6cf94e796c Fixed environment settings 2013-05-22 18:31:01 +02:00
Felipe Martín dce7273615 Updated install script with improved output, reminders and more complete postgresql configuration 2013-05-22 18:17:36 +02:00
Felipe Martín 212ea792b3 Added psycopg2 to production requirements and updated local_settings for production environment 2013-05-22 17:59:55 +02:00
Felipe Martín dad71a6114 Fixed python executables and added an alert to the install script 2013-05-22 17:41:58 +02:00
Felipe Martín fc7f349f89 Uncommented GIT section 2013-05-22 17:39:30 +02:00
Felipe Martín 8a76602085 deploy script: CHECK_UPDATE = True (from false) 2013-05-22 17:37:32 +02:00
Felipe Martín f1f1690d89 Updated deploy script and added install.sh for server easy install of dependencies (archlinux based) 2013-05-22 17:36:48 +02:00
Felipe Martín 4152b00958 Testing production local settings 2013-05-22 17:11:02 +02:00
Felipe Martín 133fb6aadb Fixed production.pip -> requirements.pip 2013-05-22 17:07:40 +02:00
2491 changed files with 4724 additions and 183 deletions

6
.gitignore vendored
View File

@ -9,3 +9,9 @@
/utils/miner/jarfile
/utils/miner/*.jar
/utils/miner/*.json
/minecraftcodex/database/static/css/*.css
/minecraftcodex/database/static/js/*.js
/minecraftcodex/blog/static/js/*.js
/*.json
/dev_ddbb.sqlite
.sass-cache

View File

@ -4,9 +4,28 @@ from settings import *
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ALLOWED_HOSTS = [
'localhost',
'127.0.0.1'
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'dev_ddbb.sqlite',
}
}
TEMPLATE_CONTEXT = [
('app_version', '[local development]'),
]
INSTALLED_APPS = INSTALLED_APPS + ('debug_toolbar', )
MIDDLEWARE_CLASSES = MIDDLEWARE_CLASSES + ('debug_toolbar.middleware.DebugToolbarMiddleware',)
INTERNAL_IPS = ('127.0.0.1',)
DEBUG_TOOLBAR_CONFIG = {
'INTERCEPT_REDIRECTS': False
}

View File

@ -1 +1,2 @@
django-debug-toolbar==0.9.4
-r ../requirements.pip

View File

@ -0,0 +1,9 @@
[program:gunicorn]
command = /home/app/server.sh
directory = /home/app
numprocs = 1
user = app
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/gunicorn.log
stderr_logfile = /var/log/supervisor/gunicorn_err.log

View File

@ -5,51 +5,94 @@ from subprocess import call, Popen, PIPE
from shutil import copytree
# Config
APPS_PATH = './app'
CONFIGS_PATH = './config'
APP_DIRECTORY = '%s/minecraftcodex' % APPS_PATH
APP_DIRECTORY = './app'
GIT_REPOSITORY = 'git@bitbucket.org:fmartingr/minecraftcodex.git'
GIT_BRANCH = 'master'
GIT_REPOSITORY = 'git@github.com:fmartingr/minecraftcodex.git'
GIT_DOWNLOAD_DIR = './src'
GIT_APP_PATH = 'minecraftcodex'
GIT_PATH_THIS = '%s/config/production/deploy.py' % GIT_DOWNLOAD_DIR
VIRTUALENV_PATH = './virtualenv'
CHECK_SCRIPT_UPDATE = False
THIS_NAME = 'deploy.py'
CHECK_SCRIPT_UPDATE = True
PYTHON = {
'py': 'python-2.7',
'pip': 'pip-2.7',
'virtualenv': 'virtualenv-2.7'
'py': 'python2',
'pip': 'pip2',
'virtualenv': 'virtualenv2'
}
PIP_REQUIREMENTS_FILES = [
#'%s/config/requirements.pip' % GIT_DOWNLOAD_DIR,
'%s/config/production/requirements.pip' % GIT_DOWNLOAD_DIR
]
CONFIG_FILES = [
(
'%s/config/development/local_settings.py' % GIT_DOWNLOAD_DIR,
'%s/local_settings.py' % CONFIGS_PATH
'%s/config/production/local_settings.py' % GIT_DOWNLOAD_DIR,
'%s/herobrine/local_settings.py' % APP_DIRECTORY
),
(
'%s/config/production/nginx.conf' % GIT_DOWNLOAD_DIR,
'./conf/nginx.conf'
),
(
'%s/config/production/app.supervisor.conf' % GIT_DOWNLOAD_DIR,
'./conf/app.supervisor.conf'
),
(
'%s/config/server/server.sh' % GIT_DOWNLOAD_DIR,
'./server.sh'
),
]
FIXTURES = [
#'%s/config/development/initial_data.json' % GIT_DOWNLOAD_DIR
#'%s/config/production/initial_data.json' % GIT_DOWNLOAD_DIR
]
REQUIREMENTS = [
'git',
'git', 'coffee', 'lessc', 'sass', 'uglifyjs'
]
# Paths relatives to APP DIR
PREPROCESSORS = {
'coffee': {
'items': [
('blog/static/coffee/load_redactor.coffee', 'blog/static/js/load_redactor.big.js'),
],
'params': ''
},
'less': {
'items': [
('database/static/lib/bootstrap/less/bootstrap.less', 'database/static/lib/bootstrap.css'),
('database/static/lib/bootstrap/less/responsive.less', 'database/static/lib/responsive.css'),
],
'params': '-s -x'
},
'sass': {
'items': [
('database/static/sass/style.sass', 'database/static/css/style.css'),
],
'params': '--style compressed'
},
'uglify': {
'items': [
('blog/static/js/load_redactor.big.js', 'blog/static/js/load_redactor.js'),
],
'params': '-c warnings=false'
}
}
ENVIRONMENT_VARIABLES = [
'DATABASE_URL'
'DATABASE_HOST',
'DATABASE_USER',
'DATABASE_PASS',
'DATABASE_PORT',
'DATABASE_NAME'
]
SERVER_PORT = 8001
RUNSERVER_PARAMS = "0.0.0.0:%d" % SERVER_PORT
CONTINUE = True
@ -170,14 +213,14 @@ if not CONTINUE:
print("")
error('Prequisites not met. Abort.')
#error('You should CTRL+C now, errors may occur!')
exit(1)
exit(-1)
# ================== GIT DOWNLOAD ==================
title('Getting last source code')
if not exists(GIT_DOWNLOAD_DIR):
os.mkdir(GIT_DOWNLOAD_DIR)
sub('git clone:')
status = call(['git', 'clone', '-b', GIT_BRANCH, GIT_REPOSITORY, GIT_DOWNLOAD_DIR],
status = call(['git', 'clone', GIT_REPOSITORY, GIT_DOWNLOAD_DIR],
stdout=open(os.devnull, 'wb'),
stderr=open(os.devnull, 'wb'))
else:
@ -188,27 +231,33 @@ else:
check_status(status)
sub('Storing current version:')
status = call('cd %s && git describe' % GIT_DOWNLOAD_DIR,
stdout=open('./conf/app_version', 'wb'),
stderr=open(os.devnull, 'wb'),
shell=True)
check_status(status)
# =========== CHECK SCRIPT UPDATE ==================
if CHECK_SCRIPT_UPDATE:
title('Checking if deploy script is updated on repository')
actual_size = os.stat('./%s.py' % THIS_NAME).st_size
repository_size = os.stat(GIT_PATH_THIS).st_size
if repository_size != actual_size:
sub('Script is updated.', end='\r\n')
title('Checking if deploy script is updated on repository')
actual_size = os.stat('./deploy.py').st_size
repository_size = os.stat(GIT_PATH_THIS).st_size
if repository_size != actual_size and CHECK_SCRIPT_UPDATE:
sub('Script is updated.', end='\r\n')
sub('Deleting old script:')
status = call(['rm', './%s.py' % THIS_NAME], stdout=open(os.devnull, 'wb'))
check_status(status)
sub('Deleting old script:')
status = call(['rm', './deploy.py'], stdout=open(os.devnull, 'wb'))
check_status(status)
sub('Installing new version:')
status = call(['cp', GIT_PATH_THIS, './%s.py' % THIS_NAME],
stdout=open(os.devnull, 'wb'))
check_status(status)
info('Restarting execution!')
os.system('%s ./%s.py' % (PYTHON['py'], THIS_NAME))
exit(0)
else:
sub('Script is up-to-date.', end='\r\n')
sub('Installing new version:')
status = call(['cp', GIT_PATH_THIS, './deploy.py'],
stdout=open(os.devnull, 'wb'))
check_status(status)
info('Restarting execution!')
os.system('%s ./deploy.py' % PYTHON['py'])
exit(0)
else:
sub('Script is up-to-date.', end='\r\n')
# =========== VIRTUALENV =========================
title('Checking and updating virtualenv')
@ -247,9 +296,7 @@ if exists(APP_DIRECTORY):
stdout=open(os.devnull, 'wb'))
check_status(status)
if not exists(APPS_PATH):
call(['mkdir', 'app'])
#call(['mkdir', APP_DIRECTORY])
sub('Copy source to application dir:')
git_path = "%s/%s" % (GIT_DOWNLOAD_DIR, GIT_APP_PATH)
app_path = "%s" % (APP_DIRECTORY)
@ -263,17 +310,13 @@ except Exception as error:
#check_status(status)
title('Installing config files')
if not exists(CONFIGS_PATH):
call(['mkdir', CONFIGS_PATH])
call(['touch', "%s/__init__.py" % CONFIGS_PATH])
for from_file, to_file in CONFIG_FILES:
sub('%s:' % os.path.basename(from_file))
if exists(from_file):
if os.stat(from_file).st_size > 0:
status = call(['cp', from_file, to_file],
stdout=open(os.devnull, 'wb'))
check_status(status, words=[os.path.basename(to_file), 'error!'])
check_status(status)
else:
echo('empty', color=colors.YELLOW)
else:
@ -282,7 +325,125 @@ for from_file, to_file in CONFIG_FILES:
# ============ DATABASE MIGRATIONS ==============
title('Database migrations')
# Syncdb
sub('Not ready yet!')
sub('django syncdb:')
status = call(
'source %s/bin/activate && python %s/manage.py syncdb --noinput' % (
VIRTUALENV_PATH,
APP_DIRECTORY
),
stdout=open(os.devnull, 'wb'),
shell=True, executable='/bin/bash'
)
check_status(status)
if FIXTURES:
# Loading fixtures
for fixture in FIXTURES:
sub('[fixture] %s:' % fixture)
status = call(
'source %s/bin/activate && python %s/manage.py loaddata %s' % (
VIRTUALENV_PATH,
APP_DIRECTORY,
fixture
),
stdout=open(os.devnull, 'wb'),
shell=True, executable='/bin/bash'
)
check_status(status, words=['installed', 'not installed'])
# South migrate
sub('south migrate:')
status = call(
'source %s/bin/activate && python %s/manage.py migrate' % (
VIRTUALENV_PATH,
APP_DIRECTORY
),
stdout=open(os.devnull, 'wb'),
shell=True, executable='/bin/bash'
)
check_status(status)
# ================= COMPILERS ===================
if PREPROCESSORS['coffee']['items']:
title('Coffeescript compiling')
for coffee in PREPROCESSORS['coffee']['items']:
sub("%s:" % coffee[0])
path = "%s/%s" % (APP_DIRECTORY, coffee[0])
path_to = "%s/%s" % (APP_DIRECTORY, coffee[1])
params = ['coffee', '-p', path, '>', path_to]
status = call(" ".join(params),
stdout=open(os.devnull, 'wb'),
shell=True)
check_status(status, words=[os.path.basename(path_to), 'failed'])
if PREPROCESSORS['uglify']['items']:
title('Javascript compressing')
sub('Original files are removed.', end='\r\n')
for javascript in PREPROCESSORS['uglify']['items']:
sub("+ %s:" % javascript[0])
path = "%s/%s" % (APP_DIRECTORY, javascript[0])
path_to = "%s/%s" % (APP_DIRECTORY, javascript[1])
params = ['uglifyjs', path, PREPROCESSORS['uglify']['params'], '>', path_to]
status = call(" ".join(params),
stdout=open(os.devnull, 'wb'),
stderr=open(os.devnull, 'wb'),
shell=True)
check_status(status, words=[os.path.basename(path_to), 'failed'])
sub('- Deleting %s:' % path)
status = call(['rm', path],
stdout=open(os.devnull, 'wb'),
stderr=open(os.devnull, 'wb'))
check_status(status)
if PREPROCESSORS['less']['items']:
title('LESS compiling and CSS compressing')
for item in PREPROCESSORS['less']['items']:
sub("%s:" % item[0])
path = "%s/%s" % (APP_DIRECTORY, item[0])
path_to = "%s/%s" % (APP_DIRECTORY, item[1])
params = ['lessc', PREPROCESSORS['less']['params'], path, '>', path_to]
status = call(" ".join(params),
stdout=open(os.devnull, 'wb'),
shell=True)
check_status(status, words=[os.path.basename(path_to), 'failed'])
if PREPROCESSORS['sass']['items']:
title('SASS compiling and CSS compressing')
for item in PREPROCESSORS['sass']['items']:
sub("%s:" % item[0])
path = "%s/%s" % (APP_DIRECTORY, item[0])
path_to = "%s/%s" % (APP_DIRECTORY, item[1])
params = ['sass', PREPROCESSORS['sass']['params'], path, '>', path_to]
status = call(" ".join(params),
stdout=open(os.devnull, 'wb'),
shell=True)
check_status(status, words=[os.path.basename(path_to), 'failed'])
title('Collecting all staticfiles')
sub('manage.py ollectstatic:')
status = call(
'source %s/bin/activate && python %s/manage.py collectstatic --noinput' % (
VIRTUALENV_PATH,
APP_DIRECTORY
),
stdout=open(os.devnull, 'wb'),
shell=True, executable='/bin/bash'
)
check_status(status)
# ================ SERVER =======================
title('Server')
#sub('Killing all gunicorn_django instances')
#status = call(['killall', 'gunicorn_django'],
# stdout=open(os.devnull, 'wb'),
# stderr=open(os.devnull, 'wb'))
#check_status(status)
sub('Restarting with supervisor')
status = call(['sudo', 'supervisorctl', 'restart', 'gunicorn'],
stdout=open(os.devnull, 'wb'),
stderr=open(os.devnull, 'wb'))
check_status(status)
print("")
success('Finished!')

View File

@ -0,0 +1,56 @@
# Updating system
echo "=> Updating system"
pacman -Syu --noconfirm
echo "=> Creating user APP with its requirements"
useradd app
mkdir /home/app
chown app:app /home/app
su - app -c "mkdir conf"
su - app -c "touch ./conf/app_version"
su - app -c "touch .environment"
su - app -c "echo 'source .environment' > .bash_profile"
echo "=> Installing python"
pacman -S python2 python2-pip python2-virtualenv --noconfirm
echo "=> Installing Postgresql"
pacman -S postgresql --noconfirm
systemd-tmpfiles --create postgresql.conf
mkdir /var/lib/postgres/data
chown -c -R postgres:postgres /var/lib/postgres
su - postgres -c "initdb -D '/var/lib/postgres/data'"
systemctl start postgresql
systemctl enable postgresql
echo "=> Installing nginx"
pacman -S nginx --noconfirm
systemctl start nginx
systemctl enable nginx
echo "=> Installing git"
pacman -S git --noconfirm
echo "=> Installing supervisor"
pacman -S supervisor --noconfirm
systemctl start supervisord
systemctl enable supervisord
echo "=> Installing nodejs and dependencies"
pacman -S nodejs --noconfirm
npm install -g coffee-script
npm install -g uglify-js
npm install -g less
echo "=> Installing ruby and dependencies"
pacman -S ruby --noconfirm
su - app -c "gem install sass"
# Reminders
echo "[REMEMBER!]"
echo " - Create ssh keypair for the app user."
echo " - Configure sudo to let app user execute the maintenance scripts."
echo " - Configure supervisor to include the app configuration."
echo " - Configure nginx to include the app configuration."
echo " - Add ruby PATH to .environment on app user!"

View File

@ -1,4 +1,103 @@
LOCAL_SETTINGS = True
from settings import *
from os import environ
DEBUG = False
TEMPLATE_DEBUG = DEBUG
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': environ['DATABASE_NAME'],
'USER': environ['DATABASE_USER'],
'PASSWORD': environ['DATABASE_PASS'],
'HOST': environ['DATABASE_HOST'],
'PORT': environ['DATABASE_PORT'],
}
}
ALLOWED_HOSTS = [
'minecraftcodex.com',
'www.minecraftcodex.com',
'localhost',
'127.0.0.1',
]
# Staticfiles
STATIC_ROOT = 'static'
STATIC_URL = '/static/'
# Mediafiles
MEDIA_ROOT = 'media'
MEDIA_URL = '/media/'
# Sentry
SENTRY_CLIENT = 'raven.contrib.django.raven_compat.DjangoClient'
RAVEN_CONFIG = {
'dsn': 'http://809b0824b821462db7902f96cf5ad2c9:bf82b9625be84d9fb2f2a15af1009176@sentry.fmartingr.com/4',
}
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'raven.contrib.django.raven_compat.middleware.SentryResponseErrorIdMiddleware',
'raven.contrib.django.raven_compat.middleware.Sentry404CatchMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'herobrine.middleware.HTMLCleanerMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
INSTALLED_APPS = INSTALLED_APPS + (
'raven.contrib.django.raven_compat',
'gunicorn'
)
# Logging
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'root': {
'level': 'WARNING',
'handlers': ['sentry'],
},
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
},
'handlers': {
'sentry': {
'level': 'WARNING',
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
},
'console': {
'level': 'WARNING',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
}
},
'loggers': {
'django.db.backends': {
'level': 'WARNING',
'handlers': ['console', 'sentry'],
'propagate': False,
},
'raven': {
'level': 'WARNING',
'handlers': ['console', 'sentry'],
'propagate': False,
},
'sentry.errors': {
'level': 'WARNING',
'handlers': ['console', 'sentry'],
'propagate': False,
},
},
}
TEMPLATE_CONTEXT = [
('google_analytics', 'UA-41178753-1'),
('app_version', environ['APP_VERSION']),
]

View File

@ -0,0 +1,24 @@
server {
listen 80;
server_name www.minecraftcodex.com minecraftcodex.com;
access_log /home/app/logs/nginx.access.log;
error_log /home/app/logs/nginx.error.log;
server_tokens off;
location /static {
alias /home/app/static/;
expires 30d;
autoindex on;
}
# pass requests for dynamic content to rails/turbogears/zope, et al
location / {
proxy_pass http://127.0.0.1:8000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

View File

@ -1 +0,0 @@
-r ../requirements.pip

View File

@ -0,0 +1,4 @@
psycopg2==2.5
raven==3.3.7
gunicorn==0.17.4
-r ../requirements.pip

View File

@ -1,4 +1,5 @@
Django==1.5.1
Django==1.5.4
jingo==0.6.1
django-grappelli==2.4.4
South==0.7.6
django-grappelli==2.4.6
South==0.8.2
pytz==2013d

4
config/server/drop_caches.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
free -h
echo 3 > /proc/sys/vm/drop_caches
free -h

17
config/server/server.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/bash
set -e
LOGFILE=/home/app/logs/gunicorn.log
LOGDIR=$(dirname $LOGFILE)
NUM_WORKERS=1
USER=app
GROUP=app
SETTINGS="herobrine.settings"
cd /home/app
source .environment
source ./virtualenv/bin/activate
test -d $LOGDIR || mkdir -p $LOGDIR
exec gunicorn_django app --settings=$SETTINGS -w $NUM_WORKERS \
--user=$USER --group=$GROUP --log-level=debug \
--log-file=$LOGFILE 2>>$LOGFILE

2
fabfile.py vendored
View File

@ -175,9 +175,9 @@ def run():
path = getcwd()
with settings(hide('warnings', 'running'),
warn_only=True):
local('rm ./minecraftcodex/herobrine/local_settings.py')
local('ln -s %s/config/development/local_settings.py %s/minecraftcodex/herobrine/local_settings.py' % (path, path))
local('python minecraftcodex/manage.py runserver')
local('rm ./minecraftcodex/herobrine/local_settings.py')
def test():
if not active_virtualenv():

View File

View File

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'BlogEntry'
db.create_table(u'blog_blogentry', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=128)),
('date', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2013, 5, 28, 0, 0))),
('content', self.gf('django.db.models.fields.TextField')()),
('slug', self.gf('django.db.models.fields.SlugField')(max_length=128)),
))
db.send_create_signal('blog', ['BlogEntry'])
def backwards(self, orm):
# Deleting model 'BlogEntry'
db.delete_table(u'blog_blogentry')
models = {
'blog.blogentry': {
'Meta': {'ordering': "['date']", 'object_name': 'BlogEntry'},
'content': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 5, 28, 0, 0)'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '128'})
}
}
complete_apps = ['blog']

View File

@ -0,0 +1,85 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'BlogEntry.draft'
db.add_column(u'blog_blogentry', 'draft',
self.gf('django.db.models.fields.BooleanField')(default=True),
keep_default=False)
# Adding field 'BlogEntry.user'
db.add_column(u'blog_blogentry', 'user',
self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['auth.User']),
keep_default=False)
# Changing field 'BlogEntry.date'
db.alter_column(u'blog_blogentry', 'date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True))
def backwards(self, orm):
# Deleting field 'BlogEntry.draft'
db.delete_column(u'blog_blogentry', 'draft')
# Deleting field 'BlogEntry.user'
db.delete_column(u'blog_blogentry', 'user_id')
# Changing field 'BlogEntry.date'
db.alter_column(u'blog_blogentry', 'date', self.gf('django.db.models.fields.DateTimeField')())
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'blog.blogentry': {
'Meta': {'ordering': "['-date']", 'object_name': 'BlogEntry'},
'content': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'draft': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}
complete_apps = ['blog']

View File

@ -0,0 +1,48 @@
from django.db import models
from django.contrib import admin
import datetime
from django.utils.timezone import utc
from django import forms
from django.contrib.auth.models import User
# Create your models here.
class BlogEntry(models.Model):
title = models.CharField(max_length=128)
date = models.DateTimeField(auto_now_add=True)
content = models.TextField()
slug = models.SlugField(max_length=128)
draft = models.BooleanField(default=True)
user = models.ForeignKey(User)
class Meta:
app_label = 'blog'
ordering = ['-date']
class BlogEntryAdmin(admin.ModelAdmin):
list_display = ('title', 'date', )
list_display_links = ('title', )
list_filter = ('date', )
search_fields = ('title', 'content', )
prepopulated_fields = {"slug": ("title",)}
formfield_overrides = {
models.TextField: {
'widget': forms.Textarea(attrs={'class': 'redactor-editor'})
},
}
class Media:
css = {
"all": ("lib/redactor.css",)
}
js = (
"lib/jquery.2.0.0.js",
"lib/redactor.8.2.5.js",
"js/load_redactor.js",
)
admin.site.register(BlogEntry, BlogEntryAdmin)

View File

@ -0,0 +1,4 @@
window.onload = ->
items = document.querySelectorAll '.redactor-editor'
for item in items
$(item).redactor()

View File

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,39 @@
{% extends "layout.html" %}
{% block head_title %}
{{ super() }} | Blog
{% endblock %}
{% block content %}
<div class="container">
<h1>Blog</h1>
{% for item in page.object_list %}
<hr />
<article class="blog-entry">
<h2><a href="/blog/{{ item.date.year }}/{{ item.date.month }}/{{ item.date.day }}/{{ item.slug }}">{{ item.title }}</a></h2>
<div>
<i class="icon-calendar"></i> {{ item.date|dt('%B %e, %Y') }}
&nbsp;
<i class="icon-user"></i> {{ item.user.first_name }}
{% if item.draft %}
<span class="badge badge-warning">
This post is a draft
</span>
{% endif %}
</div>
<div class="content">{{ item.content|safe }}</div>
</article>
{% endfor %}
{% if paginator.num_pages > 1 %}
<div class="pagination pagination-centered">
<ul>
{% for p in range(1, paginator.num_pages+1) %}
<li {% if p == page_number %}class="active"{% endif %}>
<a href="{{ url('blocks_list') }}?page={{ p }}">{{ p }}</a>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
</div>
{% endblock %}

View File

@ -0,0 +1,22 @@
{% extends "layout.html" %}
{% block head_title %}
{{ super() }} | Blog | {{ item.title }}
{% endblock %}
{% block content %}
<div class="container">
<p><a href="{{ url('blog_list') }}"><i class="icon-arrow-left"></i> Go back</a></p>
<article class="blog-entry">
<h1>{{ item.title }}</h1>
<div>
<i class="icon-calendar"></i> {{ item.date|dt('%B %e, %Y') }}
&nbsp;
<i class="icon-user"></i> {{ item.user.first_name }}
</div>
<div class="content">
{{ item.content|safe }}
</div>
</article>
</div>
{% endblock %}

View File

@ -0,0 +1,16 @@
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)

View File

@ -0,0 +1,55 @@
from blog.models import BlogEntry
from django.core.paginator import Paginator
from django.shortcuts import render_to_response
from django.template import RequestContext
def blog(request):
section = 'blog'
if request.user.is_authenticated():
items = BlogEntry.objects.all()
else:
items = BlogEntry.objects.filter(draft=False)
paginator = Paginator(items, 4)
page_number = 1
if 'page' in request.GET:
page_number = int(request.GET['page'])
page = paginator.page(page_number)
data = {
'section': section,
'page': page,
'page_number': page_number,
'paginator': paginator,
}
context = RequestContext(request, data)
return render_to_response('blog.html', context_instance=context)
def blog_item(request, year, month, day, slug):
if request.user.is_authenticated():
item = BlogEntry.objects.get(
slug=slug,
date__year=int(year),
date__month=int(month),
date__day=int(day)
)
else:
item = BlogEntry.objects.get(
slug=slug,
date__year=int(year),
date__month=int(month),
date__day=int(day),
draft=False
)
data = {
'item': item
}
context = RequestContext(request, data)
return render_to_response('blog_entry.html', context_instance=context)

View File

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'JarFile'
db.create_table(u'database_jarfile', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('version', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['database.Version'])),
('url', self.gf('django.db.models.fields.URLField')(max_length=200)),
))
db.send_create_signal('database', ['JarFile'])
def backwards(self, orm):
# Deleting model 'JarFile'
db.delete_table(u'database_jarfile')
models = {
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'JarFile.description'
db.add_column(u'database_jarfile', 'description',
self.gf('django.db.models.fields.CharField')(default='client', max_length=256),
keep_default=False)
def backwards(self, orm):
# Deleting field 'JarFile.description'
db.delete_column(u'database_jarfile', 'description')
models = {
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Version.snapshot'
db.add_column(u'database_version', 'snapshot',
self.gf('django.db.models.fields.BooleanField')(default=False),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Version.snapshot'
db.delete_column(u'database_version', 'snapshot')
models = {
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,59 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'Texture'
db.create_table(u'database_texture', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('name', self.gf('django.db.models.fields.CharField')(max_length=32)),
('image', self.gf('django.db.models.fields.CharField')(max_length=64)),
))
db.send_create_signal(u'database', ['Texture'])
def backwards(self, orm):
# Deleting model 'Texture'
db.delete_table(u'database_texture')
models = {
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Texture.type'
db.add_column(u'database_texture', 'type',
self.gf('django.db.models.fields.CharField')(default='items', max_length=16),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Texture.type'
db.delete_column(u'database_texture', 'type')
models = {
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'type': ('django.db.models.fields.CharField', [], {'default': "'items'", 'max_length': '16'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,68 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'Item'
db.create_table(u'database_item', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('internal_name', self.gf('django.db.models.fields.CharField')(max_length=128)),
('main_texture', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['database.Texture'], null=True)),
('data_value', self.gf('django.db.models.fields.IntegerField')()),
))
db.send_create_signal(u'database', ['Item'])
def backwards(self, orm):
# Deleting model 'Item'
db.delete_table(u'database_item')
models = {
u'database.item': {
'Meta': {'object_name': 'Item'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'type': ('django.db.models.fields.CharField', [], {'default': "'items'", 'max_length': '16'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,75 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'Block'
db.create_table(u'database_block', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('internal_name', self.gf('django.db.models.fields.CharField')(max_length=128)),
('main_texture', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['database.Texture'], null=True)),
('data_value', self.gf('django.db.models.fields.IntegerField')()),
))
db.send_create_signal(u'database', ['Block'])
def backwards(self, orm):
# Deleting model 'Block'
db.delete_table(u'database_block')
models = {
u'database.block': {
'Meta': {'object_name': 'Block'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
u'database.item': {
'Meta': {'object_name': 'Item'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'type': ('django.db.models.fields.CharField', [], {'default': "'items'", 'max_length': '16'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,101 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'Language'
db.create_table(u'database_language', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('name', self.gf('django.db.models.fields.CharField')(max_length=64)),
('region', self.gf('django.db.models.fields.CharField')(max_length=32)),
('code', self.gf('django.db.models.fields.CharField')(max_length=12)),
))
db.send_create_signal(u'database', ['Language'])
# Adding model 'LanguageString'
db.create_table(u'database_languagestring', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('language', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['database.Language'])),
('key', self.gf('django.db.models.fields.CharField')(max_length=256)),
('value', self.gf('django.db.models.fields.CharField')(max_length=512)),
))
db.send_create_signal(u'database', ['LanguageString'])
def backwards(self, orm):
# Deleting model 'Language'
db.delete_table(u'database_language')
# Deleting model 'LanguageString'
db.delete_table(u'database_languagestring')
models = {
u'database.block': {
'Meta': {'object_name': 'Block'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
u'database.item': {
'Meta': {'object_name': 'Item'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
u'database.language': {
'Meta': {'object_name': 'Language'},
'code': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'region': ('django.db.models.fields.CharField', [], {'max_length': '32'})
},
u'database.languagestring': {
'Meta': {'object_name': 'LanguageString'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'language': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Language']"}),
'value': ('django.db.models.fields.CharField', [], {'max_length': '512'})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'type': ('django.db.models.fields.CharField', [], {'default': "'items'", 'max_length': '16'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,89 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding index on 'Language', fields ['name']
db.create_index(u'database_language', ['name'])
# Adding index on 'LanguageString', fields ['key']
db.create_index(u'database_languagestring', ['key'])
def backwards(self, orm):
# Removing index on 'LanguageString', fields ['key']
db.delete_index(u'database_languagestring', ['key'])
# Removing index on 'Language', fields ['name']
db.delete_index(u'database_language', ['name'])
models = {
u'database.block': {
'Meta': {'object_name': 'Block'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
u'database.item': {
'Meta': {'object_name': 'Item'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
u'database.language': {
'Meta': {'object_name': 'Language'},
'code': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
'region': ('django.db.models.fields.CharField', [], {'max_length': '32'})
},
u'database.languagestring': {
'Meta': {'object_name': 'LanguageString'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
'language': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Language']"}),
'value': ('django.db.models.fields.CharField', [], {'max_length': '512'})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'type': ('django.db.models.fields.CharField', [], {'default': "'items'", 'max_length': '16'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,83 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Changing field 'LanguageString.value'
db.alter_column(u'database_languagestring', 'value', self.gf('django.db.models.fields.TextField')())
def backwards(self, orm):
# Changing field 'LanguageString.value'
db.alter_column(u'database_languagestring', 'value', self.gf('django.db.models.fields.CharField')(max_length=512))
models = {
u'database.block': {
'Meta': {'object_name': 'Block'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
u'database.item': {
'Meta': {'object_name': 'Item'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
u'database.language': {
'Meta': {'object_name': 'Language'},
'code': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
'region': ('django.db.models.fields.CharField', [], {'max_length': '32'})
},
u'database.languagestring': {
'Meta': {'object_name': 'LanguageString'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
'language': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Language']"}),
'value': ('django.db.models.fields.TextField', [], {})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'type': ('django.db.models.fields.CharField', [], {'default': "'items'", 'max_length': '16'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,105 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'ModelAttribute'
db.create_table(u'database_modelattribute', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])),
('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()),
('key', self.gf('django.db.models.fields.CharField')(max_length=128)),
('value', self.gf('django.db.models.fields.TextField')()),
))
db.send_create_signal(u'database', ['ModelAttribute'])
def backwards(self, orm):
# Deleting model 'ModelAttribute'
db.delete_table(u'database_modelattribute')
models = {
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'database.block': {
'Meta': {'object_name': 'Block'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
u'database.item': {
'Meta': {'object_name': 'Item'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'})
},
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
u'database.language': {
'Meta': {'object_name': 'Language'},
'code': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
'region': ('django.db.models.fields.CharField', [], {'max_length': '32'})
},
u'database.languagestring': {
'Meta': {'object_name': 'LanguageString'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
'language': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Language']"}),
'value': ('django.db.models.fields.TextField', [], {})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.modelattribute': {
'Meta': {'object_name': 'ModelAttribute'},
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
'value': ('django.db.models.fields.TextField', [], {})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'type': ('django.db.models.fields.CharField', [], {'default': "'items'", 'max_length': '16'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,119 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Version.upcoming'
db.add_column(u'database_version', 'upcoming',
self.gf('django.db.models.fields.BooleanField')(default=False),
keep_default=False)
# Adding field 'Item.version'
db.add_column(u'database_item', 'version',
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['database.Version'], null=True),
keep_default=False)
# Adding field 'Block.version'
db.add_column(u'database_block', 'version',
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['database.Version'], null=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Version.upcoming'
db.delete_column(u'database_version', 'upcoming')
# Deleting field 'Item.version'
db.delete_column(u'database_item', 'version_id')
# Deleting field 'Block.version'
db.delete_column(u'database_block', 'version_id')
models = {
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'database.block': {
'Meta': {'object_name': 'Block'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']", 'null': 'True'})
},
u'database.item': {
'Meta': {'object_name': 'Item'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']", 'null': 'True'})
},
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
u'database.language': {
'Meta': {'object_name': 'Language'},
'code': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
'region': ('django.db.models.fields.CharField', [], {'max_length': '32'})
},
u'database.languagestring': {
'Meta': {'object_name': 'LanguageString'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
'language': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Language']"}),
'value': ('django.db.models.fields.TextField', [], {})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.modelattribute': {
'Meta': {'object_name': 'ModelAttribute'},
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
'value': ('django.db.models.fields.TextField', [], {})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'type': ('django.db.models.fields.CharField', [], {'default': "'items'", 'max_length': '16'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'upcoming': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,113 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Item.internal_id'
db.add_column(u'database_item', 'internal_id',
self.gf('django.db.models.fields.IntegerField')(default=0),
keep_default=False)
# Adding field 'Block.internal_id'
db.add_column(u'database_block', 'internal_id',
self.gf('django.db.models.fields.IntegerField')(default=0),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Item.internal_id'
db.delete_column(u'database_item', 'internal_id')
# Deleting field 'Block.internal_id'
db.delete_column(u'database_block', 'internal_id')
models = {
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'database.block': {
'Meta': {'object_name': 'Block'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_id': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True', 'blank': 'True'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']", 'null': 'True', 'blank': 'True'})
},
u'database.item': {
'Meta': {'object_name': 'Item'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_id': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True', 'blank': 'True'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']", 'null': 'True', 'blank': 'True'})
},
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
u'database.language': {
'Meta': {'object_name': 'Language'},
'code': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
'region': ('django.db.models.fields.CharField', [], {'max_length': '32'})
},
u'database.languagestring': {
'Meta': {'object_name': 'LanguageString'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
'language': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Language']"}),
'value': ('django.db.models.fields.TextField', [], {})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.modelattribute': {
'Meta': {'object_name': 'ModelAttribute'},
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
'value': ('django.db.models.fields.TextField', [], {})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'type': ('django.db.models.fields.CharField', [], {'default': "'items'", 'max_length': '16'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'upcoming': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -0,0 +1,114 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'Achievement'
db.create_table(u'database_achievement', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('internal_name', self.gf('django.db.models.fields.CharField')(max_length=128)),
('internal_id', self.gf('django.db.models.fields.IntegerField')(default=0)),
))
db.send_create_signal(u'database', ['Achievement'])
def backwards(self, orm):
# Deleting model 'Achievement'
db.delete_table(u'database_achievement')
models = {
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'database.achievement': {
'Meta': {'object_name': 'Achievement'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_id': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
},
u'database.block': {
'Meta': {'object_name': 'Block'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_id': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True', 'blank': 'True'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']", 'null': 'True', 'blank': 'True'})
},
u'database.item': {
'Meta': {'object_name': 'Item'},
'data_value': ('django.db.models.fields.IntegerField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'internal_id': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'internal_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'main_texture': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Texture']", 'null': 'True', 'blank': 'True'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']", 'null': 'True', 'blank': 'True'})
},
'database.jarfile': {
'Meta': {'object_name': 'JarFile'},
'description': ('django.db.models.fields.CharField', [], {'default': "'client'", 'max_length': '256'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Version']"})
},
u'database.language': {
'Meta': {'object_name': 'Language'},
'code': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
'region': ('django.db.models.fields.CharField', [], {'max_length': '32'})
},
u'database.languagestring': {
'Meta': {'object_name': 'LanguageString'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'}),
'language': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['database.Language']"}),
'value': ('django.db.models.fields.TextField', [], {})
},
'database.mod': {
'Meta': {'ordering': "['name']", 'object_name': 'Mod'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
},
u'database.modelattribute': {
'Meta': {'object_name': 'ModelAttribute'},
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
'value': ('django.db.models.fields.TextField', [], {})
},
u'database.texture': {
'Meta': {'object_name': 'Texture'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'type': ('django.db.models.fields.CharField', [], {'default': "'items'", 'max_length': '16'})
},
'database.version': {
'Meta': {'ordering': "['date']", 'object_name': 'Version'},
'changelog': ('django.db.models.fields.TextField', [], {}),
'date': ('django.db.models.fields.DateField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['database.Mod']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
'snapshot': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'release'", 'max_length': '10', 'blank': 'True'}),
'upcoming': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'version_number': ('django.db.models.fields.CharField', [], {'default': "'0.1.0'", 'max_length': '256'})
}
}
complete_apps = ['database']

View File

@ -1,5 +1,90 @@
from django.db import models
from django.contrib import admin
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
###
# Custom actions
###
def fix_icons(modeladmin, request, queryset):
for item in queryset:
try:
class_name = "%ss" % item.__class__.__name__.lower()
icon = Texture.objects.get(
name__exact=item.internal_name,
type=class_name
)
item.main_texture = icon
item.save()
except:
item.main_texture = None
item.save()
fix_icons.short_description = "Fix icons for the selected items"
def fix_item_data_values(modeladmin, request, queryset):
for item in queryset:
if item.internal_id == 0:
item.internal_id = item.data_value
if item.__class__.__name__ == 'Item':
item.data_value += 256
item.save()
fix_item_data_values.short_description = "Fix data values"
def match_with_minecraftwiki(modeladmin, request, queryset):
import httplib
for item in queryset:
try:
attr = ModelAttribute.objects.get(
content_type=ContentType.objects.get_for_model(item),
object_id=item.pk,
key='minecraftwiki'
)
except:
name = item.name().replace(' ', '_')
conn = httplib.HTTPConnection('www.minecraftwiki.net')
conn.request("HEAD", '/wiki/%s' % name)
response = conn.getresponse()
if response.status == 200:
url = 'http://www.minecraftwiki.net/wiki/%s' % name
attr = ModelAttribute(
content_type=ContentType.objects.get_for_model(item),
object_id=item.pk,
key='minecraftwiki',
value=url
)
attr.save()
match_with_minecraftwiki.short_description = "Match MinecraftWiki URLs"
###
# ATTRIBUTE
###
class ModelAttribute(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
key = models.CharField(max_length=128)
value = models.TextField()
def __unicode__(self):
return self.key
class ModelAttributeAdmin(admin.ModelAdmin):
list_display = ('content_object', 'key', 'value', )
list_filter = ('key', )
search_fields = ('key', 'value', )
admin.site.register(ModelAttribute, ModelAttributeAdmin)
class ModelAttributeAdminInline(generic.GenericTabularInline):
model = ModelAttribute
###
# MOD
@ -38,6 +123,31 @@ class ModAdmin(admin.ModelAdmin):
admin.site.register(Mod, ModAdmin)
###
# JARFILE
###
class JarFile(models.Model):
version = models.ForeignKey('Version')
description = models.CharField(max_length=256, default='client')
url = models.URLField()
class Meta:
app_label = 'database'
class JarFileAdmin(admin.ModelAdmin):
list_display = ('version', 'description', 'url_html', )
def url_html(self, obj):
if obj.url != '':
return ('<a href="%s">%s</a>' % (obj.url, obj.url))
else:
return "--"
url_html.short_description = 'URL'
url_html.allow_tags = True
admin.site.register(JarFile, JarFileAdmin)
###
# VERSION
###
@ -51,6 +161,8 @@ class Version(models.Model):
blank=True,
default='release'
)
upcoming = models.BooleanField(default=False)
snapshot = models.BooleanField(default=False)
date = models.DateField()
url = models.URLField(blank=True, null=True)
name = models.CharField(max_length=128,
@ -59,6 +171,13 @@ class Version(models.Model):
)
changelog = models.TextField('changelog')
def get_jarfiles(self):
self.jarfiles = JarFile.objects.filter(version=self)
def __init__(self, *args, **kwargs):
super(self.__class__, self).__init__(*args, **kwargs)
self.get_jarfiles()
def __unicode__(self):
return "%s %s" % (
self.mod,
@ -71,14 +190,14 @@ class Version(models.Model):
class VersionAdmin(admin.ModelAdmin):
list_display = ('mod', 'status', 'version_number', 'name', 'url_html', 'date')
list_display = ('mod', 'status', 'snapshot', 'version_number', 'name', 'url_html', 'date')
list_display_links = ('version_number',)
list_filter = ('mod', 'date', 'status')
search_fields = ['version_number', 'name', 'changelog']
ordering = ('-date', '-version_number')
def url_html(self, obj):
if obj.url != '':
if obj.url:
return ('<a href="%s">%s</a>' % (obj.url, obj.url))
else:
return "--"
@ -86,3 +205,215 @@ class VersionAdmin(admin.ModelAdmin):
url_html.allow_tags = True
admin.site.register(Version, VersionAdmin)
###
# TEXTURE
###
class Texture(models.Model):
name = models.CharField(max_length=32)
type = models.CharField(max_length=16, default="items")
image = models.CharField(max_length=64)
def __unicode__(self):
return self.name
def get_image(self, size='original'):
path = self.image
if size != 'original' and size in [2, 4, 6, 8]:
path = path.replace('.png', '_x%d.png' % size)
return path
class TextureAdmin(admin.ModelAdmin):
list_display = ('name', 'type', 'image_html', )
list_display_links = ('name', )
list_filter = ('type', )
search_fields = ('name', 'image', )
def image_html(self, obj):
return('<img src="/static/textures/%s" height="32" />' % obj.get_image(2))
image_html.short_description = 'Image'
image_html.allow_tags = True
admin.site.register(Texture, TextureAdmin)
###
# ITEM
###
class Item(models.Model):
version = models.ForeignKey('Version', null=True, blank=True)
internal_name = models.CharField(max_length=128)
main_texture = models.ForeignKey('Texture', null=True, blank=True)
data_value = models.IntegerField()
internal_id = models.IntegerField(default=0)
def __unicode__(self):
return self.name()
def name(self):
result = self.internal_name
try:
string = LanguageString.objects.get(
language=14,
key='item.%s.name' % self.internal_name
)
result = string.value
except:
pass
return result
class ItemAdmin(admin.ModelAdmin):
list_display = ('name', 'internal_id', 'data_value', 'main_texture_html')
#list_filter = ('type', )
search_fields = ('internal_name', 'data_value', )
inlines = [
ModelAttributeAdminInline
]
actions = [
fix_icons,
fix_item_data_values,
match_with_minecraftwiki
]
def main_texture_html(self, obj):
if obj.main_texture:
return(
'<img src="/static/textures/%s" height="32" />' % \
obj.main_texture.get_image(2)
)
main_texture_html.short_description = 'Image'
main_texture_html.allow_tags = True
admin.site.register(Item, ItemAdmin)
###
# BLOCK
###
class Block(models.Model):
version = models.ForeignKey('Version', null=True, blank=True)
internal_name = models.CharField(max_length=128)
main_texture = models.ForeignKey('Texture', null=True, blank=True)
data_value = models.IntegerField()
internal_id = models.IntegerField(default=0)
def __unicode__(self):
return self.name()
def name(self):
result = self.internal_name
try:
string = LanguageString.objects.get(
language=14,
key='tile.%s.name' % self.internal_name
)
result = string.value
except:
pass
return result
class BlockAdmin(admin.ModelAdmin):
list_display = ('name', 'internal_id', 'data_value', 'main_texture_html')
#list_filter = ('type', )
search_fields = ('internal_name', 'data_value', )
inlines = [
ModelAttributeAdminInline
]
actions = [
fix_icons,
fix_item_data_values,
match_with_minecraftwiki
]
def main_texture_html(self, obj):
if obj.main_texture:
return(
'<img src="/static/textures/%s" height="32" />' % \
obj.main_texture.get_image(2)
)
main_texture_html.short_description = 'Image'
main_texture_html.allow_tags = True
admin.site.register(Block, BlockAdmin)
###
# LANGUAGES
###
class Language(models.Model):
name = models.CharField(max_length=64, db_index=True)
region = models.CharField(max_length=32)
code = models.CharField(max_length=12)
def __unicode__(self):
return "%s (%s)" % (self.name, self.region)
class LanguageAdmin(admin.ModelAdmin):
list_display = ('name', 'region', )
list_display_links = ('name', )
search_fields = ('name', )
admin.site.register(Language, LanguageAdmin)
class LanguageString(models.Model):
language = models.ForeignKey('Language', db_index=True)
key = models.CharField(max_length=256, db_index=True)
value = models.TextField()
class LanguageStringAdmin(admin.ModelAdmin):
list_display = ('language', 'key', 'value', )
list_display_links = ('language', 'key', )
list_filter = ('language', )
search_fields = ('key', 'value', )
admin.site.register(LanguageString, LanguageStringAdmin)
###
# ACHIEVEMENTS
###
class Achievement(models.Model):
internal_name = models.CharField(max_length=128)
internal_id = models.IntegerField(default=0)
def name(self):
result = self.internal_name
try:
string = LanguageString.objects.get(
language=14,
key='achievement.%s' % self.internal_name
)
result = string.value
except:
pass
return result
def description(self):
result = self.internal_name
try:
string = LanguageString.objects.get(
language=14,
key='achievement.%s.desc' % self.internal_name
)
result = string.value
except:
pass
return result
class AchievementAdmin(admin.ModelAdmin):
list_display = ('name', 'description', )
search_fields = ('internalName', 'description', )
admin.site.register(Achievement, AchievementAdmin)

View File

@ -0,0 +1,146 @@
window.BlockRenderer = (model, textures, dom, width, height) ->
# Globals
_modelList = ['block']
_renderer = null
_scene = null
_object = null
_camera = null
_cameraType = 'isometric'
_lights = []
# Set and check variables!
_model = model
if model not in _modelList
return false
# TODO CHECK TEXTURES!
_textures = textures
_domElement = document.querySelector dom
if not _domElement
return false
_width = parseInt width
_height = parseInt height
if width == 'auto'
_width = 'auto'
_height = 'auto'
else
if not (_width > 0 and _height > 0)
return false
# Helpers
# Checks for webgl support on the browser
@checkWebGLsupport = ->
return !!window.WebGLRenderingContext;
@getWidth = ->
return _domElement.clientWidth
@setRendererSize = ->
if _width == 'auto'
width = @getWidth()
height = width
else
width = _width
height = _height
_renderer.setSize width, height
if _camera
_camera.position.z = ( width / height ) * 40
@setObjectScale = ->
if _cameraType == 'isometric'
scale = 7.5
_object.scale.x = scale
_object.scale.y = scale
_object.scale.z = scale
else
scale = 0
_object.scale.x = scale
_object.scale.y = scale
_object.scale.z = scale
#
# WEBGL
#
@prepareCanvas = ->
_renderer = new THREE.WebGLRenderer()
@setRendererSize()
#_renderer.domElement.id = 'webgl-canvas'
_domElement.appendChild _renderer.domElement
@prepareScene = ->
_scene = new THREE.Scene()
@prepareObject = ->
_object = @models[_model].call()
_object.overdraw = true
_scene.add _object
@prepareCamera = ->
if _cameraType == 'isometric'
_camera = new THREE.OrthographicCamera width / -2, width / 2, height / 2, height / -2, width * -2, width * 2
_camera.lookAt _object.position
else
_camera = new THREE.PerspectiveCamera 45, width / height, 1, 1000
_camera.position.z = ( width / height ) * 40
@prepareLight = ->
light = new THREE.DirectionalLight 0xffffff
light.position.set(1, 20, 60).normalize()
light.intensity = 1.6
_scene.add light
@animate = ->
@setRendererSize()
@setObjectScale()
_renderer.render _scene, _camera
requestAnimationFrame =>
@animate()
#
# MODELS
#
@models =
block: ->
if not 'side' in _textures
false
else
texture = new THREE.ImageUtils.loadTexture _textures['side']
# We do not want blurry textures ;D
texture.minFilter = THREE.NearestFilter
texture.magFilter = THREE.NearestFilter
material = new THREE.MeshLambertMaterial map: texture
object = new THREE.Mesh new THREE.CubeGeometry(16, 16, 16), material
object.rotation.set Math.PI/6, (Math.PI/4)*-1, 0
object
#
# INIT
#
@init = ->
if @checkWebGLsupport()
_domElement.style.width = "#{_width}px"
_domElement.style.height = "#{_height}px"
_domElement.innerHTML = ''
@prepareCanvas()
@prepareScene()
@prepareObject()
@prepareCamera()
@prepareLight()
@animate()
@init()

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

View File

View File

@ -69,7 +69,7 @@
@paddingSmall: 2px 12px; // 26px
@paddingMini: 1px 8px; // 24px
@baseBorderRadius: 3px;
@baseBorderRadius: 0px;
@borderRadiusLarge: 10px;
@borderRadiusSmall: 3px;

View File

@ -0,0 +1,20 @@
div.codexicon
height: 16px
overflow: hidden
width: 16px
&.x2
height: 32px
width: 32px
&.x4
height: 64px
width: 64px
&.x6
height: 96px
width: 96px
&.x8
height: 128px
width: 128px

View File

@ -0,0 +1,2 @@
.text-black
color: $textColor

View File

@ -0,0 +1,5 @@
.margin-none
margin: 0
.margin-auto
margin: 0 auto

View File

@ -0,0 +1,6 @@
@import "variables.sass"
@import "oocss.sass"
@import "blog.sass"
@import "fixes.sass"
@import "helpers.sass"
@import "shame.sass"

View File

@ -0,0 +1 @@
$textColor: #2C3E50

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 633 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

Some files were not shown because too many files have changed in this diff Show More