def resource_new(client): form = ResourceForm() form.client = client form.edit_id = None if form.validate_on_submit(): resource = Resource(client=client) form.populate_obj(resource) db.session.add(resource) db.session.commit() flash(_("Your new resource has been saved"), 'success') return render_redirect(url_for('.client_info', key=client.key), code=303) return render_form(form=form, title=_("Define a resource"), formid='resource_new', submit=_("Define resource"), ajax=True)
def sync_resources(): resources = request.get_json().get('resources', []) actions_list = {} results = {} for name in resources: if '/' in name: parts = name.split('/') if len(parts) != 2: results[name] = { 'status': 'error', 'error': _(u"Invalid resource name {name}").format(name=name) } continue resource_name, action_name = parts else: resource_name = name action_name = None description = resources[name].get('description') siteresource = getbool(resources[name].get('siteresource')) restricted = getbool(resources[name].get('restricted')) actions_list.setdefault(resource_name, []) resource = Resource.get(name=resource_name, client=g.client) if resource: results[resource.name] = {'status': 'exists', 'actions': {}} if not action_name and resource.description != description: resource.description = description results[resource.name]['status'] = 'updated' if not action_name and resource.siteresource != siteresource: resource.siteresource = siteresource results[resource.name]['status'] = 'updated' if not action_name and resource.restricted != restricted: resource.restricted = restricted results[resource.name]['status'] = 'updated' else: resource = Resource( client=g.client, name=resource_name, title=resources.get(resource_name, {}).get('title') or resource_name.title(), description=resources.get(resource_name, {}).get('description') or u'') db.session.add(resource) results[resource.name] = {'status': 'added', 'actions': {}} if action_name: if action_name not in actions_list[resource_name]: actions_list[resource_name].append(action_name) action = resource.get_action(name=action_name) if action: if description != action.description: action.description = description results[resource.name]['actions'][action.name] = { 'status': 'updated' } else: results[resource.name]['actions'][action.name] = { 'status': 'exists' } else: # FIXME: What is "title" here? This assignment doesn't seem right action = ResourceAction( resource=resource, name=action_name, title=resources[name].get('title') or action_name.title() + " " + resource.title, description=description) db.session.add(action) results[resource.name]['actions'][action.name] = { 'status': 'added' } # Deleting resources & actions not defined in client application. for resource_name in actions_list: resource = Resource.get(name=resource_name, client=g.client) actions = ResourceAction.query.filter( ~ResourceAction.name.in_(actions_list[resource_name]), ResourceAction.resource == resource) for action in actions.all(): results[resource_name]['actions'][action.name] = { 'status': 'deleted' } actions.delete(synchronize_session='fetch') del_resources = Resource.query.filter( ~Resource.name.in_(actions_list.keys()), Resource.client == g.client) for resource in del_resources.all(): ResourceAction.query.filter_by(resource=resource).delete( synchronize_session='fetch') results[resource.name] = {'status': 'deleted'} del_resources.delete(synchronize_session='fetch') db.session.commit() return api_result('ok', results=results)
def make_fixtures(self): """ Create users, attach them to organizations. Create test client app, add test resource, action and message. """ crusoe = User(username=u"crusoe", fullname=u"Crusoe Celebrity Dachshund") oakley = User(username=u"oakley") piglet = User(username=u"piglet") nameless = User(fullname="Nameless") db.session.add_all([crusoe, oakley, piglet, nameless]) self.crusoe = crusoe self.oakley = oakley self.piglet = piglet self.nameless = nameless crusoe_email = UserEmail(email=u"*****@*****.**", primary=True, user=crusoe) crusoe_phone = UserPhone(phone=u"+8080808080", primary=True, user=crusoe) oakley_email = UserEmail(email=u"*****@*****.**", user=oakley) db.session.add_all([crusoe_email, crusoe_phone, oakley_email]) self.crusoe_email = crusoe_email self.crusoe_phone = crusoe_phone batdog = Organization(name=u'batdog', title=u'Batdog') batdog.owners.users.append(crusoe) batdog.members.users.append(oakley) db.session.add(batdog) self.batdog = batdog specialdachs = Organization(name=u"specialdachs", title=u"Special Dachshunds") specialdachs.owners.users.append(oakley) specialdachs.members.users.append(piglet) db.session.add(specialdachs) self.specialdachs = specialdachs client = Client(title=u"Batdog Adventures", org=batdog, confidential=True, namespace=u'fun.batdogadventures.com', website=u"http://batdogadventures.com") db.session.add(client) self.client = client dachshunds = Team(title=u"Dachshunds", org=batdog) db.session.add(dachshunds) self.dachshunds = dachshunds team_client_permission = TeamClientPermissions( team=dachshunds, client=client, access_permissions=u"admin") self.team_client_permission = team_client_permission db.session.add(team_client_permission) client_team_access = ClientTeamAccess( org=batdog, client=client, access_level=CLIENT_TEAM_ACCESS.ALL) db.session.add(client_team_access) bdfl = Permission(name=u"bdfl", title=u"BDFL", user=crusoe) db.session.add(bdfl) self.bdfl = bdfl user_client_permissions = UserClientPermissions(user=crusoe, client=client) db.session.add(user_client_permissions) self.user_client_permissions = user_client_permissions resource = Resource(name=u"test_resource", title=u"Test Resource", client=client) db.session.add(resource) self.resource = resource resource_action = ResourceAction(name=u'Fun', resource=resource, title=u'fun') db.session.add(resource_action) self.resource_action = resource_action action = ResourceAction(name=u"read", title=u"Read", resource=resource) db.session.add(action) self.action = action message = SMSMessage(phone_number=crusoe_phone.phone, transaction_id=u"Ruff" * 5, message=u"Wuff Wuff") db.session.add(message) db.session.commit() self.message = message