Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Alain Shakour
clowdflows
Commits
9fd995cc
Commit
9fd995cc
authored
Jun 13, 2013
by
Janez K
Browse files
only one stream per workflow now
parent
659e0f19
Changes
5
Hide whitespace changes
Inline
Side-by-side
mothra/settings.py
View file @
9fd995cc
...
...
@@ -175,13 +175,14 @@ INSTALLED_APPS_DEFAULT = (
'django.contrib.humanize'
,
'orderable_inlines'
,
'workflows'
,
'picklefield'
'picklefield'
,
'streams'
,
)
INSTALLED_APPS_CONCUR
=
(
'djcelery'
,
)
if
USE_CONCURRENCY
else
(
'streams'
,
)
INSTALLED_APPS_WORKFLOWS_SUB
=
(
...
...
streams/migrations/0004_auto__chg_field_stream_workflow__add_unique_stream_workflow.py
0 → 100644
View file @
9fd995cc
# -*- coding: utf-8 -*-
import
datetime
from
south.db
import
db
from
south.v2
import
SchemaMigration
from
django.db
import
models
class
Migration
(
SchemaMigration
):
def
forwards
(
self
,
orm
):
# Changing field 'Stream.workflow'
db
.
alter_column
(
'streams_stream'
,
'workflow_id'
,
self
.
gf
(
'django.db.models.fields.related.OneToOneField'
)(
unique
=
True
,
to
=
orm
[
'workflows.Workflow'
]))
# Adding unique constraint on 'Stream', fields ['workflow']
db
.
create_unique
(
'streams_stream'
,
[
'workflow_id'
])
def
backwards
(
self
,
orm
):
# Removing unique constraint on 'Stream', fields ['workflow']
db
.
delete_unique
(
'streams_stream'
,
[
'workflow_id'
])
# Changing field 'Stream.workflow'
db
.
alter_column
(
'streams_stream'
,
'workflow_id'
,
self
.
gf
(
'django.db.models.fields.related.ForeignKey'
)(
to
=
orm
[
'workflows.Workflow'
]))
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'
})
},
'streams.stream'
:
{
'Meta'
:
{
'object_name'
:
'Stream'
},
'active'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'last_executed'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'period'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'60'
}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'streams'"
,
'to'
:
"orm['auth.User']"
}),
'workflow'
:
(
'django.db.models.fields.related.OneToOneField'
,
[],
{
'related_name'
:
"'streams'"
,
'unique'
:
'True'
,
'to'
:
"orm['workflows.Workflow']"
})
},
'streams.streamwidgetdata'
:
{
'Meta'
:
{
'object_name'
:
'StreamWidgetData'
},
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'stream'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'widget_data'"
,
'to'
:
"orm['streams.Stream']"
}),
'value'
:
(
'picklefield.fields.PickledObjectField'
,
[],
{
'null'
:
'True'
}),
'widget'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'stream_data'"
,
'to'
:
"orm['workflows.Widget']"
})
},
'workflows.abstractwidget'
:
{
'Meta'
:
{
'ordering'
:
"('order', 'name')"
,
'object_name'
:
'AbstractWidget'
},
'action'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'200'
}),
'category'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'widgets'"
,
'to'
:
"orm['workflows.Category']"
}),
'description'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'has_progress_bar'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'image'
:
(
'workflows.thumbs.ThumbnailField'
,
[],
{
'max_length'
:
'100'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'interaction_view'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'200'
,
'blank'
:
'True'
}),
'interactive'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'is_streaming'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'200'
}),
'order'
:
(
'django.db.models.fields.PositiveIntegerField'
,
[],
{
'default'
:
'1'
}),
'package'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'150'
,
'blank'
:
'True'
}),
'post_interact_action'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'200'
,
'blank'
:
'True'
}),
'static_image'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'250'
,
'blank'
:
'True'
}),
'streaming_visualization_view'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'200'
,
'blank'
:
'True'
}),
'treeview_image'
:
(
'workflows.thumbs.ThumbnailField'
,
[],
{
'max_length'
:
'100'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'uid'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'250'
,
'blank'
:
'True'
}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'widgets'"
,
'null'
:
'True'
,
'to'
:
"orm['auth.User']"
}),
'visualization_view'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'200'
,
'blank'
:
'True'
}),
'wsdl'
:
(
'django.db.models.fields.URLField'
,
[],
{
'max_length'
:
'200'
,
'blank'
:
'True'
}),
'wsdl_method'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'200'
,
'blank'
:
'True'
})
},
'workflows.category'
:
{
'Meta'
:
{
'ordering'
:
"('order', 'name')"
,
'object_name'
:
'Category'
},
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'50'
}),
'order'
:
(
'django.db.models.fields.PositiveIntegerField'
,
[],
{
'default'
:
'1'
}),
'parent'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'children'"
,
'null'
:
'True'
,
'to'
:
"orm['workflows.Category']"
}),
'uid'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'250'
,
'blank'
:
'True'
}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'categories'"
,
'null'
:
'True'
,
'to'
:
"orm['auth.User']"
}),
'workflow'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'categories'"
,
'null'
:
'True'
,
'to'
:
"orm['workflows.Workflow']"
})
},
'workflows.widget'
:
{
'Meta'
:
{
'object_name'
:
'Widget'
},
'abstract_widget'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'instances'"
,
'null'
:
'True'
,
'to'
:
"orm['workflows.AbstractWidget']"
}),
'error'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'finished'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'interaction_waiting'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'200'
}),
'progress'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'0'
}),
'running'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'type'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"'regular'"
,
'max_length'
:
'50'
}),
'workflow'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'widgets'"
,
'to'
:
"orm['workflows.Workflow']"
}),
'x'
:
(
'django.db.models.fields.IntegerField'
,
[],
{}),
'y'
:
(
'django.db.models.fields.IntegerField'
,
[],
{})
},
'workflows.workflow'
:
{
'Meta'
:
{
'ordering'
:
"['name']"
,
'object_name'
:
'Workflow'
},
'description'
:
(
'django.db.models.fields.TextField'
,
[],
{
'default'
:
"''"
,
'blank'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"'Untitled workflow'"
,
'max_length'
:
'200'
}),
'public'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'template_parent'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'default'
:
'None'
,
'to'
:
"orm['workflows.Workflow']"
,
'null'
:
'True'
,
'on_delete'
:
'models.SET_NULL'
,
'blank'
:
'True'
}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'workflows'"
,
'to'
:
"orm['auth.User']"
}),
'widget'
:
(
'django.db.models.fields.related.OneToOneField'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'workflow_link'"
,
'unique'
:
'True'
,
'null'
:
'True'
,
'to'
:
"orm['workflows.Widget']"
})
}
}
complete_apps
=
[
'streams'
]
\ No newline at end of file
streams/models.py
View file @
9fd995cc
...
...
@@ -12,7 +12,7 @@ class HaltStream(Exception):
class
Stream
(
models
.
Model
):
user
=
models
.
ForeignKey
(
User
,
related_name
=
"streams"
)
workflow
=
models
.
ForeignKey
(
Workflow
,
related_name
=
"stream
s
"
)
workflow
=
models
.
OneToOneField
(
Workflow
,
related_name
=
"stream"
)
last_executed
=
models
.
DateTimeField
(
auto_now_add
=
True
)
period
=
models
.
IntegerField
(
default
=
60
)
active
=
models
.
BooleanField
(
default
=
False
)
...
...
website/templates/website/yourworkflows.html
View file @
9fd995cc
...
...
@@ -9,6 +9,7 @@
<tr>
<th>
Workflow title
</th>
<th>
Public URL
</th>
<th
style=
"width:15%;"
>
Streaming
</th>
<th
style=
"width:30%;"
>
Action
</th>
</tr>
...
...
@@ -18,6 +19,7 @@
<tr>
<td
class=
"name"
>
{{w}}
</td>
<td>
{% if w.public %}
<a
href=
"{{w.get_info_url}}"
>
{{w.get_info_url}}
</a>
{% else %}This workflow is private.{% endif %}
</td>
<td>
{% if w.can_be_streaming %}{% if w.streams.count > 0 %}
<i
class=
"icon-ok"
></i>
{% else %}Make into stream{% endif %}{% else %}
<span
class=
"label label-info"
><i
class=
"icon-remove icon-white"
></i>
No streaming widgets
</span>
{% endif %}
</td>
<td><a
href=
"{{w.get_absolute_url}}"
>
Edit
</a>
|
<a
href=
"{{w.get_copy_url}}"
>
Open as new
</a>
|
<a
href=
"javascript:;"
rel=
"{{w.pk}}"
class=
"delete_workflow"
>
Delete
</a>
| {% if not w.public %}
<a
href=
"{% url 'make public' w.pk %}"
>
Make public
</a>
{% else %}
<a
href=
"{% url 'make private' w.pk %}"
>
Make private
</a>
{% endif %}
</td>
</tr>
{% endfor %}
...
...
@@ -25,6 +27,7 @@
</table>
<script
type=
"text/javascript"
>
$
(
function
()
{
...
...
workflows/models.py
View file @
9fd995cc
...
...
@@ -52,6 +52,11 @@ class Workflow(models.Model):
widget
=
models
.
OneToOneField
(
'Widget'
,
related_name
=
"workflow_link"
,
blank
=
True
,
null
=
True
)
template_parent
=
models
.
ForeignKey
(
'Workflow'
,
blank
=
True
,
null
=
True
,
default
=
None
,
on_delete
=
models
.
SET_NULL
)
def
can_be_streaming
(
self
):
if
self
.
widgets
.
filter
(
abstract_widget__is_streaming
=
True
).
count
()
>
0
:
return
True
else
:
return
False
def
is_for_loop
(
self
):
if
self
.
widgets
.
filter
(
type
=
'for_input'
).
count
()
>
0
:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment