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=[])
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)
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))
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))
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'))
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)
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()
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)
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