Skip to content
This repository
Browse code

Initial Git version of the VITA branch

  • Loading branch information...
commit ac93bfa6f4990706565cbd60380c3fb7d391cbea 1 parent be6c3e2
Dominic König authored December 29, 2011

Showing 109 changed files with 252 additions and 40,560 deletions. Show diff stats Hide diff stats

  1. 3  .gitignore
  2. 10  ABOUT
  3. 10  INSTALL
  4. 48  LICENSE
  5. 10  README
  6. 2  VERSION
  7. 0  __init__.py
  8. 0  controllers/admin.py
  9. 0  controllers/appadmin.py
  10. 0  controllers/auth.py
  11. 0  controllers/budget.py
  12. 9  controllers/cr.py
  13. 19  controllers/default.py
  14. 0  controllers/delphi.py
  15. 5  controllers/dvi.py
  16. 0  controllers/dvr.py
  17. 0  controllers/hms.py
  18. 9  controllers/hrm.py
  19. 4  controllers/pr.py
  20. 288  controllers/sync.py
  21. 0  controllers/test.py
  22. 0  controllers/vol.py
  23. 0  controllers/xforms.py
  24. 0  cron/Zeroconf.py
  25. 0  cron/email_receive.py
  26. 0  cron/import_job_do_import.py
  27. 0  cron/import_job_do_processing.py
  28. 0  cron/sms_handler_modem.py
  29. 44  docs/VM.txt
  30. 42  docs/epydoc.conf
  31. 3,327  docs/html/api-objects.txt
  32. 444  docs/html/class-tree.html
  33. BIN  docs/html/crarr.png
  34. 322  docs/html/epydoc.css
  35. 293  docs/html/epydoc.js
  36. 17  docs/html/frames.html
  37. 278  docs/html/help.html
  38. 2,540  docs/html/identifier-index.html
  39. 17  docs/html/index.html
  40. 140  docs/html/module-tree.html
  41. 38  docs/html/redirect.html
  42. 2,116  docs/html/str-class.html
  43. 435  docs/html/toc-everything.html
  44. 31  docs/html/toc-vita.modules-module.html
  45. 59  docs/html/toc-vita.modules.EXIF-module.html
  46. 35  docs/html/toc-vita.modules.arial10-module.html
  47. 60  docs/html/toc-vita.modules.clienttools-module.html
  48. 54  docs/html/toc-vita.modules.fixed_datetime-module.html
  49. 46  docs/html/toc-vita.modules.jsonrpclib-module.html
  50. 241  docs/html/toc-vita.modules.pyparsing-module.html
  51. 31  docs/html/toc-vita.modules.s3_test-module.html
  52. 49  docs/html/toc-vita.modules.s3gis-module.html
  53. 35  docs/html/toc-vita.modules.s3vita-module.html
  54. 79  docs/html/toc-vita.modules.s3xrc-module.html
  55. 43  docs/html/toc-vita.modules.sahana-module.html
  56. 34  docs/html/toc-vita.modules.shn_utils-module.html
  57. 33  docs/html/toc-vita.modules.update_column-module.html
  58. 39  docs/html/toc-vita.modules.validators-module.html
  59. 31  docs/html/toc-vita.modules.webgrid-module.html
  60. 33  docs/html/toc-vita.modules.widgets-module.html
  61. 49  docs/html/toc.html
  62. 118  docs/html/todo-index.html
  63. 184  docs/html/vita.modules-module.html
  64. 122  docs/html/vita.modules-pysrc.html
  65. 887  docs/html/vita.modules.EXIF-module.html
  66. 1,944  docs/html/vita.modules.EXIF-pysrc.html
  67. 332  docs/html/vita.modules.EXIF.EXIF_header-class.html
  68. 188  docs/html/vita.modules.EXIF.IFD_Tag-class.html
  69. 184  docs/html/vita.modules.EXIF.Ratio-class.html
  70. 261  docs/html/vita.modules.arial10-module.html
  71. 276  docs/html/vita.modules.arial10-pysrc.html
  72. 393  docs/html/vita.modules.clienttools-module.html
  73. 441  docs/html/vita.modules.clienttools-pysrc.html
  74. 304  docs/html/vita.modules.clienttools.EventManager-class.html
  75. 268  docs/html/vita.modules.clienttools.JQuery-class.html
  76. 333  docs/html/vita.modules.clienttools.PageManager-class.html
  77. 467  docs/html/vita.modules.clienttools.ScriptManager-class.html
  78. 432  docs/html/vita.modules.fixed_datetime-module.html
  79. 550  docs/html/vita.modules.fixed_datetime-pysrc.html
  80. 369  docs/html/vita.modules.fixed_datetime.FixedOffset-class.html
  81. 608  docs/html/vita.modules.fixed_datetime.datetime-class.html
  82. 276  docs/html/vita.modules.jsonrpclib-module.html
  83. 500  docs/html/vita.modules.jsonrpclib-pysrc.html
  84. 280  docs/html/vita.modules.jsonrpclib.Parser-class.html
  85. 244  docs/html/vita.modules.jsonrpclib.SafeTransport-class.html
  86. 371  docs/html/vita.modules.jsonrpclib.ServerProxy-class.html
  87. 338  docs/html/vita.modules.jsonrpclib.Transport-class.html
  88. 278  docs/html/vita.modules.jsonrpclib.Unmarshaller-class.html
  89. 283  docs/html/vita.modules.jsonrpclib._Method-class.html
  90. 2,530  docs/html/vita.modules.pyparsing-module.html
  91. 7,893  docs/html/vita.modules.pyparsing-pysrc.html
  92. 545  docs/html/vita.modules.pyparsing.And-class.html
  93. 371  docs/html/vita.modules.pyparsing.And._ErrorStop-class.html
  94. 421  docs/html/vita.modules.pyparsing.CaselessKeyword-class.html
  95. 418  docs/html/vita.modules.pyparsing.CaselessLiteral-class.html
  96. 461  docs/html/vita.modules.pyparsing.CharsNotIn-class.html
  97. 472  docs/html/vita.modules.pyparsing.Combine-class.html
  98. 416  docs/html/vita.modules.pyparsing.Dict-class.html
  99. 496  docs/html/vita.modules.pyparsing.Each-class.html
  100. 372  docs/html/vita.modules.pyparsing.Empty-class.html
  101. 414  docs/html/vita.modules.pyparsing.FollowedBy-class.html
  102. 614  docs/html/vita.modules.pyparsing.Forward-class.html
  103. 455  docs/html/vita.modules.pyparsing.GoToColumn-class.html
  104. 421  docs/html/vita.modules.pyparsing.Group-class.html
  105. 534  docs/html/vita.modules.pyparsing.Keyword-class.html
  106. 419  docs/html/vita.modules.pyparsing.LineEnd-class.html
  107. 453  docs/html/vita.modules.pyparsing.LineStart-class.html
  108. 424  docs/html/vita.modules.pyparsing.Literal-class.html
3  .gitignore
@@ -21,4 +21,5 @@
21 21
 *.ttf
22 22
 .~lock.*.csv#
23 23
 *.log
24  
-*.pyc
  24
+*.pyc
  25
+*.~*~
10  ABOUT 100644 → 100755
... ...
@@ -1,5 +1,5 @@
1  
-Sahana Eden is an Emergency Development Environment - an Open Source framework to rapidly build powerful applications for Emergency Management.
2  
-
3  
-It is a web based collaboration tool that addresses the common coordination problems during a disaster from finding missing people, managing aid, managing volunteers, tracking camps effectively between Government groups, the civil society (NGOs) and the victims themselves.
4  
-
5  
-Please see the website for more details: http://eden.sahanafoundation.org/
  1
