]> git.parisson.com Git - timeside.git/commitdiff
update the django models to simulate an experience
authorGuillaume Pellerin <yomguy@parisson.com>
Mon, 24 Mar 2014 16:50:07 +0000 (17:50 +0100)
committerGuillaume Pellerin <yomguy@parisson.com>
Mon, 24 Mar 2014 16:50:07 +0000 (17:50 +0100)
17 files changed:
tests/django/__init__.py [new file with mode: 0644]
tests/django/manage.py [new file with mode: 0755]
tests/django/settings.py [new file with mode: 0644]
tests/django/timeside.sql [new file with mode: 0644]
tests/django/update_schema.sh [new file with mode: 0755]
tests/django/urls.py [new file with mode: 0644]
tests/django/wsgi.py [new file with mode: 0644]
timeside/api.py
timeside/manage.py [deleted file]
timeside/migrations/0001_initial.py
timeside/migrations/0002_auto__add_decoder__add_field_experience_decoder__add_field_experience_.py [new file with mode: 0644]
timeside/models.py
timeside/server/__init__.py [deleted file]
timeside/server/settings.py [deleted file]
timeside/server/urls.py [deleted file]
timeside/server/wsgi.py [deleted file]
timeside/views.py

diff --git a/tests/django/__init__.py b/tests/django/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/django/manage.py b/tests/django/manage.py
new file mode 100755 (executable)
index 0000000..f9726f9
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+import os
+import sys
+
+if __name__ == "__main__":
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
+
+    from django.core.management import execute_from_command_line
+
+    execute_from_command_line(sys.argv)
diff --git a/tests/django/settings.py b/tests/django/settings.py
new file mode 100644 (file)
index 0000000..eba1bd0
--- /dev/null
@@ -0,0 +1,160 @@
+# Django settings for server project.
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+import sys
+sys.dont_write_bytecode = True
+
+ADMINS = (
+    # ('Your Name', 'your_email@example.com'),
+)
+
+MANAGERS = ADMINS
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
+        'NAME': 'timeside.sql',                      # Or path to database file if using sqlite3.
+        'USER': '',                      # Not used with sqlite3.
+        'PASSWORD': '',                  # Not used with sqlite3.
+        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
+        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
+    }
+}
+
+# Hosts/domain names that are valid for this site; required if DEBUG is False
+# See https://docs.djangoproject.com/en/1.4/ref/settings/#allowed-hosts
+ALLOWED_HOSTS = []
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# In a Windows environment this must be set to your system time zone.
+TIME_ZONE = 'America/Chicago'
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'en-us'
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
+# If you set this to False, Django will not format dates, numbers and
+# calendars according to the current locale.
+USE_L10N = True
+
+# If you set this to False, Django will not use timezone-aware datetimes.
+USE_TZ = True
+
+# Absolute filesystem path to the directory that will hold user-uploaded files.
+# Example: "/home/media/media.lawrence.com/media/"
+MEDIA_ROOT = ''
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash.
+# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
+MEDIA_URL = ''
+
+# Absolute path to the directory static files should be collected to.
+# Don't put anything in this directory yourself; store your static files
+# in apps' "static/" subdirectories and in STATICFILES_DIRS.
+# Example: "/home/media/media.lawrence.com/static/"
+STATIC_ROOT = ''
+
+# URL prefix for static files.
+# Example: "http://media.lawrence.com/static/"
+STATIC_URL = '/static/'
+
+# Additional locations of static files
+STATICFILES_DIRS = (
+    # Put strings here, like "/home/html/static" or "C:/www/django/static".
+    # Always use forward slashes, even on Windows.
+    # Don't forget to use absolute paths, not relative paths.
+)
+
+# List of finder classes that know how to find static files in
+# various locations.
+STATICFILES_FINDERS = (
+    'django.contrib.staticfiles.finders.FileSystemFinder',
+    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
+)
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = '5%z&amp;a3r@t0=xr2eaio+400qf-32$b5zp897pr*wh5i^s4(-+3('
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+    'django.template.loaders.filesystem.Loader',
+    'django.template.loaders.app_directories.Loader',
+#     'django.template.loaders.eggs.Loader',
+)
+
+MIDDLEWARE_CLASSES = (
+    'django.middleware.common.CommonMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    # Uncomment the next line for simple clickjacking protection:
+    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+)
+
+ROOT_URLCONF = 'urls'
+
+# Python dotted path to the WSGI application used by Django's runserver.
+WSGI_APPLICATION = 'wsgi.application'
+
+TEMPLATE_DIRS = (
+    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+    # Always use forward slashes, even on Windows.
+    # Don't forget to use absolute paths, not relative paths.
+)
+
+INSTALLED_APPS = (
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.sites',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    # Uncomment the next line to enable the admin:
+    'django.contrib.admin',
+    # Uncomment the next line to enable admin documentation:
+    # 'django.contrib.admindocs',
+    'south',
+    'timeside',
+)
+
+# A sample logging configuration. The only tangible logging
+# performed by this configuration is to send an email to
+# the site admins on every HTTP 500 error when DEBUG=False.
+# See http://docs.djangoproject.com/en/dev/topics/logging for
+# more details on how to customize your logging configuration.
+LOGGING = {
+    'version': 1,
+    'disable_existing_loggers': False,
+    'filters': {
+        'require_debug_false': {
+            '()': 'django.utils.log.RequireDebugFalse'
+        }
+    },
+    'handlers': {
+        'mail_admins': {
+            'level': 'ERROR',
+            'filters': ['require_debug_false'],
+            'class': 'django.utils.log.AdminEmailHandler'
+        }
+    },
+    'loggers': {
+        'django.request': {
+            'handlers': ['mail_admins'],
+            'level': 'ERROR',
+            'propagate': True,
+        },
+    }
+}
diff --git a/tests/django/timeside.sql b/tests/django/timeside.sql
new file mode 100644 (file)
index 0000000..0d14bf5
Binary files /dev/null and b/tests/django/timeside.sql differ
diff --git a/tests/django/update_schema.sh b/tests/django/update_schema.sh
new file mode 100755 (executable)
index 0000000..82d28e9
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+./manage.py schemamigration timeside --auto
+./manage.py migrate timeside
+
diff --git a/tests/django/urls.py b/tests/django/urls.py
new file mode 100644 (file)
index 0000000..98374ec
--- /dev/null
@@ -0,0 +1,20 @@
+from django.conf.urls import patterns, include, url
+
+# Uncomment the next two lines to enable the admin:
+from django.contrib import admin
+admin.autodiscover()
+
+urlpatterns = patterns('',
+
+    url(r'^', include('timeside.urls')),
+
+    # Examples:
+    # url(r'^$', 'server.views.home', name='home'),
+    # url(r'^server/', include('server.foo.urls')),
+
+    # Uncomment the admin/doc line below to enable admin documentation:
+    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
+
+    # Uncomment the next line to enable the admin:
+    url(r'^admin/', include(admin.site.urls)),
+)
diff --git a/tests/django/wsgi.py b/tests/django/wsgi.py
new file mode 100644 (file)
index 0000000..c4ec771
--- /dev/null
@@ -0,0 +1,28 @@
+"""
+WSGI config for server project.
+
+This module contains the WSGI application used by Django's development server
+and any production WSGI deployments. It should expose a module-level variable
+named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
+this application via the ``WSGI_APPLICATION`` setting.
+
+Usually you will have the standard Django WSGI application here, but it also
+might make sense to replace the whole Django WSGI application with a custom one
+that later delegates to the Django one. For example, you could introduce WSGI
+middleware here, or combine a Django application with an application of another
+framework.
+
+"""
+import os
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
+
+# This application object is used by any WSGI server configured to use this
+# file. This includes Django's development server, if the WSGI_APPLICATION
+# setting points here.
+from django.core.wsgi import get_wsgi_application
+application = get_wsgi_application()
+
+# Apply WSGI middleware here.
+# from helloworld.wsgi import HelloWorldApplication
+# application = HelloWorldApplication(application)
index b2140235b6152dae31872d2d60bb6d1e960e71c3..1cf1c991eb3f98215e29f669b7ea37b90cc73a93 100644 (file)
@@ -173,6 +173,7 @@ class IDecoder(IProcessor):
     def mime_type():
         """Return the mime type corresponding to this decoded format"""
 
