source: WAeUP_SRP/trunk/Upload.py @ 13041

Last change on this file since 13041 was 4819, checked in by Henrik Bettermann, 15 years ago

fix typo (section titles should be better singular than plural)

  • Property svn:keywords set to Id
File size: 6.1 KB
RevLine 
[3277]1#-*- mode: python; mode: fold -*-
2from Globals import InitializeClass
3from AccessControl import ClassSecurityInfo
4
5from Products.CMFCore.utils import UniqueObject, getToolByName
6from Products.CMFCore.permissions import View
7from Products.CMFCore.permissions import ModifyPortalContent
8from Products.CPSCore.CPSBase import CPSBase_adder, CPSBaseFolder
9#from Products.CPSCore.CPSBase import CPSBaseDocument as BaseDocument
10from Products.CPSDocument.CPSDocument import CPSDocument
11from Products.CPSCore.CPSBase import CPSBaseBTreeFolder as BaseBTreeFolder
12from Products.WAeUP_SRP.WAeUPTables import AccommodationTable,NOT_OCCUPIED
13from WAeUPImport import ApplicationImport,CertificateImport,CertificateCourseImport
[3988]14from WAeUPImport import CourseImport,CourseResultImport,PaymentImport
[3360]15from WAeUPImport import DepartmentImport,FacultyImport,StudentImport,VerdictImport,StudentStudyLevelImport
[3316]16from WAeUPImport import NO_KEY,IGNORE
[3319]17
[3277]18import logging
19import csv,re,os
20import Globals
21import DateTime
22import re
23p_home = Globals.package_home(globals())
24i_home = Globals.INSTANCE_HOME
25storage_path = "%s/%s" % (i_home,'import')
26
27class UploadsFolder(CPSDocument): ###(
28    """
29    WAeUP UploadsFolder containing Uploads
30    """
31    meta_type = 'UploadsFolder'
32    portal_type = meta_type
33    security = ClassSecurityInfo()
34
35    security.declareProtected(View,"Title")
36    def Title(self):
37        """compose title"""
[4819]38        return "Upload Section"
[3277]39
40
41InitializeClass(UploadsFolder)
42
43def addUploadsFolder(container, id, REQUEST=None, **kw):
44    """Add a UploadFolder."""
45    ob = UploadsFolder(id, **kw)
46    return CPSBase_adder(container, ob, REQUEST=REQUEST)
47###)
48
49class Upload(CPSDocument): ###(
50    """
51    WAeUP Upload
52    """
53    meta_type = 'Upload'
54    portal_type = meta_type
55    security = ClassSecurityInfo()
[3314]56    NO_KEY = NO_KEY
[3316]57    IGNORE = IGNORE
[3325]58    def getImporter(self):
59        importer_name = ''.join([part.capitalize() for part in self.getContent().import_layout.split('_')])
60        importer = eval("%sImport" % importer_name)(self)
61        return importer
[3337]62
[3277]63    security.declareProtected(View,"Title") ###(
64    def Title(self):
65        """compose title"""
66        return self.title
67    ###)
68
69    security.declareProtected(View,"checkKeys") ###(
70    def checkKeys(self):
71        """check fields in csv-headline"""
[3292]72        doc = self.getContent()
73        csv_path = os.path.join(storage_path,doc.filename)
[3325]74        importer = self.getImporter()
[3277]75        msg = ''
76        invalid_keys = []
[3314]77        keys = []
[3277]78        if not os.path.exists(csv_path):
[3292]79            base,ext = os.path.splitext(csv_path)
80            if os.path.exists("%(base)s.done" % vars()):
81            #import pdb;pdb.set_trace()
82                #msg = "imported"
83                pass
84            else:
85                base_path = os.path.split(csv_path)[1]
[3319]86                msg = '+ no such file %(base_path)s +' % vars()
[3277]87        else:
[3314]88            reader = csv.reader(open(csv_path,"rb"))
89            headline = reader.next()
90            values = reader.next()
[3277]91            if "import_mode" not in headline:
[3319]92                msg += '+ import_mode must be in heading +'
[3277]93            invalid_keys = importer.checkHeadline(headline)
94            if invalid_keys:
[3319]95                msg += "+ invalid keys in heading +"
[3316]96            err,keys = importer.getHeadlineFields(headline,values)
97            if err:
98                msg += err
[3314]99        return msg,keys
100    ###)
[3319]101
[3337]102    security.declareProtected(View,"getKeys") ###(
[3277]103    def getKeys(self):
104        """return the valid keys for headline"""
[3325]105        importer = self.getImporter()
[3277]106        keys = importer.schema.keys()
107        keys.sort()
108        return keys
[3292]109    ###)
[3319]110
[3292]111    security.declareProtected(View,"getUploadFileInfo") ###(
112    def getUploadFileInfo(self):
113        """return the valid keys for headline"""
114        doc = self.getContent()
115        return os.stat(os.path.join(storage_path,doc.filename))
[3314]116    ###)
[3319]117
[3325]118    security.declareProtected(ModifyPortalContent,"getPending") ###(
119    def getPending(self):
120        """return pending-data"""
121        importer = self.getImporter()
122        data = open(importer.pending_path).read()
123        return importer.pending_fn,data
[4525]124       
125    security.declareProtected(ModifyPortalContent,"getData") ###(
126    def getData(self):
127        """return data"""
128        data_path = "%s/import/%s" % (i_home,self.filename)
129        data = open(data_path).read()
130        return self.filename,data       
[3325]131
[4525]132    security.declareProtected(ModifyPortalContent,"getErrors") ###(
[3325]133    def getErrors(self):
134        """return import_errors"""
135        import tempfile
136        importer = self.getImporter()
137        lines = []
138        filename = self.getContent().filename
139        data = open(importer.pending_path)
140        reader = csv.reader(data)
141        headline = reader.next()
142        reader = csv.DictReader(data,headline)
143        # imported_from_pos = headline.index('imported_from')
144        # imported_line_nr_pos = headline.index('imported_line_nr')
145        out_file = tempfile.TemporaryFile()
146        writer = csv.DictWriter(out_file,
147                                importer.info.keys(),
148                                extrasaction='ignore')
149        lines += dict([(k,k) for k in importer.info.keys()]),
150        #import pdb;pdb.set_trace()
151        for item in reader:
152            if item["imported_from"] == filename:
153                lines += item,
154        writer.writerows(lines)
155        out_file.seek(0)
156        return out_file.read()
157
[3277]158    security.declareProtected(ModifyPortalContent,"editHeadline") ###(
159    def editHeadline(self,key_pairs):
160        """edit headline"""
161        csv_path = os.path.join(storage_path,self.filename)
162        reader = csv.reader(open(csv_path,"rb"))
163        headline = reader.next()
164        records = [record for record in reader]
165        #import pdb;pdb.set_trace()
[3316]166        for old,new,pos in key_pairs:
[3277]167            del headline[pos]
168            headline.insert(pos,new)
169        writer = csv.writer(open(csv_path,"w"))
170        writer.writerow(headline)
171        writer.writerows(records)
[3319]172
173
[3277]174InitializeClass(Upload)
175
176
177def addUpload(container, id, REQUEST=None, **kw):
178    """Add a Upload."""
179    ob = Upload(id, **kw)
180    return CPSBase_adder(container, ob, REQUEST=REQUEST)
181###)
Note: See TracBrowser for help on using the repository browser.