/usr/share/pyshared/sprox/configbase.py is in python-sprox 0.6.4-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | from formencode.validators import Validator
from tw.api import Widget
from sprox.providerselector import ProviderTypeSelector
class ConfigBaseError(Exception):pass
class ConfigBase(object):
"""
Base class for all configurable classes in Sprox.
:Modifiers:
+-----------------------------------+--------------------------------------------+------------------------------+
| Name | Description | Default |
+===================================+============================================+==============================+
| __entity__ (__model__) | Entity used for metadata extraction. | None |
+-----------------------------------+--------------------------------------------+------------------------------+
| __sprox_id_ | Id for use in the widget. | None |
+-----------------------------------+--------------------------------------------+------------------------------+
| __provider_type_selector_type__ | A type for selecting the provider. | ProviderTypeSelector |
+-----------------------------------+--------------------------------------------+------------------------------+
| __field_order__ | A list of ordered field names. | None |
+-----------------------------------+--------------------------------------------+------------------------------+
| __hide_fields__ | Fields marked as hidden. | [] |
+-----------------------------------+--------------------------------------------+------------------------------+
| __add_fields__ | Additional fields to add to the config. | {} |
+-----------------------------------+--------------------------------------------+------------------------------+
| __disable_fields__ | Field marked as disabled. | [] |
+-----------------------------------+--------------------------------------------+------------------------------+
| __omit_fields__ | Fields removed from the field list. | [] |
+-----------------------------------+--------------------------------------------+------------------------------+
| __limit_fields__ | Limit the field list to this. | None |
+-----------------------------------+--------------------------------------------+------------------------------+
| __field_attrs__ | attr parmater to set to the field. | {} |
+-----------------------------------+--------------------------------------------+------------------------------+
| __metadata_type__ | Metadata associated with this config. | None |
+-----------------------------------+--------------------------------------------+------------------------------+
"""
# what object does will this object use for metadata extraction
# model and entity are one in the same
__model__ = __entity__ = None
# this is used by catwalk's validate decorator to lookup the sprocket in the cache
__sprox_id__ = None
#How should we select a provider
__provider_type_selector_type__ = ProviderTypeSelector
# field overrides
__field_order__ = None
__hide_fields__ = None
__disable_fields__ = None
__omit_fields__ = None
__add_fields__ = None
__limit_fields__ = None
__field_attrs__ = None
__metadata_type__ = None
def __init__(self, provider_hint=None, **provider_hints):
#map __model__ to __entity__, this may be deprecated
if self.__entity__ is None and self.__model__ is not None:
self.__entity__ = self.__model__
self.__provider_type_selector__ = self.__provider_type_selector_type__()
self.provider_hint = provider_hint
self.provider_hints = provider_hints
self._do_init_attrs()
def __remove_duplicates(self, l):
l2 = []
for i in l:
if i not in l2 and i is not None:
l2.append(i)
return l2
@property
def __fields__(self):
return self._do_get_fields()
def _do_get_fields(self):
fields = []
if self.__field_order__ is not None:
#this makes sure all the ordered fields bubble to the start of the list
fields.extend(self.__field_order__)
if self.__limit_fields__ is not None:
fields.extend(self.__limit_fields__)
fields.extend(self.__hide_fields__)
fields.extend(self.__add_fields__.keys())
fields = self.__remove_duplicates(fields)
return fields
else:
fields = self.__metadata__.keys()
fields.extend(self.__add_fields__.keys())
fields.extend(self.__hide_fields__)
if self.__field_order__ is not None:
fields = set(fields)
field_order = set(self.__field_order__)
extra_fields = fields.difference(field_order)
fields = self.__field_order__+list(extra_fields)
for field in self.__omit_fields__:
while field in fields:
fields.remove(field)
r = []
for field in fields:
if field not in r and field is not None:
r.append(field)
return r
@property
def __metadata__(self):
if not hasattr(self, '___metadata__'):
if self.__metadata_type__ is None:
raise ConfigBaseError('You must define a __metadata_type__ attribute for this object')
self.___metadata__=self.__metadata_type__(self.__provider__, self.__entity__)
return self.___metadata__
@property
def __provider__(self):
if self.__entity__ is None:
raise ConfigBaseError('You must define a __entity__ attribute for this object')
return self.__provider_type_selector__.get_selector(self.__entity__).get_provider(self.__entity__,
self.provider_hint,
**self.provider_hints)
def _do_init_attrs(self):
if self.__hide_fields__ is None:
self.__hide_fields__ = []
if self.__disable_fields__ is None:
self.__disable_fields__ = []
if self.__omit_fields__ is None:
self.__omit_fields__ = []
if self.__add_fields__ is None:
self.__add_fields__ = {}
if self.__field_attrs__ is None:
self.__field_attrs__ = {}
|