From a8e2f7601cab2c7d05f57bceab17c080e37df02d Mon Sep 17 00:00:00 2001 From: Michal Kolodziejski Date: Wed, 22 Jul 2015 16:04:50 +0200 Subject: [PATCH] Use new material package module for contributions fixes #1988 --- indico/MaKaC/common/contribPacker.py | 33 ---------- indico/MaKaC/webinterface/rh/conferenceModif.py | 11 ++-- .../attachments/controllers/event_package.py | 71 ++++++++++++---------- 3 files changed, 42 insertions(+), 73 deletions(-) diff --git a/indico/MaKaC/common/contribPacker.py b/indico/MaKaC/common/contribPacker.py index 388672c7f..e84a4eee0 100644 --- a/indico/MaKaC/common/contribPacker.py +++ b/indico/MaKaC/common/contribPacker.py @@ -92,39 +92,6 @@ class AbstractPacker: return fileHandler.getPath() -class ContribPacker: - """ - """ - - def __init__(self,conf): - self._conf=conf - self._items=0 - - def getItems(self): - return self._items - - def _normalisePathItem(self,name): - return str(name).translate(string.maketrans("",""),"\\/") - - def pack(self, contribList=[], fileHandler=None): - if len(contribList) <= 0: - raise MaKaCError(_("no contribution to pack")) - for contrib in contribList: - contribDirName = "%s_%s" % (contrib.getId(), contrib.getTitle()) - for material in contrib.getAllMaterialList(): - for res in material.getResourceList(): - if isinstance(res, conference.LocalFile): - self._items += 1 - fileHandler.add("%s/%s/%s-%s-%s" % (self._normalisePathItem(contribDirName), - self._normalisePathItem(material.getTitle()), - self._normalisePathItem(contrib.getId()), - self._normalisePathItem(res.getId()), - self._normalisePathItem(res.getFileName())), - res.getFilePath()) - fileHandler.close() - return fileHandler.getPath() - - class ReviewingPacker: """ diff --git a/indico/MaKaC/webinterface/rh/conferenceModif.py b/indico/MaKaC/webinterface/rh/conferenceModif.py index 68b0391e6..58b7e2489 100644 --- a/indico/MaKaC/webinterface/rh/conferenceModif.py +++ b/indico/MaKaC/webinterface/rh/conferenceModif.py @@ -50,7 +50,7 @@ import MaKaC.webinterface.common.registrantNotificator as registrantNotificator import MaKaC.common.filters as filters import MaKaC.webinterface.common.contribFilters as contribFilters from MaKaC.webinterface.common.contribStatusWrapper import ContribStatusList -from MaKaC.common.contribPacker import ZIPFileHandler, AbstractPacker, ContribPacker +from MaKaC.common.contribPacker import ZIPFileHandler, AbstractPacker from MaKaC.common import pendingQueues from MaKaC.export.excel import AbstractListToExcel, ParticipantsListToExcel, ContributionsListToExcel from MaKaC.common import utils @@ -66,6 +66,7 @@ from MaKaC.fossils.conference import ISessionBasicFossil from indico.util import json from indico.web.http_api.metadata.serializer import Serializer from indico.web.flask.util import send_file, url_for +from indico.modules.attachments.controllers.event_package import AttachmentPackageGeneratorMixin class RHConferenceModifBase(RHConferenceBase, RHModificationBaseProtected): @@ -3086,7 +3087,7 @@ class RHMaterialPackageAbstract(RHConferenceModifBase): return send_file('abstractFiles.zip', path, 'ZIP', inline=False) -class RHMaterialPackage(RHConferenceModifBase): +class RHMaterialPackage(RHConferenceModifBase, AttachmentPackageGeneratorMixin): def _checkParams(self, params): RHConferenceModifBase._checkParams(self, params) @@ -3098,11 +3099,7 @@ class RHMaterialPackage(RHConferenceModifBase): def _process(self): if not self._contribs: return "No contribution selected" - p=ContribPacker(self._conf) - path=p.pack(self._contribs, ZIPFileHandler()) - if not p.getItems(): - raise NoReportError(_("The selected package does not contain any items")) - return send_file('material.zip', path, 'ZIP', inline=False) + return self._generate_zip_file(self._filter_protected(self._filter_by_contributions(self._contribIds, None))) class RHAbstractBook( RHConfModifCFABase ): diff --git a/indico/modules/attachments/controllers/event_package.py b/indico/modules/attachments/controllers/event_package.py index dc24209c7..9158e806d 100644 --- a/indico/modules/attachments/controllers/event_package.py +++ b/indico/modules/attachments/controllers/event_package.py @@ -37,43 +37,18 @@ from indico.modules.attachments.models.folders import AttachmentFolder from MaKaC.conference import SubContribution -class AttachmentPackageMixin: - wp = None - - def _process(self): - form = self._prepare_form() - if form.validate_on_submit(): - return self._generate_zip_file(self._filter_attachments(form)) - - return self.wp.render_template('generate_package.html', self._conf, form=form) - - def _prepare_form(self): - form = AttachmentPackageForm() - form.sessions.choices = self._load_session_data() - form.contributions.choices = self._load_contribution_data() - form.contributions_schedule_dates.choices = self._load_schedule_data() - return form +class AttachmentPackageGeneratorMixin: - def _load_session_data(self): - return [(session.getId(), to_unicode(session.getTitle())) for session in self._conf.getSessionList()] - - def _load_contribution_data(self): - return [(contrib.getId(), to_unicode(contrib.getTitle())) - for contrib in self._conf.getContributionList() if contrib.getOwner() == self._conf - and contrib.getStartDate()] - - def _load_schedule_data(self): - dates = {contrib.getStartDate().date() for contrib in self._conf.getContributionList() if contrib.getStartDate()} - return sorted([(unicode(d), format_date(d, 'short')) for d in dates], key=itemgetter(1)) - - def _filter_attachments(self, form): + def _filter_attachments(self, filter_data): attachments = [] - added_since = form.added_since.data + added_since = filter_data.get('added_since', None) attachments.extend(self._filter_protected(self._filter_top_level_attachments(added_since))) - attachments.extend(self._filter_protected(self._filter_by_sessions(form.sessions.data, added_since))) + attachments.extend(self._filter_protected(self._filter_by_sessions(filter_data.get('sessions', []), + added_since))) - contribution_ids = set(form.contributions.data + - self._get_contributions_by_schedule_date(form.contributions_schedule_dates.data)) + contribution_ids = set(filter_data.get('contributions', []) + + self._get_contributions_by_schedule_date(filter_data.get('contributions_schedule_dates', + []))) attachments.extend(self._filter_protected(self._filter_by_contributions(contribution_ids, added_since))) return attachments @@ -165,3 +140,33 @@ class AttachmentPackageMixin: paths.append(secure_filename(linked_obj_start_date.strftime('%Y%m%d_%A'), '')) return reversed(paths) + + +class AttachmentPackageMixin(AttachmentPackageGeneratorMixin): + wp = None + + def _process(self): + form = self._prepare_form() + if form.validate_on_submit(): + return self._generate_zip_file(self._filter_attachments(form.data)) + + return self.wp.render_template('generate_package.html', self._conf, form=form) + + def _prepare_form(self): + form = AttachmentPackageForm() + form.sessions.choices = self._load_session_data() + form.contributions.choices = self._load_contribution_data() + form.contributions_schedule_dates.choices = self._load_schedule_data() + return form + + def _load_session_data(self): + return [(session.getId(), to_unicode(session.getTitle())) for session in self._conf.getSessionList()] + + def _load_contribution_data(self): + return [(contrib.getId(), to_unicode(contrib.getTitle())) + for contrib in self._conf.getContributionList() if contrib.getOwner() == self._conf + and contrib.getStartDate()] + + def _load_schedule_data(self): + dates = {contrib.getStartDate().date() for contrib in self._conf.getContributionList() if contrib.getStartDate()} + return sorted([(unicode(d), format_date(d, 'short')) for d in dates], key=itemgetter(1)) -- 2.11.4.GIT