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

Last change on this file since 4939 was 4920, checked in by uli, 15 years ago

Make unit tests run again with the new package layout.

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.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.