Changeset 7795
- Timestamp:
- 8 Mar 2012, 03:30:30 (13 years ago)
- Location:
- main/waeup.sirp/trunk
- Files:
-
- 7 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.sirp/trunk
- Property svn:mergeinfo changed
/main/waeup.sirp/branches/ulif-schoolgrades (added) merged: 7761-7774,7778-7794
- Property svn:mergeinfo changed
-
main/waeup.sirp/trunk/src/waeup/sirp/applicants/interfaces.py
r7708 r7795 18 18 """Interfaces of the university application package. 19 19 """ 20 21 20 from grokcore.content.interfaces import IContainer 22 21 from zc.sourcefactory.basic import BasicSourceFactory 22 from zc.sourcefactory.contextual import BasicContextualSourceFactory 23 23 from zope import schema 24 from zope.interface import Interface, Attribute, implements, directlyProvides25 24 from zope.component import getUtilitiesFor, queryUtility, getUtility 26 25 from zope.catalog.interfaces import ICatalog 26 from zope.interface import Interface, Attribute, implements, directlyProvides 27 27 from zope.schema.interfaces import ( 28 28 ValidationError, ISource, IContextSourceBinder) 29 from zc.sourcefactory.basic import BasicSourceFactory30 from zc.sourcefactory.contextual import BasicContextualSourceFactory31 29 from waeup.sirp.schema import TextLineChoice 32 30 from waeup.sirp.interfaces import ( 33 31 ISIRPObject, year_range, validate_email, academic_sessions_vocab) 34 32 from waeup.sirp.interfaces import MessageFactory as _ 33 from waeup.sirp.payments.interfaces import IOnlinePayment 34 from waeup.sirp.schoolgrades import ResultEntryField 35 from waeup.sirp.students.vocabularies import ( 36 lgas_vocab, CertificateSource, GenderSource) 35 37 from waeup.sirp.university.vocabularies import ( 36 38 course_levels, AppCatSource) 37 from waeup.sirp.students.vocabularies import (38 lgas_vocab, CertificateSource, GenderSource)39 from waeup.sirp.payments.interfaces import IOnlinePayment40 39 41 40 #: Maximum upload size for applicant passport photographs (in bytes) … … 77 76 return source 78 77 directlyProvides(contextual_reg_num_source, IContextSourceBinder) 78 79 79 80 80 class AppCatCertificateSource(CertificateSource): … … 360 360 state, depending on use-case. 361 361 362 This base interface is also implemented by the StudentApplication363 class in the students package. Thus, these are the data which are saved364 after admission.365 """366 362 This base interface is also implemented by the 363 :class:`waeup.sirp.students.StudentApplication` class in the 364 students package. Thus, these are the data which are saved after 365 admission. 366 """ 367 367 applicant_id = schema.TextLine( 368 368 title = _(u'Applicant Id'), … … 430 430 required = False, 431 431 ) 432 school_grades = schema.List( 433 title = _(u'School Grades'), 434 value_type = ResultEntryField(), 435 required = True, 436 default = [], 437 ) 432 438 433 439 # -
main/waeup.sirp/trunk/src/waeup/sirp/applicants/tests/test_browser.py
r7685 r7795 752 752 self.browser.open(self.edit_path) 753 753 self.assertTrue( 754 '<option selected="selected" value="CERT1">' in self.browser.contents) 754 '<option selected="selected" value="CERT1">' 755 in self.browser.contents) 756 757 def test_school_grades(self): 758 # we can add school grades 759 self.login() 760 self.browser.open(self.edit_path) 761 self.fill_correct_values() # Fill other fields 762 # add a new (empty) row with subject/grade 763 self.browser.getControl(name="form.school_grades.add").click() 764 # pick first subject (after <no value>)... 765 ctrl_subj = self.browser.getControl( 766 name="form.school_grades.0.subject") 767 ctrl_subj.value = [ctrl_subj.options[1]] 768 display_subj = ctrl_subj.displayOptions[1] 769 # pick first grade (after <no value>)... 770 ctrl_grade = self.browser.getControl( 771 name="form.school_grades.0.grade") 772 ctrl_grade.value = [ctrl_grade.options[1]] 773 display_grade = ctrl_grade.displayOptions[1] 774 # save everything 775 self.browser.getControl("Save").click() 776 self.assertTrue( 777 '<input type="hidden" name="form.school_grades.count" value="1" />' 778 in self.browser.contents) 779 # we can also see the new subject/grade in display view 780 self.browser.open(self.view_path) 781 self.assertTrue( 782 display_subj in self.browser.contents) 783 self.assertTrue( 784 display_grade in self.browser.contents) 785 return 755 786 756 787 class ApplicantRegisterTests(ApplicantsFullSetup): -
main/waeup.sirp/trunk/src/waeup/sirp/interfaces.py
r7730 r7795 31 31 from zope.container.interfaces import INameChooser 32 32 from zope.interface import Interface, Attribute, implements 33 from zope.schema.interfaces import IObject 33 34 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm 34 35 … … 79 80 ) 80 81 82 SUBJECTS = dict(math=_(u'Math'), 83 bio=_(u'Biology'), 84 eng=_(u'English'), 85 ) 86 class SubjectSource(BasicSourceFactory): 87 def getValues(self): 88 return sorted(SUBJECTS.keys()) 89 def getTitle(self, value): 90 return SUBJECTS.get(value, None) 91 92 GRADES = {'A':_(u'Very Good'), 93 'B':_(u'Good'), 94 'C':_(u'Satisfactory'), 95 'D':_(u'Sufficient'), 96 'E':_(u'Fail'), 97 } 98 class GradeSource(BasicSourceFactory): 99 def getValues(self): 100 return sorted(GRADES.keys()) 101 def getTitle(self, value): 102 return GRADES.get(value, None) 103 81 104 # Define a valiation method for email addresses 82 105 class NotAnEmailAddress(schema.ValidationError): … … 145 168 return value 146 169 170 class IResultEntry(Interface): 171 """A school grade entry. 172 """ 173 subject = schema.Choice( 174 title = _(u'Subject'), 175 source = SubjectSource(), 176 ) 177 grade = schema.Choice( 178 title = _(u'Grade'), 179 source = GradeSource(), 180 ) 181 182 class IResultEntryField(IObject): 183 """A zope.schema-like field for usage in interfaces. 184 185 Marker interface to distuingish result entries from ordinary 186 object fields. Needed for registration of widgets. 187 """ 188 147 189 class ISIRPUtils(Interface): 148 190 """A collection of methods which are subject to customization. … … 970 1012 required = True, 971 1013 ) 972 -
main/waeup.sirp/trunk/src/waeup/sirp/widgets/objectwidget.pt
r5328 r7795 1 <td class="row" tal:repeat="widget context/subwidgets"> 2 <span tal:define="error widget/error" 3 tal:replace="structure error" tal:condition="error" /> 4 <span tal:replace="structure widget" /> 5 </td> 1 <div class="row"> 2 <span tal:repeat="widget context/subwidgets"> 3 <span tal:define="error widget/error" 4 tal:replace="structure error" tal:condition="error" /> 5 <span tal:replace="structure widget" /> 6 </span> 7 </div> -
main/waeup.sirp/trunk/src/waeup/sirp/widgets/objectwidget.py
r7321 r7795 60 60 return SIRPObjectWidgetView(self, request) 61 61 62 62 63 class SIRPObjectDisplayWidget(SIRPObjectWidget): 63 64 -
main/waeup.sirp/trunk/src/waeup/sirp/widgets/tests/test_objectwidget.py
r7501 r7795 21 21 import unittest 22 22 import sys 23 from zope.component import testing24 23 from zope.interface import Interface, implements 25 24 from zope.interface.verify import verifyClass … … 45 44 name = TextLine() 46 45 email = TextLine() 47 46 48 47 class TestContact(object): 49 48 implements(ITestContact) … … 51 50 class ITestContent(Interface): 52 51 foo = Object( 53 ITestContact, 52 ITestContact, 54 53 title = u'Foo Title', 55 54 description = u'', 56 55 ) 57 56 58 57 class ObjectWidgetInputErrorView(object): 59 58 implements(IWidgetInputErrorView) … … 82 81 provideAdapter(TextWidget, (ITextLine, IDefaultBrowserLayer), 83 82 IInputWidget) 84 83 85 84 class TestObject(object): 86 85 implements(ITestContent) … … 120 119 error_html = widget.error() 121 120 if sys.version_info < (2, 5): 122 self.assertTrue("email: <zope.formlib.interfaces.Mis" 121 self.assertTrue("email: <zope.formlib.interfaces.Mis" 123 122 in error_html) 124 123 self.assertTrue("name: <zope.formlib.interfaces.Miss" … … 161 160 widget1, widget2 = widget.subwidgets() 162 161 self.assertTrue(widget1 is name_widget) 163 164 162 163 165 164 class ObjectDisplayWidgetTest(BrowserWidgetTest): 166 165 """Documents and tests the display variant of object widget. … … 184 183 # adapter that can turn nearly any object into an ITraversable. 185 184 provideAdapter(DefaultTraversable, (None,), ITraversable) 186 185 187 186 class TestObject(object): 188 187 implements(ITestContent) … … 206 205 IDisplayWidget) 207 206 208 207 209 208 def test_interfaces(self): 210 from zope.interface.verify import DoesNotImplement211 209 self.assertTrue(IDisplayWidget.providedBy(self._widget)) 212 210 self.assertFalse(IInputWidget.providedBy(self._widget)) … … 219 217 220 218 check_list = [ 221 '<td', 'class=', 'row', 219 '<div', 'class=', 'row', 220 '<span', 222 221 'Foo Name', 223 '</ td>', '<td', 'class=', 'row',222 '</span>', '<span', 224 223 'foo@foo.test', 225 '</ td>']226 self.verifyResult(widget(), check_list, inorder=True) 224 '</div>'] 225 self.verifyResult(widget(), check_list, inorder=True) 227 226 228 227 def test_suite():
Note: See TracChangeset for help on using the changeset viewer.