+Sahana Eden is an Emergency Development Environment - an Open Source framework to rapidly build powerful applications for Emergency Management.
  2
+
  3
+It is a web based collaboration tool that addresses the common coordination problems during a disaster from finding missing people, managing aid, managing volunteers, tracking camps effectively between Government groups, the civil society (NGOs) and the victims themselves.
  4
+
  5
+Please see the website for more details: http://eden.sahanafoundation.org/
10  INSTALL 100644 → 100755
... ...
@@ -1,5 +1,5 @@
1  
-Sahana Eden
2  
------------
3  
-This package is designed to be uploaded into a running instance of Web2Py:
4  
-
5  
-http://eden.sahanafoundation.org/wiki/InstallationGuidelines
  1
+Sahana Eden
  2
+-----------
  3
+This package is designed to be uploaded into a running instance of Web2Py:
  4
+
  5
+http://eden.sahanafoundation.org/wiki/InstallationGuidelines
48  LICENSE 100644 → 100755
... ...
@@ -1,24 +1,24 @@
1  
-http://en.wikipedia.org/wiki/MIT_License
2  
-
3  
-Copyright: 2010 (c) Sahana Software Foundation
4  
-
5  
-Permission is hereby granted, free of charge, to any person
6  
-obtaining a copy of this software and associated documentation
7  
-files (the "Software"), to deal in the Software without
8  
-restriction, including without limitation the rights to use,
9  
-copy, modify, merge, publish, distribute, sublicense, and/or sell
10  
-copies of the Software, and to permit persons to whom the
11  
-Software is furnished to do so, subject to the following
12  
-conditions:
13  
-
14  
-The above copyright notice and this permission notice shall be
15  
-included in all copies or substantial portions of the Software.
16  
-
17  
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18  
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19  
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20  
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21  
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22  
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23  
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24  
-OTHER DEALINGS IN THE SOFTWARE.
  1
+http://en.wikipedia.org/wiki/MIT_License
  2
+
  3
+Copyright: 2010 (c) Sahana Software Foundation
  4
+
  5
+Permission is hereby granted, free of charge, to any person
  6
+obtaining a copy of this software and associated documentation
  7
+files (the "Software"), to deal in the Software without
  8
+restriction, including without limitation the rights to use,
  9
+copy, modify, merge, publish, distribute, sublicense, and/or sell
  10
+copies of the Software, and to permit persons to whom the
  11
+Software is furnished to do so, subject to the following
  12
+conditions:
  13
+
  14
+The above copyright notice and this permission notice shall be
  15
+included in all copies or substantial portions of the Software.
  16
+
  17
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  18
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  19
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  20
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  21
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  22
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  23
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  24
+OTHER DEALINGS IN THE SOFTWARE.
10  README 100644 → 100755
... ...
@@ -1,5 +1,5 @@
1  
-Sahana Eden is an Emergency Development Environment - an Open Source framework to rapidly build powerful applications for Emergency Management.
2  
-
3  
-It is a web based collaboration tool that addresses the common coordination problems during a disaster from finding missing people, managing aid, managing volunteers, tracking camps effectively between Government groups, the civil society (NGOs) and the victims themselves.
4  
-
5  
-Please see the website for more details: http://eden.sahanafoundation.org/
  1
+Sahana Eden is an Emergency Development Environment - an Open Source framework to rapidly build powerful applications for Emergency Management.
  2
+
  3
+It is a web based collaboration tool that addresses the common coordination problems during a disaster from finding missing people, managing aid, managing volunteers, tracking camps effectively between Government groups, the civil society (NGOs) and the victims themselves.
  4
+
  5
+Please see the website for more details: http://eden.sahanafoundation.org/
2  VERSION
... ...
@@ -1 +1 @@
1  
-r3091 (2011-12-27 23:13:10)
  1
+vita-0.5.5-devel-13-g19a4774 (2011-12-29 15:12:02)
0  __init__.py 100644 → 100755
File mode changed
0  controllers/admin.py 100644 → 100755
File mode changed
0  controllers/appadmin.py 100644 → 100755
File mode changed
0  controllers/auth.py 100644 → 100755
File mode changed
0  controllers/budget.py 100644 → 100755
File mode changed
9  controllers/cr.py 100644 → 100755
@@ -250,12 +250,15 @@ def cr_shelter_prep(r):
250 250
                 # Set defaults
251 251
                 db.pr_presence.datetime.default = request.utcnow
252 252
                 db.pr_presence.observer.default = s3_logged_in_person()
  253
+                popts = s3db.pr_presence_opts
  254
+                pcnds = s3db.pr_presence_conditions
253 255
                 cr_shelter_presence_opts = {
254  
-                    vita.CHECK_IN: vita.presence_conditions[vita.CHECK_IN],
255  
-                    vita.CHECK_OUT: vita.presence_conditions[vita.CHECK_OUT]}
  256
+                    popts.CHECK_IN: pcnds[popts.CHECK_IN],
  257
+                    popts.CHECK_OUT: pcnds[popts.CHECK_OUT]
  258
+                }
256 259
                 db.pr_presence.presence_condition.requires = IS_IN_SET(
257 260
                     cr_shelter_presence_opts, zero=None)
258  
-                db.pr_presence.presence_condition.default = vita.CHECK_IN
  261
+                db.pr_presence.presence_condition.default = popts.CHECK_IN
259 262
                 # Change the Labels
