]> git.parisson.com Git - timeside.git/commitdiff
upgrade models, remove jsonfields, add REST serializers thanks to djangorestframework
authorGuillaume Pellerin <yomguy@parisson.com>
Mon, 21 Apr 2014 09:34:02 +0000 (11:34 +0200)
committerGuillaume Pellerin <yomguy@parisson.com>
Mon, 21 Apr 2014 09:34:02 +0000 (11:34 +0200)
setup.py
tests/server/settings.py
timeside/__init__.py
timeside/admin.py
timeside/migrations/0001_initial.py
timeside/migrations/0002_auto__chg_field_result_output_mime_type.py [deleted file]
timeside/models.py
timeside/serializers.py [new file with mode: 0644]
timeside/templates/timeside/index.html
timeside/urls.py
timeside/views.py

index 29250d8ed3d21c9c0048643467f2aa7d9802f4b4..760a8aee5f4ebd49db58f5337cf6b7f2c60ed130 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -38,8 +38,8 @@ setup(
         'simplejson',
         'scipy',
         'django',
-        'jsonfield',
         'django-extensions',
+        'djangorestframework',
         ],
   platforms=['OS Independent'],
   license='Gnu Public License V2',
index 0d353caed4ee56f66aceb31965a961c47e9a3a2a..4f1221db9c291f2f6fcbd70a67fb3b2b2377613c 100644 (file)
@@ -52,7 +52,7 @@ USE_TZ = True
 
 # Absolute filesystem path to the directory that will hold user-uploaded files.
 # Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = ''
+MEDIA_ROOT = 'media/'
 
 # URL that handles the media served from MEDIA_ROOT. Make sure to use a
 # trailing slash.
@@ -129,6 +129,7 @@ INSTALLED_APPS = (
     'django_extensions',
     'south',
     'timeside',
+    'rest_framework',
 )
 
 # A sample logging configuration. The only tangible logging
@@ -159,3 +160,6 @@ LOGGING = {
         },
     }
 }
+
+REST_FRAMEWORK = {
+}
\ No newline at end of file
index d527231cc6549e457168ddb417f55eb74d900f48..333a661f16bc70453ed4d66116ff32167396ef16 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
-import api
-import core
-import decoder
-import analyzer
-import grapher
-import encoder
+from . import api
+from . import core
+from . import decoder
+from . import analyzer
+from . import grapher
+from . import encoder
 
 __version__ = '0.5.5'
index 53e030bb8a8c9df8368927f44ee898998f8f836c..a6f882b183c03303cd7b1ac85026cc1fc46e1af3 100644 (file)
@@ -2,10 +2,11 @@
 from django.contrib import admin
 from timeside.models import *
 
-admin.site.register(Collection)
+admin.site.register(Selection)
 admin.site.register(Item)
 admin.site.register(Experience)
 admin.site.register(Processor)
+admin.site.register(Parameters)
 admin.site.register(Result)
 admin.site.register(Task)
 
index 32337623a95df8e4d4fbc98d74cb51570c4aead7..bba562c26cdfc9d6ebd81d5cf8bbe8fa87eee311 100644 (file)
@@ -8,40 +8,51 @@ from django.db import models
 class Migration(SchemaMigration):
 
     def forwards(self, orm):
