def __init__(self, table_path, key_field, value_field, where_clause=None, **kwargs): _vld.raise_if(_vld.is_iterable(value_field), ValueError, '{} expects a single value field: use {} instead'.format(ValueLookup.__name__, RowLookup.__name__)) _vld.pass_if(all(_vld.has_value(v) for v in (table_path, key_field, value_field)), ValueError, '{} requires valid table_path, key_field and value_field arguments') super(ValueLookup, self).__init__(table_path, key_field, value_field, where_clause, **kwargs)
def __init__(self, table_path, key_field, value_fields, where_clause=None, **kwargs): _vld.raise_if(len(value_fields) <= 1, ValueError, '{} expects multiple value fields: use {} instead'.format( RowLookup.__name__, ValueLookup.__name__)) _vld.pass_if(all(_vld.has_value(v) for v in (table_path, key_field, value_fields[0])), ValueError, '{} requires valid table_path, key_field and value_fields arguments') super(RowLookup, self).__init__(table_path, key_field, value_fields, where_clause, **kwargs) self._fieldmap = {name.lower(): i for i, name in enumerate(value_fields)}
def _parse(self): """ Reads the Python arguments specific to GEONIS menu scripts. """ last_m = len(self._mapping) - 1 for i, m in enumerate(self._mapping): try: if m.name == self._PARAM_CONST and i == last_m: # If it's the last mapping for the script parameters, # consume all remaining arguments and call mapping function on each script param. # Note that there can not be more than self._MAX_PARAMS and superfluous parameters are removed. value = self._save_params([ m.func(x, m.default) for x in _sys.argv[i:i + self._MAX_PARAMS] ]) else: # Call mapping function on the current argument value = m.func(_sys.argv[i], m.default) or m.default except IndexError: value = m.default except Exception: raise if m.required and not _vld.has_value(value, True): raise AttributeError( 'Empty or missing required {!r} argument at position {}'. format(m.name, i)) self._store[m.name] = value
def __init__(self, table_path: str, key_field: str, value_fields: _tp.Sequence[str], where_clause: _tp.Union[None, str, _q.Where] = None, **kwargs): _vld.raise_if( len(value_fields) <= 1, ValueError, f'{RowLookup.__name__} expects multiple value fields: use {ValueLookup.__name__} instead' ) _vld.pass_if( all( _vld.has_value(v) for v in (table_path, key_field, value_fields[0])), ValueError, f'{RowLookup.__name__} requires valid table_path, key_field and value_fields arguments' ) # User cannot override row processor function for this class if _ROWFUNC_ARG in kwargs: del kwargs[_ROWFUNC_ARG] self._dupekeys = kwargs.get(_DUPEKEYS_ARG, False) self._rowtype = list if kwargs.get(_MUTABLE_ARG, False) else tuple super(RowLookup, self).__init__(table_path, key_field, value_fields, where_clause, **kwargs) self._fieldmap = { name.lower(): i for i, name in enumerate(value_fields) }
def __str__(self): """ Returns a formatted string of all instance properties (e.g. for logging purposes). :return str: Formatted properties (1 per line). """ # Filter out empty properties and format key-value pairs (1 per line) # Notice that ScriptParameters will have their type name removed, because its __str__ method has been overridden return _const.CHAR_LF.join('{}: {}'.format(_tu.capitalize(k), v) for k, v in self._store.iteritems() if _vld.has_value(v))
def __init__(self, table_path, key_field, value_field, where_clause=None, **kwargs): _vld.raise_if(_vld.is_iterable(value_field), ValueError, '{} expects a single value field: use {} instead'.format(ValueLookup.__name__, RowLookup.__name__)) _vld.pass_if(all(_vld.has_value(v) for v in (table_path, key_field, value_field)), ValueError, '{} requires valid table_path, key_field and value_field arguments'.format(ValueLookup.__name__)) # User cannot override row processor function for this class if _ROWFUNC_ARG in kwargs: del kwargs[_ROWFUNC_ARG] self._dupekeys = kwargs.get(_DUPEKEYS_ARG, False) super(ValueLookup, self).__init__(table_path, key_field, value_field, where_clause, **kwargs)
def find_layer(name, mxd=None, dataframe=None, case_sensitive=False): """ Finds a **single** layer by its (case-insensitive) name in the specified ArcMap document (or current one). If the layer was not found, ``None`` is returned. :param name: Name of the layer to find. If the layer name exists multiple times in different group layers, you can prefix the layer with the group layer name followed by a forward slash (/). :param mxd: The path to the ArcMap Document (MXD) or a MapDocument instance in which to find the layer. If no MXD is specified, the search will take place in the current MXD (if any). :param dataframe: The name of the data frame in which to find the layer. If no data frame is specified and/or there is only 1 data frame, the search will take place in the active data frame. :param case_sensitive: If ``True``, the layer name needs to match exactly. If ``False`` (default), the layer character case is ignored. Note that this setting also affects the *dataframe* argument, when specified. :type name: str, unicode :type mxd: str, unicode, arcpy.mapping.MapDocument :type dataframe: str, unicode :type case_sensitive: bool :rtype: arcpy.mapping.Layer :raises ValueError: If no layer name was specified, or if no map document was found. .. seealso:: https://desktop.arcgis.com/en/arcmap/latest/analyze/arcpy-mapping/layer-class.htm """ # Validation _vld.pass_if(_vld.has_value(name), ValueError, 'Layer name has not been specified') name = _tu.to_unicode(_paths.normalize(name, not case_sensitive)) mxd_ref, df_ref = _get_mxd_df(mxd, dataframe, case_sensitive) # Find the layer by name for lyr in _arcpy.mapping.ListLayers(mxd_ref, data_frame=df_ref): lyr_name = lyr.name if case_sensitive else lyr.name.lower() if lyr_name == name or _paths.normalize(lyr.longName, not case_sensitive) == name: return lyr return None
def test_hasvalue(): assert validate.has_value('') is False assert validate.has_value(None) is False assert validate.has_value([]) is False assert validate.has_value({}) is False assert validate.has_value('a') is True assert validate.has_value(0) is True assert validate.has_value(1) is True assert validate.has_value(3.14) is True assert validate.has_value(' ', True) is False assert validate.has_value(0, True) is True assert validate.has_value(None, True) is False assert validate.has_value('Panaché') is True