HCE Project Python language Distributed Tasks Manager Application, Distributed Crawler Application and client API bindings.  2.0.0-chaika
Hierarchical Cluster Engine Python language binding
DTMAObjectsFiller.py
Go to the documentation of this file.
1 '''
2 Created on Mar 26, 2014
3 
4 @package: dtm
5 @author: scorp
6 @link: http://hierarchical-cluster-engine.com/
7 @copyright: Copyright © 2013-2014 IOIX Ukraine
8 @license: http://hierarchical-cluster-engine.com/license/
9 @since: 0.1
10 '''
11 
12 import logging
13 import json
14 import Constants as CONSTANTS
15 import DTMAExceptions
16 import dtm.EventObjects
17 import app.Consts as APP_CONSTS
18 
19 # Logger initialization
20 logger = logging.getLogger(APP_CONSTS.LOGGER_NAME)
21 
22 
24 class DTMAObjectsFiller(object):
25 
26 
27  def __init__(self):
28  pass
29 
30 
31  def generateStatObjects(self, fields, classes):
32  ret = []
33  names = []
34  filedsList = []
35  fieldsDict = {}
36  if fields != None and len(fields) > 0:
37  filedsList = fields.split(CONSTANTS.FIELDS_SEPARATOR)
38  for field in filedsList:
39  if len(field) > 0:
40  fieldPair = field.split(CONSTANTS.NAME_VALUE_SEPARATOR)
41  if len(fieldPair) >= 1:
42  fieldsDict[fieldPair[0]] = None
43  if len(classes) > 0:
44  names = classes.split(CONSTANTS.FIELDS_SEPARATOR)
45  for name in names:
46  ret.append(dtm.EventObjects.AdminStatData(name, fieldsDict))
47  else:
48  raise DTMAExceptions.DTMAEmptyClasses("DTMAEmptyClasses [STAT]")
49  return ret
50 
51 
52  def generateSetObjects(self, fields, classes):
53  ret = []
54  classesList = []
55  filedsList = []
56  fieldsDict = {}
57  if len(fields) > 0:
58  filedsList = fields.split(CONSTANTS.FIELDS_SEPARATOR)
59  for field in filedsList:
60  fieldPair = field.split(CONSTANTS.NAME_VALUE_SEPARATOR)
61  if len(fieldPair) < 2:
62  raise DTMAExceptions.DTMANameValueException("wrong name-value format in --field arg [SET]")
63  else:
64  try:
65  fieldsDict[fieldPair[0]] = eval(fieldPair[1]) # pylint: disable=eval-used
66  except Exception:
67  raise DTMAExceptions.DTMANameValueException("Wrong value type, for string use str('abcd') as value!")
68  if len(classes) > 0:
69  classesList = classes.split(CONSTANTS.FIELDS_SEPARATOR)
70  for name in classesList:
71  ret.append(dtm.EventObjects.AdminConfigVars(name, fieldsDict))
72  else:
73  raise DTMAExceptions.DTMAEmptyClasses("DTMAEmptyClasses [SET]")
74  else:
75  raise DTMAExceptions.DTMAEmptyFields("DTMAEmptyFields [SET]")
76 
77  return ret
78 
79 
80  def generateGetObjects(self, fields, classes):
81  ret = []
82  classesList = []
83  filedsList = []
84  fieldsDict = {}
85  if len(fields) > 0:
86  filedsList = fields.split(CONSTANTS.FIELDS_SEPARATOR)
87  for field in filedsList:
88  if field != None and field != "":
89  fieldsDict[field] = ""
90  if len(classes) > 0:
91  classesList = classes.split(CONSTANTS.FIELDS_SEPARATOR)
92  for name in classesList:
93  ret.append(dtm.EventObjects.AdminConfigVars(name, fieldsDict))
94  else:
95  raise DTMAExceptions.DTMAEmptyClasses("DTMAEmptyClasses [SET]")
96  else:
97  raise DTMAExceptions.DTMAEmptyFields("DTMAEmptyFields [SET]")
98  return ret
99 
100 
101  def generateStopObjects(self, classes):
102  ret = []
103  names = []
104  if len(classes) > 0:
105  names = classes.split(CONSTANTS.FIELDS_SEPARATOR)
106  for name in names:
107  ret.append(dtm.EventObjects.AdminState(name, dtm.EventObjects.AdminState.STATE_SHUTDOWN))
108  else:
109  raise DTMAExceptions.DTMAEmptyClasses("DTMAEmptyFields [Stop]")
110  return ret
111 
112 
113  def generateSuspendObject(self, fields):
114  ret = []
115  if fields is not None:
116  if fields == "1":
117  ret.append(dtm.EventObjects.AdminSuspend(dtm.EventObjects.AdminSuspend.SUSPEND))
118  else:
119  ret.append(dtm.EventObjects.AdminSuspend(dtm.EventObjects.AdminSuspend.RUN))
120  return ret
121 
122 
123  def generateSystemObject(self, fields):
124  ret = []
125  try:
126  dataJson = json.loads(fields)
127  ret.append(dtm.EventObjects.System(dataJson["type"], dataJson["data"]))
128  except Exception:
129  raise DTMAExceptions.DTMAEmptyFields("DTMAEmptyFields [SYSTEM]")
130  return ret
131 
132 
133  def generateSQLCustomObject(self, fields):
134  ret = []
135  try:
136  dataJson = json.loads(fields)
137  ret.append(dtm.EventObjects.CustomRequest(dataJson["id"], dataJson["sql"], None))
138  except Exception:
139  raise DTMAExceptions.DTMAEmptyFields("DTMAEmptyFields [SQL_CUSTOM]")
140  return ret
141 
142 
143 
145  def generateObjectsList(self, cmd, fields, classes):
146  objectList = []
147  if cmd == CONSTANTS.TASKS[0]:
148  objectList = self.generateStatObjects(fields, classes)
149  elif cmd == CONSTANTS.TASKS[1]:
150  objectList = self.generateSetObjects(fields, classes)
151  elif cmd == CONSTANTS.TASKS[2]:
152  objectList = self.generateGetObjects(fields, classes)
153  elif cmd == CONSTANTS.TASKS[3]:
154  objectList = self.generateStopObjects(classes)
155  elif cmd == CONSTANTS.TASKS[4]:
156  objectList = self.generateSuspendObject(fields)
157  elif cmd == CONSTANTS.TASKS[5]:
158  objectList = self.generateSystemObject(fields)
159  elif cmd == CONSTANTS.TASKS[6]:
160  objectList = self.generateSQLCustomObject(fields)
161  return objectList
def generateObjectsList(self, cmd, fields, classes)
generateObjectsList method represents main income point of user call.
def generateStatObjects(self, fields, classes)
AdminConfigVars event object, for admin set or get config variables from any of threaded classes or a...
AvailableTaskIds event object, for return all available task id.
DTMCObjectsFiller Class contents serialize/deserialize methods for incoming "DTMA" commands...
AdminState event object, for admin manage change application state commands, like shutdown...
AdminStatData event object, for admin fetch stat fields and possible data from any threaded classes i...
AdminSuspend event object, for admin suspend command.
def generateGetObjects(self, fields, classes)
DTMAExceptions module keepts DTMA module native exceptions.
def generateSetObjects(self, fields, classes)