Changeset 9217 for main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py
- Timestamp:
- 21 Sep 2012, 11:21:05 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py
r9172 r9217 18 18 """ Viewing components for Kofa objects. 19 19 """ 20 import copy21 20 import csv 22 21 import grok … … 24 23 import re 25 24 import sys 26 import time27 import re28 25 from urllib import urlencode 29 26 from zope import schema … … 35 32 getUtilitiesFor, 36 33 ) 37 #from zope.component.interfaces import Invalid38 34 from zope.event import notify 39 from zope.securitypolicy.interfaces import ( 40 IPrincipalRoleManager, IPrincipalRoleMap) 35 from zope.securitypolicy.interfaces import IPrincipalRoleManager 41 36 from zope.session.interfaces import ISession 42 37 from zope.password.interfaces import IPasswordManager 43 from waeup.kofa.browser import (38 from waeup.kofa.browser.layout import ( 44 39 KofaPage, KofaForm, KofaEditFormPage, KofaAddFormPage, 45 40 KofaDisplayFormPage, NullValidator) … … 48 43 IDepartment, IDepartmentAdd, ICourse, ICourseAdd, ICertificate, 49 44 ICertificateAdd, ICertificateCourse, ICertificateCourseAdd, 50 ICaptchaManager )45 ICaptchaManager, IChangePassword) 51 46 from waeup.kofa.browser.layout import jsaction, action, UtilityView 52 from waeup.kofa.browser.resources import warning, datepicker, tabs, datatable 47 from waeup.kofa.browser.resources import ( 48 warning, tabs, datatable) 53 49 from waeup.kofa.interfaces import MessageFactory as _ 54 50 from waeup.kofa.interfaces import( … … 56 52 IKofaXMLImporter, IKofaXMLExporter, IBatchProcessor, 57 53 ILocalRolesAssignable, DuplicationError, IConfigurationContainer, 58 ISessionConfiguration, ISessionConfigurationAdd, 59 IPasswordValidator, IContactForm, IKofaUtils, ICSVExporter, 60 IChangePassword) 54 ISessionConfiguration, ISessionConfigurationAdd, IJobManager, 55 IPasswordValidator, IContactForm, IKofaUtils, ICSVExporter,) 61 56 from waeup.kofa.permissions import ( 62 57 get_users_with_local_roles, get_all_roles, get_all_users) 58 63 59 from waeup.kofa.students.catalog import search as searchstudents 64 60 from waeup.kofa.university.catalog import search 65 61 from waeup.kofa.university.vocabularies import course_levels 66 62 from waeup.kofa.authentication import LocalRoleSetEvent 67 #from waeup.kofa.widgets.restwidget import ReSTDisplayWidget68 63 from waeup.kofa.widgets.htmlwidget import HTMLDisplayWidget 69 from waeup.kofa.authentication import get_principal_role_manager70 64 from waeup.kofa.utils.helpers import get_user_account 71 65 from waeup.kofa.mandates.mandate import PasswordMandate … … 797 791 def delFiles(self, **data): 798 792 form = self.request.form 799 logger = self.context.logger800 793 if form.has_key('val_id'): 801 794 child_id = form['val_id'] … … 1196 1189 return False 1197 1190 1198 @property1199 def nextstep(self):1200 return self.url(self.context, '@@import4')1201 1202 1191 def update(self, headerfield=None, back2=None, cancel=None, proceed=None): 1203 1192 datatable.need() … … 1390 1379 label = _('Download portal data as CSV file') 1391 1380 pnav = 0 1392 export_button = _(u'Download') 1381 export_button = _(u'Create CSV file') 1382 _running_exports = None 1393 1383 1394 1384 def getExporters(self): … … 1398 1388 return sorted(title_name_tuples) 1399 1389 1400 def update(self, export=None, exporter=None): 1401 if None in (export, exporter): 1402 return 1403 self.redirect( 1404 self.url(self.context, 'export.csv') + '?exporter=%s' % exporter) 1390 def job_finished(self, status): 1391 return status == 'completed' 1392 1393 def getRunningExports(self): 1394 """Returns running exports as list of tuples. 1395 1396 Only exports triggered by the current user (identified by 1397 principal.id) are returned. 1398 1399 Each tuple has the form (<STATUS>, <STATUS_TITLE>, <EXPORTER_NAME>). 1400 1401 ``STATUS``: 1402 the status as machine readable string (something like 1403 ``'completed'``) 1404 1405 ``STATUS_TITLE``: 1406 status of export as translated string. 1407 1408 ``EXPORTER_NAME``: 1409 string representing the exporter title used when triggering 1410 the export job. 1411 """ 1412 if self._running_exports is None: 1413 self._running_exports = self._getRunningExports() 1414 return self._running_exports 1415 1416 def _getRunningExports(self): 1417 result = self.context.get_export_jobs_status(self.user_id) 1418 return result 1419 1420 def update(self, export=None, start_export=None, exporter=None, 1421 discard=None, download=None): 1422 self.user_id = self.request.principal.id 1423 if discard: 1424 myjobs = self.context.get_running_export_jobs(self.user_id) 1425 for entry in myjobs: 1426 self.context.delete_export_entry(entry) 1427 self.flash(_('Discarded export result')) 1428 return 1429 if download: 1430 myjobs = self.context.get_running_export_jobs(self.user_id) 1431 if not len(myjobs): 1432 self.flash(_('This export was already discarded.')) 1433 return 1434 job_id = myjobs[0][0] 1435 self.redirect( 1436 self.url(self.context, 'export.csv') + '?job_id=%s' % job_id) 1437 return 1438 if None in (start_export, exporter): 1439 return 1440 job_id = self.context.start_export_job( 1441 exporter, self.request.principal.id) 1442 self.redirect(self.url(self.context, 'export')) 1405 1443 return 1406 1444 … … 1410 1448 grok.require('waeup.manageDataCenter') 1411 1449 1412 def render(self, exporter=None): 1413 if exporter is None: 1414 return 1415 ob_class = self.__implemented__.__name__.replace('waeup.kofa.','') 1416 self.context.logger.info( 1417 '%s - exported: %s' % (ob_class, exporter)) 1418 exporter = getUtility(ICSVExporter, name=exporter) 1419 csv_data = exporter.export_all(grok.getSite()) 1420 #csv_data.seek(0) 1450 def render(self, exporter=None, job_id=None): 1451 1452 manager = getUtility(IJobManager) 1453 job = manager.get(job_id) 1454 if job is None: 1455 return 1456 if hasattr(job.result, 'traceback'): 1457 # XXX: Some error happened. Do something more approriate here... 1458 return 1459 path = job.result 1460 if not os.path.exists(path): 1461 # XXX: Do something more appropriate here... 1462 return 1463 result = open(path, 'rb').read() 1464 acronym = grok.getSite()['configuration'].acronym.replace(' ','') 1465 filename = "%s_%s" % (acronym, os.path.basename(path)) 1421 1466 self.response.setHeader( 1422 1467 'Content-Type', 'text/csv; charset=UTF-8') 1423 acronym = grok.getSite()['configuration'].acronym.replace(' ','')1424 filename = "%s%s.csv" % (acronym, exporter.title.title().replace(' ',''))1425 1468 self.response.setHeader( 1426 'Content-Disposition:', 'attachment; filename="%s' % filename) 1427 return csv_data 1469 'Content-Disposition', 'attachment; filename="%s' % filename) 1470 # remove job and running_exports entry from context 1471 self.context.delete_export_entry( 1472 self.context.entry_from_job_id(job_id)) 1473 return result 1428 1474 1429 1475 class ExportXMLPage(grok.View):
Note: See TracChangeset for help on using the changeset viewer.