+
 class IGrapher(IProcessor):
     """Media item visualizer driver interface"""
 
diff --git a/timeside/manage.py b/timeside/manage.py
deleted file mode 100755 (executable)
index 663ca0c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python
-import os
-import sys
-
-if __name__ == "__main__":
-    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
-
-    from django.core.management import execute_from_command_line
-
-    execute_from_command_line(sys.argv)
index 4a7e79698ce831b17d23fa255774ab951884bdc3..f951451206c92062053cbe992dad28c6bc027e13 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-import datetime
+from south.utils import datetime_utils as datetime
 from south.db import db
 from south.v2 import SchemaMigration
 from django.db import models
@@ -9,46 +9,224 @@ class Migration(SchemaMigration):
 
     def forwards(self, orm):
         # Adding model 'Item'
-        db.create_table('timeside_item', (
+        db.create_table('timeside_items', (
             ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('code', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
             ('title', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
-            ('description', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
-            ('code', self.gf('django.db.models.fields.CharField')(unique=True, max_length=256)),
-            ('media_file', self.gf('django.db.models.fields.files.FileField')(max_length=1024, db_column='file')),
+            ('description', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('file', self.gf('django.db.models.fields.files.FileField')(max_length=1024, blank=True)),
+            ('url', self.gf('django.db.models.fields.URLField')(max_length=1024, blank=True)),
+            ('sha1', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512, blank=True)),
+            ('mime_type', self.gf('django.db.models.fields.CharField')(max_length=256, null=True)),
         ))
         db.send_create_signal('timeside', ['Item'])
 
-        # Adding model 'Analysis'
-        db.create_table('timeside_analysis', (
+        # Adding model 'Analyzer'
+        db.create_table('timeside_analyzers', (
             ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('item', self.gf('django.db.models.fields.related.ForeignKey')(related_name='analysis', null=True, on_delete=models.SET_NULL, to=orm['timeside.Item'])),
-            ('hdf5_file', self.gf('django.db.models.fields.files.FileField')(max_length=1024, db_column='hdf5')),
+            ('pid', self.gf('django.db.models.fields.CharField')(max_length=256)),
+            ('parameters', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('version', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)),
+            ('status', self.gf('django.db.models.fields.IntegerField')(default=1)),
         ))
-        db.send_create_signal('timeside', ['Analysis'])
+        db.send_create_signal('timeside', ['Analyzer'])
+
+        # Adding model 'Grapher'
+        db.create_table('timeside_graphers', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('pid', self.gf('django.db.models.fields.CharField')(max_length=256)),
+            ('parameters', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('version', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)),
+            ('status', self.gf('django.db.models.fields.IntegerField')(default=1)),
+            ('file', self.gf('django.db.models.fields.files.FileField')(max_length=1024, db_column='file')),
+            ('mime_type', self.gf('django.db.models.fields.CharField')(max_length=256, null=True)),
+            ('height', self.gf('django.db.models.fields.IntegerField')(default=180)),
+            ('width', self.gf('django.db.models.fields.IntegerField')(default=320)),
+        ))
+        db.send_create_signal('timeside', ['Grapher'])
+
+        # Adding model 'Encoder'
+        db.create_table('timeside_encoders', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('pid', self.gf('django.db.models.fields.CharField')(max_length=256)),
+            ('parameters', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('version', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)),
+            ('status', self.gf('django.db.models.fields.IntegerField')(default=1)),
+            ('file', self.gf('django.db.models.fields.files.FileField')(max_length=1024, db_column='file')),
+            ('mime_type', self.gf('django.db.models.fields.CharField')(max_length=256, null=True)),
+        ))
+        db.send_create_signal('timeside', ['Encoder'])
+
+        # Adding model 'Experience'
+        db.create_table('timeside_experiences', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('item', self.gf('django.db.models.fields.related.ForeignKey')(related_name='experience', null=True, on_delete=models.SET_NULL, to=orm['timeside.Item'])),
+            ('title', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
+            ('description', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('date_added', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
+            ('date_modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, null=True, blank=True)),
+            ('status', self.gf('django.db.models.fields.IntegerField')(default=1)),
+            ('uuid', self.gf('django.db.models.fields.CharField')(max_length=256)),
+            ('author', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='experience', null=True, to=orm['auth.User'])),
+            ('begin_time', self.gf('django.db.models.fields.FloatField')(default=0, blank=True)),
+            ('end_time', self.gf('django.db.models.fields.FloatField')(blank=True)),
+            ('low_frequency', self.gf('django.db.models.fields.FloatField')(blank=True)),
+            ('high_frequency', self.gf('django.db.models.fields.FloatField')(blank=True)),
+            ('hdf5', self.gf('django.db.models.fields.files.FileField')(max_length=1024, db_column='hdf5')),
+        ))
+        db.send_create_signal('timeside', ['Experience'])
+
+        # Adding M2M table for field analyzers on 'Experience'
+        m2m_table_name = db.shorten_name('timeside_experiences_analyzers')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('experience', models.ForeignKey(orm['timeside.experience'], null=False)),
+            ('analyzer', models.ForeignKey(orm['timeside.analyzer'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['experience_id', 'analyzer_id'])
+
+        # Adding M2M table for field graphers on 'Experience'
+        m2m_table_name = db.shorten_name('timeside_experiences_graphers')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('experience', models.ForeignKey(orm['timeside.experience'], null=False)),
+            ('grapher', models.ForeignKey(orm['timeside.grapher'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['experience_id', 'grapher_id'])
+
+        # Adding M2M table for field encoders on 'Experience'
+        m2m_table_name = db.shorten_name('timeside_experiences_encoders')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('experience', models.ForeignKey(orm['timeside.experience'], null=False)),
+            ('encoder', models.ForeignKey(orm['timeside.encoder'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['experience_id', 'encoder_id'])
 
 
     def backwards(self, orm):
         # Deleting model 'Item'
-        db.delete_table('timeside_item')
+        db.delete_table('timeside_items')
+
+        # Deleting model 'Analyzer'
+        db.delete_table('timeside_analyzers')
+
+        # Deleting model 'Grapher'
+        db.delete_table('timeside_graphers')
 
-        # Deleting model 'Analysis'
-        db.delete_table('timeside_analysis')
+        # Deleting model 'Encoder'
+        db.delete_table('timeside_encoders')
+
+        # Deleting model 'Experience'
+        db.delete_table('timeside_experiences')
+
+        # Removing M2M table for field analyzers on 'Experience'
+        db.delete_table(db.shorten_name('timeside_experiences_analyzers'))
+
+        # Removing M2M table for field graphers on 'Experience'
+        db.delete_table(db.shorten_name('timeside_experiences_graphers'))
+
+        # Removing M2M table for field encoders on 'Experience'
+        db.delete_table(db.shorten_name('timeside_experiences_encoders'))
 
 
     models = {
-        'timeside.analysis': {
-            'Meta': {'object_name': 'Analysis'},
-            'hdf5_file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'db_column': "'hdf5'"}),
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        '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': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        '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'}),
+            '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'})
+        },
+        'timeside.analyzer': {
+            'Meta': {'object_name': 'Analyzer', 'db_table': "'timeside_analyzers'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'parameters': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'pid': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'})
+        },
+        'timeside.encoder': {
+            'Meta': {'object_name': 'Encoder', 'db_table': "'timeside_encoders'"},
+            'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'db_column': "'file'"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}),
+            'parameters': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'pid': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'})
+        },
+        'timeside.experience': {
+            'Meta': {'object_name': 'Experience', 'db_table': "'timeside_experiences'"},
+            'analyzers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'experience'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Analyzer']"}),
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'experience'", 'null': 'True', 'to': "orm['auth.User']"}),
+            'begin_time': ('django.db.models.fields.FloatField', [], {'default': '0', 'blank': 'True'}),
+            'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'encoders': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'experience'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Encoder']"}),
+            'end_time': ('django.db.models.fields.FloatField', [], {'blank': 'True'}),
+            'graphers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'experience'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Grapher']"}),
+            'hdf5': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'db_column': "'hdf5'"}),
+            'high_frequency': ('django.db.models.fields.FloatField', [], {'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'item': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'experience'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['timeside.Item']"}),
+            'low_frequency': ('django.db.models.fields.FloatField', [], {'blank': 'True'}),
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
+            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '256'})
+        },
+        'timeside.grapher': {
+            'Meta': {'object_name': 'Grapher', 'db_table': "'timeside_graphers'"},
+            'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'db_column': "'file'"}),
+            'height': ('django.db.models.fields.IntegerField', [], {'default': '180'}),
             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'item': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'analysis'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['timeside.Item']"})
+            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}),
+            'parameters': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'pid': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
+            'width': ('django.db.models.fields.IntegerField', [], {'default': '320'})
         },
         'timeside.item': {
-            'Meta': {'ordering': "['code']", 'object_name': 'Item'},
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}),
-            'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
+            'Meta': {'ordering': "['code']", 'object_name': 'Item', 'db_table': "'timeside_items'"},
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'blank': 'True'}),
             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'media_file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'db_column': "'file'"}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'})
