示例#1
0
def _get_config_parser(config_file=almdrlib.constants.DEFAULT_CONFIG_FILE):
    parser = configparser.ConfigParser()
    try:
        read_ok = parser.read(config_file)
        if config_file not in read_ok:
            raise AlmdrlibValueError(f"'{config_file}' doesn't exist")

    except configparser.MissingSectionHeaderError:
        raise ConfigException(f"Invalid format in file {config_file}")
    return parser
示例#2
0
    def serialize(self, kwargs, headers=None):
        if not all(name in kwargs for name in self._required_properties):
            raise AlmdrlibValueError(
                f"'{self._required_properties}' parameters are required. " +
                f"'{kwargs}' were provided.")

        result = {
            k: kwargs.pop(k)
            for k in self._properties.keys() if k in kwargs
        }

        if self.required and not bool(result):
            raise AlmdrlibValueError(
                "At least one the " +
                f"{self._properties.keys()} parameters must be specified.")
        if self._explode:
            kwargs['data'] = json.dumps(result)
        else:
            kwargs['data'] = json.dumps({self._name: result})
    def configure(
            profile=almdrlib.constants.DEFAULT_PROFILE,
            account_id=None,
            access_key_id=None, secret_key=None,
            global_endpoint=None,
            endpoint_map_file=None,
            residency=None):

        if not access_key_id:
            raise AlmdrlibValueError("Missing access_key_id")

        if not secret_key:
            raise AlmdrlibValueError("Missing secret_key")

        parser = _get_config_parser(almdrlib.constants.DEFAULT_CONFIG_FILE)

        try:
            parser.add_section(profile)
        except configparser.DuplicateSectionError:
            # section alread exists.
            pass
        except configparser.ValueError:
            # almdrlib.constants.DEFAULT_PROFILE was passed as the section name
            pass

        parser.set(profile, 'access_key_id', access_key_id)
        parser.set(profile, 'secret_key', secret_key)

        if account_id:
            parser.set(profile, 'account_id', account_id)

        if global_endpoint:
            parser.set(profile, 'global_endpoint', global_endpoint)

        if endpoint_map_file:
            parser.set(profile, 'endpoint_map_file', endpoint_map_file)

        if residency:
            parser.set(profile, 'residency', residency)

        with open(almdrlib.constants.DEFAULT_CONFIG_FILE, 'w') as configfile:
            parser.write(configfile)
示例#4
0
    def serialize(self, headers, kwargs):
        #
        # Get content parameters.
        #
        if OpenAPIKeyWord.CONTENT_TYPE_PARAM in headers:
            content_type = headers[OpenAPIKeyWord.CONTENT_TYPE_PARAM]
            payloadBodyParam = self._content[content_type]
        elif len(self._content) == 1:
            content_type, payloadBodyParam = next(iter(self._content.items()))
            headers[OpenAPIKeyWord.CONTENT_TYPE_PARAM] = content_type
        else:
            raise AlmdrlibValueError(
                f"'{OpenAPIKeyWord.CONTENT_TYPE_PYTHON_PARAM}'" +
                "parameter is required.")

        payloadBodyParam.serialize(kwargs, headers)
示例#5
0
    def _initialize_operations(self):
        self._operations = {}
        for path, path_spec in self.paths.items():
            for method, op_spec in path_spec.items():
                operation_id = op_spec.get(OpenAPIKeyWord.OPERATION_ID)
                summary = op_spec.pop(OpenAPIKeyWord.SUMMARY, "")
                description = op_spec.pop(OpenAPIKeyWord.DESCRIPTION, "")

                if not operation_id:
                    logging.warn(
                        f"'{OpenAPIKeyWord.OPERATION_ID}' not found in: \
                          '[{method}] {path}'"
                    )
                    continue

                if operation_id in self._operations:
                    raise AlmdrlibValueError(f"Duplication {operation_id} \
                                       specified for {self._name} API")

                # Initialize parameters (path, header, query)
                params = [
                    PathParameter(spec=s, session=self._session)
                    for s in op_spec.get(OpenAPIKeyWord.PARAMETERS, [])
                ]

                # Initialize operation's body
                body = self._initalize_request_body(
                        op_spec.pop(OpenAPIKeyWord.REQUEST_BODY, None)
                    )

                # Initialize operation's response
                response = OperationResponse(
                        op_spec.pop(OpenAPIKeyWord.RESPONSES, None)
                    )

                self._operations[operation_id] = Operation(
                    path,
                    params,
                    summary,
                    description,
                    method,
                    op_spec,
                    body,
                    response,
                    session=self._session,
                    server=self._server
                )
示例#6
0
 def validate(self, data):
     try:
         self._validator.validate(data)
     except jsonschema.exceptions.ValidationError as e:
         raise AlmdrlibValueError(
             f"{e.message}. Schema: {json.dumps(e.schema)}")