source: main/waeup.sirp/trunk/src/waeup/sirp/university/coursecontainer.txt @ 5109

Last change on this file since 5109 was 5005, checked in by uli, 15 years ago

Fix references to academics stuff interfaces. This is the first step to make academics stuff pluggable.

File size: 4.4 KB
Line 
1:mod:`waeup.sirp.university.coursecontainer` -- Course containers
2*****************************************************************
3
4.. module:: waeup.sirp.university.coursecontainer
5
6Containers for courses.
7
8:Test-Layer: unit
9
10Because this module makes use of components registered with the Zope
11Component Architecture (ZCA), we first have to grok the `waeup`
12package if we want to deploy it. This happens automatically in
13real-world use:
14
15    >>> import grok
16    >>> grok.testing.grok('waeup')
17
18Content Classes (models and containers)
19=======================================
20
21:class:`CourseContainer`
22------------------------
23
24.. class:: CourseContainer()
25
26   Create a course container instance.
27
28   .. attribute:: grok.implements(ICourseContainer)
29
30   .. attribute:: grok.require('waeup.manageUniversity')
31
32   :class:`CourseContainer` instances are instances of
33   :class:`grok.Container` that hold and manage instances of
34   :class:`waeup.sirp.university.course.Course`.
35
36     >>> from waeup.sirp.university.coursecontainer import CourseContainer
37     >>> mycontainer = CourseContainer()
38     >>> mycontainer
39     <waeup.sirp.university.coursecontainer.CourseContainer object at 0x...>
40
41   Course containers provide `ICourseContainer`:
42
43     >>> from waeup.sirp.university.interfaces import ICourseContainer
44     >>> ICourseContainer.providedBy(mycontainer)
45     True
46
47   We can be sure, that the full interface is supported by the
48   CourseContainer class:
49
50     >>> from zope.interface.verify import verifyClass
51     >>> verifyClass(ICourseContainer, CourseContainer)
52     True
53
54   As normal ``grok.Container``, :class:`CourseContainer` instances
55   can be used like dicts:
56
57     >>> list(mycontainer.keys())
58     []
59
60   .. method:: addCourse(course)
61
62      Add a course.
63
64      *course* must be an instance of
65      :class:`waeup.sirp.university.course.Course`:
66
67        >>> from waeup.sirp.university.coursecontainer import CourseContainer
68        >>> mycontainer = CourseContainer()
69        >>> mycontainer.addCourse('blah')
70        Traceback (most recent call last):
71        ...
72        TypeError: CourseContainers contain only ICourse instances
73
74      The key of added items is the ``code`` attribute:
75
76        >>> from waeup.sirp.university.course import Course
77        >>> mycourse = Course(code='COURSE1')
78        >>> mycontainer.addCourse(mycourse)
79        >>> list(mycontainer.keys())
80        [u'COURSE1']
81
82   .. method:: clear()
83
84      Remove all contained courses:
85
86        >>> len(mycontainer.items())
87        1
88
89        >>> mycontainer.clear()
90        >>> len(mycontainer.items())
91        0
92
93Utilities
94=========
95
96:class:`CourseContainerFactory`
97-------------------------------
98
99.. class:: CourseContainerFactory()
100
101   .. attribute:: grok.name(u'waeup.CourseContainer')
102
103   .. attribute:: grok.implements(IFactory)
104
105   A named utility to deliver new instances of :class:`CourseContainer`
106   without the need to import the implementation before:
107
108     >>> from zope.component import createObject
109     >>> mycoursecontainer = createObject(u'waeup.CourseContainer')
110     >>> mycoursecontainer
111     <waeup.sirp.university.coursecontainer.CourseContainer object at 0x...>
112
113   The factory complies with the specifications from the
114   :class:`IFactory` insterface:
115
116     >>> from zope.interface.verify import verifyClass
117     >>> from zope.component.interfaces import IFactory
118     >>> from waeup.sirp.university.coursecontainer import CourseContainerFactory
119     >>> verifyClass(IFactory, CourseContainerFactory)
120     True
121
122   This means also, that we can get the interfaces of the created
123   object from the factory:
124
125     >>> coursecontainer_factory = CourseContainerFactory()
126     >>> coursecontainer_factory.getInterfaces()
127     <implementedBy waeup.sirp.university.coursecontainer.CourseContainer>
128
129
130Examples
131========
132
133Getting a course container
134--------------------------
135
136We can easily create `CourseContainers`:
137
138    >>> from waeup.sirp.university.coursecontainer import CourseContainer
139    >>> mycontainer = CourseContainer()
140
141
142Another way to get a course container -- without importing the class
143-- is via factories. We registered a factory for course containers
144under the name ``waeup.CourseContainer``. Now we can ask for an object
145by calling the appropriate factory:
146
147    >>> from zope.component import createObject
148    >>> createObject(u'waeup.CourseContainer')
149    <waeup.sirp.university.coursecontainer.CourseContainer object at 0x...>
150
151This way we get a thing that implements ICourseContainer without
152imports or similar.
153
Note: See TracBrowser for help on using the repository browser.