weaver.processes.convert

Module Contents

weaver.processes.convert.IO_Select_Type[source]
weaver.processes.convert.WPS_FIELD_MAPPING[source]
weaver.processes.convert.WPS_FIELD_FORMAT = ['formats', 'supported_formats', 'supported_values', 'default'][source]
weaver.processes.convert.DEFAULT_FORMAT[source]
weaver.processes.convert.DEFAULT_FORMAT_MISSING = __DEFAULT_FORMAT_MISSING__[source]
weaver.processes.convert.INPUT_VALUE_TYPE_MAPPING[source]
weaver.processes.convert.LOGGER[source]
weaver.processes.convert.complex2json(data: Union[owslib.wps.ComplexData, Any]) Union[weaver.typedefs.JSON, Any][source]

Obtains the JSON representation of a ComplexData or simply return the unmatched type.

weaver.processes.convert.metadata2json(meta: Union[ANY_Metadata_Type, Any], force: bool = False) Union[weaver.typedefs.JSON, Any][source]

Retrieve metadata information and generate its JSON representation.

Obtains the JSON representation of a OWS_Metadata or pywps.app.Common.Metadata. Otherwise, simply return the unmatched type. If requested, can enforce parsing a dictionary for the corresponding keys.

weaver.processes.convert.ows2json_io(ows_io: OWS_IO_Type) JSON_IO_Type[source]

Converts I/O definition from owslib.wps to JSON.

weaver.processes.convert.ows2json_output_data(output: OWS_Output_Type, process_description: owslib.wps.Process, container: Optional[weaver.typedefs.AnySettingsContainer] = None) weaver.typedefs.JSON[source]

Utility method to convert an owslib.wps process execution output data (result) to JSON.

In the case that a reference output of JSON content-type is specified and that it refers to a file that contains an array list of URL references to simulate a multiple-output, this specific output gets expanded to contain both the original URL reference field and the loaded URL list under data field for easier access from the response body.

Referenced file(s) are fetched in order to store them locally if executed on a remote process, such that they can become accessible as local job result for following reporting or use by other processes in a workflow chain.

If the dataType details is missing from the data output (depending on servers that might omit it), the process_description is employed to retrieve the original description with expected result details.

Parameters
  • output – output with data value or reference according to expected result for the corresponding process.

  • process_description – definition of the process producing the specified output following execution.

  • container – container to retrieve application settings (for request options during file retrieval as needed).

Returns

converted JSON result data and additional metadata as applicable based on data-type and content-type.

weaver.processes.convert._get_multi_json_references(output: OWS_Output_Type, container: Optional[weaver.typedefs.AnySettingsContainer]) Optional[List[weaver.typedefs.JSON]][source]

Obtains the JSON contents of a single output corresponding to multi-file references.

Since WPS standard does not allow to return multiple values for a single output, a lot of process actually return a JSON array containing references to these outputs.

Because the multi-output references are contained within this JSON file, it is not very convenient to retrieve the list of URLs as one always needs to open and read the file to get them. This function goal is to detect this particular format and expand the references to make them quickly available in the job output response.

Returns

Array of HTTP(S) references if the specified output is effectively a JSON containing that, None otherwise.

weaver.processes.convert.get_io_type_category(io_info: ANY_IO_Type) IO_Category_Type[source]

Guesses the applicable I/O type with provided information from any known I/O structure.

weaver.processes.convert._get_cwl_fmt_details(wps_fmt: ANY_Format_Type) Union[Tuple[Tuple[str, str], str, str], Tuple[None, None, None]][source]
weaver.processes.convert._convert_any2cwl_io_complex(cwl_io: CWL_IO_Type, cwl_ns: Dict[str, str], wps_io: Union[JSON_IO_Type, WPS_IO_Type, OWS_IO_Type], io_select: IO_Select_Type) None[source]

Converts the WPS-like I/O definition and defines them inplace into the CWL containers.