260 263
                 s3.crud_strings.pr_presence = Storage(
261 264
                     title_create = T("Register Person"),
19  controllers/default.py 100644 → 100755
@@ -414,15 +414,16 @@ def site():
414 414
         site_id = request.args[0]
415 415
         site_r = db.org_site[site_id]
416 416
         tablename = site_r.instance_type
417  
-        query = (db[tablename].site_id == site_id)
418  
-        id = db(query).select(db[tablename].id,
419  
-                              limitby = (0, 1)).first().id
420  
-        cf = tablename.split("_", 1)
421  
-        redirect(URL(c = cf[0],
422  
-                     f = cf[1],
423  
-                     args = [id]))
424  
-    else:
425  
-        raise HTTP(404)
  417
+        table = s3db.table(tablename)
  418
+        if table:
  419
+            query = (table.site_id == site_id)
  420
+            id = db(query).select(db[tablename].id,
  421
+                                  limitby = (0, 1)).first().id
  422
+            cf = tablename.split("_", 1)
  423
+            redirect(URL(c = cf[0],
  424
+                         f = cf[1],
  425
+                         args = [id]))
  426
+    raise HTTP(404)
426 427
 
427 428
 # -----------------------------------------------------------------------------
428 429
 def message():
0  controllers/delphi.py 100644 → 100755
File mode changed
5  controllers/dvi.py 100644 → 100755
@@ -131,8 +131,9 @@ def body():
131 131
 
132 132
     s3mgr.configure("dvi_body", main="pe_label", extra="gender")
133 133
 
134  
-    db.pr_note.status.readable = False
135  
-    db.pr_note.status.writable = False
  134
+    ntable = s3db.pr_note
  135
+    ntable.status.readable = False
  136
+    ntable.status.writable = False
136 137
 
137 138
     dvi_tabs = [(T("Recovery"), ""),
138 139
                 (T("Checklist"), "checklist"),
0  controllers/dvr.py 100644 → 100755
File mode changed
0  controllers/hms.py 100644 → 100755
File mode changed
9  controllers/hrm.py
@@ -57,11 +57,10 @@ def s3_menu_prep():
57 57
         org_filter()
58 58
 
59 59
     # Set mode
60  
-    if session.s3.hrm.mode != "personal" and \
61  
-       (ADMIN in roles or session.s3.hrm.orgs):
62  
-        session.s3.hrm.mode = None
63  
-    elif deployment_settings.get_security_policy() in (1, 2):
64  
-        session.s3.hrm.mode = None
  60
+    if session.s3.hrm.mode != "personal":
  61
+        if (ADMIN in roles or session.s3.hrm.orgs) or \
  62
+           deployment_settings.get_security_policy() in (1, 2):
  63
+            session.s3.hrm.mode = None
65 64
     else:
66 65
         session.s3.hrm.mode = "personal"
67 66
 
4  controllers/pr.py 100644 → 100755
@@ -325,10 +325,6 @@ def presence():
325 325
 
326 326
     # Settings suitable for use in Map Popups
327 327
 
328  
-    # This filter should be added to the gis_layer_feature query
329  
-    #response.s3.filter = ((table.presence_condition.belongs(vita.PERSISTANT_PRESENCE)) & \
330  
-    #                      (table.closed == False))
331  
-
332 328
     table.pe_id.readable = True
333 329
     table.pe_id.label = "Name"
334 330
     table.pe_id.represent = person_represent
288  controllers/sync.py 100644 → 100755
... ...
@@ -1,144 +1,144 @@
1  
-# -*- coding: utf-8 -*-
2  
-
3  
-"""
4  
-    Synchronisation, Controllers
5  
-
6  
-    @author: Dominic König <dominic[at]aidiq[dot]com>
7  
-"""
8  
-
9  
-module = request.controller
10  
-prefix = "sync" # common table prefix
11  
-module_name = T("Synchronization")
12  
-
13  
-# Options Menu (available in all Functions' Views)
14  
-s3_menu(module)
15  
-
16  
-# -----------------------------------------------------------------------------
17  
-def index():
18  
-    """ Module's Home Page """
19  
-
20  
-    response.title = module_name
21  
-    return dict(module_name=module_name)
22  
-
23  
-# -----------------------------------------------------------------------------
24  
-def config():
25  
-    """ Synchronization Settings Controller """
26  
-
27  
-    resourcename = "config"
28  
-
29  
-    # Get the record ID of the first and only record
30  
-    s3mgr.load("sync_config")
31  
-    table = db.sync_config
32  
-    record = db().select(table.id, limitby=(0, 1)).first()
33  
-    if not record:
34  
-        record_id = table.insert()
35  
-    else:
36  
-        record_id = record.id
37  
-
38  
-    # Can't do anything else than update here
39  
-    r = s3mgr.parse_request(args=[str(record_id), "update"],
40  
-                            extension="html")
41  
-
42  
-    output = r(list_btn=None)
43  
-    return output
44  
-
45  
-# -----------------------------------------------------------------------------
46  
-def repository():
47  
-    """ Repository Management Controller """
48  
-
49  
-    resourcename = "repository"
50  
-
51  
-    tabs = [(T("Configuration"), None),
52  
-            (T("Resources"), "task"),
53  
-            (T("Schedule"), "job"),
54  
-            (T("Log"), "log"),
55  
-            #(T("Conflicts"), "conflict")
56  
-           ]
57  
-
58  
-    s3mgr.model.set_method("sync", "repository",
59  
-                           method="register",
60  
-                           action=s3mgr.sync)
61  
-
62  
-    def prep(r):
63  
-        if r.interactive:
64  
-            if r.component and r.id:
65  
-                if r.component.alias == "job":
66  
-                    current.s3task.configure_tasktable_crud(
67  
-                        function="sync_synchronize",
68  
-                        args = [r.id],
69  
-                        vars = dict(user_id = auth.user.id))
70  
-                response.s3.cancel = URL(c="sync", f="repository",
71  
-                                         args=[str(r.id), r.component.alias])
72  
-        return True
73  
-    response.s3.prep = prep
74  
-
75  
-    def postp(r, output):
76  
-        if r.interactive and r.id:
77  
-            if r.component and r.component.alias == "job":
78  
-                response.s3.actions = [
79  
-                    dict(label=str(T("Reset")),
80  
-                         _class="action-btn",
81  
-                         url=URL(c="sync", f="repository",
82  
-                                 args=[str(r.id), "job", "[id]", "reset"]))
83  
-                    ]
84  
-        s3_action_buttons(r)
85  
-        return output
86  
-    response.s3.postp = postp
87  
-
88  
-    rheader = lambda r: sync_rheader(r, tabs=tabs)
89  
-    output = s3_rest_controller(prefix, resourcename, rheader=rheader)
90  
-    return output
91  
-
92  
-# -----------------------------------------------------------------------------
93  
-def sync():
94  
-    """ Synchronization """
95  
-
96  
-    if "resource" in request.get_vars:
97  
-        tablename = request.get_vars["resource"]
98  
-        if "_" in tablename:
99  
-
100  
-            # URL variables from peer
101  
-            _vars = request.get_vars
102  
-            get_vars=Storage(include_deleted=True)
103  
-            if "repository" in _vars:
104  
-                get_vars.update(repository=_vars["repository"])
105  
-            if "msince" in _vars:
106  
-                get_vars.update(msince=_vars["msince"])
107  
-
108  
-            # Request
109  
-            prefix, name = tablename.split("_", 1)
110  
-            r = s3mgr.parse_request(prefix=prefix,
111  
-                                    name=name,
112  
-                                    args=["sync"],
113  
-                                    get_vars=get_vars)
114  
-
115  
-            # Response
116  
-            output = r()
117  
-            return output
118  
-
119  
-    raise HTTP(400, body=s3mgr.ERROR.BAD_REQUEST)
120  
-
121  
-# -----------------------------------------------------------------------------
122  
-def log():
123  
-    """ Log Reader """
124  
-
125  
-    resourcename = "log"
126  
-
127  
-    if "return" in request.get_vars:
128  
-        there = request.get_vars["return"]
129  
-        c, f = there.split(".", 1)
130  
-        list_btn = URL(c=c, f=f,
131  
-                       args="sync_log")
132  
-    else:
133  
-        list_btn = URL(c="sync", f="log",
134  
-                       vars=request.get_vars)
135  
-
136  
-    list_btn = A(T("List all Entries"), _href=list_btn, _class="action-btn")
137  
-
138  
-    output = s3_rest_controller(prefix, resourcename,
139  
-                                subtitle=None,
140  
-                                rheader=s3base.S3SyncLog.rheader,
141  
-                                list_btn=list_btn)
142  
-    return output
143  
-
144  
-# END =========================================================================
  1
+# -*- coding: utf-8 -*-
  2
+
  3
+"""
  4
+    Synchronisation, Controllers
  5
+
  6
+    @author: Dominic König <dominic[at]aidiq[dot]com>
  7
+"""
  8
+
  9
+module = request.controller
  10
+prefix = "sync" # common table prefix
  11
+module_name = T("Synchronization")
  12
+
  13
+# Options Menu (available in all Functions' Views)
  14
+s3_menu(module)
  15
+
  16
+# -----------------------------------------------------------------------------
  17
+def index():
  18
+    """ Module's Home Page """
  19
+
  20
+    response.title = module_name
  21
+    return dict(module_name=module_name)
  22
+
  23
+# -----------------------------------------------------------------------------
  24
+def config():
  25
+    """ Synchronization Settings Controller """
  26
+
  27
+    resourcename = "config"
  28
+
  29
+    # Get the record ID of the first and only record
  30
+    s3mgr.load("sync_config")
  31
+    table = db.sync_config
  32
+    record = db().select(table.id, limitby=(0, 1)).first()
  33
+    if not record:
  34
+        record_id = table.insert()
  35
+    else:
  36
+        record_id = record.id
  37
+
  38
+    # Can't do anything else than update here
  39
+    r = s3mgr.parse_request(args=[str(record_id), "update"],
  40
+                            extension="html")
  41
+
  42
+    output = r(list_btn=None)
  43
+    return output
  44
+
  45
+# -----------------------------------------------------------------------------
  46
+def repository():
  47
+    """ Repository Management Controller """
  48
+
  49
+    resourcename = "repository"
  50
+
  51
+    tabs = [(T("Configuration"), None),
  52
+            (T("Resources"), "task"),
  53
+            (T("Schedule"), "job"),
  54
+            (T("Log"), "log"),
  55
+            #(T("Conflicts"), "conflict")
  56
+           ]
  57
+
  58
+    s3mgr.model.set_method("sync", "repository",
  59
+                           method="register",
  60
+                           action=s3mgr.sync)
  61
+
  62
+    def prep(r):
  63
+        if r.interactive:
  64
+            if r.component and r.id:
  65
+                if r.component.alias == "job":
  66
+                    current.s3task.configure_tasktable_crud(
  67
+                        function="sync_synchronize",
  68
+                        args = [r.id],
  69
+                        vars = dict(user_id = auth.user.id))
  70
+                response.s3.cancel = URL(c="sync", f="repository",
  71
+                                         args=[str(r.id), r.component.alias])
  72
+        return True
  73
+    response.s3.prep = prep
  74
+
  75
+    def postp(r, output):
  76
+        if r.interactive and r.id:
  77
+            if r.component and r.component.alias == "job":
  78
+                response.s3.actions = [
  79
+                    dict(label=str(T("Reset")),
  80
+                         _class="action-btn",
  81
+                         url=URL(c="sync", f="repository",
  82
+                                 args=[str(r.id), "job", "[id]", "reset"]))
  83
+                    ]
  84
+        s3_action_buttons(r)
  85
+        return output
  86
+    response.s3.postp = postp
  87
+
  88
+    rheader = lambda r: sync_rheader(r, tabs=tabs)
  89
+    output = s3_rest_controller(prefix, resourcename, rheader=rheader)
  90
+    return output
  91
+
  92
+# -----------------------------------------------------------------------------
  93
+def sync():
  94
+    """ Synchronization """
  95
+
  96
+    if "resource" in request.get_vars:
  97
+        tablename = request.get_vars["resource"]
  98
+        if "_" in tablename:
  99
+
  100
+            # URL variables from peer
  101
+            _vars = request.get_vars
  102
+            get_vars=Storage(include_deleted=True)
  103
+            if "repository" in _vars:
  104
+                get_vars.update(repository=_vars["repository"])
  105
+            if "msince" in _vars:
  106
+                get_vars.update(msince=_vars["msince"])
  107
+
  108
+            # Request
  109
+            prefix, name = tablename.split("_", 1)
  110
+            r = s3mgr.parse_request(prefix=prefix,
  111
+                                    name=name,
  112
+                                    args=["sync"],
  113
+                                    get_vars=get_vars)
  114
+
  115
+            # Response
  116
+            output = r()
  117
+            return output
  118
+
  119
+    raise HTTP(400, body=s3mgr.ERROR.BAD_REQUEST)
  120
+
  121
+# -----------------------------------------------------------------------------
  122
+def log():
  123
+    """ Log Reader """
  124
+
  125
+    resourcename = "log"
  126
+
  127
+    if "return" in request.get_vars:
  128
+        there = request.get_vars["return"]
  129
+        c, f = there.split(".", 1)
  130
+        list_btn = URL(c=c, f=f,
  131
+                       args="sync_log")
  132
+    else:
  133
+        list_btn = URL(c="sync", f="log",
  134
+                       vars=request.get_vars)
  135
+
  136
+    list_btn = A(T("List all Entries"), _href=list_btn, _class="action-btn")
  137
+
  138
+    output = s3_rest_controller(prefix, resourcename,
  139
+                                subtitle=None,
  140
+                                rheader=s3base.S3SyncLog.rheader,
  141
+                                list_btn=list_btn)
  142
+    return output
  143
+
  144
+# END =========================================================================
0  controllers/test.py 100644 → 100755
File mode changed
0  controllers/vol.py 100644 → 100755
File mode changed
0  controllers/xforms.py 100644 → 100755
File mode changed
0  cron/Zeroconf.py 100644 → 100755
File mode changed
0  cron/email_receive.py 100644 → 100755
File mode changed
0  cron/import_job_do_import.py 100644 → 100755
File mode changed
0  cron/import_job_do_processing.py 100644 → 100755
File mode changed
0  cron/sms_handler_modem.py 100644 → 100755
File mode changed
44  docs/VM.txt
... ...
@@ -1,22 +1,22 @@
1  
-Welcome to the Sahana Eden Developer environment
2  
-
3  
-To launch Sahana, double-click on the Eclipse icon & start the debugger.
4  
-
5  
-Firefox will open on the local site & also has other Bookmarks
6  
-
7  
-You should Register in Sahana - 1st user will get Admin rights.
8  
-
9  
-To view the Filesystem in Eclipse, click on the 'PyDev' button in the upper-right of the screen.
10  
-
11  
-For the ticket viewer:
12  
-Admin password: eden
13  
-
14  
-To open an interactive Python shell in the Sahana environment, open the terminal & type:
15  
-w2p
16  
-
17  
-To update this virtual machine, open the terminal & type:
18  
-update
19  
-
20  
-Password for the Sahana user: eden
21  
-
22  
-Happy coding!
  1
+Welcome to the Sahana Eden Developer environment
  2
+
  3
+To launch Sahana, double-click on the Eclipse icon & start the debugger.
  4
+
  5
+Firefox will open on the local site & also has other Bookmarks
  6
+
  7
+You should Register in Sahana - 1st user will get Admin rights.
  8
+
  9
+To view the Filesystem in Eclipse, click on the 'PyDev' button in the upper-right of the screen.
  10
+
  11
+For the ticket viewer:
  12
+Admin password: eden
  13
+
  14
+To open an interactive Python shell in the Sahana environment, open the terminal & type:
  15
+w2p
  16
+
  17
+To update this virtual machine, open the terminal & type:
  18
+update
  19
+
  20
+Password for the Sahana user: eden
  21
+
  22
+Happy coding!
42  docs/epydoc.conf 100644 → 100755
... ...
@@ -1,21 +1,21 @@
1  
-[epydoc] # Epydoc section marker (required by ConfigParser)
2  
-
3  
-# Information about the project.
4  
-name: Sahana-Eden
5  
-url: http://eden.sahanafoundation.org/
6  
-
7  
-# The list of modules to document.  Modules can be named using
8  
-# dotted names, module filenames, or package directory names.
9  
-# This option may be repeated.
10  
-#modules: modules/sahana.py, modules/s3_test.py, modules/t2.py, modules/validators.py, models/__db.py, models/__pr.py, models/_gis.py, models/cr.py, models/or.py, controllers/default.py, controllers/appadmin.py, controllers/gis.py, controllers/or.py, controllers/cr.py, controllers/pr.py
11  
-#modules: modules/*.py, models/*.py, controllers/*.py
12  
-modules: modules/*.py
13  
-
14  
-# Write html output to a directory
15  
-output: html
16  
-target: docs/html/
17  
-
18  
-# Include all automatically generated graphs.  These graphs are
19  
-# generated using Graphviz dot.
20  
-#graph: all
21  
-#dotpath: /usr/local/bin/dot
  1
+[epydoc] # Epydoc section marker (required by ConfigParser)
  2
+
  3
+# Information about the project.
  4
+name: Sahana-Eden
  5
+url: http://eden.sahanafoundation.org/
  6
+
  7
+# The list of modules to document.  Modules can be named using
  8
+# dotted names, module filenames, or package directory names.
  9
+# This option may be repeated.
  10
+#modules: modules/sahana.py, modules/s3_test.py, modules/t2.py, modules/validators.py, models/__db.py, models/__pr.py, models/_gis.py, models/cr.py, models/or.py, controllers/default.py, controllers/appadmin.py, controllers/gis.py, controllers/or.py, controllers/cr.py, controllers/pr.py
  11
+#modules: modules/*.py, models/*.py, controllers/*.py
  12
+modules: modules/*.py
  13
+
  14
+# Write html output to a directory
  15
+output: html
  16
+target: docs/html/
  17
+
  18
+# Include all automatically generated graphs.  These graphs are
  19
+# generated using Graphviz dot.
  20
+#graph: all
  21
+#dotpath: /usr/local/bin/dot
3,327  docs/html/api-objects.txt
0 additions, 3327 deletions not shown
444  docs/html/class-tree.html
... ...
@@ -1,444 +0,0 @@
1  
-<?xml version="1.0" encoding="ascii"?>
2  
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3  
-          "DTD/xhtml1-transitional.dtd">
4  
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5  
-<head>
6  
-  <title>Class Hierarchy</title>
7  
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
8  
-  <script type="text/javascript" src="epydoc.js"></script>
9  
-</head>
10  
-
11  
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
12  
-      alink="#204080">
13  
-<!-- ==================== NAVIGATION BAR ==================== -->
14  
-<table class="navbar" border="0" width="100%" cellpadding="0"
15  
-       bgcolor="#a0c0ff" cellspacing="0">
16  
-  <tr valign="middle">
17  
-  <!-- Home link -->
18  
-      <th>&nbsp;&nbsp;&nbsp;<a
19  
-        href="vita.modules-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
20  
-
21  
-  <!-- Tree link -->
22  
-      <th bgcolor="#70b0f0" class="navbar-select"
23  
-          >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
24  
-
25  
-  <!-- Index link -->
26  
-      <th>&nbsp;&nbsp;&nbsp;<a
27  
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
28  
-
29  
-  <!-- Help link -->
30  
-      <th>&nbsp;&nbsp;&nbsp;<a
31  
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
32  
-
33  
-  <!-- Project homepage -->
34  
-      <th class="navbar" align="right" width="100%">
35  
-        <table border="0" cellpadding="0" cellspacing="0">
36  
-          <tr><th class="navbar" align="center"
37  
-            ><a class="navbar" target="_top" href="http://eden.sahanafoundation.org/">Sahana-Eden</a></th>
38  
-          </tr></table></th>
39  
-  </tr>
40  
-</table>
41  
-<table width="100%" cellpadding="0" cellspacing="0">
42  
-  <tr valign="top">
43  
-    <td width="100%">&nbsp;</td>
44  
-    <td>
45  
-      <table cellpadding="0" cellspacing="0">
46  
-        <!-- hide/show private -->
47  
-        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
48  
-    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
49  
-        <tr><td align="right"><span class="options"
50  
-            >[<a href="frames.html" target="_top">frames</a
51  
-            >]&nbsp;|&nbsp;<a href="class-tree.html"
52  
-            target="_top">no&nbsp;frames</a>]</span></td></tr>
53  
-      </table>
54  
-    </td>
55  
-  </tr>
56  
-</table>
57  
-<center><b>
58  
- [ <a href="module-tree.html">Module Hierarchy</a>
59  
- | <a href="class-tree.html">Class Hierarchy</a> ]
60  
-</b></center><br />
61  
-<h1 class="epydoc">Class Hierarchy</h1>
62  
-<ul class="nomargin-top">
63  
-    <li> <strong class="uidlink"><i>unreachable</i></strong>
64  
-    </li>
65  
-    <li> <strong class="uidlink"><i>unreachable</i></strong>
66  
-    </li>
67  
-    <li> <strong class="uidlink"><i>unreachable</i></strong>
68  
-    </li>
69  
-    <li> <strong class="uidlink"><i>unreachable</i></strong>
70  
-    </li>
71  
-    <li> <strong class="uidlink"><i>unreachable</i></strong>
72  
-    </li>
73  
-    <li> <strong class="uidlink"><i>unreachable</i></strong>
74  
-    </li>
75  
-    <li> <strong class="uidlink"><i>unreachable</i></strong>
76  
-    </li>
77  
-    <li> <strong class="uidlink"><a href="vita.modules.EXIF.EXIF_header-class.html">vita.modules.EXIF.EXIF_header</a></strong>
78  
-    </li>
79  
-    <li> <strong class="uidlink">gluon.sql.Field</strong>
80  
-    </li>
81  
-    <li> <strong class="uidlink"><a href="vita.modules.EXIF.IFD_Tag-class.html">vita.modules.EXIF.IFD_Tag</a></strong>
82  
-    </li>
83  
-    <li> <strong class="uidlink">gluon.validators.IS_MATCH</strong>
84  
-    </li>
85  
-    <li> <strong class="uidlink">gluon.validators.IS_NOT_IN_DB</strong>
86  
-    </li>
87  
-    <li> <strong class="uidlink"><a href="vita.modules.clienttools.JQuery-class.html">vita.modules.clienttools.JQuery</a></strong>
88  
-    </li>
89  
-    <li> <strong class="uidlink">gluon.sql.Query</strong>
90  
-    </li>
91  
-    <li> <strong class="uidlink"><a href="vita.modules.EXIF.Ratio-class.html">vita.modules.EXIF.Ratio</a></strong>
92  
-    </li>
93  
-    <li> <strong class="uidlink"><a href="vita.modules.sahana.S3-class.html">vita.modules.sahana.S3</a></strong>:
94  
-      <em class="summary">The T2 functions we still use extracted from t2.py</em>
95  
-    </li>
96  
-    <li> <strong class="uidlink"><a href="vita.modules.jsonrpclib.Transport-class.html">vita.modules.jsonrpclib.Transport</a></strong>:
97  
-      <em class="summary">Handles an HTTP transaction to an JSON-RPC server.</em>
98  
-    </li>
99  
-    <li> <strong class="uidlink">gluon.validators.Validator</strong>
100  
-    </li>
101  
-    <li> <strong class="uidlink">gluon.validators.Validator</strong>
102  
-    </li>
103  
-    <li> <strong class="uidlink">gluon.validators.Validator</strong>
104  
-    </li>
105  
-    <li> <strong class="uidlink">wsgi_intercept.webtest_intercept.WebCase</strong>
106  
-    </li>
107  
-    <li> <strong class="uidlink">datetime.datetime</strong>
108  
-    </li>
109  
-    <li> <strong class="uidlink">object</strong>:
110  
-      <em class="summary">The most base type</em>
111  
-    <ul>
112  
-    <li> <strong class="uidlink">exceptions.BaseException</strong>:
113  
-      <em class="summary">Common base class for all exceptions</em>
114  
-    <ul>
115  
-    <li> <strong class="uidlink">exceptions.Exception</strong>:
116  
-      <em class="summary">Common base class for all non-exit exceptions.</em>
117  
-    <ul>
118  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.ParseBaseException-class.html">vita.modules.pyparsing.ParseBaseException</a></strong>:
119  
-      <em class="summary">base exception class for all parsing runtime exceptions</em>
120  
-    <ul>
121  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.ParseException-class.html">vita.modules.pyparsing.ParseException</a></strong>:
122  
-      <em class="summary">exception thrown when parse expressions don't match class; 
123  
-        supported attributes by name are:</em>
124  
-    </li>
125  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.ParseFatalException-class.html">vita.modules.pyparsing.ParseFatalException</a></strong>:
126  
-      <em class="summary">user-throwable exception thrown when inconsistent parse content is 
127  
-        found; stops all parsing immediately</em>
128  
-    <ul>
129  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.ParseSyntaxException-class.html">vita.modules.pyparsing.ParseSyntaxException</a></strong>:
130  
-      <em class="summary">just like ParseFatalException, but thrown internally when an 
131  
-        ErrorStop indicates that parsing is to stop immediately because an 
132  
-        unbacktrackable syntax error has been found</em>
133  
-    </li>
134  
-    </ul>
135  
-    </li>
136  
-    </ul>
137  
-    </li>
138  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.RecursiveGrammarException-class.html">vita.modules.pyparsing.RecursiveGrammarException</a></strong>:
139  
-      <em class="summary">exception thrown by validate() if the grammar could be improperly 
140  
-        recursive</em>
141  
-    </li>
142  
-    </ul>
143  
-    </li>
144  
-    </ul>
145  
-    </li>
146  
-    <li> <strong class="uidlink"><a href="vita.modules.clienttools.EventManager-class.html">vita.modules.clienttools.EventManager</a></strong>:
147  
-      <em class="summary">The event manager allows you to bind client
148  
-side events to client or server side functions.</em>
149  
-    </li>
150  
-    <li> <strong class="uidlink"><a href="vita.modules.s3gis.GIS-class.html">vita.modules.s3gis.GIS</a></strong>:
151  
-      <em class="summary">GIS functions</em>
152  
-    </li>
153  
-    <li> <strong class="uidlink"><a href="vita.modules.s3gis.Geocoder-class.html" onclick="show_private();">vita.modules.s3gis.Geocoder</a></strong>:
154  
-      <em class="summary">Base class for all geocoders</em>
155  
-    </li>
156  
-    <li> <strong class="uidlink"><a href="vita.modules.validators.IS_LAT-class.html">vita.modules.validators.IS_LAT</a></strong>:
157  
-      <em class="summary">example:</em>
158  
-    </li>
159  
-    <li> <strong class="uidlink"><a href="vita.modules.validators.IS_LON-class.html">vita.modules.validators.IS_LON</a></strong>:
160  
-      <em class="summary">example:</em>
161  
-    </li>
162  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.OnlyOnce-class.html">vita.modules.pyparsing.OnlyOnce</a></strong>:
163  
-      <em class="summary">Wrapper for parse actions, to ensure they are only called once.</em>
164  
-    </li>
165  
-    <li> <strong class="uidlink"><a href="vita.modules.clienttools.PageManager-class.html">vita.modules.clienttools.PageManager</a></strong>:
166  
-      <em class="summary">The page manager object is used to dynamically
167  
-include resources on a page</em>
168  
-    </li>
169  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.ParseResults-class.html">vita.modules.pyparsing.ParseResults</a></strong>:
170  
-      <em class="summary">Structured parse results, to provide multiple means of access to 
171  
-        the parsed data:</em>
172  
-    </li>
173  
-    <li> <strong class="uidlink"><a href="vita.modules.jsonrpclib.Parser-class.html">vita.modules.jsonrpclib.Parser</a></strong>
174  
-    </li>
175  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.ParserElement-class.html">vita.modules.pyparsing.ParserElement</a></strong>:
176  
-      <em class="summary">Abstract base level parser element class.</em>
177  
-    <ul>
178  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.ParseElementEnhance-class.html">vita.modules.pyparsing.ParseElementEnhance</a></strong>:
179  
-      <em class="summary">Abstract subclass of ParserElement, for combining and 
180  
-        post-processing parsed tokens.</em>
181  
-    <ul>
182  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.FollowedBy-class.html">vita.modules.pyparsing.FollowedBy</a></strong>:
183  
-      <em class="summary">Lookahead matching of the given parse expression.</em>
184  
-    </li>
185  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Forward-class.html">vita.modules.pyparsing.Forward</a></strong>:
186  
-      <em class="summary">Forward declaration of an expression to be defined later - used for
187  
-        recursive grammars, such as algebraic infix notation.</em>
188  
-    <ul>
189  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing._ForwardNoRecurse-class.html" onclick="show_private();">vita.modules.pyparsing._ForwardNoRecurse</a></strong>
190  
-    </li>
191  
-    </ul>
192  
-    </li>
193  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.NotAny-class.html">vita.modules.pyparsing.NotAny</a></strong>:
194  
-      <em class="summary">Lookahead to disallow matching with the given parse expression.</em>
195  
-    </li>
196  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.OneOrMore-class.html">vita.modules.pyparsing.OneOrMore</a></strong>:
197  
-      <em class="summary">Repetition of one or more of the given expression.</em>
198  
-    </li>
199  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Optional-class.html">vita.modules.pyparsing.Optional</a></strong>:
200  
-      <em class="summary">Optional matching of the given expression.</em>
201  
-    </li>
202  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.SkipTo-class.html">vita.modules.pyparsing.SkipTo</a></strong>:
203  
-      <em class="summary">Token for skipping over all undefined text until the matched 
204  
-        expression is found.</em>
205  
-    </li>
206  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.TokenConverter-class.html">vita.modules.pyparsing.TokenConverter</a></strong>:
207  
-      <em class="summary">Abstract subclass of ParseExpression, for converting parsed 
208  
-        results.</em>
209  
-    <ul>
210  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Combine-class.html">vita.modules.pyparsing.Combine</a></strong>:
211  
-      <em class="summary">Converter to concatenate all matching tokens to a single string.</em>
212  
-    </li>
213  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Dict-class.html">vita.modules.pyparsing.Dict</a></strong>:
214  
-      <em class="summary">Converter to return a repetitive expression as a list, but also as 
215  
-        a dictionary.</em>
216  
-    </li>
217  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Group-class.html">vita.modules.pyparsing.Group</a></strong>:
218  
-      <em class="summary">Converter to return the matched tokens as a list - useful for 
219  
-        returning tokens of ZeroOrMore and OneOrMore expressions.</em>
220  
-    </li>
221  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Suppress-class.html">vita.modules.pyparsing.Suppress</a></strong>:
222  
-      <em class="summary">Converter for ignoring the results of a parsed expression.</em>
223  
-    </li>
224  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Upcase-class.html">vita.modules.pyparsing.Upcase</a></strong>:
225  
-      <em class="summary">Converter to upper case all matching tokens.</em>
226  
-    </li>
227  
-    </ul>
228  
-    </li>
229  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.ZeroOrMore-class.html">vita.modules.pyparsing.ZeroOrMore</a></strong>:
230  
-      <em class="summary">Optional repetition of zero or more of the given expression.</em>
231  
-    </li>
232  
-    </ul>
233  
-    </li>
234  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.ParseExpression-class.html">vita.modules.pyparsing.ParseExpression</a></strong>:
235  
-      <em class="summary">Abstract subclass of ParserElement, for combining and 
236  
-        post-processing parsed tokens.</em>
237  
-    <ul>
238  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.And-class.html">vita.modules.pyparsing.And</a></strong>:
239  
-      <em class="summary">Requires all given ParseExpressions to be found in the given order.</em>
240  
-    </li>
241  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Each-class.html">vita.modules.pyparsing.Each</a></strong>:
242  
-      <em class="summary">Requires all given ParseExpressions to be found, but in any order.</em>
243  
-    </li>
244  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.MatchFirst-class.html">vita.modules.pyparsing.MatchFirst</a></strong>:
245  
-      <em class="summary">Requires that at least one ParseExpression is found.</em>
246  
-    </li>
247  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Or-class.html">vita.modules.pyparsing.Or</a></strong>:
248  
-      <em class="summary">Requires that at least one ParseExpression is found.</em>
249  
-    </li>
250  
-    </ul>
251  
-    </li>
252  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Token-class.html">vita.modules.pyparsing.Token</a></strong>:
253  
-      <em class="summary">Abstract ParserElement subclass, for defining atomic matching 
254  
-        patterns.</em>
255  
-    <ul>
256  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.CharsNotIn-class.html">vita.modules.pyparsing.CharsNotIn</a></strong>:
257  
-      <em class="summary">Token for matching words composed of characters *not* in a given 
258  
-        set.</em>
259  
-    </li>
260  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Empty-class.html">vita.modules.pyparsing.Empty</a></strong>:
261  
-      <em class="summary">An empty token, will always match.</em>
262  
-    <ul>
263  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.And._ErrorStop-class.html" onclick="show_private();">vita.modules.pyparsing.And._ErrorStop</a></strong>
264  
-    </li>
265  
-    </ul>
266  
-    </li>
267  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Keyword-class.html">vita.modules.pyparsing.Keyword</a></strong>:
268  
-      <em class="summary">Token to exactly match a specified string as a keyword, that is, it
269  
-        must be immediately followed by a non-keyword character.</em>
270  
-    <ul>
271  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.CaselessKeyword-class.html">vita.modules.pyparsing.CaselessKeyword</a></strong>
272  
-    </li>
273  
-    </ul>
274  
-    </li>
275  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Literal-class.html" onclick="show_private();">vita.modules.pyparsing.Literal</a></strong>:
276  
-      <em class="summary">Token to exactly match a specified string.</em>
277  
-    <ul>
278  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.CaselessLiteral-class.html">vita.modules.pyparsing.CaselessLiteral</a></strong>:
279  
-      <em class="summary">Token to match a specified string, ignoring case of letters.</em>
280  
-    </li>
281  
-    </ul>
282  
-    </li>
283  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.NoMatch-class.html">vita.modules.pyparsing.NoMatch</a></strong>:
284  
-      <em class="summary">A token that will never match.</em>
285  
-    </li>
286  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.QuotedString-class.html">vita.modules.pyparsing.QuotedString</a></strong>:
287  
-      <em class="summary">Token for matching strings that are delimited by quoting 
288  
-        characters.</em>
289  
-    </li>
290  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Regex-class.html">vita.modules.pyparsing.Regex</a></strong>:
291  
-      <em class="summary">Token for matching strings that match a given regular expression.</em>
292  
-    </li>
293  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.White-class.html">vita.modules.pyparsing.White</a></strong>:
294  
-      <em class="summary">Special matching class for matching whitespace.</em>
295  
-    </li>
296  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.Word-class.html">vita.modules.pyparsing.Word</a></strong>:
297  
-      <em class="summary">Token for matching words composed of allowed character sets.</em>
298  
-    </li>
299  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing._PositionToken-class.html" onclick="show_private();">vita.modules.pyparsing._PositionToken</a></strong>
300  
-    <ul>
301  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.GoToColumn-class.html">vita.modules.pyparsing.GoToColumn</a></strong>:
302  
-      <em class="summary">Token to advance to a specific column of input text; useful for 
303  
-        tabular report scraping.</em>
304  
-    </li>
305  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.LineEnd-class.html">vita.modules.pyparsing.LineEnd</a></strong>:
306  
-      <em class="summary">Matches if current position is at the end of a line within the 
307  
-        parse string</em>
308  
-    </li>
309  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.LineStart-class.html">vita.modules.pyparsing.LineStart</a></strong>:
310  
-      <em class="summary">Matches if current position is at the beginning of a line within 
311  
-        the parse string</em>
312  
-    </li>
313  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.StringEnd-class.html">vita.modules.pyparsing.StringEnd</a></strong>:
314  
-      <em class="summary">Matches if current position is at the end of the parse string</em>
315  
-    </li>
316  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.StringStart-class.html">vita.modules.pyparsing.StringStart</a></strong>:
317  
-      <em class="summary">Matches if current position is at the beginning of the parse string</em>
318  
-    </li>
319  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.WordEnd-class.html">vita.modules.pyparsing.WordEnd</a></strong>:
320  
-      <em class="summary">Matches if the current position is at the end of a Word, and is not
321  
-        followed by any character in a given set of wordChars 
322  
-        (default=printables).</em>
323  
-    </li>
324  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing.WordStart-class.html">vita.modules.pyparsing.WordStart</a></strong>:
325  
-      <em class="summary">Matches if the current position is at the beginning of a Word, and 
326  
-        is not preceded by any character in a given set of wordChars 
327  
-        (default=printables).</em>
328  
-    </li>
329  
-    </ul>
330  
-    </li>
331  
-    </ul>
332  
-    </li>
333  
-    </ul>
334  
-    </li>
335  
-    <li> <strong class="uidlink"><a href="vita.modules.s3xrc.S3ObjectComponent-class.html" onclick="show_private();">vita.modules.s3xrc.S3ObjectComponent</a></strong>:
336  
-      <em class="summary">Class to represent component relations between resources</em>
337  
-    </li>
338  
-    <li> <strong class="uidlink"><a href="vita.modules.s3xrc.S3ObjectModel-class.html" onclick="show_private();">vita.modules.s3xrc.S3ObjectModel</a></strong>:
339  
-      <em class="summary">Class to handle the compound resources model</em>
340  
-    </li>
341  
-    <li> <strong class="uidlink"><a href="vita.modules.s3xrc.S3RESTController-class.html">vita.modules.s3xrc.S3RESTController</a></strong>:
342  
-      <em class="summary">RESTful interface for S3 compound resources</em>
343  
-    </li>
344  
-    <li> <strong class="uidlink"><a href="vita.modules.s3xrc.S3RESTRequest-class.html">vita.modules.s3xrc.S3RESTRequest</a></strong>:
345  
-      <em class="summary">Class to represent RESTful requests</em>
346  
-    </li>
347  
-    <li> <strong class="uidlink"><a href="vita.modules.s3xrc.S3ResourceController-class.html">vita.modules.s3xrc.S3ResourceController</a></strong>:
348  
-      <em class="summary">Resource controller class</em>
349  
-    </li>
350  
-    <li> <strong class="uidlink"><a href="vita.modules.s3xrc.S3Vector-class.html" onclick="show_private();">vita.modules.s3xrc.S3Vector</a></strong>:
351  
-      <em class="summary">Helper class for data imports</em>
352  
-    </li>
353  
-    <li> <strong class="uidlink"><a href="vita.modules.s3xrc.S3XML-class.html" onclick="show_private();">vita.modules.s3xrc.S3XML</a></strong>:
354  
-      <em class="summary">XML+JSON toolkit for S3XRC</em>
355  
-    </li>
356  
-    <li> <strong class="uidlink"><a href="vita.modules.clienttools.ScriptManager-class.html">vita.modules.clienttools.ScriptManager</a></strong>:
357  
-      <em class="summary">Helpers to generate scripts
358  
-All methods return a string</em>
359  
-    </li>
360  
-    <li> <strong class="uidlink"><a href="vita.modules.jsonrpclib.ServerProxy-class.html">vita.modules.jsonrpclib.ServerProxy</a></strong>
361  
-    </li>
362  
-    <li> <strong class="uidlink"><a href="vita.modules.validators.THIS_NOT_IN_DB-class.html">vita.modules.validators.THIS_NOT_IN_DB</a></strong>:
363  
-      <em class="summary">Unused currently since doesn't quite work.</em>
364  
-    </li>
365  
-    <li> <strong class="uidlink"><a href="vita.modules.jsonrpclib.Unmarshaller-class.html">vita.modules.jsonrpclib.Unmarshaller</a></strong>
366  
-    </li>
367  
-    <li> <strong class="uidlink"><a href="vita.modules.s3vita.Vita-class.html">vita.modules.s3vita.Vita</a></strong>:
368  
-      <em class="summary">Toolkit for Person Identification, Tracking and Tracing</em>
369  
-    </li>
370  
-    <li> <strong class="uidlink"><a href="vita.modules.webgrid.WebGrid-class.html">vita.modules.webgrid.WebGrid</a></strong>
371  
-    </li>
372  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing._Constants-class.html" onclick="show_private();">vita.modules.pyparsing._Constants</a></strong>
373  
-    </li>
374  
-    <li> <strong class="uidlink"><a href="vita.modules.jsonrpclib._Method-class.html" onclick="show_private();">vita.modules.jsonrpclib._Method</a></strong>
375  
-    </li>
376  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing._NullToken-class.html" onclick="show_private();">vita.modules.pyparsing._NullToken</a></strong>
377  
-    </li>
378  
-    <li> <strong class="uidlink"><a href="vita.modules.pyparsing._ParseResultsWithOffset-class.html" onclick="show_private();">vita.modules.pyparsing._ParseResultsWithOffset</a></strong>
379  
-    </li>
380  
-    <li> <strong class="uidlink">basestring</strong>:
381  
-      <em class="summary">Type basestring cannot be instantiated; it is the base for str and 
382  
-        unicode.</em>
383  
-    <ul>
384  
-    <li> <strong class="uidlink"><a href="str-class.html">str</a></strong>:
385  
-      <em class="summary">str(object) -&gt; string</em>
386  
-    </li>
387  
-    </ul>
388  
-    </li>
389  
-    </ul>
390  
-    </li>
391  
-    <li> <strong class="uidlink">datetime.tzinfo</strong>
392  
-    </li>
393  
-</ul>
394  
-<!-- ==================== NAVIGATION BAR ==================== -->
395  
-<table class="navbar" border="0" width="100%" cellpadding="0"
396  
-       bgcolor="#a0c0ff" cellspacing="0">
397  
-  <tr valign="middle">
398  
-  <!-- Home link -->
399  
-      <th>&nbsp;&nbsp;&nbsp;<a
400  
-        href="vita.modules-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
401  
-
402  
-  <!-- Tree link -->
403  
-      <th bgcolor="#70b0f0" class="navbar-select"
404  
-          >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
405  
-
406  
-  <!-- Index link -->
407  
-      <th>&nbsp;&nbsp;&nbsp;<a
408  
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
409  
-
410  
-  <!-- Help link -->
411  
-      <th>&nbsp;&nbsp;&nbsp;<a
412  
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
413  
-
414  
-  <!-- Project homepage -->
415  
-      <th class="navbar" align="right" width="100%">
416  
-        <table border="0" cellpadding="0" cellspacing="0">
417  
-          <tr><th class="navbar" align="center"
418  
-            ><a class="navbar" target="_top" href="http://eden.sahanafoundation.org/">Sahana-Eden</a></th>
419  
-          </tr></table></th>
420  
-  </tr>
421  
-</table>
422  
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
423  
-  <tr>
424  
-    <td align="left" class="footer">
425  
-    Generated by Epydoc 3.0.1 on Sun May 30 23:29:54 2010
426  
-    </td>
427  
-    <td align="right" class="footer">
428  
-      <a target="mainFrame" href="http://epydoc.sourceforge.net"
429  
-        >http://epydoc.sourceforge.net</a>
430  
-    </td>
431  
-  </tr>
432  
-</table>
433  
-
434  
-<script type="text/javascript">
435  
-  <!--
436  
-  // Private objects are initially displayed (because if
437  
-  // javascript is turned off then we want them to be
438  
-  // visible); but by default, we want to hide them.  So hide
439  
-  // them unless we have a cookie that says to show them.
440  
-  checkCookie();
441  
-  // -->
442  
-</script>
443  
-</body>
444  
-</html>
BIN  docs/html/crarr.png
322  docs/html/epydoc.css
... ...
@@ -1,322 +0,0 @@
1  
-
2  
-
3  
-/* Epydoc CSS Stylesheet
4  
- *
5  
- * This stylesheet can be used to customize the appearance of epydoc's
6  
- * HTML output.
7  
- *
8  
- */
9  
-
10  
-/* Default Colors & Styles
11  
- *   - Set the default foreground & background color with 'body'; and 
12  
- *     link colors with 'a:link' and 'a:visited'.
13  
- *   - Use bold for decision list terms.
14  
- *   - The heading styles defined here are used for headings *within*
15  
- *     docstring descriptions.  All headings used by epydoc itself use
16  
- *     either class='epydoc' or class='toc' (CSS styles for both
17  
- *     defined below).
18  
- */
19  
-body                        { background: #ffffff; color: #000000; }
20  
-p                           { margin-top: 0.5em; margin-bottom: 0.5em; }
21  
-a:link                      { color: #0000ff; }
22  
-a:visited                   { color: #204080; }
23  
-dt                          { font-weight: bold; }
24  
-h1                          { font-size: +140%; font-style: italic;
25  
-                              font-weight: bold; }
26  
-h2                          { font-size: +125%; font-style: italic;
27  
-                              font-weight: bold; }
28  
-h3                          { font-size: +110%; font-style: italic;
29  
-                              font-weight: normal; }
30  
-code                        { font-size: 100%; }
31  
-/* N.B.: class, not pseudoclass */
32  
-a.link                      { font-family: monospace; }
33  
- 
34  
-/* Page Header & Footer
35  
- *   - The standard page header consists of a navigation bar (with
36  
- *     pointers to standard pages such as 'home' and 'trees'); a
37  
- *     breadcrumbs list, which can be used to navigate to containing
38  
- *     classes or modules; options links, to show/hide private
39  
- *     variables and to show/hide frames; and a page title (using
40  
- *     <h1>).  The page title may be followed by a link to the
41  
- *     corresponding source code (using 'span.codelink').
42  
- *   - The footer consists of a navigation bar, a timestamp, and a
43  
- *     pointer to epydoc's homepage.
44  
- */ 
45  
-h1.epydoc                   { margin: 0; font-size: +140%; font-weight: bold; }
46  
-h2.epydoc                   { font-size: +130%; font-weight: bold; }
47  
-h3.epydoc                   { font-size: +115%; font-weight: bold;
48  
-                              margin-top: 0.2em; }
49  
-td h3.epydoc                { font-size: +115%; font-weight: bold;
50  
-                              margin-bottom: 0; }
51  
-table.navbar                { background: #a0c0ff; color: #000000;
52  
-                              border: 2px groove #c0d0d0; }
53  
-table.navbar table          { color: #000000; }
54  
-th.navbar-select            { background: #70b0ff;
55  
-                              color: #000000; } 
56  
-table.navbar a              { text-decoration: none; }  
57  
-table.navbar a:link         { color: #0000ff; }
58  
-table.navbar a:visited      { color: #204080; }
59  
-span.breadcrumbs            { font-size: 85%; font-weight: bold; }
60  
-span.options                { font-size: 70%; }
61  
-span.codelink               { font-size: 85%; }
62  
-td.footer                   { font-size: 85%; }
63  
-
64  
-/* Table Headers
65  
- *   - Each summary table and details section begins with a 'header'
66  
- *     row.  This row contains a section title (marked by
67  
- *     'span.table-header') as well as a show/hide private link