Switch to unified view

a/Allura/allura/model/project.py b/Allura/allura/model/project.py
...
...
78
                g.publish(obj.exchange, obj.routing_key, getattr(obj, 'data', None))
78
                g.publish(obj.exchange, obj.routing_key, getattr(obj, 'data', None))
79
                obj.delete()
79
                obj.delete()
80
            except: # pragma no cover
80
            except: # pragma no cover
81
                log.exception('Error when firing %r', obj)
81
                log.exception('Error when firing %r', obj)
82
82
83
class ProjectFile(File):    
83
class ProjectFile(File):
84
    class __mongometa__:
84
    class __mongometa__:
85
        session = main_orm_session
85
        session = main_orm_session
86
86
87
    project_id=FieldProperty(S.ObjectId)
87
    project_id=FieldProperty(S.ObjectId)
88
    category=FieldProperty(str)
88
    category=FieldProperty(str)
...
...
259
        return projects
259
        return projects
260
260
261
    @property
261
    @property
262
    def category(self):
262
    def category(self):
263
        return ProjectCategory.query.find(dict(_id=self.category_id)).first()
263
        return ProjectCategory.query.find(dict(_id=self.category_id)).first()
264
    
264
265
    def roleids_with_permission(self, name):
265
    def roleids_with_permission(self, name):
266
        roles = []
266
        roles = []
267
        for p in self.parent_iter():
267
        for p in self.parent_iter():
268
            for roleid in p.acl[name]:
268
            for roleid in p.acl[name]:
269
                roles.append(roleid)
269
                roles.append(roleid)
...
...
327
327
328
    def install_app(self, ep_name, mount_point=None, mount_label=None, ordinal=0, **override_options):
328
    def install_app(self, ep_name, mount_point=None, mount_label=None, ordinal=0, **override_options):
329
        for ep in pkg_resources.iter_entry_points('allura', ep_name):
329
        for ep in pkg_resources.iter_entry_points('allura', ep_name):
330
            App = ep.load()
330
            App = ep.load()
331
            break
331
            break
332
        else: 
332
        else:
333
            # Try case-insensitive install
333
            # Try case-insensitive install
334
            for ep in pkg_resources.iter_entry_points('allura'):
334
            for ep in pkg_resources.iter_entry_points('allura'):
335
                if ep.name.lower() == ep_name:
335
                if ep.name.lower() == ep_name:
336
                    App = ep.load()
336
                    App = ep.load()
337
                    break
337
                    break
...
...
482
            for mc in MappedClass._registry.itervalues():
482
            for mc in MappedClass._registry.itervalues():
483
                if mc.__mongometa__.session == project_orm_session:
483
                if mc.__mongometa__.session == project_orm_session:
484
                    project_orm_session.ensure_indexes(mc)
484
                    project_orm_session.ensure_indexes(mc)
485
485
486
class AppConfig(MappedClass):
486
class AppConfig(MappedClass):
487
    """
488
    Configuration information for an instantiated :class:`Application <allura.app.Application>`
489
    in a project
490
491
    :var options: an object on which various options are stored.  options.mount_point is the url component for this app instance
492
    :var acl: a dict that maps permissions (strings) to lists of roles that have the permission
493
    """
494
487
    class __mongometa__:
495
    class __mongometa__:
488
        session = project_orm_session
496
        session = project_orm_session
489
        name='config'
497
        name='config'
490
498
491
    # AppConfig schema
499
    # AppConfig schema
...
...
497
    options=FieldProperty(None)
505
    options=FieldProperty(None)
498
    project = RelationProperty(Project, via='project_id')
506
    project = RelationProperty(Project, via='project_id')
499
    discussion = RelationProperty('Discussion', via='discussion_id')
507
    discussion = RelationProperty('Discussion', via='discussion_id')
500
508
501
    # acl[permission] = [ role1, role2, ... ]
509
    # acl[permission] = [ role1, role2, ... ]
502
    acl = FieldProperty({str:[S.ObjectId]}) 
510
    acl = FieldProperty({str:[S.ObjectId]})
503
511
504
    def load(self):
512
    def load(self):
513
        """
514
        :returns: the related :class:`Application <allura.app.Application>` class
515
        """
505
        try:
516
        try:
506
            result = self._loaded_ep
517
            result = self._loaded_ep
507
        except AttributeError:
518
        except AttributeError:
508
            for ep in pkg_resources.iter_entry_points(
519
            for ep in pkg_resources.iter_entry_points(
509
                'allura', self.tool_name):
520
                'allura', self.tool_name):
...
...
520
        return self.project.url() + self.options.mount_point + '/'
531
        return self.project.url() + self.options.mount_point + '/'
521
532
522
    def breadcrumbs(self):
533
    def breadcrumbs(self):
523
        return self.project.breadcrumbs() + [
534
        return self.project.breadcrumbs() + [
524
            (self.options.mount_point, self.url()) ]
535
            (self.options.mount_point, self.url()) ]
525
            
536
526
    def grant_permission(self, permission, role=None):
537
    def grant_permission(self, permission, role=None):
527
        from . import auth
538
        from . import auth
528
        if role is None: role = c.user
539
        if role is None: role = c.user
529
        if not isinstance(role, auth.ProjectRole):
540
        if not isinstance(role, auth.ProjectRole):
530
            role = role.project_role()
541
            role = role.project_role()
...
...
536
        if role is None: role = c.user
547
        if role is None: role = c.user
537
        if not isinstance(role, auth.ProjectRole):
548
        if not isinstance(role, auth.ProjectRole):
538
            role = role.project_role()
549
            role = role.project_role()
539
        if role._id in self.acl[permission]:
550
        if role._id in self.acl[permission]:
540
            self.acl[permission].remove(role._id)
551
            self.acl[permission].remove(role._id)
541