Package: pykwalify
Version: 1.8.0-2
Severity: important
X-Debbugs-Cc: k...@thevertigo.com

Dear Maintainer,

When attempting to validate the attached YAML minimal with pykwalify(1) against
the OpenAPI schema I noticed the pykwalify(1) binary fails to launch. It raises
a Python exception while trying to find the binary's entry point. This appears
to not be an upstream issue, but probably a problem with the packaging itself.

I am running Ubuntu Mantic, but I tried with the bookwork package pykwalify and
python3-pykwalify and same problem.

Here is how you can reproduce the issue:

$ sudo apt install pykwalify openapi-specification
$ pykwalify --data-file minimal.yaml --schema-file /usr/share/openapi-
specification/schemas/v3.0/schema.yaml
Traceback (most recent call last):
  File "/usr/bin/pykwalify", line 33, in <module>
    sys.exit(load_entry_point('pykwalify==1.8.0', 'console_scripts',
'pykwalify')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/pykwalify/cli.py", line 98, in
cli_entrypoint
    run(parse_cli())
  File "/usr/lib/python3/dist-packages/pykwalify/cli.py", line 85, in run
    c.validate()
  File "/usr/lib/python3/dist-packages/pykwalify/core.py", line 183, in
validate
    self._start_validate(self.source)
  File "/usr/lib/python3/dist-packages/pykwalify/core.py", line 225, in
_start_validate
    root_rule = Rule(schema=self.schema)
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/pykwalify/rule.py", line 66, in __init__
    self.init(schema, "")
  File "/usr/lib/python3/dist-packages/pykwalify/rule.py", line 408, in init
    self.init_type_value(t, rule, path)
  File "/usr/lib/python3/dist-packages/pykwalify/rule.py", line 713, in
init_type_value
    self.type_class = type_class(v)
                      ^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/pykwalify/types.py", line 49, in
type_class
    return _types[type]
           ~~~~~~^^^^^^
KeyError: 'object'


-- System Information:
Debian Release: trixie/sid
  APT prefers mantic-updates
  APT policy: (500, 'mantic-updates'), (500, 'mantic-security'), (500, 
'mantic'), (100, 'mantic-proposed'), (100, 'mantic-backports')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 6.5.0-26-generic (SMP w/16 CPU threads; PREEMPT)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_WARN, TAINT_OOT_MODULE, 
TAINT_UNSIGNED_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages pykwalify depends on:
ii  python3            3.11.4-5
ii  python3-pykwalify  1.8.0-2

pykwalify recommends no packages.

pykwalify suggests no packages.

-- no debconf information
openapi: 3.0.0
info:
  title: Sample API
  description: Optional multiline or single-line description in 
[CommonMark](http://commonmark.org/help/) or HTML.
  version: 0.1.9
servers:
  - url: http://api.example.com/v1
    description: Optional server description, e.g. Main (production) server
  - url: http://staging-api.example.com
    description: Optional server description, e.g. Internal staging server for 
testing
paths:
  /users:
    get:
      summary: Returns a list of users.
      description: Optional extended description in CommonMark or HTML.
      responses:
        '200':    # status code
          description: A JSON array of user names
          content:
            application/json:
              schema: 
                type: array
                items: 
                  type: string
id: https://spec.openapis.org/oas/3.0/schema/2019-04-02
$schema: http://json-schema.org/draft-04/schema#
description: Validation schema for OpenAPI Specification 3.0.X.
type: object
required:
  - openapi
  - info
  - paths
properties:
  openapi:
    type: string
    pattern: ^3\.0\.\d(-.+)?$
  info:
    $ref: '#/definitions/Info'
  externalDocs:
    $ref: '#/definitions/ExternalDocumentation'
  servers:
    type: array
    items:
      $ref: '#/definitions/Server'
  security:
    type: array
    items:
      $ref: '#/definitions/SecurityRequirement'
  tags:
    type: array
    items:
      $ref: '#/definitions/Tag'
    uniqueItems: true
  paths:
    $ref: '#/definitions/Paths'
  components:
    $ref: '#/definitions/Components'
patternProperties:
  '^x-': {}
additionalProperties: false
definitions:
  Reference:
    type: object
    required:
      - $ref
    patternProperties:
      '^\$ref$':
        type: string
        format: uri-reference
  Info:
    type: object
    required:
      - title
      - version
    properties:
      title:
        type: string
      description:
        type: string
      termsOfService:
        type: string
        format: uri-reference
      contact:
        $ref: '#/definitions/Contact'
      license:
        $ref: '#/definitions/License'
      version:
        type: string
    patternProperties:
      '^x-': {}
    additionalProperties: false


  Contact:
    type: object
    properties:
      name:
        type: string
      url:
        type: string
        format: uri-reference
      email:
        type: string
        format: email
    patternProperties:
      '^x-': {}
    additionalProperties: false

  License:
    type: object
    required:
      - name
    properties:
      name:
        type: string
      url:
        type: string
        format: uri-reference
    patternProperties:
      '^x-': {}
    additionalProperties: false

  Server:
    type: object
    required:
      - url
    properties:
      url:
        type: string
      description:
        type: string
      variables:
        type: object
        additionalProperties:
          $ref: '#/definitions/ServerVariable'
    patternProperties:
      '^x-': {}
    additionalProperties: false

  ServerVariable:
    type: object
    required:
      - default
    properties:
      enum:
        type: array
        items:
          type: string
      default:
        type: string
      description:
        type: string
    patternProperties:
      '^x-': {}
    additionalProperties: false

  Components:
    type: object
    properties:
      schemas:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Schema'
              - $ref: '#/definitions/Reference'
      responses:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Response'
      parameters:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Parameter'
      examples:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Example'
      requestBodies:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/RequestBody'
      headers:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Header'
      securitySchemes:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/SecurityScheme'
      links:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Link'
      callbacks:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Callback'
    patternProperties:
      '^x-': {}
    additionalProperties: false

  Schema:
    type: object
    properties:
      title:
        type: string
      multipleOf:
        type: number
        minimum: 0
        exclusiveMinimum: true
      maximum:
        type: number
      exclusiveMaximum:
        type: boolean
        default: false
      minimum:
        type: number
      exclusiveMinimum:
        type: boolean
        default: false
      maxLength:
        type: integer
        minimum: 0
      minLength:
        type: integer
        minimum: 0
        default: 0
      pattern:
        type: string
        format: regex
      maxItems:
        type: integer
        minimum: 0
      minItems:
        type: integer
        minimum: 0
        default: 0
      uniqueItems:
        type: boolean
        default: false
      maxProperties:
        type: integer
        minimum: 0
      minProperties:
        type: integer
        minimum: 0
        default: 0
      required:
        type: array
        items:
          type: string
        minItems: 1
        uniqueItems: true
      enum:
        type: array
        items: {}
        minItems: 1
        uniqueItems: false
      type:
        type: string
        enum:
          - array
          - boolean
          - integer
          - number
          - object
          - string
      not:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      allOf:
        type: array
        items:
          oneOf:
            - $ref: '#/definitions/Schema'
            - $ref: '#/definitions/Reference'
      oneOf:
        type: array
        items:
          oneOf:
            - $ref: '#/definitions/Schema'
            - $ref: '#/definitions/Reference'
      anyOf:
        type: array
        items:
          oneOf:
            - $ref: '#/definitions/Schema'
            - $ref: '#/definitions/Reference'
      items:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      properties:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Schema'
            - $ref: '#/definitions/Reference'
      additionalProperties:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
          - type: boolean
        default: true
      description:
        type: string
      format:
        type: string
      default: {}
      nullable:
        type: boolean
        default: false
      discriminator:
        $ref: '#/definitions/Discriminator'
      readOnly:
        type: boolean
        default: false
      writeOnly:
        type: boolean
        default: false
      example: {}
      externalDocs:
        $ref: '#/definitions/ExternalDocumentation'
      deprecated:
        type: boolean
        default: false
      xml:
        $ref: '#/definitions/XML'
    patternProperties:
      '^x-': {}
    additionalProperties: false

  Discriminator:
    type: object
    required:
      - propertyName
    properties:
      propertyName:
        type: string
      mapping:
        type: object
        additionalProperties:
          type: string

  XML:
    type: object
    properties:
      name:
        type: string
      namespace:
        type: string
        format: uri
      prefix:
        type: string
      attribute:
        type: boolean
        default: false
      wrapped:
        type: boolean
        default: false
    patternProperties:
      '^x-': {}
    additionalProperties: false

  Response:
    type: object
    required:
      - description
    properties:
      description:
        type: string
      headers:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Header'
            - $ref: '#/definitions/Reference'
      content:
        type: object
        additionalProperties:
          $ref: '#/definitions/MediaType'
      links:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Link'
            - $ref: '#/definitions/Reference'
    patternProperties:
      '^x-': {}
    additionalProperties: false

  MediaType:
    type: object
    properties:
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      example: {}
      examples:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Example'
            - $ref: '#/definitions/Reference'
      encoding:
        type: object
        additionalProperties:
          $ref: '#/definitions/Encoding'
    patternProperties:
      '^x-': {}
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ExampleXORExamples'

  Example:
    type: object
    properties:
      summary:
        type: string
      description:
        type: string
      value: {}
      externalValue:
        type: string
        format: uri-reference
    patternProperties:
      '^x-': {}
    additionalProperties: false

  Header:
    type: object
    properties:
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - simple
        default: simple
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      content:
        type: object
        additionalProperties:
          $ref: '#/definitions/MediaType'
        minProperties: 1
        maxProperties: 1
      example: {}
      examples:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Example'
            - $ref: '#/definitions/Reference'
    patternProperties:
      '^x-': {}
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ExampleXORExamples'
      - $ref: '#/definitions/SchemaXORContent'

  Paths:
    type: object
    patternProperties:
      '^\/':
        $ref: '#/definitions/PathItem'
      '^x-': {}
    additionalProperties: false

  PathItem:
    type: object
    properties:
      $ref:
        type: string
      summary:
        type: string
      description:
        type: string
      servers:
        type: array
        items:
          $ref: '#/definitions/Server'
      parameters:
        type: array
        items:
          oneOf:
            - $ref: '#/definitions/Parameter'
            - $ref: '#/definitions/Reference'
        uniqueItems: true
    patternProperties:
      '^(get|put|post|delete|options|head|patch|trace)$':
        $ref: '#/definitions/Operation'
      '^x-': {}
    additionalProperties: false

  Operation:
    type: object
    required:
      - responses
    properties:
      tags:
        type: array
        items:
          type: string
      summary:
        type: string
      description:
        type: string
      externalDocs:
        $ref: '#/definitions/ExternalDocumentation'
      operationId:
        type: string
      parameters:
        type: array
        items:
          oneOf:
            - $ref: '#/definitions/Parameter'
            - $ref: '#/definitions/Reference'
        uniqueItems: true
      requestBody:
        oneOf:
          - $ref: '#/definitions/RequestBody'
          - $ref: '#/definitions/Reference'
      responses:
        $ref: '#/definitions/Responses'
      callbacks:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Callback'
            - $ref: '#/definitions/Reference'
      deprecated:
        type: boolean
        default: false
      security:
        type: array
        items:
          $ref: '#/definitions/SecurityRequirement'
      servers:
        type: array
        items:
          $ref: '#/definitions/Server'
    patternProperties:
      '^x-': {}
    additionalProperties: false

  Responses:
    type: object
    properties:
      default:
        oneOf:
          - $ref: '#/definitions/Response'
          - $ref: '#/definitions/Reference'
    patternProperties:
      '^[1-5](?:\d{2}|XX)$':
        oneOf:
          - $ref: '#/definitions/Response'
          - $ref: '#/definitions/Reference'
      '^x-': {}
    minProperties: 1
    additionalProperties: false


  SecurityRequirement:
    type: object
    additionalProperties:
      type: array
      items:
        type: string

  Tag:
    type: object
    required:
      - name
    properties:
      name:
        type: string
      description:
        type: string
      externalDocs:
        $ref: '#/definitions/ExternalDocumentation'
    patternProperties:
      '^x-': {}
    additionalProperties: false

  ExternalDocumentation:
    type: object
    required:
      - url
    properties:
      description:
        type: string
      url:
        type: string
        format: uri-reference
    patternProperties:
      '^x-': {}
    additionalProperties: false

  ExampleXORExamples:
    description: Example and examples are mutually exclusive
    not:
      required: [example, examples]

  SchemaXORContent:
    description: Schema and content are mutually exclusive, at least one is 
required
    not:
      required: [schema, content]
    oneOf:
      - required: [schema]
      - required: [content]
        description: Some properties are not allowed if content is present
        allOf:
          - not:
              required: [style]
          - not:
              required: [explode]
          - not:
              required: [allowReserved]
          - not:
              required: [example]
          - not:
              required: [examples]

  Parameter:
    type: object
    properties:
      name:
        type: string
      in:
        type: string
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      content:
        type: object
        additionalProperties:
          $ref: '#/definitions/MediaType'
        minProperties: 1
        maxProperties: 1
      example: {}
      examples:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Example'
            - $ref: '#/definitions/Reference'
    patternProperties:
      '^x-': {}
    additionalProperties: false
    required:
      - name
      - in
    allOf:
      - $ref: '#/definitions/ExampleXORExamples'
      - $ref: '#/definitions/SchemaXORContent'
      - $ref: '#/definitions/ParameterLocation'

  ParameterLocation:
    description: Parameter location
    oneOf:
      - description: Parameter in path
        required:
          - required
        properties:
          in:
            enum: [path]
          style:
            enum: [matrix, label, simple]
            default: simple
          required:
            enum: [true]

      - description: Parameter in query
        properties:
          in:
            enum: [query]
          style:
            enum: [form, spaceDelimited, pipeDelimited, deepObject]
            default: form

      - description: Parameter in header
        properties:
          in:
            enum: [header]
          style:
            enum: [simple]
            default: simple

      - description: Parameter in cookie
        properties:
          in:
            enum: [cookie]
          style:
            enum: [form]
            default: form

  RequestBody:
    type: object
    required:
      - content
    properties:
      description:
        type: string
      content:
        type: object
        additionalProperties:
          $ref: '#/definitions/MediaType'
      required:
        type: boolean
        default: false
    patternProperties:
      '^x-': {}
    additionalProperties: false

  SecurityScheme:
    oneOf:
      - $ref: '#/definitions/APIKeySecurityScheme'
      - $ref: '#/definitions/HTTPSecurityScheme'
      - $ref: '#/definitions/OAuth2SecurityScheme'
      - $ref: '#/definitions/OpenIdConnectSecurityScheme'

  APIKeySecurityScheme:
    type: object
    required:
      - type
      - name
      - in
    properties:
      type:
        type: string
        enum:
          - apiKey
      name:
        type: string
      in:
        type: string
        enum:
          - header
          - query
          - cookie
      description:
        type: string
    patternProperties:
      '^x-': {}
    additionalProperties: false

  HTTPSecurityScheme:
    type: object
    required:
      - scheme
      - type
    properties:
      scheme:
        type: string
      bearerFormat:
        type: string
      description:
        type: string
      type:
        type: string
        enum:
          - http
    patternProperties:
      '^x-': {}
    additionalProperties: false
    oneOf:
      - description: Bearer
        properties:
          scheme:
            enum: [bearer]

      - description: Non Bearer
        not:
          required: [bearerFormat]
        properties:
          scheme:
            not:
              enum: [bearer]

  OAuth2SecurityScheme:
    type: object
    required:
      - type
      - flows
    properties:
      type:
        type: string
        enum:
          - oauth2
      flows:
        $ref: '#/definitions/OAuthFlows'
      description:
        type: string
    patternProperties:
      '^x-': {}
    additionalProperties: false

  OpenIdConnectSecurityScheme:
    type: object
    required:
      - type
      - openIdConnectUrl
    properties:
      type:
        type: string
        enum:
          - openIdConnect
      openIdConnectUrl:
        type: string
        format: uri-reference
      description:
        type: string
    patternProperties:
      '^x-': {}
    additionalProperties: false

  OAuthFlows:
    type: object
    properties:
      implicit:
        $ref: '#/definitions/ImplicitOAuthFlow'
      password:
        $ref: '#/definitions/PasswordOAuthFlow'
      clientCredentials:
        $ref: '#/definitions/ClientCredentialsFlow'
      authorizationCode:
        $ref: '#/definitions/AuthorizationCodeOAuthFlow'
    patternProperties:
      '^x-': {}
    additionalProperties: false

  ImplicitOAuthFlow:
    type: object
    required:
      - authorizationUrl
      - scopes
    properties:
      authorizationUrl:
        type: string
        format: uri-reference
      refreshUrl:
        type: string
        format: uri-reference
      scopes:
        type: object
        additionalProperties:
          type: string
    patternProperties:
      '^x-': {}
    additionalProperties: false

  PasswordOAuthFlow:
    type: object
    required:
      - tokenUrl
    properties:
      tokenUrl:
        type: string
        format: uri-reference
      refreshUrl:
        type: string
        format: uri-reference
      scopes:
        type: object
        additionalProperties:
          type: string
    patternProperties:
      '^x-': {}
    additionalProperties: false

  ClientCredentialsFlow:
    type: object
    required:
      - tokenUrl
    properties:
      tokenUrl:
        type: string
        format: uri-reference
      refreshUrl:
        type: string
        format: uri-reference
      scopes:
        type: object
        additionalProperties:
          type: string
    patternProperties:
      '^x-': {}
    additionalProperties: false

  AuthorizationCodeOAuthFlow:
    type: object
    required:
      - authorizationUrl
      - tokenUrl
    properties:
      authorizationUrl:
        type: string
        format: uri-reference
      tokenUrl:
        type: string
        format: uri-reference
      refreshUrl:
        type: string
        format: uri-reference
      scopes:
        type: object
        additionalProperties:
          type: string
    patternProperties:
      '^x-': {}
    additionalProperties: false

  Link:
    type: object
    properties:
      operationId:
        type: string
      operationRef:
        type: string
        format: uri-reference
      parameters:
        type: object
        additionalProperties: {}
      requestBody: {}
      description:
        type: string
      server:
        $ref: '#/definitions/Server'
    patternProperties:
      '^x-': {}
    additionalProperties: false
    not:
      description: Operation Id and Operation Ref are mutually exclusive
      required: [operationId, operationRef]

  Callback:
    type: object
    additionalProperties:
      $ref: '#/definitions/PathItem'
    patternProperties:
      '^x-': {}

  Encoding:
    type: object
    properties:
      contentType:
        type: string
      headers:
        type: object
        additionalProperties:
          $ref: '#/definitions/Header'
      style:
        type: string
        enum:
          - form
          - spaceDelimited
          - pipeDelimited
          - deepObject
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
    additionalProperties: false

Reply via email to