+            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}),
+            'sha1': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512', 'blank': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'blank': 'True'})
         }
     }
 
diff --git a/timeside/migrations/0002_auto__add_decoder__add_field_experience_decoder__add_field_experience_.py b/timeside/migrations/0002_auto__add_decoder__add_field_experience_decoder__add_field_experience_.py
new file mode 100644 (file)
index 0000000..64f5e52
--- /dev/null
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as 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 'Decoder'
+        db.create_table('timeside_decoders', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('pid', self.gf('django.db.models.fields.CharField')(max_length=256)),
+            ('parameters', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('version', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)),
+            ('status', self.gf('django.db.models.fields.IntegerField')(default=1)),
+        ))
+        db.send_create_signal('timeside', ['Decoder'])
+
+        # Adding field 'Experience.decoder'
+        db.add_column('timeside_experiences', 'decoder',
+                      self.gf('django.db.models.fields.related.ForeignKey')(related_name='experience', null=True, to=orm['timeside.Decoder']),
+                      keep_default=False)
+
+        # Adding field 'Experience.json'
+        db.add_column('timeside_experiences', 'json',
+                      self.gf('django.db.models.fields.files.FileField')(default=1, max_length=1024, db_column='json'),
+                      keep_default=False)
+
+
+    def backwards(self, orm):
+        # Deleting model 'Decoder'
+        db.delete_table('timeside_decoders')
+
+        # Deleting field 'Experience.decoder'
+        db.delete_column('timeside_experiences', 'decoder_id')
+
+        # Deleting field 'Experience.json'
+        db.delete_column('timeside_experiences', 'json')
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        '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': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        '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'}),
+            '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'})
+        },
+        'timeside.analyzer': {
+            'Meta': {'object_name': 'Analyzer', 'db_table': "'timeside_analyzers'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'parameters': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'pid': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'})
+        },
+        'timeside.decoder': {
+            'Meta': {'object_name': 'Decoder', 'db_table': "'timeside_decoders'"},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'parameters': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'pid': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'})
+        },
+        'timeside.encoder': {
+            'Meta': {'object_name': 'Encoder', 'db_table': "'timeside_encoders'"},
+            'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'db_column': "'file'"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}),
+            'parameters': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'pid': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'})
+        },
+        'timeside.experience': {
+            'Meta': {'object_name': 'Experience', 'db_table': "'timeside_experiences'"},
+            'analyzers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'experience'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Analyzer']"}),
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'experience'", 'null': 'True', 'to': "orm['auth.User']"}),
+            'begin_time': ('django.db.models.fields.FloatField', [], {'default': '0', 'blank': 'True'}),
+            'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
+            'decoder': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'experience'", 'null': 'True', 'to': "orm['timeside.Decoder']"}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'encoders': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'experience'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Encoder']"}),
+            'end_time': ('django.db.models.fields.FloatField', [], {'blank': 'True'}),
+            'graphers': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'experience'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Grapher']"}),
+            'hdf5': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'db_column': "'hdf5'"}),
+            'high_frequency': ('django.db.models.fields.FloatField', [], {'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'item': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'experience'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['timeside.Item']"}),
+            'json': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'db_column': "'json'"}),
+            'low_frequency': ('django.db.models.fields.FloatField', [], {'blank': 'True'}),
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
+            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '256'})
+        },
+        'timeside.grapher': {
+            'Meta': {'object_name': 'Grapher', 'db_table': "'timeside_graphers'"},
+            'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'db_column': "'file'"}),
+            'height': ('django.db.models.fields.IntegerField', [], {'default': '180'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}),
+            'parameters': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'pid': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
+            'width': ('django.db.models.fields.IntegerField', [], {'default': '320'})
+        },
+        'timeside.item': {
+            'Meta': {'ordering': "['code']", 'object_name': 'Item', 'db_table': "'timeside_items'"},
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}),
+            'sha1': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512', 'blank': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'blank': 'True'})
+        }
+    }
+
+    complete_apps = ['timeside']
\ No newline at end of file
index 416f52a78be06e89763837c20ac1e4ac82f04d31..8a334e92c72fa15656c8e50f6f726531c51e61b6 100644 (file)
@@ -2,22 +2,35 @@
 
 from django.db.models import *
 from django.utils.translation import ugettext_lazy as _
