def get_vector_result(self, order_params): """ Queries vector data for stats and updates the CSV element for output :param order_params: params to query for :param csv_element: The CSV row to update :return: None """ result_data = None vector_url = VECTOR_TYPE_QUERY.substitute(upper=str(order_params.top), right=str(order_params.right), lower=str(order_params.bottom), left=str(order_params.left)) headers = self.headers.copy() headers[HEADER_CONTENT_TYPE] = CONTENT_TYPE_JSON for i in range(0, NUM_TIMES_TO_TRY): response = None try: request = urllib2.Request(vector_url, None, headers) response = self.opener.open(request) response_data = response.read() result_data = json.loads(response_data, strict=False) self.is_login_successful = True except Exception, e: self.is_login_successful = False QgsMessageLog.instance().logMessage("Unable to hit the vector end point due to: " + str(e) + "; trying " + str(NUM_TIMES_TO_TRY - i - 1) + " more times.", TAG_NAME, level=QgsMessageLog.CRITICAL) if response and self.is_login_successful: return result_data
def get_fk_set(layerName, fkName, skipFirst=1, fids=None, useProvider=False): """ skipFirst: number of initial lines to skip (header lines in excel) """ layer = layer_from_name(layerName) freq = QgsFeatureRequest() if fids is not None: freq.setFilterFids(fids) if not useProvider: feats = [f for f in layer.getFeatures(freq)] else: feats = [f for f in layer.dataProvider().getFeatures(freq)] fkSet = [] for f in feats[skipFirst:]: QgsMessageLog.logMessage( 'FK {}'.format(f.attribute(fkName)), logTag, QgsMessageLog.CRITICAL) fk = f.attribute(fkName) if fk: # Skip NULL ids that may be reported from excel files fkSet.append(fk) return fkSet
def error(msg): QgsMessageLog.logMessage(str(msg), logTag, QgsMessageLog.CRITICAL)
def warn(msg): QgsMessageLog.logMessage(str(msg), logTag) showWarning(str(msg))
def info(msg): QgsMessageLog.logMessage(str(msg), logTag, QgsMessageLog.INFO)
def info(msg): # pragma: no cover QgsMessageLog.logMessage(str(msg), conf.LOG_TAG, QgsMessageLog.INFO)
def error(msg): # pragma: no cover QgsMessageLog.logMessage(str(msg), conf.LOG_TAG, QgsMessageLog.CRITICAL)
def warn(msg): # pragma: no cover QgsMessageLog.logMessage(str(msg), conf.LOG_TAG)
def warn(msg): QgsMessageLog.logMessage(str(msg), conf.LOG_TAG)
def info(msg): QgsMessageLog.logMessage(str(msg), conf.LOG_TAG, QgsMessageLog.INFO)
def error(msg): QgsMessageLog.logMessage(str(msg), conf.LOG_TAG, QgsMessageLog.CRITICAL)
def register_function(function, arg_count, group, usesgeometry=False, referenced_columns=[QgsFeatureRequest.ALL_ATTRIBUTES], **kwargs): """ Register a Python function to be used as a expression function. Functions should take (values, feature, parent) as args: Example: def myfunc(values, feature, parent): pass They can also shortcut naming feature and parent args by using *args if they are not needed in the function. Example: def myfunc(values, *args): pass Functions should return a value compatible with QVariant Eval errors can be raised using parent.setEvalErrorString("Error message") :param function: :param arg_count: :param group: :param usesgeometry: :return: """ class QgsPyExpressionFunction(QgsExpressionFunction): def __init__(self, func, name, args, group, helptext='', usesGeometry=True, referencedColumns=QgsFeatureRequest.ALL_ATTRIBUTES, expandargs=False): QgsExpressionFunction.__init__(self, name, args, group, helptext) self.function = func self.expandargs = expandargs self.uses_geometry = usesGeometry self.referenced_columns = referencedColumns def func(self, values, context, parent, node): feature = None if context: feature = context.feature() try: if self.expandargs: values.append(feature) values.append(parent) if inspect.getargspec(self.function).args[-1] == 'context': values.append(context) return self.function(*values) else: if inspect.getargspec(self.function).args[-1] == 'context': self.function(values, feature, parent, context) return self.function(values, feature, parent) except Exception as ex: parent.setEvalErrorString(str(ex)) return None def usesGeometry(self, node): return self.uses_geometry def referencedColumns(self, node): return self.referenced_columns helptemplate = string.Template("""<h3>$name function</h3><br>$doc""") name = kwargs.get('name', function.__name__) helptext = kwargs.get('helpText') or function.__doc__ or '' helptext = helptext.strip() expandargs = False if arg_count == "auto": # Work out the number of args we need. # Number of function args - 2. The last two args are always feature, parent. args = inspect.getargspec(function).args number = len(args) arg_count = number - 2 if args[-1] == 'context': arg_count -= 1 expandargs = True register = kwargs.get('register', True) if register and QgsExpression.isFunctionName(name): if not QgsExpression.unregisterFunction(name): msgtitle = QCoreApplication.translate("UserExpressions", "User expressions") msg = QCoreApplication.translate("UserExpressions", "The user expression {0} already exists and could not be unregistered.").format( name) QgsMessageLog.logMessage(msg + "\n", msgtitle, Qgis.Warning) return None function.__name__ = name helptext = helptemplate.safe_substitute(name=name, doc=helptext) f = QgsPyExpressionFunction(function, name, arg_count, group, helptext, usesgeometry, referenced_columns, expandargs) # This doesn't really make any sense here but does when used from a decorator context # so it can stay. if register: QgsExpression.registerFunction(f) return f