Parameters
  • cwl_io – Basic CWL I/O container (only ID needed) where to write conversion results.

  • cwl_ns – Namespaces to gradually update when encountering new format Media-Type definitions.

  • wps_io – Original WPS-like I/O to be converted.

  • io_select – Context of the I/O.

Returns

Nothing. Changed inplace.

weaver.processes.convert.any2cwl_io(wps_io: Union[JSON_IO_Type, WPS_IO_Type, OWS_IO_Type], io_select: IO_Select_Type) Tuple[CWL_IO_Type, Dict[str, str]][source]

Converts a WPS-like I/O from various WPS library representations to CWL corresponding I/O.

Conversion can be accomplished for pywps and owslib objects, as well as their JSON equivalent. Because CWL I/O of type File with format field are namespaced, this is also returned if needed.

Returns

converted I/O and namespace dictionary with corresponding format references as required.

weaver.processes.convert.wps2cwl_requirement(wps_service_url: Union[str, urllib.parse.ParseResult], wps_process_id: str) weaver.typedefs.JSON[source]

Obtains the CWL requirements definition needed for parsing by a remote WPS provider as an Application Package.

weaver.processes.convert.ows2json(wps_process: owslib.wps.Process, wps_service_name: str, wps_service_url: Union[str, urllib.parse.ParseResult], wps_provider_name: Optional[str] = None) Tuple[weaver.typedefs.CWL, weaver.typedefs.JSON][source]

Generates the CWL package and process definitions from a owslib.wps.Process hosted under WPS location.

weaver.processes.convert.xml_wps2cwl(wps_process_response: requests.models.Response, settings: weaver.typedefs.AnySettingsContainer) Tuple[weaver.typedefs.CWL, weaver.typedefs.JSON][source]

Obtains the CWL definition that corresponds to an XML WPS-1 process.

Converts a WPS-1 ProcessDescription XML tree structure to an equivalent WPS-3 Process JSON, and builds the associated CWL package in conformance to weaver.processes.wps_package.CWL_REQUIREMENT_APP_WPS1.

Parameters
  • wps_process_response – Valid response (XML, 200) from a WPS-1 ProcessDescription.

  • settings – Application settings to retrieve additional request options.

weaver.processes.convert.ogcapi2cwl_process(payload: weaver.typedefs.JSON, reference: str) Tuple[weaver.typedefs.CWL, weaver.typedefs.JSON][source]

Generate a CWL for a remote OGC API - Processes description to dispatch Process execution.

Parameters
Returns

Updated CWL package with the reference to the Process.

weaver.processes.convert.is_cwl_file_type(io_info: CWL_IO_Type) bool[source]

Identifies if the provided CWL input/output corresponds to one, many or potentially a File type(s).

When multiple distinct atomic types are allowed for a given I/O (e.g.: [string, File]) and that one of them is a File, the result will be True even if other types are not Files. Potential File when other base type is "null" will also return True.

weaver.processes.convert.is_cwl_array_type(io_info: CWL_IO_Type, strict: bool = True) Tuple[bool, str, pywps.validator.mode.MODE, Optional[Union[Type[pywps.inout.literaltypes.AnyValue], weaver.typedefs.CWL_IO_EnumSymbols]]][source]

Verifies if the specified I/O corresponds to one of various CWL array type definitions.

Parameters
  • io_infoCWL I/O definition to parse.

  • strict – Indicates if only pure CWL definition is allowed, or allow implicit data-type conversions.

Returns

tuple(is_array, io_type, io_mode, io_allow) where: - is_array: specifies if the I/O is of array type. - io_type: array element type if is_array is True, type of io_info otherwise. - io_mode: validation mode to be applied if sub-element requires it, defaults to MODE.NONE. - io_allow: validation values to be applied if sub-element requires it, defaults to AnyValue.

Raises

PackageTypeError – if the array element doesn’t have the required values and valid format.

weaver.processes.convert.is_cwl_enum_type(io_info: CWL_IO_Type) Tuple[bool, str, int, Optional[weaver.typedefs.CWL_IO_EnumSymbols]][source]