+from django.contrib.auth.models import User
 
+import timeside
+
+app = 'timeside'
+
+STATUS = ((0, _('broken')), (1, _('pending')), (2, _('processing')),
+                         (3, _('done')), (4, _('ready')))
 
 class MetaCore:
-    app_label = 'timeside'
+    app_label = app
 
 
 class Item(Model):
 
+    code = CharField(_('code'), unique=True, max_length=512)
     title = CharField(_('title'), blank=True, max_length=512)
-    description = CharField(_('description'), blank=True, max_length=1024)
-    code = CharField(_('code'), unique=True, max_length=256)
-    media_file = FileField(_('file'), upload_to='items/%Y/%m/%d',
-                                      db_column="file", max_length=1024)
+    description = TextField(_('description'), blank=True)
+    file = FileField(_('file'), upload_to='items/%Y/%m/%d', blank=True, max_length=1024)
+    url = URLField(_('URL'), blank=True, max_length=1024)
+    sha1 = CharField(_('sha1'), unique=True, blank=True, max_length=512)
+    mime_type = CharField(_('mime_type'), null=True, max_length=256)
+
+    def set_mime_type(self):
+        if self.file:
+            self.mime_type = mimetypes.guess_type(self.file.path)[0]
 
     class Meta(MetaCore):