-        # Adding model 'Collection'
-        db.create_table('timeside_collections', (
+        # Adding model 'Selection'
+        db.create_table('timeside_selections', (
             ('id', self.gf('django.db.models.fields.AutoField')(primary_key=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)),
-            ('uuid', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
+            ('uuid', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512, blank=True)),
             ('title', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
             ('description', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('author', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='selections', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])),
         ))
-        db.send_create_signal('timeside', ['Collection'])
+        db.send_create_signal('timeside', ['Selection'])
 
-        # Adding M2M table for field items on 'Collection'
-        m2m_table_name = db.shorten_name('timeside_collections_items')
+        # Adding M2M table for field items on 'Selection'
+        m2m_table_name = db.shorten_name('timeside_selections_items')
         db.create_table(m2m_table_name, (
             ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('collection', models.ForeignKey(orm['timeside.collection'], null=False)),
+            ('selection', models.ForeignKey(orm['timeside.selection'], null=False)),
             ('item', models.ForeignKey(orm['timeside.item'], null=False))
         ))
-        db.create_unique(m2m_table_name, ['collection_id', 'item_id'])
+        db.create_unique(m2m_table_name, ['selection_id', 'item_id'])
+
+        # Adding M2M table for field selections on 'Selection'
+        m2m_table_name = db.shorten_name('timeside_selections_selections')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('from_selection', models.ForeignKey(orm['timeside.selection'], null=False)),
+            ('to_selection', models.ForeignKey(orm['timeside.selection'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['from_selection_id', 'to_selection_id'])
 
         # Adding model 'Item'
         db.create_table('timeside_items', (
             ('id', self.gf('django.db.models.fields.AutoField')(primary_key=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)),
-            ('uuid', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
+            ('uuid', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512, blank=True)),
             ('title', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
             ('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)),
+            ('sha1', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
             ('mime_type', self.gf('django.db.models.fields.CharField')(max_length=256, blank=True)),
             ('hdf5', self.gf('django.db.models.fields.files.FileField')(max_length=1024, blank=True)),
             ('lock', self.gf('django.db.models.fields.BooleanField')(default=False)),
+            ('author', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='items', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])),
         ))
         db.send_create_signal('timeside', ['Item'])
 
@@ -50,10 +61,11 @@ class Migration(SchemaMigration):
             ('id', self.gf('django.db.models.fields.AutoField')(primary_key=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)),
-            ('uuid', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
+            ('uuid', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512, blank=True)),
             ('title', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
             ('description', self.gf('django.db.models.fields.TextField')(blank=True)),
             ('author', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='experiences', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])),
+            ('is_preset', self.gf('django.db.models.fields.BooleanField')(default=False)),
         ))
         db.send_create_signal('timeside', ['Experience'])
 
@@ -66,15 +78,20 @@ class Migration(SchemaMigration):
         ))
         db.create_unique(m2m_table_name, ['experience_id', 'processor_id'])
 
+        # Adding M2M table for field experiences on 'Experience'
+        m2m_table_name = db.shorten_name('timeside_experiences_experiences')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('from_experience', models.ForeignKey(orm['timeside.experience'], null=False)),
+            ('to_experience', models.ForeignKey(orm['timeside.experience'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['from_experience_id', 'to_experience_id'])
+
         # Adding model 'Processor'
         db.create_table('timeside_processors', (
             ('id', self.gf('django.db.models.fields.AutoField')(primary_key=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)),
-            ('uuid', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
             ('pid', self.gf('django.db.models.fields.CharField')(max_length=256)),
             ('type', self.gf('django.db.models.fields.CharField')(default='none', max_length=64)),
-            ('parameters', self.gf('jsonfield.fields.JSONField')(null=True, blank=True)),
             ('version', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)),
         ))
         db.send_create_signal('timeside', ['Processor'])
@@ -84,40 +101,45 @@ class Migration(SchemaMigration):
             ('id', self.gf('django.db.models.fields.AutoField')(primary_key=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)),
-            ('uuid', self.gf('django.db.models.fields.CharField')(max_length=512, blank=True)),
+            ('uuid', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512, blank=True)),
             ('item', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='results', null=True, on_delete=models.SET_NULL, to=orm['timeside.Item'])),
             ('processor', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='results', null=True, on_delete=models.SET_NULL, to=orm['timeside.Processor'])),
