Page Menu
Home
Search
Configure Global Search
Log In
Files
F13246003
manage.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
18 KB
Subscribers
None
manage.py
View Options
import
os
from
application
import
app
from
application
import
post_item
from
flask.ext.script
import
Manager
manager
=
Manager
(
app
)
@manager.command
def
runserver
():
try
:
import
config
PORT
=
config
.
Development
.
PORT
HOST
=
config
.
Development
.
HOST
DEBUG
=
config
.
Development
.
DEBUG
app
.
config
[
'FILE_STORAGE'
]
=
config
.
Development
.
FILE_STORAGE
except
ImportError
:
# Default settings
PORT
=
5000
HOST
=
'0.0.0.0'
DEBUG
=
True
app
.
config
[
'FILE_STORAGE'
]
=
'{0}/application/static/storage'
.
format
(
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
)))
# Automatic creation of FILE_STORAGE path if it's missing
if
not
os
.
path
.
exists
(
app
.
config
[
'FILE_STORAGE'
]):
os
.
makedirs
(
app
.
config
[
'FILE_STORAGE'
])
app
.
run
(
port
=
PORT
,
host
=
HOST
,
debug
=
DEBUG
)
@manager.command
def
clear_db
():
"""Wipes the database
"""
from
pymongo
import
MongoClient
client
=
MongoClient
()
db
=
client
.
eve
db
.
drop_collection
(
'nodes'
)
db
.
drop_collection
(
'node_types'
)
db
.
drop_collection
(
'tokens'
)
db
.
drop_collection
(
'users'
)
@manager.command
def
remove_properties_order
():
"""Removes properties.order
"""
from
pymongo
import
MongoClient
client
=
MongoClient
()
db
=
client
.
eve
nodes
=
db
.
nodes
.
find
()
for
node
in
nodes
:
new_prop
=
{}
for
prop
in
node
[
'properties'
]:
if
prop
==
'order'
:
continue
else
:
new_prop
[
prop
]
=
node
[
'properties'
][
prop
]
db
.
nodes
.
update
({
"_id"
:
node
[
'_id'
]},
{
"$set"
:
{
"properties"
:
new_prop
}})
@manager.command
def
upgrade_node_types
():
"""Wipes node_types collection
and populates it again
"""
from
pymongo
import
MongoClient
client
=
MongoClient
()
db
=
client
.
eve
node_types
=
db
.
node_types
.
find
({})
old_ids
=
{}
for
nt
in
node_types
:
old_ids
[
nt
[
'name'
]]
=
nt
[
'_id'
]
populate_node_types
(
old_ids
)
def
get_id
(
collection
,
name
):
"""Returns the _id of the given collection
and name."""
from
pymongo
import
MongoClient
client
=
MongoClient
()
db
=
client
.
eve
node
=
db
[
collection
]
.
find
({
'name'
:
name
})
print
(
node
[
0
][
'_id'
])
return
node
[
0
][
'_id'
]
@manager.command
def
manage_groups
():
"""Take user email and group name,
and add or remove the user from that group.
"""
from
pymongo
import
MongoClient
client
=
MongoClient
()
db
=
client
.
eve
print
(
""
)
print
(
"Add or Remove user from group"
)
print
(
"leave empty to cancel"
)
print
(
""
)
# Select Action
print
(
"Do you want to Add or Remove the user from the group?"
)
retry
=
True
while
retry
:
action
=
raw_input
(
'add/remove: '
)
if
action
==
''
:
return
elif
action
.
lower
()
in
[
'add'
,
'a'
,
'insert'
]:
action
==
'add'
retry
=
False
elif
action
.
lower
()
in
[
'remove'
,
'r'
,
'rmv'
,
'rem'
,
'delete'
,
'del'
]:
action
=
'remove'
retry
=
False
else
:
print
(
"Incorrect action, press type 'add' or 'remove'"
)
# Select User
retry
=
True
while
retry
:
user_email
=
raw_input
(
'User email: '
)
if
user_email
==
''
:
return
user
=
db
.
users
.
find_one
({
'email'
:
user_email
})
if
user
:
retry
=
False
else
:
print
(
"Incorrect user email, try again, or leave empty to cancel"
)
# Select group
retry
=
True
while
retry
:
group_name
=
raw_input
(
'Group name: '
)
if
group_name
==
''
:
return
group
=
db
.
groups
.
find_one
({
'name'
:
group_name
})
if
group
:
retry
=
False
else
:
print
(
"Incorrect group name, try again, or leave empty to cancel"
)
# Do
current_groups
=
user
.
get
(
'groups'
,
[])
if
action
==
'add'
:
if
group
[
'_id'
]
in
current_groups
:
print
"User {0} is already in group {1}"
.
format
(
user_email
,
group_name
)
else
:
current_groups
.
append
(
group
[
'_id'
])
db
.
users
.
update
({
'_id'
:
user
[
'_id'
]},
{
"$set"
:
{
'groups'
:
current_groups
}})
print
"User {0} added to group {1}"
.
format
(
user_email
,
group_name
)
elif
action
==
'remove'
:
if
group
[
'_id'
]
not
in
current_groups
:
print
"User {0} is not in group {1}"
.
format
(
user_email
,
group_name
)
else
:
current_groups
.
remove
(
group
[
'_id'
])
db
.
users
.
update
({
'_id'
:
user
[
'_id'
]},
{
"$set"
:
{
'groups'
:
current_groups
}})
print
"User {0} removed from group {1}"
.
format
(
user_email
,
group_name
)
@manager.command
def
add_groups
():
"""Add permisions
"""
admin_group
=
{
'name'
:
'admin'
,
'permissions'
:
[
{
'node_type'
:
get_id
(
'node_types'
,
'shot'
),
'permissions'
:
[
'GET'
,
'POST'
,
'UPDATE'
,
'DELETE'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'task'
),
'permissions'
:
[
'GET'
,
'POST'
,
'UPDATE'
,
'DELETE'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'scene'
),
'permissions'
:
[
'GET'
,
'POST'
,
'UPDATE'
,
'DELETE'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'act'
),
'permissions'
:
[
'GET'
,
'POST'
,
'UPDATE'
,
'DELETE'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'comment'
),
'permissions'
:
[
'GET'
,
'POST'
,
'UPDATE'
,
'DELETE'
]
},
]
}
post_item
(
'groups'
,
admin_group
)
owner_group
=
{
'name'
:
'owner'
,
'permissions'
:
[
{
'node_type'
:
get_id
(
'node_types'
,
'shot'
),
'permissions'
:
[
'GET'
,
'UPDATE'
,
'DELETE'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'task'
),
'permissions'
:
[
'GET'
,
'UPDATE'
,
'DELETE'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'scene'
),
'permissions'
:
[
'GET'
,
'UPDATE'
,
'DELETE'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'act'
),
'permissions'
:
[
'GET'
,
'UPDATE'
,
'DELETE'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'comment'
),
'permissions'
:
[
'GET'
,
'UPDATE'
,
'DELETE'
]
},
]
}
post_item
(
'groups'
,
owner_group
)
world_group
=
{
'name'
:
'world'
,
'permissions'
:
[
{
'node_type'
:
get_id
(
'node_types'
,
'shot'
),
'permissions'
:
[
'GET'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'task'
),
'permissions'
:
[
'GET'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'scene'
),
'permissions'
:
[
'GET'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'act'
),
'permissions'
:
[
'GET'
]
},
{
'node_type'
:
get_id
(
'node_types'
,
'comment'
),
'permissions'
:
[
'GET'
,
'POST'
]
},
]
}
post_item
(
'groups'
,
world_group
)
@manager.command
def
populate_db_test
():
"""Populate the db with sample data
"""
populate_node_types
()
def
populate_node_types
(
old_ids
=
{}):
shot_node_type
=
{
'name'
:
'shot'
,
'description'
:
'Shot Node Type, for shots'
,
'dyn_schema'
:
{
'url'
:
{
'type'
:
'string'
,
},
'cut_in'
:
{
'type'
:
'integer'
},
'cut_out'
:
{
'type'
:
'integer'
},
'status'
:
{
'type'
:
'string'
,
'allowed'
:
[
'on_hold'
,
'todo'
,
'in_progress'
,
'review'
,
'final'
],
},
'notes'
:
{
'type'
:
'string'
,
'maxlength'
:
256
,
},
'shot_group'
:
{
'type'
:
'string'
,
#'data_relation': {
# 'resource': 'nodes',
# 'field': '_id',
#},
},
},
'form_schema'
:
{
'url'
:
{},
'cut_in'
:
{},
'cut_out'
:
{},
'status'
:
{},
'notes'
:
{},
'shot_group'
:
{}
},
'parent'
:
{
'node_types'
:
[
'scene'
]
}
}
task_node_type
=
{
'name'
:
'task'
,
'description'
:
'Task Node Type, for tasks'
,
'dyn_schema'
:
{
'status'
:
{
'type'
:
'string'
,
'allowed'
:
[
'todo'
,
'in_progress'
,
'on_hold'
,
'approved'
,
'cbb'
,
'final'
,
'review'
],
'required'
:
True
,
},
'filepath'
:
{
'type'
:
'string'
,
},
'revision'
:
{
'type'
:
'integer'
,
},
'owners'
:
{
'type'
:
'dict'
,
'schema'
:
{
'users'
:
{
'type'
:
'list'
,
'schema'
:
{
'type'
:
'objectid'
,
}
},
'groups'
:
{
'type'
:
'list'
,
'schema'
:
{
'type'
:
'objectid'
,
}
}
}
},
'time'
:
{
'type'
:
'dict'
,
'schema'
:
{
'start'
:
{
'type'
:
'datetime'
},
'duration'
:
{
'type'
:
'integer'
},
'chunks'
:
{
'type'
:
'list'
,
'schema'
:
{
'type'
:
'dict'
,
'schema'
:
{
'start'
:
{
'type'
:
'datetime'
,
},
'duration'
:
{
'type'
:
'integer'
,
}
}
}
},
}
},
'is_conflicting'
:
{
'type'
:
'boolean'
},
'is_processing'
:
{
'type'
:
'boolean'
},
'is_open'
:
{
'type'
:
'boolean'
}
},
'form_schema'
:
{
'status'
:
{},
'filepath'
:
{},
'revision'
:
{},
'owners'
:
{
'schema'
:
{
'users'
:{
'items'
:
[(
'User'
,
'first_name'
)],
},
'groups'
:
{}
}
},
'time'
:
{
'schema'
:
{
'start'
:
{},
'duration'
:
{},
'chunks'
:
{
'visible'
:
False
,
'schema'
:
{
'start'
:
{},
'duration'
:
{}
}
}
}
},
'is_conflicting'
:
{},
'is_open'
:
{},
'is_processing'
:
{},
},
'parent'
:
{
'node_types'
:
[
'shot'
],
}
}
scene_node_type
=
{
'name'
:
'scene'
,
'description'
:
'Scene node type'
,
'dyn_schema'
:
{
'order'
:
{
'type'
:
'integer'
,
}
},
'form_schema'
:
{
'order'
:
{},
},
'parent'
:
{
"node_types"
:
[
"act"
]
}
}
act_node_type
=
{
'name'
:
'act'
,
'description'
:
'Act node type'
,
'dyn_schema'
:
{
'order'
:
{
'type'
:
'integer'
,
}
},
'form_schema'
:
{
'order'
:
{},
},
'parent'
:
{}
}
comment_node_type
=
{
'name'
:
'comment'
,
'description'
:
'Comment node type'
,
'dyn_schema'
:
{
'text'
:
{
'type'
:
'string'
,
'maxlength'
:
256
},
'attachments'
:
{
'type'
:
'list'
,
'schema'
:
{
'type'
:
'objectid'
,
'data_relation'
:
{
'resource'
:
'files'
,
'field'
:
'_id'
,
'embeddable'
:
True
}
}
}
},
'form_schema'
:
{
'text'
:
{},
'attachments'
:
{
'items'
:
[(
"File"
,
"name"
)]
}
},
'parent'
:
{
"node_types"
:
[
"shot"
,
"task"
]
}
}
project_node_type
=
{
'name'
:
'project'
,
'parent'
:
{},
'description'
:
'The official project type'
,
'dyn_schema'
:
{
'category'
:
{
'type'
:
'string'
,
'allowed'
:
[
'film'
,
'assets'
,
'software'
,
'game'
],
'required'
:
True
,
},
'is_private'
:
{
'type'
:
'boolean'
},
'url'
:
{
'type'
:
'string'
},
'organization'
:
{
'type'
:
'objectid'
,
'nullable'
:
True
,
'data_relation'
:
{
'resource'
:
'organizations'
,
'field'
:
'_id'
,
'embeddable'
:
True
},
},
'owners'
:
{
'type'
:
'dict'
,
'schema'
:
{
'users'
:
{
'type'
:
'list'
,
'schema'
:
{
'type'
:
'objectid'
,
}
},
'groups'
:
{
'type'
:
'list'
,
'schema'
:
{
'type'
:
'objectid'
,
'data_relation'
:
{
'resource'
:
'groups'
,
'field'
:
'_id'
,
'embeddable'
:
True
}
}
}
}
},
# Logo
'picture_1'
:
{
'type'
:
'objectid'
,
'nullable'
:
True
,
'data_relation'
:
{
'resource'
:
'files'
,
'field'
:
'_id'
,
'embeddable'
:
True
},
},
# Header
'picture_2'
:
{
'type'
:
'objectid'
,
'nullable'
:
True
,
'data_relation'
:
{
'resource'
:
'files'
,
'field'
:
'_id'
,
'embeddable'
:
True
},
},
},
'form_schema'
:
{
'is_private'
:
{},
# TODO add group parsing
'category'
:
{},
'url'
:
{},
'organization'
:
{},
'picture_1'
:
{},
'picture_2'
:
{},
'owners'
:
{
'schema'
:
{
'users'
:{
'items'
:
[(
'User'
,
'first_name'
)],
},
'groups'
:
{
'items'
:
[(
'Group'
,
'name'
)],
},
}
},
},
}
group_node_type
=
{
'name'
:
'group'
,
'description'
:
'Generic group node type'
,
'dyn_schema'
:
{
'url'
:
{
'type'
:
'string'
,
},
'status'
:
{
'type'
:
'string'
,
'allowed'
:
[
'published'
,
'pending'
],
},
'notes'
:
{
'type'
:
'string'
,
'maxlength'
:
256
,
},
'parent'
:
{}
},
'form_schema'
:
{
'url'
:
{},
'status'
:
{},
'notes'
:
{},
},
}
from
pymongo
import
MongoClient
client
=
MongoClient
()
db
=
client
.
eve
def
mix_node_type
(
old_id
,
node_type_dict
):
# Take eve parameters
node_type
=
db
.
node_types
.
find
({
'_id'
:
old_id
})
node_type
=
node_type
[
0
]
for
attr
in
node_type
:
if
attr
[
0
]
==
'_'
:
# Mix with node type attributes
node_type_dict
[
attr
]
=
node_type
[
attr
]
return
node_type_dict
def
upgrade
(
node_type
,
old_ids
):
node_name
=
node_type
[
'name'
]
if
node_name
in
old_ids
:
node_type
=
mix_node_type
(
old_ids
[
node_name
],
node_type
)
# Remove old node_type
db
.
node_types
.
remove
({
'_id'
:
old_ids
[
node_name
]})
# Insert new node_type
db
.
node_types
.
insert
(
node_type
)
else
:
print
(
"Making the node"
)
print
node_type
post_item
(
'node_types'
,
node_type
)
# upgrade(shot_node_type, old_ids)
# upgrade(task_node_type, old_ids)
# upgrade(scene_node_type, old_ids)
# upgrade(act_node_type, old_ids)
# upgrade(comment_node_type, old_ids)
upgrade
(
project_node_type
,
old_ids
)
@manager.command
def
migrate_custom
():
from
pymongo
import
MongoClient
client
=
MongoClient
()
db
=
client
.
eve
group_node_type
=
{
'name'
:
'group'
,
'description'
:
'Generic group node type'
,
'dyn_schema'
:
{
'url'
:
{
'type'
:
'string'
,
},
'status'
:
{
'type'
:
'string'
,
'allowed'
:
[
'published'
,
'pending'
],
},
'notes'
:
{
'type'
:
'string'
,
'maxlength'
:
256
,
},
'parent'
:
{}
},
'form_schema'
:
{
'url'
:
{},
'status'
:
{},
'notes'
:
{},
},
}
db
.
node_types
.
insert
(
group_node_type
)
if
__name__
==
'__main__'
:
manager
.
run
()
File Metadata
Details
Attached
Mime Type
text/x-python
Expires
Sun, Jul 3, 3:03 PM (2 d)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
fd/f8/848e9f282a2eb63d2f262cbbe24b
Attached To
rPS Pillar
Event Timeline
Log In to Comment