| 1 |
NOTE: This guide is a rough reference, please take the time to read the code |
|---|
| 2 |
line by line, as it is not that long. It is also outdated in some parts. |
|---|
| 3 |
|
|---|
| 4 |
Abstract: |
|---|
| 5 |
|
|---|
| 6 |
Itaka was developed in a purely Object Oriented fashion. It is designed to |
|---|
| 7 |
be completely modular and each component was made so that it is independent |
|---|
| 8 |
of the other to a certain extent. First there is the core loader |
|---|
| 9 |
'itaka.py', which in turn loads the Console and Configuration handlers |
|---|
| 10 |
('console.py' and 'config.py'). The configuration is read and |
|---|
| 11 |
loaded, and the passed to the new instance of our Console handler. |
|---|
| 12 |
|
|---|
| 13 |
After that, the main GTK+ GUI 'uigtk.py' is loaded, it is totally |
|---|
| 14 |
independent from any other modules, as are the Console and Configuration |
|---|
| 15 |
handlers. The main GTK+ GUI only relies on the Twisted GUI reactor to |
|---|
| 16 |
handle the multi threading for simultaneous running of a GTK loop and a |
|---|
| 17 |
Twisted server reactor. |
|---|
| 18 |
|
|---|
| 19 |
The GTK+ GUI then calls on the Itaka Twisted Web Server engine 'server.py'. |
|---|
| 20 |
Although the base Twisted server is completely independent of any other |
|---|
| 21 |
modules through its base class 'BaseHTTPServer', the classes used by the |
|---|
| 22 |
GUI are not. |
|---|
| 23 |
|
|---|
| 24 |
This is because or ScreenshotServer needs instances of our Gui, |
|---|
| 25 |
Configuration and Console engines. This expandability is a prime |
|---|
| 26 |
example of the Object Oriented nature of Itaka. It was designed from |
|---|
| 27 |
the ground up to be modular and easily expandable through inheritance. |
|---|
| 28 |
|
|---|
| 29 |
Such modularity allows for users to develop different GUIs in other |
|---|
| 30 |
toolkits such as PyObjC (Cocoa) or PyQT. In turn, those GUIs can adapt |
|---|
| 31 |
BaseHTTPServer to their needs. |
|---|
| 32 |
|
|---|
| 33 |
The HTTP server creates a resource called '/screenshot' (URL Path), which |
|---|
| 34 |
in turn takes the screenshot on request. This URL path is referenced on |
|---|
| 35 |
the HTML base code in the configuration as an <img>. The screenshot |
|---|
| 36 |
resource has a special render_GET() method that initiates the screenshot |
|---|
| 37 |
engine 'screenshot.py'. |
|---|
| 38 |
|
|---|
| 39 |
The screenshot engine is done entirely on GTK+ and does depend on it. It |
|---|
| 40 |
has not been yet modularized, but it would not take long to implement a |
|---|
| 41 |
totally different GUI for Itaka. |
|---|
| 42 |
|
|---|
| 43 |
|
|---|
| 44 |
Technical standards: |
|---|
| 45 |
* Inter-class communication: it is done by passing instances of one class |
|---|
| 46 |
to the child object that needs it. For example, the |
|---|
| 47 |
HTTP server needs an instance of the GUI for widget manipulation (Logging, |
|---|
| 48 |
etc.), and instance of the configuration class and an instance of the |
|---|
| 49 |
Console class. Since our main Itaka core 'itaka.py' passed the main |
|---|
| 50 |
instance of those classes to the GTK+ GUI, the only thing needed to do is |
|---|
| 51 |
to pass an instance of the GUI class to the child-objects that need it. |
|---|
| 52 |
|
|---|
| 53 |
* Exceptions: Itaka's exception definitions are stored in 'error.py'. |
|---|
| 54 |
Inheritance should be used widely. |
|---|
| 55 |
|
|---|
| 56 |
* Encapsulation: All of Twisted's exceptions and exceptions of |
|---|
| 57 |
screenshooting code should be encapsulated with equivalent Itaka |
|---|
| 58 |
exceptions. |
|---|
| 59 |
|
|---|
| 60 |
* Documentation: Use Epytext Markup Language. |
|---|
| 61 |
|
|---|
| 62 |
* Private methods: Methods that are _never_ going to be called outside the |
|---|
| 63 |
class should be prefixed with an underscore (_). |
|---|
| 64 |
|
|---|
| 65 |
Generating Documentation: |
|---|
| 66 |
|
|---|
| 67 |
Itaka is fully documented with Epydoc. |
|---|
| 68 |
|
|---|
| 69 |
You can download epydoc from http://epydoc.sourceforge.net/ |
|---|
| 70 |
|
|---|
| 71 |
You can generate documentation using epydoc. |
|---|
| 72 |
|
|---|
| 73 |
mkdir doc |
|---|
| 74 |
epydoc --html -o doc -n Itaka -u "http://itaka.jardinpresente.com.ar" *.py |
|---|
| 75 |
|
|---|