-            ('output', self.gf('django.db.models.fields.files.FileField')(max_length=1024)),
-            ('json', self.gf('jsonfield.fields.JSONField')(blank=True)),
-            ('hdf5', self.gf('django.db.models.fields.files.FileField')(max_length=1024)),
-            ('output_mime_type', self.gf('django.db.models.fields.CharField')(max_length=256, null=True)),
+            ('hdf5', self.gf('django.db.models.fields.files.FileField')(max_length=1024, blank=True)),
+            ('output', self.gf('django.db.models.fields.files.FileField')(max_length=1024, blank=True)),
+            ('output_mime_type', self.gf('django.db.models.fields.CharField')(max_length=256, blank=True)),
+            ('status', self.gf('django.db.models.fields.IntegerField')(default=1)),
         ))
         db.send_create_signal('timeside', ['Result'])
 
+        # Adding model 'Parameters'
+        db.create_table('timeside_parameters', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('processor', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='parameters', null=True, to=orm['timeside.Experience'])),
+            ('parameters', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('is_preset', self.gf('django.db.models.fields.BooleanField')(default=False)),
+        ))
+        db.send_create_signal('timeside', ['Parameters'])
+
         # Adding model 'Task'
         db.create_table('timeside_tasks', (
             ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
             ('experience', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='task', null=True, to=orm['timeside.Experience'])),
+            ('selection', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='task', null=True, to=orm['timeside.Selection'])),
             ('status', self.gf('django.db.models.fields.IntegerField')(default=1)),
+            ('author', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='tasks', null=True, on_delete=models.SET_NULL, to=orm['auth.User'])),
         ))
         db.send_create_signal('timeside', ['Task'])
 
-        # Adding M2M table for field items on 'Task'
-        m2m_table_name = db.shorten_name('timeside_tasks_items')
-        db.create_table(m2m_table_name, (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('task', models.ForeignKey(orm['timeside.task'], null=False)),
-            ('item', models.ForeignKey(orm['timeside.item'], null=False))
-        ))
-        db.create_unique(m2m_table_name, ['task_id', 'item_id'])
-
 
     def backwards(self, orm):
-        # Deleting model 'Collection'
-        db.delete_table('timeside_collections')
+        # Deleting model 'Selection'
+        db.delete_table('timeside_selections')
+
+        # Removing M2M table for field items on 'Selection'
+        db.delete_table(db.shorten_name('timeside_selections_items'))
 
-        # Removing M2M table for field items on 'Collection'
-        db.delete_table(db.shorten_name('timeside_collections_items'))
+        # Removing M2M table for field selections on 'Selection'
+        db.delete_table(db.shorten_name('timeside_selections_selections'))
 
         # Deleting model 'Item'
         db.delete_table('timeside_items')
@@ -128,18 +150,21 @@ class Migration(SchemaMigration):
         # Removing M2M table for field processors on 'Experience'
         db.delete_table(db.shorten_name('timeside_experiences_processors'))
 
+        # Removing M2M table for field experiences on 'Experience'
+        db.delete_table(db.shorten_name('timeside_experiences_experiences'))
+
         # Deleting model 'Processor'
         db.delete_table('timeside_processors')
 
         # Deleting model 'Result'
         db.delete_table('timeside_results')
 
+        # Deleting model 'Parameters'
+        db.delete_table('timeside_parameters')
+
         # Deleting model 'Task'
         db.delete_table('timeside_tasks')
 
-        # Removing M2M table for field items on 'Task'
-        db.delete_table(db.shorten_name('timeside_tasks_items'))
-
 
     models = {
         'auth.group': {
@@ -178,29 +203,22 @@ class Migration(SchemaMigration):
             'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
             'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
         },
-        'timeside.collection': {
-            'Meta': {'ordering': "['title']", 'object_name': 'Collection', 'db_table': "'timeside_collections'"},
-            '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'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'items': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'collections'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Item']"}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'})
-        },
         'timeside.experience': {
             'Meta': {'object_name': 'Experience', 'db_table': "'timeside_experiences'"},
             'author': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'experiences'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
             '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'}),
+            'experiences': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'other_experiences'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Experience']"}),
             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_preset': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
             'processors': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'experiences'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Processor']"}),
             'title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'})
+            'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512', 'blank': 'True'})
         },
         'timeside.item': {
             'Meta': {'ordering': "['title']", 'object_name': 'Item', 'db_table': "'timeside_items'"},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'items'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
             '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'}),
