1 | ############################################################################## |
---|
2 | # |
---|
3 | # Zope Public License (ZPL) Version 1.0 |
---|
4 | # ------------------------------------- |
---|
5 | # |
---|
6 | # Copyright (c) Digital Creations. All rights reserved. |
---|
7 | # |
---|
8 | # This license has been certified as Open Source(tm). |
---|
9 | # |
---|
10 | # Redistribution and use in source and binary forms, with or without |
---|
11 | # modification, are permitted provided that the following conditions are |
---|
12 | # met: |
---|
13 | # |
---|
14 | # 1. Redistributions in source code must retain the above copyright |
---|
15 | # notice, this list of conditions, and the following disclaimer. |
---|
16 | # |
---|
17 | # 2. Redistributions in binary form must reproduce the above copyright |
---|
18 | # notice, this list of conditions, and the following disclaimer in |
---|
19 | # the documentation and/or other materials provided with the |
---|
20 | # distribution. |
---|
21 | # |
---|
22 | # 3. Digital Creations requests that attribution be given to Zope |
---|
23 | # in any manner possible. Zope includes a "Powered by Zope" |
---|
24 | # button that is installed by default. While it is not a license |
---|
25 | # violation to remove this button, it is requested that the |
---|
26 | # attribution remain. A significant investment has been put |
---|
27 | # into Zope, and this effort will continue if the Zope community |
---|
28 | # continues to grow. This is one way to assure that growth. |
---|
29 | # |
---|
30 | # 4. All advertising materials and documentation mentioning |
---|
31 | # features derived from or use of this software must display |
---|
32 | # the following acknowledgement: |
---|
33 | # |
---|
34 | # "This product includes software developed by Digital Creations |
---|
35 | # for use in the Z Object Publishing Environment |
---|
36 | # (http://www.zope.org/)." |
---|
37 | # |
---|
38 | # In the event that the product being advertised includes an |
---|
39 | # intact Zope distribution (with copyright and license included) |
---|
40 | # then this clause is waived. |
---|
41 | # |
---|
42 | # 5. Names associated with Zope or Digital Creations must not be used to |
---|
43 | # endorse or promote products derived from this software without |
---|
44 | # prior written permission from Digital Creations. |
---|
45 | # |
---|
46 | # 6. Modified redistributions of any form whatsoever must retain |
---|
47 | # the following acknowledgment: |
---|
48 | # |
---|
49 | # "This product includes software developed by Digital Creations |
---|
50 | # for use in the Z Object Publishing Environment |
---|
51 | # (http://www.zope.org/)." |
---|
52 | # |
---|
53 | # Intact (re-)distributions of any official Zope release do not |
---|
54 | # require an external acknowledgement. |
---|
55 | # |
---|
56 | # 7. Modifications are encouraged but must be packaged separately as |
---|
57 | # patches to official Zope releases. Distributions that do not |
---|
58 | # clearly separate the patches from the original work must be clearly |
---|
59 | # labeled as unofficial distributions. Modifications which do not |
---|
60 | # carry the name Zope may be packaged in any form, as long as they |
---|
61 | # conform to all of the clauses above. |
---|
62 | # |
---|
63 | # |
---|
64 | # Disclaimer |
---|
65 | # |
---|
66 | # THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY |
---|
67 | # EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
---|
68 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
---|
69 | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL CREATIONS OR ITS |
---|
70 | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
---|
71 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
---|
72 | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
---|
73 | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
---|
74 | # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
---|
75 | # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
---|
76 | # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
---|
77 | # SUCH DAMAGE. |
---|
78 | # |
---|
79 | # |
---|
80 | # This software consists of contributions made by Digital Creations and |
---|
81 | # many individuals on behalf of Digital Creations. Specific |
---|
82 | # attributions are listed in the accompanying credits file. |
---|
83 | # |
---|
84 | ############################################################################## |
---|
85 | |
---|
86 | |
---|
87 | |
---|
88 | def manage_addXMLRPCMethod(id, title, module, function): |
---|
89 | """ |
---|
90 | Add an XMLRPC method to an |
---|
91 | 'ObjectManager'. |
---|
92 | |
---|
93 | In addition to the standard object-creation arguments, |
---|
94 | 'id' and title, the following arguments are defined: |
---|
95 | |
---|
96 | function -- The name of the python function. This can be a |
---|
97 | an ordinary Python function, or a bound method. |
---|
98 | |
---|
99 | module -- The name of the file containing the function |
---|
100 | definition. |
---|
101 | |
---|
102 | The module normally resides in the 'Extensions' |
---|
103 | directory, however, the file name may have a prefix of |
---|
104 | 'product.', indicating that it should be found in a product |
---|
105 | directory. |
---|
106 | |
---|
107 | For example, if the module is: 'ACMEWidgets.foo', then an |
---|
108 | attempt will first be made to use the file |
---|
109 | 'lib/python/Products/ACMEWidgets/Extensions/foo.py'. If this |
---|
110 | failes, then the file 'Extensions/ACMEWidgets.foo.py' will be |
---|
111 | used. |
---|
112 | |
---|
113 | """ |
---|
114 | |
---|
115 | class XMLRPCMethod: |
---|
116 | """ |
---|
117 | Web-callable functions that encapsulate remote functions. |
---|
118 | """ |
---|
119 | |
---|
120 | __constructor__=manage_addXMLRPCMethod |
---|
121 | |
---|
122 | def manage_edit(title, module, function, REQUEST=None): |
---|
123 | """ |
---|
124 | Change the |
---|
125 | XMLRPC Method. |
---|
126 | |
---|
127 | See the description of manage_addXMLRPCMethod for a |
---|
128 | description of the arguments 'module' and 'function'. |
---|
129 | |
---|
130 | Note that calling 'manage_edit' causes the "module" to be |
---|
131 | effectively reloaded. This is useful during debugging to see |
---|
132 | the effects of changes, but can lead to problems of functions |
---|
133 | rely on shared global data. |
---|
134 | |
---|
135 | """ |
---|
136 | |
---|
137 | def __call__(*args, **kw): |
---|
138 | |
---|
139 | """ |
---|
140 | Call the |
---|
141 | XMLRPC Method. |
---|
142 | |
---|
143 | Calling an XMLRPC Method is roughly equivalent to calling |
---|
144 | the original actual function from Python. Positional and |
---|
145 | keyword parameters can be passed as usual. Note however that |
---|
146 | unlike the case of a normal Python method, the "self" argument |
---|
147 | must be passed explicitly. An exception to this rule is made |
---|
148 | if: |
---|
149 | |
---|
150 | - The supplied number of arguments is one less than the |
---|
151 | required number of arguments, and |
---|
152 | |
---|
153 | - The name of the function's first argument is 'self'. |
---|
154 | |
---|
155 | In this case, the URL parent of the object is supplied as the |
---|
156 | first argument. |
---|
157 | |
---|
158 | """ |
---|
159 | |
---|
160 | |
---|