source: main/waeup.sirp/trunk/src/waeup/sirp/README.txt @ 5086

Last change on this file since 5086 was 5072, checked in by uli, 15 years ago

Show, how plugins work.

  • Property svn:eol-style set to native
File size: 3.5 KB
Line 
1The waeup.sirp package
2**********************
3
4:Test-Layer: unit
5
6A portal software for student registration.
7
8Prerequisites
9=============
10
11Before we can work with the environment, we have to register all the
12utilities, adapters, etc. We grok the `waeup` package to do that::
13
14  >>> import grok
15  >>> grok.testing.grok('waeup.sirp')
16
17Universities
18============
19
20``University`` objects are the base of all functionality provided by
21this package.  They contain all facilities of a university.
22
23We can easily create universities::
24
25  >>> from waeup.sirp.app import University
26  >>> u = University()
27  >>> u
28  <waeup.sirp.app.University object at 0x...>
29
30Universities have a name.
31
32  >>> u.name
33  u'Sample University'
34
35Universities are basically also containers for faculties, students and
36hostels::
37
38  >>> u['faculties']
39  <waeup.sirp.university.facultycontainer.FacultyContainer object at 0x...>
40
41  >>> u['students']
42  <waeup.sirp.student.studentcontainer.StudentContainer object at 0x...>
43
44  >>> u['hostels']
45  <waeup.sirp.hostel.hostelcontainer.HostelContainer object at 0x...>
46
47We can export universities. For this we lookup an appropriate exporter
48first::
49
50  >>> from waeup.sirp.interfaces import IWAeUPExporter
51  >>> exporter = IWAeUPExporter(u)
52  >>> exporter
53  <waeup.sirp.utils.importexport.Exporter object at 0x...>
54
55Now we can trigger the export::
56
57  >>> exporter.export()
58  <cStringIO.StringO object at 0x...>
59
60We can also get an XML representation as file. If we do not provide a
61filepath, we will get an instance of `cStringIO.StringIO`, i.e. a
62memory file::
63
64  >>> from waeup.sirp.interfaces import IWAeUPXMLExporter
65  >>> exporter = IWAeUPXMLExporter(u)
66  >>> f = exporter.export()
67  >>> f
68  <cStringIO.StringO object at 0x...>
69
70  >>> print f.read()
71  <?xml version="1.0" encoding="utf-8" ?>
72  <pickle>
73    <initialized_object id="...">
74  ...
75  </pickle>
76
77
78Faculties
79=========
80
81Faculties are containers for departments. They are intended to be
82managed by universities.
83
84We can create faculties easily::
85
86  >>> from waeup.sirp.university.faculty import Faculty
87  >>> f = Faculty()
88  >>> f
89  <waeup.sirp.university.faculty.Faculty object at 0x...>
90
91Also faculties want to be named::
92
93  >>> f.title
94  u'Unnamed Faculty'
95
96Departments
97===========
98
99
100WAeUP SIRP plugins
101==================
102
103waeup.sirp provides an API to 'plugin' components. Things that should
104be setup at creation time of a WAeUP SIRP application can indicate
105that by providing a utility providing IWAeUPSIRPPlugin.
106
107The plugins are looked up by an created app, which then will call the
108``setup()`` method of each plugin.
109
110   >>> from waeup.sirp.interfaces import IWAeUPSIRPPluggable
111   >>> from zope.component import getAdapters, getUtilitiesFor
112   >>> sorted(list(getUtilitiesFor(IWAeUPSIRPPluggable)))
113   [(u'accesscodes', <waeup.sirp.accesscodes...AccessCodePlugin ...)]
114
115
116We can provide a new plugin like this:
117
118   >>> import grok
119   >>> from waeup.sirp.interfaces import IWAeUPSIRPPluggable
120   >>> class MyPlugin(grok.GlobalUtility):
121   ...   grok.implements(IWAeUPSIRPPluggable)
122   ...   def setup(self, site, name, logger):
123   ...     print "Setup was called for"
124   ...     print site
125   ...   def update(self, site, name, logger):
126   ...     pass
127
128When we register the plugin
129
130   >>> grok.testing.grok_component('MyPlugin', MyPlugin)
131   True
132
133and setup a new WAeUP SIRP instance, we will get a message:
134
135   >>> from waeup.sirp.app import University
136   >>> site = University()
137   Setup was called for
138   <waeup.sirp.app.University object at 0x...>
139
140Apparently the plugin can do with the University object whatever it
141likes. That's what plugins are for.
Note: See TracBrowser for help on using the repository browser.