@@ -209,40 +227,56 @@ class Migration(SchemaMigration):
             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
             'lock': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
             'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),
-            'sha1': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512', 'blank': 'True'}),
+            'sha1': ('django.db.models.fields.CharField', [], {'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'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'})
+            'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512', 'blank': 'True'})
+        },
+        'timeside.parameters': {
+            'Meta': {'object_name': 'Parameters'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_preset': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'parameters': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'processor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parameters'", 'null': 'True', 'to': "orm['timeside.Experience']"})
         },
         'timeside.processor': {
             'Meta': {'object_name': 'Processor', 'db_table': "'timeside_processors'"},
-            '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'}),
             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'parameters': ('jsonfield.fields.JSONField', [], {'null': 'True', 'blank': 'True'}),
             'pid': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
             'type': ('django.db.models.fields.CharField', [], {'default': "'none'", 'max_length': '64'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
             'version': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'})
         },
         'timeside.result': {
             'Meta': {'object_name': 'Result', 'db_table': "'timeside_results'"},
             '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'}),
-            'hdf5': ('django.db.models.fields.files.FileField', [], {'max_length': '1024'}),
+            'hdf5': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'blank': 'True'}),
             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
             'item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'results'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['timeside.Item']"}),
-            'json': ('jsonfield.fields.JSONField', [], {'blank': 'True'}),
-            'output': ('django.db.models.fields.files.FileField', [], {'max_length': '1024'}),
-            'output_mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}),
+            'output': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'blank': 'True'}),
+            'output_mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),
             'processor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'results'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['timeside.Processor']"}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'})
+            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512', 'blank': 'True'})
+        },
+        'timeside.selection': {
+            'Meta': {'object_name': 'Selection', 'db_table': "'timeside_selections'"},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'selections'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
+            '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'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'items': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'selections'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Item']"}),
+            'selections': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'other_selections'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Selection']"}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
+            'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512', 'blank': 'True'})
         },
         'timeside.task': {
             'Meta': {'object_name': 'Task', 'db_table': "'timeside_tasks'"},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'tasks'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
             'experience': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'task'", 'null': 'True', 'to': "orm['timeside.Experience']"}),
             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'items': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'task'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Item']"}),
+            'selection': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'task'", 'null': 'True', 'to': "orm['timeside.Selection']"}),
             'status': ('django.db.models.fields.IntegerField', [], {'default': '1'})
         }
     }
diff --git a/timeside/migrations/0002_auto__chg_field_result_output_mime_type.py b/timeside/migrations/0002_auto__chg_field_result_output_mime_type.py
deleted file mode 100644 (file)
index 79c1d08..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-# -*- 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):
-
-        # Changing field 'Result.output_mime_type'
-        db.alter_column('timeside_results', 'output_mime_type', self.gf('django.db.models.fields.CharField')(default='', max_length=256))
-
-    def backwards(self, orm):
-
-        # Changing field 'Result.output_mime_type'
-        db.alter_column('timeside_results', 'output_mime_type', self.gf('django.db.models.fields.CharField')(max_length=256, null=True))
-
-    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.collection': {
-            'Meta': {'ordering': "['title']", 'object_name': 'Collection', 'db_table': "'timeside_collections'"},
-            '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'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'items': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'collections'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Item']"}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'})
-        },
-        'timeside.experience': {
-            'Meta': {'object_name': 'Experience', 'db_table': "'timeside_experiences'"},
-            'author': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'experiences'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}),
-            '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'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'processors': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'experiences'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Processor']"}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'})
-        },
-        'timeside.item': {
-            'Meta': {'ordering': "['title']", 'object_name': 'Item', 'db_table': "'timeside_items'"},
-            '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'}),
-            'file': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'blank': 'True'}),
-            'hdf5': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lock': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': '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'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'})
-        },
-        'timeside.processor': {
-            'Meta': {'object_name': 'Processor', 'db_table': "'timeside_processors'"},
-            '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'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'parameters': ('jsonfield.fields.JSONField', [], {'null': 'True', 'blank': 'True'}),
-            'pid': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'none'", 'max_length': '64'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
-            'version': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'})
-        },
-        'timeside.result': {
-            'Meta': {'object_name': 'Result', 'db_table': "'timeside_results'"},
-            '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'}),
-            'hdf5': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'results'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['timeside.Item']"}),
-            'json': ('jsonfield.fields.JSONField', [], {'blank': 'True'}),
-            'output': ('django.db.models.fields.files.FileField', [], {'max_length': '1024', 'blank': 'True'}),
-            'output_mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256', 'blank': 'True'}),
-            'processor': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'results'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['timeside.Processor']"}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'})
-        },
-        'timeside.task': {
-            'Meta': {'object_name': 'Task', 'db_table': "'timeside_tasks'"},
-            'experience': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'task'", 'null': 'True', 'to': "orm['timeside.Experience']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'items': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'task'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['timeside.Item']"}),
-            'status': ('django.db.models.fields.IntegerField', [], {'default': '1'})
-        }
-    }
-
-    complete_apps = ['timeside']
\ No newline at end of file
index df2964690b93f29dd5e8a0d279ac77fe1eafa9c3..a453500cafe0454fa17e8e1cdc682b364b2bafd6 100644 (file)
@@ -9,9 +9,6 @@ from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from django.contrib.auth.models import User
 
