Changeset 2084
- Timestamp:
- 3 Aug 2007, 05:58:51 (18 years ago)
- Location:
- WAeUP_SRP/trunk
- Files:
-
- 1 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
WAeUP_SRP/trunk/WAeUPTables.py
r2078 r2084 35 35 from Products.AdvancedQuery import Eq, Between, Le,In 36 36 37 ADDING_SHEDULED = "adding_sheduled" 38 OBJECT_CREATED = "object_created" 39 37 40 from interfaces import IWAeUPTable 38 41 … … 66 69 # URL1 + 67 70 # '/manage_catalogAdvanced?manage_tabs_message=Catalog%20Clearing%20disabled') 68 69 71 70 72 self._catalog.clear() … … 313 315 ###) 314 316 315 def fill_certificates_dict(self): 317 def fill_certificates_dict(self): ###( 316 318 "return certificate data in dict" 317 319 certificates_brains = self.portal_catalog(portal_type ='Certificate') … … 326 328 d[cb.getId] = ld 327 329 return d 328 330 ###) 331 329 332 def get_from_doc_department(self,doc,cached_data={}): ###( 330 333 "return the students department" … … 442 445 pghandler.init('Refreshing catalog: %s' % self.absolute_url(1), num_objects) 443 446 noattr = set(('StudentClearance','StudentPersonal')) & set(reindextypes.keys()) 447 #import pdb;pdb.set_trace() 444 448 for i in xrange(num_objects): 445 449 if pghandler: pghandler.report(i) 446 450 student_brain = students[i] 447 451 student_object = student_brain.getObject() 452 # query = Eq('path',student_brain.getPath()) 453 # sub_brains_list = aq_portal(query) 454 # sub_brains = {} 455 # for sub_brain in sub_brains_list: 456 # sub_brains[sub_brain.portal_type] = sub_brain 457 # student_path = student_brain.getPath() 448 458 data = {} 449 459 modified = False … … 457 467 try: 458 468 doc = getattr(student_object,self.affected_types[pt]['id']).getContent() 469 #doc = sub_brains[pt].getObject().getContent() 470 # path = "%s/%s" % (student_path,self.affected_types[pt]['id']) 471 # doc = self.unrestrictedTraverse(path).getContent() 459 472 sub_objects = True 460 473 except: 461 474 continue 462 for field in se lf.affected_types[pt]['fields']:475 for field in set(name).intersection(self.affected_types[pt]['fields']): 463 476 if hasattr(self,'get_from_doc_%s' % field): 464 477 data[field] = getattr(self,'get_from_doc_%s' % field)(doc, … … 640 653 ###) 641 654 642 class StatisticsCatalog(StudentsCatalog): ###(643 security = ClassSecurityInfo()644 meta_type = 'WAeUP Statistics Catalog'645 name = "statistics"646 affected_types = { ###(647 'StudentApplication':648 {'id': 'application',649 'fields':650 ('jamb_reg_no',651 'entry_mode',652 #'entry_level',653 'entry_session',654 )655 },656 'StudentClearance':657 {'id': 'clearance',658 'fields':659 ('matric_no',660 )661 },662 'StudentPersonal':663 {'id': 'personal',664 'fields':665 ('name',666 'sex',667 'email',668 'phone',669 )670 },671 'StudentStudyCourse':672 {'id': 'study_course',673 'fields':674 ('course',675 'faculty',676 'department',677 'level',678 'mode',679 'session',680 'verdict',681 )682 },683 }684 ###)685 686 687 InitializeClass(StudentsCatalog)688 ###)689 690 655 class CoursesCatalog(WAeUPTable): ###( 691 656 security = ClassSecurityInfo() … … 821 786 ###) 822 787 823 class ResultsCatalog(WAeUPTable): ###(788 class CourseResults(WAeUPTable): ###( 824 789 security = ClassSecurityInfo() 825 790 826 791 meta_type = 'WAeUP Results Catalog' 827 792 name = "course_results" 828 key = "key" 793 key = "key" #student_id + level + course_id 829 794 def __init__(self): 830 795 WAeUPTable.__init__(self, 'course_results') 796 self._queue = [] 797 798 def addRecord(self, **data): ###( 799 # The uid is the same as "bed". 800 uid = key = "%(student_id)s|%(level_id)s|%(course_id)s" % data 801 if key in self._queue: 802 return uid 803 data['queue_status'] = ADDING_SHEDULED 804 data['%s' % self.key] = uid 805 res = self.searchResults({"%s" % self.key : uid}) 806 if len(res) > 0: 807 raise ValueError("More than one record with uid %s" % uid) 808 self.catalog_object(dict2ob(data), uid=uid) 809 if not hasattr(self,'_queue'): 810 self._queue = [] 811 self._queue.append(key) 812 self._p_changed = 1 813 return uid 814 ###) 815 816 def deleteRecord(self, uid): ###( 817 self.uncatalog_object(uid) 818 if uid in self._queue: 819 self._queue.remove(uid) 820 ###) 821 822 def getCourses(self,student_id,level_id): ###( 823 query = Eq('student_id',student_id) & Eq('level_id', level_id) 824 carry_overs = [] 825 normal = [] 826 credits = 0 827 for brain in self.course_results.evalAdvancedQuery(query): 828 d = {} 829 credits += int(brain.credits) 830 for field in self.schema(): 831 d[field] = getattr(brain,field,'') 832 d['sheduled'] = brain.queue_status == ADDING_SHEDULED 833 d['coe'] = 'Elective' 834 if brain.core_or_elective: 835 d['coe'] = 'Core' 836 d['title'] = self.courses_catalog.evalAdvancedQuery(Eq('code',brain.code))[0].title 837 if brain.code.endswith('_co'): 838 carry_overs.append(d) 839 else: 840 normal.append(d) 841 normal.sort(cmp=lambda x,y: cmp(x['semester'], y['semester'])) 842 carry_overs.sort(cmp=lambda x,y: cmp(x['semester'], y['semester'])) 843 return credits,carry_overs,normal 844 ###) 845 846 def addObject(self,record): ###( 847 key = record.key 848 student_id,level_id,course_id = key.split('|') 849 level = getattr(getattr(self.portal_url.getPortalObject().campus.students,student_id).study_course,level_id) 850 cr_id = level.invokeFactory('StudentCourseResult', course_id) 851 course_result = getattr(level,cr_id) 852 self.portal_workflow.doActionFor(course_result,'open') 853 d = {} 854 for field in self.schema(): 855 d[field] = getattr(record,field,'') 856 course_result.getContent().edit(mapping=d) 857 ###) 858 859 security.declareProtected(ModifyPortalContent,"process_queue") ###( 860 def process_queue(self,limit=None): 861 """adds objects and removes them from the queue. 862 If limit is specified, at most (limit) events are removed. 863 """ 864 if not hasattr(self,'_queue'): 865 return 0 866 queue= self._queue 867 if not limit or len(queue) <= limit: 868 keys = self._queue[:] 869 else: 870 keys = queue[:limit] 871 if not keys: 872 records = self.evalAdvancedQuery(Eq('queue_status',ADDING_SHEDULED)) 873 else: 874 records = self.evalAdvancedQuery(In("%s" % self.key,keys)) 875 for record in records: 876 if record.queue_status == OBJECT_CREATED: 877 continue 878 self.addObject(record) 879 data = {} 880 data['key'] = record.key 881 data['queue_status'] = OBJECT_CREATED 882 self.modifyRecord(**data) 883 count = 0 884 for key in keys: 885 count +=1 886 if key in self._queue: 887 self._queue.remove(key) 888 self._p_changed = 1 889 return count,len(self._queue) 890 ###) 891 892 def manage_catalogClear(self, REQUEST=None, RESPONSE=None, URL1=None): ###( 893 """ clears the whole enchilada """ 894 self._catalog.clear() 895 896 if REQUEST and RESPONSE: 897 RESPONSE.redirect( 898 URL1 + 899 '/manage_catalogAdvanced?manage_tabs_message=Catalog%20Cleared') 900 ###) 831 901 832 902 def manage_catalogReindex(self, REQUEST, RESPONSE, URL1): ###( … … 838 908 pgthreshold = self._getProgressThreshold() 839 909 handler = (pgthreshold > 0) and ZLogHandler(pgthreshold) or None 840 #self.refreshCatalog(clear=1, pghandler=handler)910 self.refreshCatalog(clear=1, pghandler=handler) 841 911 842 912 elapse = time.time() - elapse … … 851 921 ###) 852 922 853 854 InitializeClass(ResultsCatalog) 923 def refreshCatalog(self, clear=1, pghandler=None): ###( 924 """ re-index everything we can find """ 925 students_folder = self.portal_url.getPortalObject().campus.students 926 if clear: 927 self._catalog.clear() 928 course_results = self.portal_catalog(portal_type="StudentCourseResult") 929 num_objects = len(course_results) 930 if pghandler: 931 pghandler.init('Refreshing catalog: %s' % self.absolute_url(1), num_objects) 932 #import pdb;pdb.set_trace() 933 for i in xrange(num_objects): 934 if pghandler: 935 pghandler.report(i) 936 course_result_brain = course_results[i] 937 path_list = course_result_brain.getPath().split('/') 938 course_result_object = course_result_brain.getObject() 939 course_result_doc = course_result_object.getContent() 940 data = {} 941 level_id = path_list[-2] 942 course_id = path_list[-1] 943 student_id = path_list[-4] 944 for field in self.schema(): 945 data[field] = getattr(course_result_doc,field,'') 946 data['key'] = key = "%(student_id)s|%(level_id)s|%(course_id)s" % vars() 947 data['student_id'] = student_id 948 data['level_id'] = level_id 949 data['queue_status'] = OBJECT_CREATED 950 self.catalog_object(dict2ob(data), uid=key) 951 if pghandler: pghandler.finish() 952 ###) 953 954 security.declarePrivate('notify_event_listener') ###( 955 def notify_event_listener(self,event_type,object,infos): 956 "listen for events" 957 if not infos.has_key('rpath'): 958 return 959 pt = getattr(object,'portal_type',None) 960 mt = getattr(object,'meta_type',None) 961 data = {} 962 rpl = infos['rpath'].split('/') 963 if mt == 'CPS Proxy Folder': 964 return 965 if pt == 'StudentCourseResult' and event_type == "sys_modify_object": 966 data["%s" % self.key] = uid = "%s|%s|%s" % (rpl[-5],rpl[-3],rpl[-2]) 967 records = self.searchResults({"%s" % self.key : uid}) 968 if len(records) > 1: 969 # Can not happen, but anyway... 970 raise ValueError("More than one record with uid %s" % uid) 971 if len(records) == 0: 972 raise KeyError("No record for uid %s" % uid) 973 record = records[0] 974 #import pdb;pdb.set_trace() 975 for field in ('core_or_elective','score'): 976 value = getattr(object,field,None) 977 data[field] = value 978 self.modifyRecord(record,**data) 979 ###) 980 981 InitializeClass(CourseResults) 855 982 ###) 856 983
Note: See TracChangeset for help on using the changeset viewer.