-        db_table = 'timeside_item'
+        db_table = app + '_items'
         ordering = ['code']
         verbose_name = _('item')
 
@@ -25,16 +38,87 @@ class Item(Model):
         return self.code
 
 
-class Analysis(Model):
+class Processor(Model):
+    
+    pid = CharField(_('pid'), max_length=256)
+    parameters = TextField(_('parameters'), blank=True)
+    version = CharField(_('version'), max_length=64, blank=True)
+    status = IntegerField(_('status'), choices=STATUS, default=1)
+
+    def save(self):
+        super(Processor, self).save()
+        if not self.version:
+            self.version = timeside.__version__    
+
+    class Meta(MetaCore):
+        abstract=True
+
+
+class Decoder(Processor):
+
+    class Meta(MetaCore):
+        db_table = app + '_decoders'
+        verbose_name = _('decoder')
+
+
+class Analyzer(Processor):
+
+    class Meta(MetaCore):
+        db_table = app + '_analyzers'
+        verbose_name = _('analyzer')
+
+
+class Grapher(Processor):
 
-    item = ForeignKey(Item, related_name='analysis',
-                        verbose_name=_('item'), null=True, on_delete=SET_NULL)
-    hdf5_file = FileField(_('file'), upload_to='cache/%Y/%m/%d',
-                        db_column="hdf5", max_length=1024)
+    file = FileField(_('file'), upload_to='cache/grapher/%Y/%m/%d', db_column="file", max_length=1024)
+    mime_type = CharField(_('mime_type'), null=True, max_length=256)
+    height = IntegerField(_('height'), default=180)
+    width = IntegerField(_('width'), default=320)
 
     class Meta(MetaCore):
