#-*- mode: python; mode: fold -*- from Globals import InitializeClass from AccessControl import ClassSecurityInfo from Products.CMFCore.utils import UniqueObject, getToolByName from Products.CMFCore.permissions import View from Products.CMFCore.permissions import ModifyPortalContent from Products.CPSCore.CPSBase import CPSBase_adder, CPSBaseFolder #from Products.CPSCore.CPSBase import CPSBaseDocument as BaseDocument from Products.CPSDocument.CPSDocument import CPSDocument from Products.CPSCore.CPSBase import CPSBaseBTreeFolder as BaseBTreeFolder from Products.WAeUP_SRP.WAeUPTables import AccommodationTable,NOT_OCCUPIED from WAeUPImport import ApplicationImport,CertificateImport,CertificateCourseImport from WAeUPImport import CourseImport,CourseResultImport,PaymentImport from WAeUPImport import DepartmentImport,FacultyImport,StudentImport,VerdictImport,StudentStudyLevelImport from WAeUPImport import NO_KEY,IGNORE import logging import csv,re,os import Globals import DateTime import re p_home = Globals.package_home(globals()) i_home = Globals.INSTANCE_HOME storage_path = "%s/%s" % (i_home,'import') class UploadsFolder(CPSDocument): ###( """ WAeUP UploadsFolder containing Uploads """ meta_type = 'UploadsFolder' portal_type = meta_type security = ClassSecurityInfo() security.declareProtected(View,"Title") def Title(self): """compose title""" return "Uploads Section" InitializeClass(UploadsFolder) def addUploadsFolder(container, id, REQUEST=None, **kw): """Add a UploadFolder.""" ob = UploadsFolder(id, **kw) return CPSBase_adder(container, ob, REQUEST=REQUEST) ###) class Upload(CPSDocument): ###( """ WAeUP Upload """ meta_type = 'Upload' portal_type = meta_type security = ClassSecurityInfo() NO_KEY = NO_KEY IGNORE = IGNORE def getImporter(self): importer_name = ''.join([part.capitalize() for part in self.getContent().import_layout.split('_')]) importer = eval("%sImport" % importer_name)(self) return importer security.declareProtected(View,"Title") ###( def Title(self): """compose title""" return self.title ###) security.declareProtected(View,"checkKeys") ###( def checkKeys(self): """check fields in csv-headline""" doc = self.getContent() csv_path = os.path.join(storage_path,doc.filename) importer = self.getImporter() msg = '' invalid_keys = [] keys = [] if not os.path.exists(csv_path): base,ext = os.path.splitext(csv_path) if os.path.exists("%(base)s.done" % vars()): #import pdb;pdb.set_trace() #msg = "imported" pass else: base_path = os.path.split(csv_path)[1] msg = '+ no such file %(base_path)s +' % vars() else: reader = csv.reader(open(csv_path,"rb")) headline = reader.next() values = reader.next() if "import_mode" not in headline: msg += '+ import_mode must be in heading +' invalid_keys = importer.checkHeadline(headline) if invalid_keys: msg += "+ invalid keys in heading +" err,keys = importer.getHeadlineFields(headline,values) if err: msg += err return msg,keys ###) security.declareProtected(View,"getKeys") ###( def getKeys(self): """return the valid keys for headline""" importer = self.getImporter() keys = importer.schema.keys() keys.sort() return keys ###) security.declareProtected(View,"getUploadFileInfo") ###( def getUploadFileInfo(self): """return the valid keys for headline""" doc = self.getContent() return os.stat(os.path.join(storage_path,doc.filename)) ###) security.declareProtected(ModifyPortalContent,"getPending") ###( def getPending(self): """return pending-data""" importer = self.getImporter() data = open(importer.pending_path).read() return importer.pending_fn,data security.declareProtected(ModifyPortalContent,"getData") ###( def getData(self): """return data""" data_path = "%s/import/%s" % (i_home,self.filename) data = open(data_path).read() return self.filename,data security.declareProtected(ModifyPortalContent,"getErrors") ###( def getErrors(self): """return import_errors""" import tempfile importer = self.getImporter() lines = [] filename = self.getContent().filename data = open(importer.pending_path) reader = csv.reader(data) headline = reader.next() reader = csv.DictReader(data,headline) # imported_from_pos = headline.index('imported_from') # imported_line_nr_pos = headline.index('imported_line_nr') out_file = tempfile.TemporaryFile() writer = csv.DictWriter(out_file, importer.info.keys(), extrasaction='ignore') lines += dict([(k,k) for k in importer.info.keys()]), #import pdb;pdb.set_trace() for item in reader: if item["imported_from"] == filename: lines += item, writer.writerows(lines) out_file.seek(0) return out_file.read() security.declareProtected(ModifyPortalContent,"editHeadline") ###( def editHeadline(self,key_pairs): """edit headline""" csv_path = os.path.join(storage_path,self.filename) reader = csv.reader(open(csv_path,"rb")) headline = reader.next() records = [record for record in reader] #import pdb;pdb.set_trace() for old,new,pos in key_pairs: del headline[pos] headline.insert(pos,new) writer = csv.writer(open(csv_path,"w")) writer.writerow(headline) writer.writerows(records) InitializeClass(Upload) def addUpload(container, id, REQUEST=None, **kw): """Add a Upload.""" ob = Upload(id, **kw) return CPSBase_adder(container, ob, REQUEST=REQUEST) ###)