90 lines
2.6 KiB
Python
90 lines
2.6 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
import logging
|
||
|
|
||
|
import os
|
||
|
from eve.methods.post import post_internal
|
||
|
from eve.methods.put import put_internal
|
||
|
from flask.ext.script import Manager
|
||
|
|
||
|
from pillar import PillarServer
|
||
|
|
||
|
app = PillarServer('.')
|
||
|
app.process_extensions()
|
||
|
|
||
|
# Use a sensible default when running manage.py commands.
|
||
|
if not os.environ.get('EVE_SETTINGS'):
|
||
|
settings_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||
|
'pillar', 'eve_settings.py')
|
||
|
os.environ['EVE_SETTINGS'] = settings_path
|
||
|
|
||
|
manager = Manager(app)
|
||
|
log = logging.getLogger('manage')
|
||
|
log.setLevel(logging.INFO)
|
||
|
|
||
|
|
||
|
def put_item(collection, item):
|
||
|
item_id = item['_id']
|
||
|
internal_fields = ['_id', '_etag', '_updated', '_created']
|
||
|
for field in internal_fields:
|
||
|
item.pop(field, None)
|
||
|
# print item
|
||
|
# print type(item_id)
|
||
|
p = put_internal(collection, item, **{'_id': item_id})
|
||
|
if p[0]['_status'] == 'ERR':
|
||
|
print(p)
|
||
|
print(item)
|
||
|
|
||
|
|
||
|
@manager.command
|
||
|
def setup_db(admin_email):
|
||
|
"""Setup the database
|
||
|
- Create admin, subscriber and demo Group collection
|
||
|
- Create admin user (must use valid blender-id credentials)
|
||
|
- Create one project
|
||
|
"""
|
||
|
|
||
|
# Create default groups
|
||
|
groups_list = []
|
||
|
for group in ['admin', 'subscriber', 'demo']:
|
||
|
g = {'name': group}
|
||
|
g = post_internal('groups', g)
|
||
|
groups_list.append(g[0]['_id'])
|
||
|
print("Creating group {0}".format(group))
|
||
|
|
||
|
# Create admin user
|
||
|
user = {'username': admin_email,
|
||
|
'groups': groups_list,
|
||
|
'roles': ['admin', 'subscriber', 'demo'],
|
||
|
'settings': {'email_communications': 1},
|
||
|
'auth': [],
|
||
|
'full_name': admin_email,
|
||
|
'email': admin_email}
|
||
|
result, _, _, status = post_internal('users', user)
|
||
|
if status != 201:
|
||
|
raise SystemExit('Error creating user {}: {}'.format(admin_email, result))
|
||
|
user.update(result)
|
||
|
print("Created user {0}".format(user['_id']))
|
||
|
|
||
|
# Create a default project by faking a POST request.
|
||
|
with app.test_request_context(data={'project_name': u'Default Project'}):
|
||
|
from flask import g
|
||
|
from pillar.api.projects.routes import create_project
|
||
|
|
||
|
g.current_user = {'user_id': user['_id'],
|
||
|
'groups': user['groups'],
|
||
|
'roles': set(user['roles'])}
|
||
|
|
||
|
create_project(overrides={'url': 'default-project',
|
||
|
'is_private': False})
|
||
|
|
||
|
|
||
|
@manager.command
|
||
|
def register_local_user(email, password):
|
||
|
from pillar.api.local_auth import create_local_user
|
||
|
create_local_user(email, password)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
manager.run()
|