source: WAeUP_SRP/base/Upload.py @ 3314

Last change on this file since 3314 was 3314, checked in by joachim, 17 years ago

show all fields for editing with value from first record,
show one line per field for better readability
add edit again button for importable files.

  • Property svn:keywords set to Id
File size: 4.7 KB
Line 
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
14from WAeUPImport import CourseImport,CourseResultImport
15from WAeUPImport import DepartmentImport,FacultyImport,StudentImport,VerdictImport
16from WAeUPImport import NO_KEY
17 
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"""
38        return "Upload Section"
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()
56    NO_KEY = NO_KEY
57    security.declareProtected(View,"Title") ###(
58    def Title(self):
59        """compose title"""
60        return self.title
61    ###)
62
63    security.declareProtected(View,"checkKeys") ###(
64    def checkKeys(self):
65        """check fields in csv-headline"""
66        doc = self.getContent()
67        csv_path = os.path.join(storage_path,doc.filename)
68        importer_name = ''.join([part.capitalize() for part in self.getContent().import_layout.split('_')])
69        importer = eval("%sImport" % importer_name)(self)
70        msg = ''
71        invalid_keys = []
72        keys = []
73        if not os.path.exists(csv_path):
74            base,ext = os.path.splitext(csv_path)
75            if os.path.exists("%(base)s.done" % vars()):
76            #import pdb;pdb.set_trace()
77                #msg = "imported"
78                pass
79            else:
80                base_path = os.path.split(csv_path)[1]
81                msg = 'No such file %(base_path)s' % vars()
82        else:
83            reader = csv.reader(open(csv_path,"rb"))
84            headline = reader.next()
85            values = reader.next()
86            if "import_mode" not in headline:
87                msg += 'import_mode must be in heading'
88            invalid_keys = importer.checkHeadline(headline)
89            if invalid_keys:
90                msg += "invalid keys in heading"
91            keys = importer.getHeadlineFields(headline,values)
92        return msg,keys
93    ###)
94   
95    security.declareProtected(View,"getFields") ###(
96    def getKeys(self):
97        """return the valid keys for headline"""
98        importer_name = ''.join([part.capitalize() for part in self.getContent().import_layout.split('_')])
99        importer = eval("%sImport" % importer_name)(self)
100        keys = importer.schema.keys()
101        keys.sort()
102        return keys
103    ###)
104   
105    security.declareProtected(View,"getUploadFileInfo") ###(
106    def getUploadFileInfo(self):
107        """return the valid keys for headline"""
108        doc = self.getContent()
109        return os.stat(os.path.join(storage_path,doc.filename))
110    ###)
111   
112    security.declareProtected(ModifyPortalContent,"editHeadline") ###(
113    def editHeadline(self,key_pairs):
114        """edit headline"""
115        importer_name = ''.join([part.capitalize() for part in self.getContent().import_layout.split('_')])
116        importer = eval("%sImport" % importer_name)(self)
117        csv_path = os.path.join(storage_path,self.filename)
118        reader = csv.reader(open(csv_path,"rb"))
119        headline = reader.next()
120        records = [record for record in reader]
121        #import pdb;pdb.set_trace()
122        for old,new in key_pairs:
123            pos = headline.index(old)
124            del headline[pos]
125            headline.insert(pos,new)
126        writer = csv.writer(open(csv_path,"w"))
127        writer.writerow(headline)
128        writer.writerows(records)
129       
130       
131InitializeClass(Upload)
132
133
134def addUpload(container, id, REQUEST=None, **kw):
135    """Add a Upload."""
136    ob = Upload(id, **kw)
137    return CPSBase_adder(container, ob, REQUEST=REQUEST)
138###)
Note: See TracBrowser for help on using the repository browser.