def from_dict(cls, obj): workspace_components = obj['parameters']['components'] layout = obj['parameters']['layout'] stack = deque() row_layout = '' row_layouts = [] for c in layout[1:]: if c == '(': stack.append('(') elif c == ')': stack.pop() if len(stack) == 0: row_layouts.append(row_layout[row_layout.index('c'):]) row_layout = '' row_layout += c workspace_rows = [WorkspaceRow(components=Workspace._parse(row_layout, workspace_components)) for row_layout in row_layouts] component_count = 0 # The rest of the components not in the layout should be selector components selector_components = [] if component_count < len(workspace_components): for i in range(component_count, len(workspace_components)): component = workspace_components[i] selector_components.append(TYPE_TO_COMPONENT[component['type']].from_dict(component)) params = obj['parameters'] tabs = [WorkspaceTab.from_dict(tab) for tab in params.get('tabs', [])] return Workspace(name=obj['name'], rows=workspace_rows, selector_components=selector_components, alias=obj.get('alias'), tabs=tabs, entitlements=Entitlements.from_dict(obj.get('entitlements', {})), description=obj.get('description'), disclaimer=params.get('disclaimer'), maintainers=params.get('maintainers'))
def test_from_dict(): replace = Replacer() mock = replace('gs_quant.api.gs.users.GsUsersApi.get_users', Mock()) mock.return_value = [ TargetUser.from_dict({ 'id': 'userId', 'email': '*****@*****.**', 'name': 'Jane Doe', 'company': 'Goldman Sachs Group' }) ] ent = Entitlements.from_dict({'edit': ['guid:userId', 'role:roleId']}) replace.restore() assert ent.edit.users == [get_fake_user()] assert ent.edit.roles == ['roleId']
def get_entitlements(self): entitlements_dict = self.get_entity().get('entitlements') if entitlements_dict is None: raise ValueError('This entity does not have entitlements.') return Entitlements.from_dict(entitlements_dict)