Exemple #1
0
    def put(self, proj, libgroup_id, description=None):
        """Edit a libgroup"""
        session = session_get()
        user = tmpl_context.user
        libgroup = libgroup_get(proj, libgroup_id)
        old = libgroup.__dict__.copy()

        modified = False
        if description is not None and not libgroup.description == description:
            libgroup.description = description
            modified = True
        
        if modified:
            new = libgroup.__dict__.copy()

            msg = '%s %s' % (_('Updated libgroup:'), libgroup.path)

            # log into Journal
            journal.add(user, '%s - %s' % (msg, diff_dicts(old, new)))
            
            # notify clients
            updates = [
                dict(item=libgroup, type='updated', topic=TOPIC_LIBGROUPS),
                ]
            notify.send(updates)

            return dict(msg=msg, status='ok', updates=updates)
        return dict(msg='%s %s' % (_('Libgroup is unchanged:'), libgroup.path),
                                                    status='info', updates=[])
Exemple #2
0
    def post(self, proj, parent_id, name, description=None):
        """Create a new libgroup"""
        session = session_get()
        project = tmpl_context.project
        user = tmpl_context.user
        parent = parent_id and libgroup_get(proj, parent_id) or None
        
        # add libgroup to db
        libgroup = Libgroup(project.id, name, parent, description)
        session.add(libgroup)
        session.flush()
        
        # create directories
        repo.libgroup_create_dirs(project.id, libgroup)
        
        # invalidate project cache
        project.touch()

        msg = '%s %s' % (_('Created libgroup:'), libgroup.path)

        # log into Journal
        journal.add(user, '%s - %s' % (msg, libgroup))
        
        # notify clients
        updates = [
            dict(item=libgroup, type='added', topic=TOPIC_LIBGROUPS),
            dict(item=project, type='updated', topic=TOPIC_PROJECT_STRUCTURE),
            ]
        notify.send(updates)

        return dict(msg=msg, status='ok', updates=updates)
Exemple #3
0
 def get_one(self, proj, libgroup_id):
     """Return a `tabbed` page for libgroup tabs."""
     libgroup = libgroup_get(proj, libgroup_id)
     
     tabs = [('Summary', 'tab/summary'),
             ('Subgroups', url('/libgroup/%s/%s/subgroups' %
                                     (libgroup.project.id, libgroup.id))),
             ('Assets', url('/asset/%s/libgroup/%s' %
                                     (libgroup.project.id, libgroup.id))),
            ]
     return dict(page='%s' % libgroup.path, libgroup=libgroup, tabs=tabs, 
                                 sidebar=('projects', libgroup.project.id))
Exemple #4
0
    def edit(self, proj, libgroup_id, **kwargs):
        """Display a EDIT form."""
        libgroup = libgroup_get(proj, libgroup_id)

        f_edit.value = dict(proj=libgroup.project.id,
                            libgroup_id=libgroup.id,
                            project_name_=libgroup.project.name,
                            libgroup_name_=libgroup.name,
                            description=libgroup.description,
                           )
        tmpl_context.form = f_edit
        return dict(title='%s %s' % (_('Edit libgroup:'), libgroup.path))
Exemple #5
0
    def new(self, proj, parent_id=None, **kwargs):
        """Display a NEW form."""
        project = tmpl_context.project
        parent = parent_id and libgroup_get(project.id, parent_id) or None

        f_new.value = dict(proj=project.id,
                           parent_id=parent_id,
                           project_name_=project.name,
                           parent_=parent and parent.name or '',
                          )
        tmpl_context.form = f_new
        return dict(title=_('Create a new libgroup'))
Exemple #6
0
 def get_delete(self, proj, libgroup_id, **kwargs):
     """Display a DELETE confirmation form."""
     libgroup = libgroup_get(proj, libgroup_id)
     f_confirm.custom_method = 'DELETE'
     f_confirm.value = dict(proj=libgroup.project.id,
                           libgroup_id=libgroup.id,
                           project_name_=libgroup.project.name,
                           libgroup_name_=libgroup.name,
                           description_=libgroup.description,
                          )
     warning = ('This will only delete the libgroup entry in the database. '
                'The data must be deleted manually if needed.')
     tmpl_context.form = f_confirm
     return dict(title='%s %s?' % (_('Are you sure you want to delete:'),
                                             libgroup.path), warning=warning)
Exemple #7
0
    def get_subgroups(self, proj, parent_id):
        """Return a `tab` page with a list of subgroups for a libgroup.

        This page is used as the `subgroups` tab in the libgroup view:
        :meth:`spam.controllers.libgroup.main.get_one`.
        """
        project = tmpl_context.project
        user = tmpl_context.user
        parent = libgroup_get(proj, parent_id)
        tmpl_context.parent = parent

        t_libgroups.value = parent.subgroups
        t_libgroups.parent_id = parent_id
        t_libgroups.extra_data = dict(project=project, user_id=user.user_id)
        tmpl_context.t_libgroups = t_libgroups
        return dict()
Exemple #8
0
    def post_delete(self, proj, libgroup_id):
        """Delete a libgroup.
        
        Only delete the libgroup record from the db, the scene directories must
        be removed manually.
        (This should help prevent awful accidents) ;)
        """
        project = tmpl_context.project
        session = session_get()
        user = tmpl_context.user
        libgroup = libgroup_get(proj, libgroup_id)
        if libgroup.subgroups:
            return dict(msg='%s %s' % (
                    _('Cannot delete libgroup because it contains subgroups'),
                    libgroup.path),
                status='error')
        if libgroup.assets:
            return dict(msg='%s %s' % (
                    _('Cannot delete libgroup because it contains assets'),
                    libgroup.path),
                status='error')

        session.delete(libgroup)

        # delete association objects or they will be orphaned
        session.flush()
        session.delete(libgroup.container)
        session.delete(libgroup.taggable)
        session.delete(libgroup.annotable)

        # invalidate project cache
        project.touch()

        msg = '%s %s' % (_('Deleted libgroup:'), libgroup.path)

        # log into Journal
        journal.add(user, '%s - %s' % (msg, libgroup))
        
        # notify clients
        updates = [
            dict(item=libgroup, type='deleted', topic=TOPIC_LIBGROUPS),
            dict(item=project, type='updated', topic=TOPIC_PROJECT_STRUCTURE),
            ]
        notify.send(updates)

        return dict(msg=msg, status='ok', updates=updates)
Exemple #9
0
 def _before(self, *args, **kw):
     proj, libgroup_id = request.url.split('/')[-4:-2]
     libgroup = libgroup_get(proj, libgroup_id)
     tmpl_context.project = libgroup.project
     tmpl_context.libgroup = libgroup