@cryptotaxi247 / netdata-1 / commits / 565c8e395

__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)