-        db_table = 'timeside_analysis'
-        verbose_name = _('analysis')
+        db_table = app + '_graphers'
+        verbose_name = _('grapher')
+
+
+class Encoder(Processor):
+
+    file = FileField(_('file'), upload_to='cache/encoder/%Y/%m/%d', db_column="file", max_length=1024)
+    mime_type = CharField(_('mime_type'), null=True, max_length=256)
+
+    class Meta(MetaCore):
+        db_table = app + '_encoders'
+        verbose_name = _('encoder')
+
+
+class Experience(Model):
+
+    item = ForeignKey(Item, related_name='experience', verbose_name=_('item'), null=True, on_delete=SET_NULL)    
+    title = CharField(_('title'), blank=True, max_length=512)
+    description = TextField(_('description'), blank=True)
+    date_added = DateTimeField(_('date added'), auto_now_add=True)
+    date_modified = DateTimeField(_('date modified'), auto_now=True, null=True)
+    status = IntegerField(_('status'), choices=STATUS, default=1)
+    uuid = CharField(_('uuid'), max_length=256)
+    author = ForeignKey(User, related_name="experience", verbose_name=_('author'), blank=True, null=True)
+
+    decoder = ForeignKey(Decoder, related_name="experience", verbose_name=_('decoder'), null=True)
+    analyzers = ManyToManyField(Analyzer, related_name="experience", verbose_name=_('analyzers'), blank=True, null=True)
+    graphers = ManyToManyField(Grapher, related_name="experience", verbose_name=_('graphers'), blank=True, null=True)
+    encoders = ManyToManyField(Encoder, related_name="experience", verbose_name=_('encoders'), blank=True, null=True)
+
+    begin_time = FloatField(_('begin time'), default=0, blank=True)
+    end_time = FloatField(_('end time'), blank=True)
+    low_frequency = FloatField(_('low frequency'), blank=True)
+    high_frequency = FloatField(_('highh frequency'), blank=True)
+
+    hdf5 = FileField(_('hdf5_file'), upload_to='cache/hdf5/%Y/%m/%d', db_column="hdf5", max_length=1024)
+    json = FileField(_('json_file'), upload_to='cache/json/%Y/%m/%d', db_column="json", max_length=1024)
+        
+    class Meta(MetaCore):
+        db_table = app + '_experiences'
+        verbose_name = _('experience')
 
     def results(self):