Verifies if the specified I/O corresponds to a CWL enum definition.

Returns

tuple(is_enum, io_type, io_allow) where: - is_enum: specifies if the I/O is of enum type. - io_type: enum base type if is_enum=True, type of io_info otherwise. - io_mode: validation mode to be applied if input requires it, defaults to MODE.NONE. - io_allow: validation values of the enum.

Raises

PackageTypeError – if the enum doesn’t have the required parameters and valid format.

class weaver.processes.convert.CWLIODefinition[source]

Utility CWL I/O definition to contain metadata from parsing results.

name :str =[source]
type :Union[CWL_IO_LiteralType, CWL_IO_ComplexType][source]
null :bool = False[source]
min_occurs :int = 1[source]
max_occurs :int = 1[source]
array :bool = False[source]
enum :bool = False[source]
symbols :Union[CWL_IO_EnumSymbols, AnyValue][source]
mode :pywps.validator.mode.MODE[source]
weaver.processes.convert.get_cwl_io_type(io_info: CWL_IO_Type, strict: bool = True) CWLIODefinition[source]

Obtains the basic type of the CWL input and identity if it is optional.

CWL allows multiple shorthand representation or combined types definition. The base type must be extracted in order to identify the expected data format and supported values.

Obtains real type if "default" or shorthand "<type>?" was in CWL, which can also be defined as type ["null", <type>].

CWL allows multiple distinct types (e.g.: string and int simultaneously), but not WPS inputs. WPS allows only different amount of same type through minOccurs and maxOccurs. Considering WPS conversion, we can also have following definition ["null", <type>, <array-type>] (same type). Whether single or array-like type, the base type can be extracted.

Parameters
  • io_infoCWL definition to parse.

  • strict – Indicates if only pure CWL definition is allowed, or allow implicit data-type conversions.

Returns

tuple of guessed base type and flag indicating if it can be null (optional input).

weaver.processes.convert.cwl2wps_io(io_info: CWL_IO_Type, io_select: IO_Select_Type) WPS_IO_Type[source]

Converts input/output parameters from CWL types to WPS types.

Parameters
  • io_info – parsed IO of a CWL file

  • io_selectWPS_INPUT or WPS_OUTPUT to specify desired WPS type conversion.

Returns

corresponding IO in WPS format

weaver.processes.convert.cwl2json_input_values(data: Dict[str, weaver.typedefs.CWL_IO_Value], schema: weaver.processes.constants.ProcessSchemaType = ProcessSchema.OGC) weaver.typedefs.ExecutionInputs[source]

Converts CWL formatted Job inputs to corresponding OGC API - Processes format.

Parameters
  • data – dictionary with inputs formatted as key-value pairs with relevant structure based on CWL types.

  • schema – either OGC or OLD format respectively for mapping/listing representations.

Raises
  • TypeError – if input data is invalid.

  • ValueError – if any input value could not be parsed with expected schema.

Returns

converted inputs for Job submission either in OGC or OLD format.

weaver.processes.convert.convert_input_values_schema(inputs: weaver.typedefs.ExecutionInputs, schema: weaver.wps_restapi.constants.JobInputsOutputsSchemaType) weaver.typedefs.ExecutionInputs[source]

Convert execution input values between equivalent formats.

Parameters
  • inputs – Inputs to convert.

  • schema – Desired schema.

Returns

Converted inputs.

weaver.processes.convert.convert_output_params_schema(outputs: weaver.typedefs.ExecutionOutputs, schema: weaver.wps_restapi.constants.JobInputsOutputsSchemaType) weaver.typedefs.ExecutionOutputs[source]

Convert execution output parameters between equivalent formats.

Warning

These outputs are not values (i.e.: results), but submitted Job outputs for return definitions. Contents are transferred as-is without any consideration of value or href fields.

Parameters
  • outputs – Outputs to convert.

  • schema – Desired schema.

Returns

