3 HCE project, Python bindings, Distributed Tasks Manager application. 4 FieldsSQLExpressionEvaluator Class content main functional of support 5 the SQL_EXPRESSION_FIELDS_UPDATE_CRAWLER and SQL_EXPRESSION_FIELDS_UPDATE_PROCESSOR properties. 8 @file FieldsSQLExpressionEvaluator.py 9 @author Alexander Vybornyh <alexander.hce.cluster@gmail.com> 10 @link: http://hierarchical-cluster-engine.com/ 11 @copyright: Copyright © 2013-2017 IOIX Ukraine 12 @license: http://hierarchical-cluster-engine.com/license/ 29 PROPERTY_WHERE_NAME =
'WHERE' 30 PROPERTY_WHAT_NAME =
'WHAT' 31 PROPERTY_WITH_NAME =
'WITH' 32 PROPERTY_CONDITION_NAME =
'CONDITION' 34 PROPERTY_WHERE_VALUE_RAW =
'RAW' 38 QUERY_TEMPALATE =
"SELECT * from urls_%s WHERE %s" 41 ERROR_MSG_BAD_FORMAT =
"Wrong format of input json: %s" 42 ERROR_MSG_BAD_TYPE =
"Wrong type of parameter '%s'" 43 ERROR_MSG_BAD_DBWRAPPER =
"DBWrapper instance is None" 44 ERROR_MSG_MISSED_PARAMETER =
"Missed parameter '%s'" 45 ERROR_MSG_WRONG_PARAMETER =
"Parameter '%s' has not support value '%s'" 63 if not isinstance(sqlExpression, basestring):
64 raise Exception(ContentEvaluator.ERROR_MSG_BAD_TYPE % ContentEvaluator.PROPERTY_CONDITION_NAME)
67 raise Exception(ContentEvaluator.ERROR_MSG_BAD_DBWRAPPER)
69 logger.debug(
'sqlExpression: %s', str(sqlExpression))
70 sqlQuery = ContentEvaluator.QUERY_TEMPALATE % (str(siteId), str(sqlExpression))
72 logger.debug(
"sqlQuery: " + str(sqlQuery))
73 affectDB = dbWrapper.affect_db
74 dbWrapper.affect_db =
True 77 customResponse = dbWrapper.customRequest(sqlQuery, ContentEvaluator.DB_NAME)
78 except DatabaseException, err:
79 logger.error(
"Bad query: " + str(sqlQuery))
81 dbWrapper.affect_db = affectDB
82 logger.debug(
"customResponse: " + str(customResponse))
84 if customResponse
is not None and len(customResponse) > 0
and len(customResponse[0]) > 0:
87 except Exception, err:
88 logger.error(str(err))
105 propertyObjs = json.loads(propertyString)
107 logger.debug(
"propertyObj: %s",
varDump(propertyObjs))
109 if not isinstance(propertyObjs, list):
110 raise Exception(ContentEvaluator.ERROR_MSG_BAD_FORMAT %
varDump(propertyObjs))
112 for propertyObj
in propertyObjs:
114 if ContentEvaluator.PROPERTY_WHERE_NAME
not in propertyObj:
115 raise Exception(ContentEvaluator.ERROR_MSG_MISSED_PARAMETER % str(ContentEvaluator.PROPERTY_WHERE_NAME))
117 if not isinstance(propertyObj[ContentEvaluator.PROPERTY_WHERE_NAME], basestring):
118 raise Exception(ContentEvaluator.ERROR_MSG_BAD_TYPE % ContentEvaluator.PROPERTY_WHERE_NAME)
120 if ContentEvaluator.PROPERTY_WHAT_NAME
not in propertyObj:
121 raise Exception(ContentEvaluator.ERROR_MSG_MISSED_PARAMETER % str(ContentEvaluator.PROPERTY_WHAT_NAME))
123 if not isinstance(propertyObj[ContentEvaluator.PROPERTY_WHAT_NAME], basestring):
124 raise Exception(ContentEvaluator.ERROR_MSG_BAD_TYPE % ContentEvaluator.PROPERTY_WHAT_NAME)
126 if ContentEvaluator.PROPERTY_WITH_NAME
not in propertyObj:
127 raise Exception(ContentEvaluator.ERROR_MSG_MISSED_PARAMETER % str(ContentEvaluator.PROPERTY_WITH_NAME))
129 if not isinstance(propertyObj[ContentEvaluator.PROPERTY_WITH_NAME], basestring):
130 raise Exception(ContentEvaluator.ERROR_MSG_BAD_TYPE % ContentEvaluator.PROPERTY_WITH_NAME)
132 if ContentEvaluator.PROPERTY_CONDITION_NAME
in propertyObj
and \
133 not isinstance(propertyObj[ContentEvaluator.PROPERTY_CONDITION_NAME], basestring):
134 raise Exception(ContentEvaluator.ERROR_MSG_BAD_TYPE % ContentEvaluator.PROPERTY_CONDITION_NAME)
136 if propertyObj[ContentEvaluator.PROPERTY_WHERE_NAME] == ContentEvaluator.PROPERTY_WHERE_VALUE_RAW:
137 ret = ContentEvaluator.executeReplaceRawContent(
140 pattern=propertyObj[ContentEvaluator.PROPERTY_WHAT_NAME],
141 repl=propertyObj[ContentEvaluator.PROPERTY_WITH_NAME],
142 sqlExpression=propertyObj[ContentEvaluator.PROPERTY_CONDITION_NAME],
143 contentData=contentData)
145 raise Exception(ContentEvaluator.ERROR_MSG_WRONG_PARAMETER % \
146 (str(ContentEvaluator.PROPERTY_WHERE_NAME),
147 str(propertyObj[ContentEvaluator.PROPERTY_WHERE_NAME])))
149 except Exception, err:
150 logger.error(str(err))
152 except Exception, err:
153 logger.error(str(err))
172 if sqlExpression ==
"":
173 resSqlExpression =
True 175 resSqlExpression = ContentEvaluator.executeSqlExpression(dbWrapper, siteId, sqlExpression)
177 logger.debug(
"resSqlExpression: %s", str(resSqlExpression))
179 ret = re.sub(pattern, repl, contentData)
181 logger.debug(
"before replace len= %s, after replace len = %s", str(len(contentData)), str(len(ret)))
182 except Exception, err:
183 logger.error(str(err))
def executeReplace(dbWrapper, siteId, propertyString, contentData)
def varDump(obj, stringify=True, strTypeMaxLen=256, strTypeCutSuffix='...', stringifyType=1, ignoreErrors=False, objectsHash=None, depth=0, indent=2, ensure_ascii=False, maxDepth=10)
def executeSqlExpression(dbWrapper, siteId, sqlExpression)
def executeReplaceRawContent(dbWrapper, siteId, pattern, repl, sqlExpression, contentData)