-        pass
\ No newline at end of file
+        pass
+
+
diff --git a/timeside/server/__init__.py b/timeside/server/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/timeside/server/settings.py b/timeside/server/settings.py
deleted file mode 100644 (file)
index fcc8ded..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-# Django settings for server project.
-
-DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-import sys
-sys.dont_write_bytecode = True
-
-ADMINS = (
-    # ('Your Name', 'your_email@example.com'),
-)
-
-MANAGERS = ADMINS
-
-DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
-        'NAME': 'timeside.sql',                      # Or path to database file if using sqlite3.
-        'USER': '',                      # Not used with sqlite3.
-        'PASSWORD': '',                  # Not used with sqlite3.
-        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
-        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
-    }
-}
-
-# Hosts/domain names that are valid for this site; required if DEBUG is False
-# See https://docs.djangoproject.com/en/1.4/ref/settings/#allowed-hosts
-ALLOWED_HOSTS = []
-
-# Local time zone for this installation. Choices can be found here:
-# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
-# although not all choices may be available on all operating systems.
-# In a Windows environment this must be set to your system time zone.
-TIME_ZONE = 'America/Chicago'
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'en-us'
-
-SITE_ID = 1
-
-# If you set this to False, Django will make some optimizations so as not
-# to load the internationalization machinery.
-USE_I18N = True
-
-# If you set this to False, Django will not format dates, numbers and
-# calendars according to the current locale.
-USE_L10N = True
-
-# If you set this to False, Django will not use timezone-aware datetimes.
-USE_TZ = True
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = ''
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = ''
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = ''
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = '/static/'
-
-# Additional locations of static files
-STATICFILES_DIRS = (
-    # Put strings here, like "/home/html/static" or "C:/www/django/static".
-    # Always use forward slashes, even on Windows.
-    # Don't forget to use absolute paths, not relative paths.
-)
-
-# List of finder classes that know how to find static files in
-# various locations.
-STATICFILES_FINDERS = (
-    'django.contrib.staticfiles.finders.FileSystemFinder',
-    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
-#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
-)
-
-# Make this unique, and don't share it with anybody.
-SECRET_KEY = '5%z&amp;a3r@t0=xr2eaio+400qf-32$b5zp897pr*wh5i^s4(-+3('
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
-    'django.template.loaders.filesystem.Loader',
-    'django.template.loaders.app_directories.Loader',
-#     'django.template.loaders.eggs.Loader',
-)
-
-MIDDLEWARE_CLASSES = (
-    'django.middleware.common.CommonMiddleware',
-    'django.contrib.sessions.middleware.SessionMiddleware',
-    'django.middleware.csrf.CsrfViewMiddleware',
-    'django.contrib.auth.middleware.AuthenticationMiddleware',
-    'django.contrib.messages.middleware.MessageMiddleware',
-    # Uncomment the next line for simple clickjacking protection:
-    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
-)
-
-ROOT_URLCONF = 'server.urls'
-
-# Python dotted path to the WSGI application used by Django's runserver.
-WSGI_APPLICATION = 'server.wsgi.application'
-
-TEMPLATE_DIRS = (
-    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
-    # Always use forward slashes, even on Windows.
-    # Don't forget to use absolute paths, not relative paths.
-)
-
-INSTALLED_APPS = (
-    'django.contrib.auth',
-    'django.contrib.contenttypes',
-    'django.contrib.sessions',
-    'django.contrib.sites',
-    'django.contrib.messages',
-    'django.contrib.staticfiles',
-    # Uncomment the next line to enable the admin:
-    'django.contrib.admin',
-    # Uncomment the next line to enable admin documentation:
-    # 'django.contrib.admindocs',
-    'south',
-    'timeside',
-)
-
-# A sample logging configuration. The only tangible logging
-# performed by this configuration is to send an email to
-# the site admins on every HTTP 500 error when DEBUG=False.
-# See http://docs.djangoproject.com/en/dev/topics/logging for
-# more details on how to customize your logging configuration.
-LOGGING = {
-    'version': 1,
-    'disable_existing_loggers': False,
-    'filters': {
-        'require_debug_false': {
-            '()': 'django.utils.log.RequireDebugFalse'
-        }
-    },
-    'handlers': {
-        'mail_admins': {
-            'level': 'ERROR',
-            'filters': ['require_debug_false'],
-            'class': 'django.utils.log.AdminEmailHandler'
-        }
-    },
-    'loggers': {
-        'django.request': {
-            'handlers': ['mail_admins'],
-            'level': 'ERROR',
-            'propagate': True,
-        },
-    }
-}
diff --git a/timeside/server/urls.py b/timeside/server/urls.py
deleted file mode 100644 (file)
index 98374ec..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-from django.conf.urls import patterns, include, url
-
-# Uncomment the next two lines to enable the admin:
-from django.contrib import admin
-admin.autodiscover()
-
-urlpatterns = patterns('',
-
-    url(r'^', include('timeside.urls')),
-
-    # Examples:
-    # url(r'^$', 'server.views.home', name='home'),
-    # url(r'^server/', include('server.foo.urls')),
-
-    # Uncomment the admin/doc line below to enable admin documentation:
-    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
-
-    # Uncomment the next line to enable the admin:
-    url(r'^admin/', include(admin.site.urls)),
-)
diff --git a/timeside/server/wsgi.py b/timeside/server/wsgi.py
deleted file mode 100644 (file)
index c4ec771..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-"""
-WSGI config for server project.
-
-This module contains the WSGI application used by Django's development server
-and any production WSGI deployments. It should expose a module-level variable
-named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
-this application via the ``WSGI_APPLICATION`` setting.
-
-Usually you will have the standard Django WSGI application here, but it also
-might make sense to replace the whole Django WSGI application with a custom one
-that later delegates to the Django one. For example, you could introduce WSGI
-middleware here, or combine a Django application with an application of another
-framework.
-
-"""
-import os
-
-os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
-
-# This application object is used by any WSGI server configured to use this
-# file. This includes Django's development server, if the WSGI_APPLICATION
-# setting points here.
-from django.core.wsgi import get_wsgi_application
-application = get_wsgi_application()
-
-# Apply WSGI middleware here.
-# from helloworld.wsgi import HelloWorldApplication
-# application = HelloWorldApplication(application)
index 74b821598f5a39adfbb6c64470f7371d6000edbc..4ff8ba5a66252d413944919c9d031e4e8aae3458 100644 (file)
@@ -1,10 +1,18 @@
 # -*- coding: utf-8 -*-
 