Converted outputs.

weaver.processes.convert.repr2json_input_params(value: str, converter: Optional[Callable[[str], Any]] = None) DataInputType[source]

Extracts and converts the value and its associated parameters from a KVP string representation.

This function only interprets a pre-extracted single-value definition (i.e.: without the input ID) from a parent KVP string.

See also

Use repr2json_input_values() For parsing multi-value arrays and the full KVP including the ID.

Parameters
  • value – String representation of the value to be interpreted.

  • converter – Conversion function of the value after parsing.

Returns

Converted value and additional parameters if applicable.

weaver.processes.convert.repr2json_input_values(inputs: List[str]) weaver.typedefs.ExecutionInputsList[source]

Converts inputs in string KVP representation to corresponding JSON values.

Expected format of the input is as follows:

input_id[:input_type]=input_value[@input_parameter][;input_array[@input_parameter]][;...]
Where:
  • input_id represents the target identifier of the input

  • input_type represents the conversion type, as required (includes File for href instead of value key in resulting object)

  • input_value represents the desired value subject to conversion by input_type

  • input_array represents any additional values for array-like inputs (maxOccurs > 1)

  • input_parameter represents additional KVP details associated to each input_value/input_array part (i.e.: per array element if applicable)

The separator character for representing array-like values is ; because the full KVP (already split into a list as argument to this function), could be formed of multiple comma (,) or ampersand (&) separated input definitions, depending on where the definition came from (e.g.: URI).

The input_parameter portion can combine multiple parameters each separated by @ and themselves formed with KVP representation of the corresponding parameter names and values. Parameter names do not need to be consistent between distinct array elements. For example, a multi-parameters input could be formatted as follows:

input_id=item_value1@param1=value1@param2=value2;item_value2@other1=value1

