__getattr__ in Class, Dimension, ChartVariable proxy in params dict
lgz committed
Oct 22, 2017 at 04:01 UTC
565c8e395cb76c71b68c9b3e3099b1f2356980d7
2 files changed
+47
-17
python.d/python_modules/bases/FrameworkServices/SimpleService.py
+2
-2
@@ -224,7 +224,7 @@ class SimpleService(Thread, PythonDLimitedLogger, OldVersionCompatibility, objec
224
225
for dimension in chart:
226
try:
227
- value = int(data[dimension.params['id']])
227
+ value = int(data[dimension.id])
228
except (KeyError, TypeError):
229
continue
230
else:
@@ -232,7 +232,7 @@ class SimpleService(Thread, PythonDLimitedLogger, OldVersionCompatibility, objec
232
233
for var in chart.variables:
234
try:
235
- value = int(data[var.params['id']])
235
+ value = int(data[var.id])
236
except (KeyError, TypeError):
237
continue
238
else:
python.d/python_modules/bases/charts.py
+45
-15
@@ -89,6 +89,9 @@ class Charts:
89
return iter(self.charts.values())
90
91
def __repr__(self):
92
+ return 'Charts({0})'.format(self)
93
+
94
+ def __str__(self):
95
return str([chart for chart in self.charts])
96
97
def __contains__(self, item):
@@ -130,7 +133,7 @@ class Charts:
133
new_chart.params['update_every'] = self.get_update_every()
134
new_chart.params['priority'] = self.priority
135
self.priority += 1
133
- self.charts[new_chart.params['id']] = new_chart
136
+ self.charts[new_chart.id] = new_chart
137
return new_chart
138
139
@@ -156,17 +159,24 @@ class Chart:
159
self.alive = True
160
self.penalty = 0
161
162
+ def __getattr__(self, item):
163
+ try:
164
+ return self.params[item]
165
+ except KeyError:
166
+ raise AttributeError("'{instance}' has no attribute '{attr}'".format(instance=repr(self),
167
+ attr=item))
168
+
169
def __repr__(self):
160
- return str(self.params)
170
+ return 'Chart({0})'.format(self.id)
171
172
def __str__(self):
163
- return self.params['id']
173
+ return self.id
174
175
def __iter__(self):
176
return iter(self.dimensions)
177
178
def __contains__(self, item):
169
- return item in [repr(d) for d in self.dimensions]
179
+ return item in [dimension.id for dimension in self.dimensions]
180
181
def suppress(self):
182
self.alive = False
@@ -189,8 +199,8 @@ class Chart:
199
"""
200
dim = Dimension(dimension)
201
192
- if dim.params['id'] in self:
193
- raise DuplicateItemError("'{dimension}' already in '{chart}' dimensions".format(dimension=dim.params['id'],
202
+ if dim.id in self:
203
+ raise DuplicateItemError("'{dimension}' already in '{chart}' dimensions".format(dimension=dim.id,
204
chart=self.name))
205
self.dimensions.append(dim)
206
return dim
@@ -212,7 +222,7 @@ class Chart:
222
chart = CHART_CREATE.format(**self.params)
223
if not dimension:
224
dimensions = ''.join([dimension.create() for dimension in self.dimensions])
215
- variables = ''.join([var.set(var.params['value']) for var in self.variables if var])
225
+ variables = ''.join([var.set(var.value) for var in self.variables if var])
226
return chart + dimensions + variables
227
else:
228
dimensions = dimension.create()
@@ -223,8 +233,8 @@ class Chart:
233
:param since_last: <int>: microseconds
234
:return:
235
"""
226
- return CHART_BEGIN.format(type=self.params['type'],
227
- id=self.params['id'],
236
+ return CHART_BEGIN.format(type=self.type,
237
+ id=self.id,
238
since_last=since_last)
239
240
def obsolete(self):
@@ -253,8 +263,18 @@ class Dimension:
263
self.params['divisor'] = 1
264
self.params.setdefault('hidden', '')
265
266
+ def __getattr__(self, item):
267
+ try:
268
+ return self.params[item]
269
+ except KeyError:
270
+ raise AttributeError("'{instance}' has no attribute '{attr}'".format(instance=repr(self),
271
+ attr=item))
272
+
273
def __repr__(self):
257
- return self.params['id']
274
+ return 'Dimension({0})'.format(self.id)
275
+
276
+ def __str__(self):
277
+ return self.id
278
279
def create(self):
280
return DIMENSION_CREATE.format(**self.params)
@@ -264,7 +284,7 @@ class Dimension:
284
:param value: <str>: must be a digit
285
:return:
286
"""
267
- return DIMENSION_SET.format(id=self.params['id'],
287
+ return DIMENSION_SET.format(id=self.id,
288
value=value)
289
290
@@ -282,23 +302,33 @@ class ChartVariable:
302
self.params = dict(zip(VARIABLE_PARAMS, params))
303
self.params.setdefault('value', None)
304
305
+ def __getattr__(self, item):
306
+ try:
307
+ return self.params[item]
308
+ except KeyError:
309
+ raise AttributeError("'{instance}' has no attribute '{attr}'".format(instance=repr(self),
310
+ attr=item))
311
+
312
def __bool__(self):
286
- return self.params['value'] is not None
313
+ return self.value is not None
314
315
def __nonzero__(self):
316
return self.__bool__()
317
318
def __repr__(self):
292
- return 'ChartVariable({0})'.format(self.params['id'])
319
+ return 'ChartVariable({0})'.format(self.id)
320
+
321
+ def __str__(self):
322
+ return self.id
323
324
def __eq__(self, other):
325
if isinstance(other, ChartVariable):
296
- return self.params['id'] == other.params['id']
326
+ return self.id == other.id
327
return False
328
329
def __hash__(self):
330
return hash(repr(self))
331
332
def set(self, value):
303
- return CHART_VARIABLE_SET.format(id=self.params['id'],
333
+ return CHART_VARIABLE_SET.format(id=self.id,
334
value=value)