author | Sverre Rabbelier <srabbelier@gmail.com> |
Sat, 24 Oct 2009 16:23:31 -0700 | |
changeset 3043 | 187c1709756b |
parent 3031 | 7678f72140e6 |
permissions | -rwxr-xr-x |
3031
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/env python |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
2 |
# |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
3 |
# Copyright 2007 Google Inc. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
4 |
# |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
5 |
# Licensed under the Apache License, Version 2.0 (the "License"); |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
6 |
# you may not use this file except in compliance with the License. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
7 |
# You may obtain a copy of the License at |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
8 |
# |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
9 |
# http://www.apache.org/licenses/LICENSE-2.0 |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
10 |
# |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
11 |
# Unless required by applicable law or agreed to in writing, software |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
12 |
# distributed under the License is distributed on an "AS IS" BASIS, |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
13 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
14 |
# See the License for the specific language governing permissions and |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
15 |
# limitations under the License. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
16 |
# |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
17 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
18 |
"""A mechanism for library configuration. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
19 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
20 |
Whenever App Engine library code has the need for a user-configurable |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
21 |
value, it should use the following protocol: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
22 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
23 |
1. Pick a prefix unique to the library module, e.g. 'mylib'. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
24 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
25 |
2. Call lib_config.register(prefix, mapping) with that prefix as |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
26 |
the first argument and a dict mapping suffixes to default functions |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
27 |
as the second. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
28 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
29 |
3. The register() function returns a config handle unique to this |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
30 |
prefix. The config handle object has attributes corresponding to |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
31 |
each of the suffixes given in the mapping. Call these functions |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
32 |
(they're not really methods even though they look like methods) to |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
33 |
access the user's configuration value. If the user didn't |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
34 |
configure a function, the default function from the mapping is |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
35 |
called instead. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
36 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
37 |
4. Document the function name and its signature and semantics. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
38 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
39 |
Users wanting to provide configuration values should create a module |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
40 |
named appengine_config.py in the top-level directory of their |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
41 |
application, and define functions as documented by various App Engine |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
42 |
library components in that module. To change the configuration, edit |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
43 |
the file and re-deploy the application. (When using the SDK, no |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
44 |
redeployment is required: the development server will pick up the |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
45 |
changes the next time it handles a request.) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
46 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
47 |
Third party libraries can also use this mechanism. For casual use, |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
48 |
just calling the register() method with a unique prefix is okay. For |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
49 |
carefull libraries, however, it is recommended to instantiate a new |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
50 |
LibConfigRegistry instance using a different module name. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
51 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
52 |
Example appengine_config.py file: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
53 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
54 |
from somewhere import MyMiddleWareClass |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
55 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
56 |
def mylib_add_middleware(app): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
57 |
app = MyMiddleWareClass(app) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
58 |
return app |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
59 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
60 |
Example library use: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
61 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
62 |
from google.appengine.api import lib_config |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
63 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
64 |
config_handle = lib_config.register( |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
65 |
'mylib', |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
66 |
{'add_middleware': lambda app: app}) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
67 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
68 |
def add_middleware(app): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
69 |
return config_handle.add_middleware(app) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
70 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
71 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
72 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
73 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
74 |
import logging |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
75 |
import os |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
76 |
import sys |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
77 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
78 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
79 |
DEFAULT_MODNAME = 'appengine_config' |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
80 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
81 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
82 |
class LibConfigRegistry(object): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
83 |
"""A registry for library configuration values.""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
84 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
85 |
def __init__(self, modname): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
86 |
"""Constructor. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
87 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
88 |
Args: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
89 |
modname: The module name to be imported. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
90 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
91 |
Note: the actual import of this module is deferred until the first |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
92 |
time a configuration value is requested through attribute access |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
93 |
on a ConfigHandle instance. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
94 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
95 |
self._modname = modname |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
96 |
self._registrations = {} |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
97 |
self._module = None |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
98 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
99 |
def register(self, prefix, mapping): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
100 |
"""Register a set of configuration names. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
101 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
102 |
Args: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
103 |
prefix: A shared prefix for the configuration names being registered. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
104 |
If the prefix doesn't end in '_', that character is appended. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
105 |
mapping: A dict mapping suffix strings to default values. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
106 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
107 |
Returns: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
108 |
A ConfigHandle instance. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
109 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
110 |
It's okay to re-register the same prefix: the mappings are merged, |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
111 |
and for duplicate suffixes the most recent registration wins. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
112 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
113 |
if not prefix.endswith('_'): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
114 |
prefix += '_' |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
115 |
handle = self._registrations.get(prefix) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
116 |
if handle is None: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
117 |
handle = ConfigHandle(prefix, self) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
118 |
self._registrations[prefix] = handle |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
119 |
handle._update_defaults(mapping) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
120 |
return handle |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
121 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
122 |
def initialize(self): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
123 |
"""Attempt to import the config module, if not already imported. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
124 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
125 |
This function always sets self._module to a value unequal |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
126 |
to None: either the imported module (if imported successfully), or |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
127 |
a dummy object() instance (if an ImportError was raised). Other |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
128 |
exceptions are *not* caught. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
129 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
130 |
if self._module is not None: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
131 |
return |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
132 |
try: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
133 |
__import__(self._modname) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
134 |
except ImportError, err: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
135 |
self._module = object() |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
136 |
else: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
137 |
self._module = sys.modules[self._modname] |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
138 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
139 |
def _pairs(self, prefix): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
140 |
"""Generate (key, value) pairs from the config module matching prefix. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
141 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
142 |
Args: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
143 |
prefix: A prefix string ending in '_', e.g. 'mylib_'. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
144 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
145 |
Yields: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
146 |
(key, value) pairs where key is the configuration name with |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
147 |
prefix removed, and value is the corresponding value. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
148 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
149 |
mapping = getattr(self._module, '__dict__', None) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
150 |
if not mapping: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
151 |
return |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
152 |
nskip = len(prefix) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
153 |
for key, value in mapping.iteritems(): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
154 |
if key.startswith(prefix): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
155 |
yield key[nskip:], value |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
156 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
157 |
def _dump(self): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
158 |
"""Print info about all registrations to stdout.""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
159 |
self.initialize() |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
160 |
if not hasattr(self._module, '__dict__'): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
161 |
print 'Module %s.py does not exist.' % self._modname |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
162 |
elif not self._registrations: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
163 |
print 'No registrations for %s.py.' % self._modname |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
164 |
else: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
165 |
print 'Registrations in %s.py:' % self._modname |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
166 |
print '-'*40 |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
167 |
for prefix in sorted(self._registrations): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
168 |
self._registrations[prefix]._dump() |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
169 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
170 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
171 |
class ConfigHandle(object): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
172 |
"""A set of configuration for a single library module or package. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
173 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
174 |
Public attributes of instances of this class are configuration |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
175 |
values. Attributes are dynamically computed (in __getattr__()) and |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
176 |
cached as regular instance attributes. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
177 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
178 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
179 |
_initialized = False |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
180 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
181 |
def __init__(self, prefix, registry): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
182 |
"""Constructor. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
183 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
184 |
Args: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
185 |
prefix: A shared prefix for the configuration names being registered. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
186 |
It *must* end in '_'. (This is enforced by LibConfigRegistry.) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
187 |
registry: A LibConfigRegistry instance. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
188 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
189 |
assert prefix.endswith('_') |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
190 |
self._prefix = prefix |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
191 |
self._defaults = {} |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
192 |
self._overrides = {} |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
193 |
self._registry = registry |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
194 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
195 |
def _update_defaults(self, mapping): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
196 |
"""Update the default mappings. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
197 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
198 |
Args: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
199 |
mapping: A dict mapping suffix strings to default values. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
200 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
201 |
for key, value in mapping.iteritems(): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
202 |
if key.startswith('__') and key.endswith('__'): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
203 |
continue |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
204 |
self._defaults[key] = value |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
205 |
if self._initialized: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
206 |
self._update_configs() |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
207 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
208 |
def _update_configs(self): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
209 |
"""Update the configuration values. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
210 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
211 |
This clears the cached values, initializes the registry, and loads |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
212 |
the configuration values from the config module. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
213 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
214 |
if self._initialized: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
215 |
self._clear_cache() |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
216 |
self._registry.initialize() |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
217 |
for key, value in self._registry._pairs(self._prefix): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
218 |
if key not in self._defaults: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
219 |
logging.warn('Configuration "%s" not recognized', self._prefix + key) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
220 |
else: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
221 |
self._overrides[key] = value |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
222 |
self._initialized = True |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
223 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
224 |
def _clear_cache(self): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
225 |
"""Clear the cached values.""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
226 |
for key in self._defaults: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
227 |
try: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
228 |
delattr(self, key) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
229 |
except AttributeError: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
230 |
pass |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
231 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
232 |
def _dump(self): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
233 |
"""Print info about this set of registrations to stdout.""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
234 |
print 'Prefix %s:' % self._prefix |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
235 |
if self._overrides: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
236 |
print ' Overrides:' |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
237 |
for key in sorted(self._overrides): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
238 |
print ' %s = %r' % (key, self._overrides[key]) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
239 |
else: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
240 |
print ' No overrides' |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
241 |
if self._defaults: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
242 |
print ' Defaults:' |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
243 |
for key in sorted(self._defaults): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
244 |
print ' %s = %r' % (key, self._defaults[key]) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
245 |
else: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
246 |
print ' No defaults' |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
247 |
print '-'*40 |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
248 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
249 |
def __getattr__(self, suffix): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
250 |
"""Dynamic attribute access. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
251 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
252 |
Args: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
253 |
suffix: The attribute name. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
254 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
255 |
Returns: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
256 |
A configuration values. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
257 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
258 |
Raises: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
259 |
AttributeError if the suffix is not a registered suffix. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
260 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
261 |
The first time an attribute is referenced, this method is invoked. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
262 |
The value returned taken either from the config module or from the |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
263 |
registered default. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
264 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
265 |
if not self._initialized: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
266 |
self._update_configs() |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
267 |
if suffix in self._overrides: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
268 |
value = self._overrides[suffix] |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
269 |
elif suffix in self._defaults: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
270 |
value = self._defaults[suffix] |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
271 |
else: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
272 |
raise AttributeError(suffix) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
273 |
setattr(self, suffix, value) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
274 |
return value |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
275 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
276 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
277 |
_default_registry = LibConfigRegistry(DEFAULT_MODNAME) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
278 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
279 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
280 |
def register(prefix, mapping): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
281 |
"""Register a set of configurations with the default config module. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
282 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
283 |
Args: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
284 |
prefix: A shared prefix for the configuration names being registered. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
285 |
If the prefix doesn't end in '_', that character is appended. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
286 |
mapping: A dict mapping suffix strings to default values. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
287 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
288 |
Returns: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
289 |
A ConfigHandle instance. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
290 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
291 |
return _default_registry.register(prefix, mapping) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
292 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
293 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
294 |
def main(): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
295 |
"""CGI-style request handler to dump the configuration. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
296 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
297 |
Put this in your app.yaml to enable (you can pick any URL): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
298 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
299 |
- url: /lib_config |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
300 |
script: $PYTHON_LIB/google/appengine/api/lib_config.py |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
301 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
302 |
Note: unless you are using the SDK, you must be admin. |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
303 |
""" |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
304 |
if not os.getenv('SERVER_SOFTWARE', '').startswith('Dev'): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
305 |
from google.appengine.api import users |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
306 |
if not users.is_current_user_admin(): |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
307 |
if users.get_current_user() is None: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
308 |
print 'Status: 302' |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
309 |
print 'Location:', users.create_login_url(os.getenv('PATH_INFO', '')) |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
310 |
else: |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
311 |
print 'Status: 403' |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
312 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
313 |
print 'Forbidden' |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
314 |
return |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
315 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
316 |
print 'Content-type: text/plain' |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
317 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
318 |
_default_registry._dump() |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
319 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
320 |
|
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
321 |
if __name__ == '__main__': |
7678f72140e6
Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder.
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
322 |
main() |