+import timeside
 
 from django.views.generic import *
 from timeside.models import *
 
 
+decoders = timeside.core.processors(timeside.api.IDecoder)
+analyzers = timeside.core.processors(timeside.api.IAnalyzer)
+graphers = timeside.core.processors(timeside.api.IGrapher)
+encoders = timeside.core.processors(timeside.api.IEncoder)
+value_analyzers = timeside.core.processors(timeside.api.IValueAnalyzer)
+
+
 class IndexView(ListView):
 
     model = Item
@@ -18,3 +26,39 @@ class IndexView(ListView):
     #@method_decorator(login_required)
     def dispatch(self, *args, **kwargs):
         return super(IndexView, self).dispatch(*args, **kwargs)
+
+
+class ItemGraphView(DetailView):
+
+
+
+    def item_visualize(self, request, public_id, grapher_id, width, height):
+        item = MediaItem.objects.get(public_id=public_id)
+        mime_type = 'image/png'
+        grapher = self.get_grapher(grapher_id)
+        
+        if grapher.id() != grapher_id:
+            raise Http404
+
+        size = width + '_' + height
+        image_file = '.'.join([public_id, grapher_id, size, 'png'])
+
+        # FIX waveform grapher name change
+        old_image_file = '.'.join([public_id, 'waveform', size, 'png'])
+        if 'waveform_centroid' in grapher_id and self.cache_data.exists(old_image_file):
+            image_file = old_image_file
+
+        if not self.cache_data.exists(image_file):
+            source = item.get_source()
+            if source:
+                path = self.cache_data.dir + os.sep + image_file
+                decoder  = timeside.decoder.FileDecoder(source)
+                graph = grapher(width = int(width), height = int(height))
+                (decoder | graph).run()
+                graph.watermark('timeside', opacity=.6, margin=(5,5))
+                f = open(path, 'w')
+                graph.render(output=path)
+                f.close()
+
+        response = HttpResponse(self.cache_data.read_stream_bin(image_file), mimetype=mime_type)
+        return response
\ No newline at end of file