Renaming the project to Pillar.
This commit is contained in:
662
pillar/manage.py
Normal file
662
pillar/manage.py
Normal file
@@ -0,0 +1,662 @@
|
||||
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()
|
Reference in New Issue
Block a user