def test_get_workspaces(self): from collective.teamwork.utils import get_workspaces project1 = self.portal['project1'] # test without context, without site workspaces = get_workspaces() assert len(workspaces) == 5 # test sort order, items closest to root first assert self.same(workspaces[0], project1) assert all( map(lambda o: IWorkspaceContext.providedBy(o), workspaces) ) # after first two workspaces, remainder are not projects assert all( map(lambda o: not IProjectContext.providedBy(o), workspaces[2:]) ) _path = lambda o: o.getPhysicalPath() assert len(_path(workspaces[2])) > len(_path(workspaces[0])) # test without context, passing site found = get_workspaces() assert len(found) == len(workspaces) for workspace in found: assert workspace in workspaces # test with context contained_workspaces = get_workspaces(project1) assert len(contained_workspaces) == 3
def __init__(self, context, parent=None, groupid=u'', title=u'', description=u'', namespace=u'', roles=(), members=None, **kwargs): if not IWorkspaceContext.providedBy(context): raise ValueError('Could not adapt: context not a workspace') schema = interfaces.IWorkspaceGroup if schema.providedBy(parent): self.__parent__ = parent self.context = context self.adapts_project = IProjectContext.providedBy(context) valid_setattr(self, schema['baseid'], _decode(groupid)) valid_setattr(self, schema['title'], _decode(title)) valid_setattr(self, schema['description'], _decode(description)) valid_setattr(self, schema['namespace'], _decode(namespace)) self.portal = getSite() self.site_members = members or interfaces.ISiteMembers(self.portal) groups = Groups(self.portal) groupname = self.pas_group()[0] if groupname not in groups: groups.add(groupname) # edge-case: may cause write-on-read self._group = GroupInfo(groupname, members=self.site_members)
def __init__(self, context, request): self.context = context self.request = request self.portal = getSite() self.site_members = SiteMembers(self.portal, self.request) self.mtool = getToolByName(context, 'portal_membership') self.roster = WorkspaceRoster(context) self.title = self.context.Title().decode('utf-8') self.path = '/'.join(self.context.getPhysicalPath()) self.status = IStatusMessage(self.request) self.isproject = IProjectContext.providedBy(context)
def __init__(self, context): self.adapts_project = IProjectContext.providedBy(context) self._load_config() super(WorkspaceRoster, self).__init__( context, parent=None, groupid=self._base['groupid'], title=self._base['title'], description=self._base['description'], namespace=group_namespace(context), ) self._load_groups()
def sync_group_roles(context, groupname): """ Given a group name as a full PAS groupname, infer appropriate roles for that group based on configuration, and bind those local roles to the context. """ always_inherit_local_roles(context) manager = LocalRolesView(context, request_for(context)) if IProjectContext.providedBy(context): roles = _project_roles_for(groupname) else: roles = _workspace_roles_for(groupname) manager.update_role_settings([grouproles(groupname, roles)])
def test_get_projects(self): from collective.teamwork.utils import get_projects, get_workspaces from zope.component.hooks import getSite assert self.same(getSite(), self.portal) assert len(get_projects()) < len(get_workspaces()) assert len(get_projects()) == len(get_projects(self.portal)) assert len(get_projects()) == 2 isproject = lambda o: IProjectContext.providedBy(o) for project in get_projects(): assert isproject(project) found = get_projects() for project in filter(isproject, self.portal.objectValues()): assert project in found
def test_interfaces(self): """Test any interface bindings configured on content""" from collective.teamwork.content import Workspace, Project from collective.teamwork.content.interfaces import IProject from collective.teamwork.content.interfaces import IWorkspace from collective.teamwork.interfaces import IWorkspaceContext from collective.teamwork.interfaces import IProjectContext assert issubclass(IProject, IProjectContext) assert issubclass(IProject, IWorkspaceContext) assert issubclass(IProject, IWorkspace) assert issubclass(IWorkspace, IWorkspaceContext) assert IWorkspaceContext.providedBy(Project('project')) assert IWorkspaceContext.providedBy(Workspace('team')) assert IProjectContext.providedBy(Project('project')) assert IWorkspace.providedBy(Project('project')) assert IWorkspace.providedBy(Workspace('team')) assert IProject.providedBy(Project('project'))
def test_get_workspaces(self): from collective.teamwork.utils import get_workspaces project1 = self.portal["project1"] # test without context, without site workspaces = get_workspaces() assert len(workspaces) == 5 # test sort order, items closest to root first assert self.same(workspaces[0], project1) assert all(map(lambda o: IWorkspaceContext.providedBy(o), workspaces)) # after first two workspaces, remainder are not projects assert all(map(lambda o: not IProjectContext.providedBy(o), workspaces[2:])) _path = lambda o: o.getPhysicalPath() assert len(_path(workspaces[2])) > len(_path(workspaces[0])) # test without context, passing site found = get_workspaces() assert len(found) == len(workspaces) for workspace in found: assert workspace in workspaces # test with context contained_workspaces = get_workspaces(project1) assert len(contained_workspaces) == 3
def __init__(self, context, request): if not IProjectContext.providedBy(context): raise ValueError("Can only purge from top-level projects") super(PurgeUserView, self).__init__(context, request)
def __init__(self, context, request): if not IProjectContext.providedBy(context): raise ValueError('Can only purge from top-level projects') super(PurgeUserView, self).__init__(context, request)
def project_for(context): if IProjectContext.providedBy(context): return context return find_parent(context, iface=IProjectContext)