diff --git a/.gitignore b/.gitignore index 6eabc6c..cdbbce7 100644 --- a/.gitignore +++ b/.gitignore @@ -11,8 +11,7 @@ media/* build/* _working/* static/CACHE/* -dss/localsettings.py -dss/storagesettings.py +dss/devsettings.py dss/celery_settings.py dss.conf dss/debugsettings.py diff --git a/dss/localsettings.py b/dss/localsettings.py new file mode 100644 index 0000000..4191807 --- /dev/null +++ b/dss/localsettings.py @@ -0,0 +1,55 @@ +import os +from dss import devsettings + +DEBUG = True +DSS_TEMP_PATH = os.environ.get('DSS_TEMP_PATH', '/tmp/') +DSS_LAME_PATH = os.environ.get('DSS_LAME_PATH', '/usr/bin/sox') +DSS_WAVE_PATH = os.environ.get('DSS_WAVE_PATH', + '/home/fergalm/Dropbox/development/deepsouthsounds.com/dss.lib/wav2png/bin/Linux/wav2png') +GEOIP_PATH = os.environ.get('GEOIP_PATH', '/home/fergalm/Dropbox/Private/deepsouthsounds.com/working/geolite') + +DATABASE_PASSWORD = os.environ.get('DATABASE_PASSWORD', 'deepsouthsounds') +DATABASE_NAME = os.environ.get('DATABASE_NAME', 'deepsouthsounds') +DATABASE_USER = os.environ.get('DATABASE_USER', 'deepsouthsounds') +DATABASE_HOST = os.environ.get('DATABASE_HOST', 'localhost') + +STATIC_URL = '/assets/' +MEDIA_ROOT = os.environ.get('MEDIA_ROOT', '/mnt/dev/deepsouthsounds.com/media') +STATIC_ROOT = os.environ.get('STATIC_ROOT', '/home/fergalm/Dropbox/development/deepsouthsounds.com/cache/static') +CACHE_ROOT = os.environ.get('CACHE_ROOT', '/mnt/dev/deepsouthsounds.com/cache') + +MEDIA_URL = os.environ.get('MEDIA_URL', 'http://localhost/DSSMedia/') # '{0}media/'.format(CDN_URL) + +REDIS_HOST = os.environ.get('REDIS_HOST', 'localhost') +BROKER_URL = os.environ.get('BROKER_URL', 'amqp://guest:guest@localhost:5672//') +CELERY_ACCEPT_CONTENT = ['pickle', 'msgpack', 'json'] + +SECRET_KEY = os.environ.get('SECRET_KEY', devsettings.SECRET_KEY) +LIVE_ENABLED = os.environ.get('LIVE_ENABLED', False) + +ICE_HOST = os.environ.get('ICE_HOST', 'localhost') +ICE_MOUNT = os.environ.get('ICE_MOUNT =', 'dss') +ICE_PORT = os.environ.get('ICE_PORT', 8000) + +RADIO_HOST = os.environ.get('RADIO_HOST', 'localhost') +RADIO_PORT = os.environ.get('RADIO_PORT', 8888) + +MANDRILL_API_KEY = os.environ.get('MANDRILL_API_KEY', '') + +SOCIAL_AUTH_FACEBOOK_KEY = os.environ.get('SOCIAL_AUTH_FACEBOOK_KEY', devsettings.SOCIAL_AUTH_FACEBOOK_KEY) +SOCIAL_AUTH_FACEBOOK_SECRET = os.environ.get('SOCIAL_AUTH_FACEBOOK_SECRET', devsettings.SOCIAL_AUTH_FACEBOOK_SECRET) + +SOCIAL_AUTH_TWITTER_KEY = os.environ.get('SOCIAL_AUTH_TWITTER_KEY', devsettings.SOCIAL_AUTH_TWITTER_KEY) +SOCIAL_AUTH_TWITTER_SECRET = os.environ.get('SOCIAL_AUTH_TWITTER_SECRET', devsettings.SOCIAL_AUTH_TWITTER_SECRET) + +SOCIAL_AUTH_GOOGLE_OAUTH_KEY = os.environ.get('SOCIAL_AUTH_GOOGLE_OAUTH_KEY', devsettings.SOCIAL_AUTH_GOOGLE_OAUTH_KEY) +SOCIAL_AUTH_GOOGLE_OAUTH_SECRET = os.environ.get('SOCIAL_AUTH_GOOGLE_OAUTH_SECRET', devsettings.SOCIAL_AUTH_GOOGLE_OAUTH_SECRET) + +SOCIAL_AUTH_GOOGLE_PLUS_KEY = os.environ.get('SOCIAL_AUTH_GOOGLE_PLUS_KEY', devsettings.SOCIAL_AUTH_GOOGLE_PLUS_KEY) +SOCIAL_AUTH_GOOGLE_PLUS_SECRET = os.environ.get('SOCIAL_AUTH_GOOGLE_PLUS_SECRET', devsettings.SOCIAL_AUTH_GOOGLE_PLUS_SECRET) + +DSS_DB_BACKUP_KEY = os.environ.get('DSS_DB_BACKUP_KEY', devsettings.DSS_DB_BACKUP_KEY) +DSS_DB_BACKUP_SECRET = os.environ.get('DSS_DB_BACKUP_SECRET', devsettings.DSS_DB_BACKUP_SECRET) +DSS_DB_BACKUP_TOKEN = os.environ.get('DSS_DB_BACKUP_TOKEN', devsettings.DSS_DB_BACKUP_TOKEN) + +AZURE_ACCOUNT_KEY = os.environ.get('AZURE_ACCOUNT_KEY', devsettings.AZURE_ACCOUNT_KEY) diff --git a/dss/storagesettings.py b/dss/storagesettings.py new file mode 100644 index 0000000..2e30c6b --- /dev/null +++ b/dss/storagesettings.py @@ -0,0 +1,6 @@ +from dss import localsettings + +AZURE_ACCOUNT_NAME = 'dsscdn' +AZURE_CONTAINER = 'media' +AZURE_ACCOUNT_KEY = localsettings.AZURE_ACCOUNT_KEY +AZURE_ITEM_BASE_URL = 'https://dsscdn.blob.core.windows.net/' diff --git a/requirements.txt b/requirements.txt index ce09af2..2d69c2d 100755 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ django-sendfile Werkzeug psycopg2 gunicorn -dropbox==2.2.0 +dropbox django-dirtyfields django-storages django-user-sessions diff --git a/spa/management/commands/backup.py b/spa/management/commands/backup.py index 5d2bcd3..1fd999b 100644 --- a/spa/management/commands/backup.py +++ b/spa/management/commands/backup.py @@ -1,13 +1,50 @@ -from gzip import GzipFile -import subprocess -from django.core.management.base import LabelCommand, CommandError -from subprocess import Popen, PIPE, STDOUT -from dropbox.rest import ErrorResponse -import pexpect -from dss import settings +import os import tarfile +import time + import dropbox -import os, time +import pexpect +from django.core.management.base import LabelCommand +from dropbox.client import ChunkedUploader +from dropbox.rest import ErrorResponse + +from dss import settings + +""" Monkey patch dropbox upload chunked """ + + +def __upload_chunked(self, chunk_size = 4 * 1024 * 1024): + """Uploads data from this ChunkedUploader's file_obj in chunks, until + an error occurs. Throws an exception when an error occurs, and can + be called again to resume the upload. + + Parameters + chunk_size + The number of bytes to put in each chunk. (Default 4 MB.) + """ + + while self.offset < self.target_length: + next_chunk_size = min(chunk_size, self.target_length - self.offset) + if self.last_block == None: + self.last_block = self.file_obj.read(next_chunk_size) + + try: + (self.offset, self.upload_id) = self.client.upload_chunk( + self.last_block, next_chunk_size, self.offset, self.upload_id) + self.last_block = None + except ErrorResponse as e: + # Handle the case where the server tells us our offset is wrong. + must_reraise = True + if e.status == 400: + reply = e.body + if "offset" in reply and reply['offset'] != 0 and reply['offset'] > self.offset: + self.last_block = None + self.offset = reply['offset'] + must_reraise = False + if must_reraise: + raise + +ChunkedUploader.upload_chunked = __upload_chunked from dropbox.client import ChunkedUploader