-from jsonfield import JSONField
-
-
 app = 'timeside'
 
 processors = timeside.core.processors(timeside.api.IProcessor)
@@ -27,7 +24,6 @@ STATUS = ((0, _('failed')), (1, _('pending')), (2, _('running')),
 def get_mime_type(path):
     return mimetypes.guess_type(path)[0]
 
-
 def get_processor(pid):
     for proc in processors:
         if proc.id == pid:
@@ -44,7 +40,7 @@ class BaseResource(models.Model):
 
     date_added = models.DateTimeField(_('date added'), auto_now_add=True)
     date_modified = models.DateTimeField(_('date modified'), auto_now=True, null=True)
-    uuid = models.CharField(_('uuid'), blank=True, max_length=512, )
+    uuid = models.CharField(_('uuid'), unique=True, blank=True, max_length=512, editable=False)
 
     class Meta(MetaCore):
         abstract = True
@@ -67,24 +63,26 @@ class DocBaseResource(BaseResource):
         abstract = True
     
 
-class Collection(DocBaseResource):
+class Selection(DocBaseResource):
 
-    items = models.ManyToManyField('Item', related_name="collections", verbose_name=_('items'), blank=True, null=True)
+    items = models.ManyToManyField('Item', related_name="selections", verbose_name=_('items'), blank=True, null=True)
+    author = models.ForeignKey(User, related_name="selections", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
+    selections = models.ManyToManyField('Selection', related_name="other_selections", verbose_name=_('other selections'), blank=True, null=True)
 
     class Meta(MetaCore):
-        db_table = app + '_collections'
-        ordering = ['title']
-        verbose_name = _('collection')
+        db_table = app + '_selections'
+        verbose_name = _('selection')
 
 
 class Item(DocBaseResource):
 
     file = models.FileField(_('file'), upload_to='items/%Y/%m/%d', blank=True, max_length=1024)
     url = models.URLField(_('URL'), blank=True, max_length=1024)
-    sha1 = models.CharField(_('sha1'), unique=True, blank=True, max_length=512)
+    sha1 = models.CharField(_('sha1'), blank=True, max_length=512)
     mime_type = models.CharField(_('mime type'), blank=True, max_length=256)
     hdf5 = models.FileField(_('HDF5 result file'), upload_to='items/%Y/%m/%d', blank=True, max_length=1024)
     lock = models.BooleanField(default=False)
+    author = models.ForeignKey(User, related_name="items", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
 
     class Meta(MetaCore):
         db_table = app + '_items'
@@ -96,7 +94,7 @@ class Item(DocBaseResource):
             if not self.mime_type:
                 self.mime_type = get_mime_type(self.file.path)
             if not self.sha1:
-                self.sha1 = sha1sum_file(self.file)
+                self.sha1 = sha1sum_file(self.file.path)
         super(Item, self).save(**kwargs)
 
     def results(self):
@@ -107,17 +105,18 @@ class Experience(DocBaseResource):
 
     processors = models.ManyToManyField('Processor', related_name="experiences", verbose_name=_('processors'), blank=True, null=True)
     author = models.ForeignKey(User, related_name="experiences", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
-    
+    experiences = models.ManyToManyField('Experience', related_name="other_experiences", verbose_name=_('other experiences'), blank=True, null=True)
+    is_preset = models.BooleanField(default=False)
+
     class Meta(MetaCore):
         db_table = app + '_experiences'
         verbose_name = _('Experience')
 
 
-class Processor(BaseResource):
+class Processor(models.Model):
     
     pid = models.CharField(_('pid'), choices=PROCESSOR_PIDS, max_length=256)
     type = models.CharField(_('type'), choices=PROCESSOR_TYPES, default='none', max_length=64)
-    parameters = JSONField(_('parameters'), blank=True, null=True)
     version = models.CharField(_('version'), max_length=64, blank=True)
 
     class Meta(MetaCore):
@@ -137,16 +136,20 @@ class Result(BaseResource):
 
     item = models.ForeignKey('Item', related_name="results", verbose_name=_('item'), blank=True, null=True, on_delete=models.SET_NULL)
     processor = models.ForeignKey('Processor', related_name="results", verbose_name=_('processor'), blank=True, null=True, on_delete=models.SET_NULL)
-    json = JSONField(_('JSON result'), blank=True)
     hdf5 = models.FileField(_('HDF5 result file'), upload_to='results/%Y/%m/%d', blank=True, max_length=1024)
     output = models.FileField(_('Output file'), upload_to='results/%Y/%m/%d', blank=True, max_length=1024)
     output_mime_type = models.CharField(_('Output mime type'), blank=True, max_length=256)
-
+    status = models.IntegerField(_('status'), choices=STATUS, default=1)
+    
     class Meta(MetaCore):
         db_table = app + '_results'
         verbose_name = _('Result')
         verbose_name_plural = _('Results')
 
+    def status_setter(self, status):
+        self.status = status
+        self.save()
+
     def __unicode__(self):
         return '_'.join([self.item.title, unicode(self.processor)])
 
@@ -156,12 +159,28 @@ class Result(BaseResource):
         super(Result, self).save(**kwargs)
 
 
+class Parameters(models.Model):
+
+    processor = models.ForeignKey('Experience', related_name="parameters", verbose_name=_('processor'), blank=True, null=True)
+    parameters = models.TextField(_('Parameters'), blank=True)
+    is_preset = models.BooleanField(default=False)
+
+    class Meta:
+        db_table = app + '_parameters'
+        verbose_name = _('Parameters')
+        verbose_name_plural = _('Parameters')
+
+    def __unicode__(self):
+        pass
+
+    
 class Task(models.Model):
 
     experience = models.ForeignKey('Experience', related_name="task", verbose_name=_('experience'), blank=True, null=True)
-    items = models.ManyToManyField('Item', related_name="task", verbose_name=_('items'), blank=True, null=True)
+    selection = models.ForeignKey('Selection', related_name="task", verbose_name=_('selection'), blank=True, null=True)
     status = models.IntegerField(_('status'), choices=STATUS, default=1)
-    
+    author = models.ForeignKey(User, related_name="tasks", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)    
+
     class Meta(MetaCore):
         db_table = app + '_tasks'
         verbose_name = _('Task')
@@ -177,7 +196,7 @@ class Task(models.Model):
     def run(self):
         self.status_setter(2)
 
-        for item in self.items:
+        for item in self.selection.items:
             pipe = timeside.decoder.FileDecoder(item.file)
             proc_dict = {}
             for processor in self.experience.processors.all():
@@ -200,11 +219,7 @@ class Task(models.Model):
                 
                 for processor in proc_dict.keys():
                     proc = proc_dict[processor]
-                    results = Result.objects.filter(processor=processor, uuid=proc.UUID)
-                    if not results:
-                        result = Result(processor=processor, uuid=proc.UUID, item=item)
-                    else:
-                        result = results[0]
+                    result = Result.objects.get_or_create(processor=processor, uuid=proc.UUID, item=item)
                     result.hdf5 = path + item.uuid + '_' + proc.UUID + '.hdf5'
                     proc.results.to_hdf5(result.hdf5)
                     result.save()
diff --git a/timeside/serializers.py b/timeside/serializers.py
new file mode 100644 (file)
index 0000000..a42fd29
--- /dev/null
@@ -0,0 +1,19 @@
+from timeside.models import *
+from rest_framework import serializers
+import django.db.models
+
+
+class SelectionSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = Selection
+        fields = ('id', 'author', 'items')
+
+
+class ItemSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = Item
+        fields = ('id', 'title', 'mime_type')
+
+
index 54bcdff816971d9de696dc7ef2e46538f68f8eb5..9e67fd7ccff704f0b6a09d800b44f4e2df725052 100644 (file)
@@ -5,7 +5,7 @@
 
 <ul>
  {% for item in object_list %}
-  <li>{{ item.code }}</li>
+  <li>{{ item.title }}</li>
  {% endfor %}
 </ul>
 
index c1e401ead866a3a26129905b4123ee53cf1c2298..9a2a40f926c86e9fd3f41a1ce5dedce9b6788202 100644 (file)
@@ -1,9 +1,18 @@
 # -*- coding: utf-8 -*-
 
-from django.conf.urls.defaults import *
-from timeside.views import *
+from django.conf.urls import patterns, include, url
+from django.contrib import admin
+from rest_framework import routers
+from timeside import views
 
-urlpatterns = patterns('',
-    url(r'^$', IndexView.as_view(), name="timeside-index"),
+admin.autodiscover()
+
+api_router = routers.DefaultRouter()
+api_router.register(r'items', views.ItemViewSet)
+api_router.register(r'selections', views.SelectionViewSet)
 
+urlpatterns = patterns('',
+    url(r'^$', views.IndexView.as_view(), name="timeside-index"),
+    url(r'^admin/', include(admin.site.urls)),
+    url(r'^api/', include(api_router.urls)),
 )
index f7594b98bf2635d4ae5543a05e2b7b731651f860..339f546a19d605aa8d275dd940dd885390970244 100644 (file)
@@ -1,9 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import timeside
-
-from django.views.generic import *
 from timeside.models import *
+from rest_framework import viewsets
+from django.views.generic import *
+from timeside.serializers import *
 
 
 def stream_from_file(__file):
@@ -24,20 +25,12 @@ class IndexView(ListView):
 
     def get_context_data(self, **kwargs):
         context = super(IndexView, self).get_context_data(**kwargs)
-        item = self.get_object()
-        context['experiences'] = item.experiences.all().filter(author=self.request.user)
         return context
 
     def dispatch(self, *args, **kwargs):
         return super(IndexView, self).dispatch(*args, **kwargs)
 
 
-class ItemGrapherView(DetailView):
-
-    model = Item
-    mime_type = 'image/png'
-
-
 class ItemAnalyzerView(DetailView):
     
     model = Item
@@ -51,4 +44,18 @@ class ItemAnalyzerView(DetailView):
         context = super(ItemJsonAnalyzerView, self).get_context_data(**kwargs)
         return context
     
-    
\ No newline at end of file
+
+
+class ItemViewSet(viewsets.ModelViewSet):
+    
+    model = Item
+    serializer_class = ItemSerializer
+
+
+class SelectionViewSet(viewsets.ModelViewSet):
+    
+    model = Selection
+    serializer_class = SelectionSerializer
+
+
+