Note

  • Any character that matches one of the separators that should be interpreted literally should be URL-encoded.

  • Single (') and double (") quotes are removed if they delimit a File reference.

Parameters

inputs – list of string inputs to parse.

Returns

parsed inputs if successful.

weaver.processes.convert.any2cwl_literal_datatype(io_type: str) Union[str, Type[weaver.utils.null]][source]

Solves common literal data-type names to supported ones for CWL.

weaver.processes.convert.any2wps_literal_datatype(io_type: weaver.typedefs.AnyValueType, is_value: bool = False, pywps: bool = False) Union[str, Type[weaver.utils.null]][source]

Solves common literal data-type names to supported ones for WPS.

Verification is accomplished by name when is_value=False, otherwise with python type when is_value=True.

Parameters
  • io_type – Type to convert to WPS supported literal data type.

  • is_value – If enabled, consider io_type literal data itself to attempt detection of the type.

  • pywps – If enabled, restrict only to types supported by pywps (subset of full WPS).

weaver.processes.convert.any2json_literal_allowed_value(io_allow: Union[pywps.inout.literaltypes.AllowedValue, weaver.typedefs.JSON, str, float, int, bool]) Union[weaver.typedefs.JSON, str, str, float, int, bool, Type[weaver.utils.null]][source]

Converts an AllowedValues definition from different packages into standardized JSON representation of OGC-API.

weaver.processes.convert.any2json_literal_data_domains(io_info: ANY_IO_Type) Union[Type[weaver.utils.null], List[weaver.typedefs.JSON]][source]

Extracts allowed value constrains from the input definition and generate the expected literal data domains.

The generated result, if applicable, corresponds to a list of a single instance of schema definition weaver.wps_restapi.swagger_definitions.LiteralDataDomainList with following structure.

default: bool
defaultValue: float, int, bool, str
dataType: {name: string, <reference: url: string>}
uom: string
valueDefinition:
  oneOf:
  - string
  - url-string
  - {anyValue: bool}
  - [float, int, bool, str]
  - [{minimum: number/none, maximum: number/none, spacing: number/none, closure: str open/close variations}]
weaver.processes.convert.json2oas_io_complex(io_info: JSON_IO_Type, io_hint: Union[weaver.typedefs.OpenAPISchema, Type[weaver.utils.null]] = null) weaver.typedefs.OpenAPISchema[source]

Convert a single-dimension complex JSON I/O definition into corresponding OpenAPI schema.

weaver.processes.convert.json2oas_io_bbox(io_info: JSON_IO_Type, io_hint: Union[weaver.typedefs.OpenAPISchema, Type[weaver.utils.null]] = null) weaver.typedefs.OpenAPISchema[source]

Convert a single-dimension bounding box JSON I/O definition into corresponding OpenAPI schema.

weaver.processes.convert.json2oas_io_literal_data_type(io_type: str) weaver.typedefs.JSON[source]

Converts various literal data types into corresponding OpenAPI fields.

weaver.processes.convert.json2oas_io_allowed_values(io_base: weaver.typedefs.JSON, io_allowed: weaver.typedefs.JSON) List[weaver.typedefs.JSON][source]

Converts literal data allowed values JSON definitions ino OpenAPI equivalent variations.

Parameters
  • io_base – Base value definitions that can be shared across variations (e.g.: default values).

  • io_allowed – Allowed values definitions (enum, ranges) extracted from JSON literal data domains.

Returns

List of converted OpenAPI definitions applicable to represent the allowed values.

weaver.processes.convert.json2oas_io_literal(io_info: JSON_IO_Type, io_hint: Union[weaver.typedefs.OpenAPISchema, Type[weaver.utils.null]] = null) weaver.typedefs.OpenAPISchema[source]

Convert a single-dimension literal value JSON I/O definition into corresponding OpenAPI schema.

weaver.processes.convert.json2oas_io(io_info: JSON_IO_Type, io_hint: Union[weaver.typedefs.OpenAPISchema, Type[weaver.utils.null]] = null) weaver.typedefs.OpenAPISchema[source]

Converts definitions from a JSON Process I/O definition into corresponding OpenAPI schema.

Parameters
  • io_infoWPS I/O definition to generate a corresponding OpenAPI schema.

  • io_hint – Reference OpenAPI definition that can improve more explicit object definitions.

weaver.processes.convert.oas2json_io_literal(io_info: weaver.typedefs.OpenAPISchemaProperty) Union[JSON_IO_TypedInfo, Type[weaver.utils.null]][source]

Converts a literal value I/O definition by OpenAPI schema into the equivalent JSON representation.

Parameters

io_infoOpenAPI schema of the I/O.

Returns

Converted JSON I/O definition, or null if definition could not be resolved.

weaver.processes.convert.oas2json_io_array(io_info: weaver.typedefs.OpenAPISchemaArray) Union[JSON_IO_TypedInfo, Type[weaver.utils.null]][source]

Converts an array I/O definition by OpenAPI schema into the equivalent JSON representation.

Parameters

io_infoOpenAPI schema of the I/O.

Returns

Converted JSON I/O definition, or null if definition could not be resolved.

weaver.processes.convert.oas2json_io_object(io_info: weaver.typedefs.OpenAPISchemaObject, io_href: str = null) Union[JSON_IO_TypedInfo, Type[weaver.utils.null]][source]

Converts an object I/O definition by OpenAPI schema into the equivalent JSON representation.

An explicit OpenAPI schema with object type can represent any of the following I/O:

  • Bounding Box as GeoJSON feature

  • Complex JSON structure

See also

oas2json_io_file() is used for file reference to be parsed as other Complex I/O.

Parameters
  • io_infoOpenAPI schema of the I/O.

  • io_href – Alternate schema reference for the type.

Returns

Converted JSON I/O definition, or null if definition could not be resolved.

weaver.processes.convert.oas2json_io_keyword(io_info: weaver.typedefs.OpenAPISchemaKeyword) Union[JSON_IO_TypedInfo, Type[weaver.utils.null]][source]

Converts a keyword I/O definition by OpenAPI schema into the equivalent JSON representation.

Keywords are defined as a list of combinations of OpenAPI schema representing how to combine them according to the keyword value, being one of OAS_KEYWORD_TYPES.

Parameters

io_infoOpenAPI schema of the I/O.

Returns

Converted JSON I/O definition, or null if definition could not be resolved.

weaver.processes.convert.oas2json_io_file(io_info: weaver.typedefs.OpenAPISchemaObject, io_href: str = null) JSON_IO_TypedInfo[source]

Converts a file reference I/O definition by OpenAPI schema into the equivalent JSON representation.

Parameters
  • io_infoOpenAPI schema of the I/O.

  • io_href – Alternate schema reference for the type.

Returns

Converted JSON I/O definition, or null if definition could not be resolved.

weaver.processes.convert.oas2json_io_measure(io_info: weaver.typedefs.OpenAPISchemaObject) Union[JSON_IO_TypedInfo, Type[weaver.utils.null]][source]

Convert an unit of measure (UoM) I/O definition by OpenAPI schema into JSON representation.

This conversion projects an object (normally complex type) into a literal type, considering that other provided parameters are all metadata information.

Parameters

io_info – Potential OpenAPI schema of an UoM I/O.

Returns

Converted I/O if it matched the UoM format, or null otherwise.

weaver.processes.convert.oas2json_io(io_info: weaver.typedefs.OpenAPISchema) Union[JSON_IO_TypedInfo, Type[weaver.utils.null]][source]

Converts an I/O definition by OpenAPI schema into the equivalent JSON representation.

Parameters

io_infoOpenAPI schema of the I/O.

Returns

Converted JSON I/O definition, or null if definition could not be resolved.

weaver.processes.convert.oas_resolve_remote(io_info: weaver.typedefs.OpenAPISchema) weaver.typedefs.OpenAPISchema[source]

Perform remote OpenAPI schema $ref resolution.

Resolution is performed only sufficiently to provide enough context for following JSON I/O conversion. Remote references are not resolved further than required to speedup loading time and avoid recursive error on self-referring schema. Passed sufficient levels of schema definitions, the specific contents is not important nor needs to be resolved as there is they cannot be mapped to anything else than WPS_COMPLEX I/O type.

Parameters

io_info – I/O OpenAPI schema to attempt resolution as applicable.

Returns

Resolved I/O schema or directly the provided schema returned unmodified if no references need resolution.

weaver.processes.convert.json2wps_datatype(io_info: JSON_IO_Type) str[source]

Converts a JSON input definition into the corresponding pywps parameters.

Guesses the literal data-type from I/O JSON information in order to allow creation of the corresponding I/O WPS. Defaults to string if no suitable guess can be accomplished.

weaver.processes.convert.json2wps_field(field_info: weaver.typedefs.JSON, field_category: str) Any[source]

Converts an I/O field from a JSON literal data, list, or dictionary to corresponding WPS types.

Parameters
  • field_info – literal data or information container describing the type to be generated.

  • field_category – one of WPS_FIELD_MAPPING keys to indicate how to parse field_info.

weaver.processes.convert.json2wps_allowed_values(io_info: JSON_IO_Type) Union[Type[weaver.utils.null], List[pywps.inout.literaltypes.AllowedValue]][source]

Obtains the allowed values constrains for the literal data type from a JSON I/O definition.

Converts the literalDataDomains definition into allowed_values understood by pywps. Handles explicit allowed_values if available and not previously defined by literalDataDomains.

See also

Function any2json_literal_data_domains() defines generated literalDataDomains JSON definition.

weaver.processes.convert.json2wps_io(io_info: JSON_IO_Type, io_select: IO_Select_Type) WPS_IO_Type[source]

Converts an I/O from a JSON dict to PyWPS types.

Parameters
  • io_info – I/O in JSON dict format.

  • io_selectWPS_INPUT or WPS_OUTPUT to specify desired WPS type conversion.

Returns

corresponding I/O in WPS format.

weaver.processes.convert.wps2json_io(io_wps: WPS_IO_Type, forced_fields: bool = False) JSON_IO_Type[source]

Converts a pywps I/O into a JSON dictionary with corresponding standard keys names (WPS 2.0).

Parameters
  • io_wps – Any pywps I/O definition to be converted to JSON representation.

  • forced_fields – Request transfer of additional fields normally undefined for outputs if they are available by being forcefully inserted in the objects after their creation (i.e.: using set_field()). These fields can be useful for obtaining mandatory details for further processing operations (e.g.: OpenAPI schema conversion).

weaver.processes.convert.wps2json_job_payload(wps_request: pywps.app.WPSRequest, wps_process: pywps.Process) weaver.typedefs.JSON[source]

Converts the input and output values of a pywps WPS Execute request to corresponding WPS-REST job.

The inputs and outputs must be parsed from XML POST payload or KVP GET query parameters, and converted to data container defined by pywps based on the process definition.

weaver.processes.convert.get_field(io_object: Union[weaver.typedefs.JSON, object], field: str, search_variations: bool = False, only_variations: bool = False, pop_found: bool = False, key: bool = False, default: Any = null) Any[source]

Gets a field by name from various I/O object types.

Default value is null used for most situations to differentiate from literal None which is often used as default for parameters. The NullType allows to explicitly tell that there was ‘no field’ and not ‘no value’ in existing field. If you provided another value, it will be returned if not found within the input object.

When search_variation is enabled and that field could not be found within the object, field lookup will employ the values under the field entry within WPS_FIELD_MAPPING as additional field names to search for an existing property or key. Search continues until the first match is found, respecting order within the variations listing, and finally uses default if no match was found.

Parameters
  • io_object – Any I/O representation, either as a class instance or JSON container.

  • field – Name of the field to look for, either as property or key name based on input object type.

  • search_variations – If enabled, search for all variations to the field name to attempt search until matched.

  • only_variations – If enabled, skip the first ‘basic’ field and start search directly with field variations.

  • pop_found – If enabled, whenever a match is found by field or variations, remove that entry from the object.

  • key – If enabled, whenever a match is found by field or variations, return matched key instead of the value.

  • default – Alternative default value to return if no match could be found.

Returns

Matched value (including search variations if enabled), or default.

weaver.processes.convert.set_field(io_object: Union[weaver.typedefs.JSON, object], field: str, value: Any, force: bool = False) None[source]

Sets a field by name into various I/O object types.

Field value is set only if not null to avoid inserting data considered invalid. If force=True, verification of null value is ignored.

weaver.processes.convert._are_different_and_set(item1: Any, item2: Any) bool[source]

Verifies if two items are set and are different of different “representative” value.

Compares two value representations and returns True only if both are not null, are of same type and of different representative value. By “representative”, we consider here the visual representation of byte/unicode strings rather than literal values to support XML/JSON and Python 2/3 implementations. Other non string-like types are verified with literal (usual) equality method.

weaver.processes.convert.is_equal_formats(format1: Union[pywps.inout.formats.Format, weaver.typedefs.JSON], format2: Union[pywps.inout.formats.Format, weaver.typedefs.JSON]) bool[source]

Verifies for matching formats.

weaver.processes.convert.normalize_ordered_io(io_section: JSON_IO_ListOrMap, order_hints: Optional[JSON_IO_ListOrMap] = None) List[weaver.typedefs.JSON][source]

Reorders and converts I/O from any representation (dict or list) considering given ordering hints.

First, converts I/O definitions defined as dictionary to an equivalent list representation, in order to work only with a single representation method. The list is chosen over dict because sequences can enforce a specific order, while mapping (when saved as JSON or YAML) have no specific order. The list representation ensures that I/O order is preserved when written to file and reloaded afterwards regardless of server and/or library’s implementation of the mapping container.

If this function fails to correctly order any I/O or cannot correctly guarantee such result because of the provided parameters (e.g.: no hints given when required), the result will not break nor change the final processing behaviour of parsers. This is merely cosmetic adjustments to ease readability of I/O to avoid always shuffling their order across multiple Application Package and Process reporting formats.

The important result of this function is to provide the I/O as a consistent list of objects so it is less cumbersome to compare/merge/iterate over the elements with all functions that will follow.

Note

When defined as a dictionary, an OrderedDict is expected as input to ensure preserved field order. Prior to Python 3.7 or CPython 3.5, preserved order is not guaranteed for builtin dict. In this case the order_hints is required to ensure same order.

Parameters
  • io_section – Definition contained under the inputs or outputs fields.

  • order_hints – Optional/partial I/O definitions hinting an order to sort unsorted-dict I/O.

Returns

I/O specified as list of dictionary definitions with preserved order (as best as possible).

weaver.processes.convert.merge_io_formats(wps_formats: List[ANY_Format_Type], cwl_formats: List[ANY_Format_Type]) List[ANY_Format_Type][source]

Merges I/O format definitions by matching mime-type field.

In case of conflict, preserve the WPS version which can be more detailed (for example, by specifying encoding).

Verifies if DEFAULT_FORMAT_MISSING was written to a single CWL format caused by a lack of any value provided as input. In this case, only WPS formats are kept.

In the event that DEFAULT_FORMAT_MISSING was written to the CWL formats and that no WPS format was specified, the DEFAULT_FORMAT is returned.

Raises

PackageTypeError – if inputs are invalid format lists

weaver.processes.convert.merge_io_fields(wps_io: WPS_IO_Type, cwl_io: WPS_IO_Type) WPS_IO_Type[source]

Combines corresponding I/O fields from WPS and CWL definitions.

See also

cwl2wps_io() for conversion of CWL to WPS representation.

Parameters
  • wps_io – Original WPS I/O provided in the process definition during deployment.

  • cwl_io – Converted CWL I/O into WPS representation for matching similar details.

Returns

Merged I/O definition.

weaver.processes.convert.merge_package_io(wps_io_list: List[ANY_IO_Type], cwl_io_list: List[WPS_IO_Type], io_select: IO_Select_Type) List[JSON_IO_Type][source]

Merges corresponding parameters of different I/O definition sources (CWL, OpenAPI and WPS).

Update I/O definitions to use for Process creation and returned by GetCapabilities/DescribeProcess. If WPS I/O definitions where provided during deployment, update CWL-to-WPS converted I/O with the WPS I/O complementary details. If an OpenAPI schema definition was provided to define the I/O, infer the corresponding WPS I/O details. Then, considering those resolved definitions and any missing information that could be inferred, extend field requirements that can be retrieved from CWL definitions.

Removes any deployment WPS I/O definitions that don’t match any CWL I/O by ID, since they will be of no use for the underlying Application Package. Adds missing deployment WPS I/O definitions using expected CWL I/O IDs.

See also

cwl2wps_io() for conversion of CWL to WPS representation.

Parameters
  • wps_io_list – list of WPS I/O (as json) passed during process deployment.

  • cwl_io_list – list of CWL I/O converted to WPS-like I/O for counter-validation.

  • io_selectWPS_INPUT or WPS_OUTPUT to specify desired WPS type conversion.

Returns

list of updated JSON I/O combing CWL, WPS and OpenAPI specifications.

weaver.processes.convert.check_io_compatible(wps_io: WPS_IO_Type, cwl_io: WPS_IO_Type, io_id: str) None[source]

Validate types to ensure they match categories, otherwise merging will cause more confusion.

For Literal/Complex I/O coming from WPS side, they should be matched exactly with Literal/Complex I/O on the CWL side.

Note

The :term`CWL` I/O in this case is expected to be a pywps converted I/O from the :term`CWL` definition, and not a direct :term`CWL` I/O definition.

Warning

When BoundingBox for WPS, it should be mapped to ComplexInput on CWL side (since no equivalent).

Raises

PackageTypeError – If I/O are not compatible.