OpenAPI Spec validator

Overview

OpenAPI Spec validator

https://travis-ci.org/p1c2u/openapi-spec-validator.svg?branch=master https://img.shields.io/codecov/c/github/p1c2u/openapi-spec-validator/master.svg?style=flat

About

OpenAPI Spec Validator is a Python library that validates OpenAPI Specs against the OpenAPI 2.0 (aka Swagger) and OpenAPI 3.0 specification. The validator aims to check for full compliance with the Specification.

Installation

$ pip install openapi-spec-validator

Alternatively you can download the code and install from the repository:

$ pip install -e git+https://github.com/p1c2u/openapi-spec-validator.git#egg=openapi_spec_validator

Usage

Command Line Interface

Straight forward way:

$ openapi-spec-validator openapi.yaml

pipes way:

$ cat openapi.yaml | openapi-spec-validator -

docker way:

$ docker run -v path/to/openapi.yaml:/openapi.yaml --rm p1c2u/openapi-spec-validator /openapi.yaml

or more pythonic way:

$ python -m openapi_spec_validator openapi.yaml

Examples

By default, OpenAPI v3 syntax is expected. To validate an OpenAPI v3 spec:

from openapi_spec_validator import validate_spec
from openapi_spec_validator.readers import read_from_filename

spec_dict, spec_url = read_from_filename('openapi.yaml')

# If no exception is raised by validate_spec(), the spec is valid.
validate_spec(spec_dict)

validate_spec({})

Traceback (most recent call last):
    ...
OpenAPIValidationError: 'openapi' is a required property

In order to validate a Swagger / OpenAPI 2.0 spec file, import validate_v2_spec instead of validate_spec. You can also explicitly import validate_v3_spec if you want to disambiguate the expected version.

Add spec_url to validate spec with relative files:

validate_spec(spec_dict, spec_url='file:///path/to/spec/openapi.yaml')

You can also validate spec from url:

from openapi_spec_validator import validate_spec_url

# If no exception is raised by validate_spec_url(), the spec is valid.
validate_spec_url('http://example.com/openapi.json')

If you want to iterate through validation errors:

from openapi_spec_validator import openapi_v3_spec_validator

errors_iterator = openapi_v3_spec_validator.iter_errors(spec)

Related projects

  • openapi-core
    Python library that adds client-side and server-side support for the OpenAPI.
  • openapi-schema-validator
    Python library that validates schema against the OpenAPI Schema Specification v3.0.

License

Copyright (c) 2017-2021, Artur Maciag, All rights reserved. Apache v2

Comments
  • p1c2u/openapi-core#296: Implements OpenAPI 3.1 spec validator

    p1c2u/openapi-core#296: Implements OpenAPI 3.1 spec validator

    As mentioned in https://github.com/p1c2u/openapi-schema-validator/pull/18 this is the extension for OpenAPI 3.1.

    It is created as draft as it install jsonschema and openapi-schema-validator via GitHub in order to use the latest changes for Draft 2020-12.

    The test cases provided in https://github.com/OAI/OpenAPI-Specification/tree/main/tests/v3.1 are used for the implementation.

    Python 2.7 and 3.5 have been removed from the test matrix as they are end of life.

    I'm open for sugestions if any changes are required in the PR.

    opened by nezhar 14
  • PyYAML dependency does not allow any non-beta versions

    PyYAML dependency does not allow any non-beta versions

    In version 0.2.5 the PyYAML dependency was changed to PyYAML>=4.2b1. Since the latest non-beta version of PyYAML is 3.13, this means that dependency resolution fails if you do not allow beta packages.

    Was this intentional? Looking at https://github.com/yaml/pyyaml/issues/193, the release story for PyYAML is a bit of a mess, but my understanding is that 3.13 was released to add Python 3.7 compatibility and the "should the load function be safe by default" issue will be resolved in an upcoming version 5.

    kind/bug/confirmed 
    opened by leamingrad 12
  • On validation error: add cause and context.

    On validation error: add cause and context.

    I often miss the context provided by jsonschema library, so I'm trying to add it.

    Given the following erroneous schema (it misses a description):

    ---
    openapi: 3.0.0
    
    info:
      title: test
      description: test
      version: 0.0.1
    
    paths:
      "/":
        get:
          description: Get the API root
          responses:
            200:
              content:
                application/json:
                  schema:
                    type: string
    

    without this PR, openapi-spec-validator displays:

    {'content': {'application/json': {'schema': {'type': 'string'}}}} is not valid under any of the given schemas
    
    Failed validating 'oneOf' in schema['properties']['paths']['patternProperties']['^\\/']['patternProperties']['^(get|put|post|delete|options|head|patch|trace)$'
    ]['properties']['responses']['patternProperties']['^[1-5](?:\\d{2}|XX)$']:
        {'oneOf': [{'$ref': '#/definitions/Response'},
                   {'$ref': '#/definitions/Reference'}]}
    
    On instance['paths']['/']['get']['responses']['200']:
        {'content': {'application/json': {'schema': {'type': 'string'}}}}
    

    Basically telling « The path./.get.responses.200 is invalid: it should be a Response or a Reference. » without telling me about the missing description.

    With this PR it gives:

    {'content': {'application/json': {'schema': {'type': 'string'}}}} is not valid under any of the given schemas
    
    Failed validating 'oneOf' in schema['properties']['paths']['patternProperties']['^\\/']['patternProperties']['^(get|put|post|delete|options|head|patch|trace)$']['properties']['responses']['patternProperties']['^[1-5](?:\\d{2}|XX)$']:
        {'oneOf': [{'$ref': '#/definitions/Response'},
                   {'$ref': '#/definitions/Reference'}]}
    
    On instance['paths']['/']['get']['responses']['200']:
        {'content': {'application/json': {'schema': {'type': 'string'}}}}
    
    
    Due to those subschema errors:
    
    'description' is a required property
    
    Failed validating 'required' in schema[0]:
        {'additionalProperties': False,
         'patternProperties': {'^x-': {}},
         'properties': {'content': {'additionalProperties': {'$ref': '#/definitions/MediaType'},
                                    'type': 'object'},
                        'description': {'type': 'string'},
                        'headers': {'additionalProperties': {'oneOf': [{'$ref': '#/definitions/Header'},
                                                                       {'$ref': '#/definitions/Reference'}]},
                                    'type': 'object'},
                        'links': {'additionalProperties': {'oneOf': [{'$ref': '#/definitions/Link'},
                                                                     {'$ref': '#/definitions/Reference'}]},
                                  'type': 'object'}},
         'required': ['description'],
         'type': 'object'}
    
    On instance:
        {'content': {'application/json': {'schema': {'type': 'string'}}}}
    
    
    '$ref' is a required property
    
    Failed validating 'required' in schema[1]:
        {'patternProperties': {'^\\$ref$': {'format': 'uri-reference',
                                            'type': 'string'}},
         'required': ['$ref'],
         'type': 'object'}
    
    On instance:
        {'content': {'application/json': {'schema': {'type': 'string'}}}}
    

    This is probably a bit verbose, but I like a lot seeing 'description' is a required property.

    opened by JulienPalard 10
  • OpenAPI 3.0 spec not parsing required properly

    OpenAPI 3.0 spec not parsing required properly

    I have a spec with components that look like this:

    
    components:
      schemas:
        Credit:
          type: object
          properties:
            clientId:
              type: string
        CreditCreate:
          allOf:
            - $ref: '#/components/schemas/Credit'
            - required:
              - clientId
    
    

    I'm doing it like this because there are about 30 fields in credit, and 10 in required. All the fields in required are present in the linked object (or objects if I'm linking more than one). This is rejected by the code in validators.py inside SchemaValidator. iter_errors calls itself recursively on each piece of the allOf, but this doesn't let me reuse another object and simply add some fields as required. I worked around it for now by telling iter_errors to check that the properties field contains something before erroring, but I'm not sure that it is the correct fix.

    This behavior is supported in the swagger editor and in redoc, so I'm working off the assumption that it should be valid 3.0 syntax.

    opened by viralanomaly 9
  • jsonschema 3.0+ support

    jsonschema 3.0+ support

    Hi, the jsonschema has been updated to 3.0+, and maybe has some break changes:

    .eggs/openapi_spec_validator-0.2.4-py3.6.egg/openapi_spec_validator/__init__.py:7: in <module>
        from openapi_spec_validator.factories import JSONSpecValidatorFactory
    .eggs/openapi_spec_validator-0.2.4-py3.6.egg/openapi_spec_validator/factories.py:5: in <module>
        from openapi_spec_validator.generators import (
    .eggs/openapi_spec_validator-0.2.4-py3.6.egg/openapi_spec_validator/generators.py:12: in <module>
        class SpecValidatorsGeneratorFactory:
    .eggs/openapi_spec_validator-0.2.4-py3.6.egg/openapi_spec_validator/generators.py:19: in SpecValidatorsGeneratorFactory
        'properties': _validators.properties_draft4,
    E   AttributeError: module 'jsonschema._validators' has no attribute 'properties_draft4'
    
    kind/bug/confirmed 
    opened by strongbugman 8
  • Added CLI interface for ad-hoc validation

    Added CLI interface for ad-hoc validation

    Hi, i've added a CLI interface for validating local files. For that i've created an entry_point in setup.py pointing to a new file openapi_spec_validator/__main__.py. After you installed the package with pip you are able to run

    $ openapi_spec_validator path_to.yaml
    

    to run a validation. This could also be extended to run tests on URLs, not just local files.

    opened by venthur 7
  • Allow $ref to use `../`  for reference to parent directory file

    Allow $ref to use `../` for reference to parent directory file

    Dir structure:

    ├── fileA.yml
    ├── folderB
    │   └── fileB.yml
    

    From fileB.yml the validator does not permit usage of $ref: ../fileA.yml#/items/id . It works fine without the ../ in the beginning though.

    This would allow the openapi spec v3 files to be rendered on the browser using swagger-ui tool.

    opened by riddhi89 7
  • Can't install through pip

    Can't install through pip

    When I try to install the package I get the following output.

    Collecting openapi-spec-validator
      Could not find a version that satisfies the requirement openapi-spec-validator (from versions: )
    No matching distribution found for openapi-spec-validator
    
    opened by jkklapp 6
  • Valid response definition shows validation error

    Valid response definition shows validation error

    When using a valid OpenAPI spec (validated also by the swagger editor) an error is returned on the responses validation.

    $ python -m openapi_spec_validator ~/development/draft/api.yaml
    {'description': 'Changed with success.', 'content': {'application/json': {'schema': {'$ref': '#/components/responses/GenericSuccess', 'x-scope': ['file:///development/draft/api.yaml']}}}} is not valid under any of the given schemas
    
    Failed validating 'oneOf' in schema['properties']['paths']['patternProperties']['^/']['properties']['post']['properties']['responses']['patternProperties']['^([0-9X]{3})$']:
        {'oneOf': [{'$ref': '#/definitions/response'},
                   {'$ref': '#/definitions/reference'}]}
    
    On instance['paths']['/pets/{id}/comments']['post']['responses']['200']:
        {'content': {'application/json': {'schema': {'$ref': '#/components/responses/GenericSuccess',
                                                     'x-scope': ['file:///development/draft/api.yaml']}}},
         'description': 'Changed with success.'}
    

    The spec looks like:

    ...
        put:
          summary: Comments.
          operationId: api.change
          requestBody:
            description: Something.
            required: true
            content:
              applicaton/json:
                schema:
                  $ref: '#/components/schemas/CChange'
          responses:
            "200":
              description: Changed with success.
              content:
                application/json:
                  schema:
                    $ref: '#/components/responses/GenericSuccess'
    ...
    

    This should not throw an exception. Because the API spec is valid as of https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#responseObject Unless I'm missing something here.

    opened by rafaelcaricio 5
  • OpenAPI 3.0.0 schema fix: Parameter Object must contain 'schema' or 'content'

    OpenAPI 3.0.0 schema fix: Parameter Object must contain 'schema' or 'content'

    See the Fixed Fields section of the specs, towards the end:

    A parameter MUST contain either a schema property, or a content property, but not both.

    Adding the oneOf constraint requiring either content or schema fixes this issue.

    The same issue applies to all objects that refer to Parameter Objects as their basis, such as e.g. Header Objects. I will add to this branch until I've adjusted all of those, and notify when this is done.

    opened by jfinkhaeuser 5
  • Drop Python 2.7 and 3.5 support and bump dependency upper bounds

    Drop Python 2.7 and 3.5 support and bump dependency upper bounds

    Fixes #130 Fixes #135

    jsonschema released version 4.0.0 which dropped support for Python 2.7 and 3.5. openapi-spec-validator should do the same to support new versions of jsonschema. Both upstream dependencies and downstream dependents have already upgraded their jsonschema version constraints, which leads to conflicts with openapi-spec-validator.

    opened by RobbeSneyders 4
  • "Object of type datetime is not JSON serializable" error in version 0.5.1 but not in 0.4.0

    When using the command python3.9 -m openapi_spec_validator example.yml where the example.yml file contains the following:

    openapi: 3.0.0  
    info:  
      title: Example OpenAPI  
      version: 0.0.1  
    paths:  
      /mypath:  
        get:  
          parameters:  
            - name: myparam  
              in: query  
              schema:  
                format: date-time  
                type: string  
                example: 1997-07-16T19:20:30.45Z  
          responses:  
            '200':  
              description: Success  
    

    The result is the error: Object of type datetime is not JSON serializable

    If the example timestamp value in the YAML is wrapped in quotes, then the error does not occur and the result is: OK

    This was observed with Python 3.9.16 and openapi-spec-validator 0.5.1. When using openapi-spec-validator 0.4.0, the error does not occur.

    opened by firstStraw 0
  • Bump certifi from 2022.6.15 to 2022.12.7

    Bump certifi from 2022.6.15 to 2022.12.7

    Bumps certifi from 2022.6.15 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Properties validation weren't implemented

    Properties validation weren't implemented

    The following schema validation succeeded, even though the prop1 reference is broken.

    openapi: 3.0.0
    info:
      version: '1.0.0'
      title: 'Some Schema'
    paths: {}
    components:
      schemas:    
        SomeDataType:
          type: object
          properties:
            id:
              type: integer
            prop1:
              $ref: '<some-broken-uri>'
            prop2:
              type: string
    
    opened by xeronm 0
  • removing default_handlers breaks openapi-core

    removing default_handlers breaks openapi-core

    It seems like this commit https://github.com/p1c2u/openapi-spec-validator/commit/03d4937a85482bed16e0e92bf6795b8778458227 breaks https://github.com/p1c2u/openapi-core (v0.14.2). Our imports are failing now.

    opened by spasiu 2
  • No specific error information available.

    No specific error information available.

    First of all, I'm focussing on validating models (components/schemas) in an OpenAPI 3.0.0. yaml file.
    I'm testing with a slightly changed petstore.yaml (keep an eye on components/schemas/Pet/properties/id which has an extra attribute min instead of minimal):

    openapi: "3.0.0"
    info:
      version: 1.0.0
      title: Swagger Petstore
      license:
        name: MIT
    servers:
      - url: http://petstore.swagger.io/v1
    paths:
      /pets:
        get:
          summary: List all pets
          operationId: listPets
          tags:
            - pets
          parameters:
            - name: limit
              in: query
              description: How many items to return at one time (max 100)
              required: false
              schema:
                type: integer
                format: int32
          responses:
            200:
              description: An paged array of pets
              headers:
                x-next:
                  description: A link to the next page of responses
                  schema:
                    type: string
              content:
                application/json:    
                  schema:
                    $ref: "#/components/schemas/Pets"
            default:
              description: unexpected error
              content:
                application/json:
                  schema:
                    $ref: "#/components/schemas/Error"
        post:
          summary: Create a pet
          operationId: createPets
          tags:
            - pets
          responses:
            '201':
              description: Null response
            default:
              description: unexpected error
              content:
                application/json:
                  schema:
                    $ref: "#/components/schemas/Error"
      /pets/{petId}:
        get:
          summary: Info for a specific pet
          operationId: showPetById
          tags:
            - pets
          parameters:
            - name: petId
              in: path
              required: true
              description: The id of the pet to retrieve
              schema:
                type: string
          responses:
            '200':
              description: Expected response to a valid request
              content:
                application/json:
                  schema:
                    $ref: "#/components/schemas/Pets"
            default:
              description: unexpected error
              content:
                application/json:
                  schema:
                    $ref: "#/components/schemas/Error"
    components:
      schemas:
        Pet:
          required:
            - id
            - name
          properties:
            id:
              min: 1
              type: integer
              format: int64
            name:
              type: string
            tag:
              type: string
            $ref:
              type: string
        Pets:
          type: array
          items:
            $ref: "#/components/schemas/Pet"
        Error:
          required:
            - code
            - message
          properties:
            code:
              type: integer
              format: int32
            message:
              type: string
    

    Swagger Editor reports nicely on that little "typo" in pet's property id:

    grafik

    No matter what I try with openapi-spec-validator, it reqognizes an error like that from above but the error (OpenAPIValidationError or iterator) is totally unspecific.

    Validating the above yaml with:

      try:
          spec_dict, spec_url = read_from_filename('model.yaml')
          validate_v30_spec(spec_dict)
      except IOError as e:
          print(e)
      except OpenAPIValidationError as e:
          print(e)
    

    ...gives an output like:

    {'description': 'An paged array of pets', 'headers': {'x-next': {'description': 'A link to the next page of responses', 'schema': {'type': 'string'}}}, 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Pets', 'x-scope': ['']}}}} is not valid under any of the given schemas
    
    Failed validating 'oneOf' in schema['properties']['paths']['patternProperties']['^\\/']['patternProperties']['^(get|put|post|delete|options|head|patch|trace)$']['properties']['responses']['patternProperties']['^[1-5](?:\\d{2}|XX)$']:
        {'oneOf': [{'$ref': '#/definitions/Response'},
                   {'$ref': '#/definitions/Reference'}]}
    
    On instance['paths']['/pets']['get']['responses']['200']:
        {'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Pets',
                                                     'x-scope': ['']}}},
         'description': 'An paged array of pets',
         'headers': {'x-next': {'description': 'A link to the next page of '
                                               'responses',
                                'schema': {'type': 'string'}}}}
    

    No hint on that specific error ("additionalProperty in pet.id" or something like that).

    Is openapi-spec-validator not what I'm looking for? Do I use this validator in a wrong way? Do I miss anything?

    opened by WillFreitag 0
Releases(0.5.1)
  • 0.5.1(Sep 5, 2022)

  • 0.5.0(Sep 2, 2022)

    Changelog

    • detect spec schema version #167
    • static types and Mypy static type check #168
    • tests mark network #169
    • schemas and validators lazy loading proxy #170
    • CLI detect spec version #171
    • Shortcuts refactor and validators explicit usage #172

    Backward incompatibilities

    • redundant shortcuts validate_v*_spec and validate_v*_spec_url removed. Use validate_spec and validate_spec_url with validator parameter instead.
    • default_handlers (and whole handlers package) removed. Use handlers from jsonschema_spec.handlers instead.
    Source code(tar.gz)
    Source code(zip)
  • 0.5.0a3(Aug 31, 2022)

  • 0.5.0a2(Jun 21, 2022)

  • 0.5.0a1(Jan 28, 2022)

  • 0.4.0(Jan 28, 2022)

    Changelog

    • Drop Python 2.7, 3.5 and 3.6 support #137
    • Add Python 3.10 support #137
    • Bump dependency upper bounds #137
    • Drop pyrsistent direct dependency #142
    Source code(tar.gz)
    Source code(zip)
  • 0.3.3(Jan 27, 2022)

  • 0.3.2(Jan 17, 2022)

  • 0.3.1(May 12, 2021)

  • 0.3.0(Feb 24, 2021)

  • 0.2.10(Feb 24, 2021)

    Changelog

    • Switched to using requests rather than direct use of urllib3 (#93)
    • Handlers timeout param fix (#107)
    • Detect duplicate operationId fix (#109)
    • Repair default and $ref issue (#91)
    Source code(tar.gz)
    Source code(zip)
  • 0.2.9(Jul 27, 2020)

  • 0.2.8(Jul 27, 2020)

  • 0.2.7(May 20, 2019)

  • 0.2.6(Feb 28, 2019)

The source code that powers readthedocs.org

Welcome to Read the Docs Purpose Read the Docs hosts documentation for the open source community. It supports Sphinx docs written with reStructuredTex

Read the Docs 7.4k Dec 25, 2022
Tutorial for STARKs with supporting code in python

stark-anatomy STARK tutorial with supporting code in python Outline: introduction overview of STARKs basic tools -- algebra and polynomials FRI low de

121 Jan 03, 2023
A simple tutorial to get you started with Discord and it's Python API

Hello there Feel free to fork and star, open issues if there are typos or you have a doubt. I decided to make this post because as a newbie I never fo

Sachit 1 Nov 01, 2021
A clean customizable documentation theme for Sphinx

A clean customizable documentation theme for Sphinx

Pradyun Gedam 1.5k Jan 06, 2023
MonsterManualPlus - An advanced monster manual for Tower of the Sorcerer.

Monster Manual + This is an advanced monster manual for Tower of the Sorcerer mods. Users can get a plenty of extra imformation for decision making wh

Yifan Zhou 1 Jan 01, 2022
The tutorial is a collection of many other resources and my own notes

Why we need CTC? --- looking back on history 1.1. About CRNN 1.2. from Cross Entropy Loss to CTC Loss Details about CTC 2.1. intuition: forward algor

手写AI 7 Sep 19, 2022
sphinx builder that outputs markdown files.

sphinx-markdown-builder sphinx builder that outputs markdown files Please ★ this repo if you found it useful ★ ★ ★ If you want frontmatter support ple

Clay Risser 144 Jan 06, 2023
Python script to generate Vale linting rules from word usage guidance in the Red Hat Supplementary Style Guide

ssg-vale-rules-gen Python script to generate Vale linting rules from word usage guidance in the Red Hat Supplementary Style Guide. These rules are use

Vale at Red Hat 1 Jan 13, 2022
Course materials and handouts for #100DaysOfCode in Python course

#100DaysOfCode with Python course Course details page: talkpython.fm/100days Course Summary #100DaysOfCode in Python is your perfect companion to take

Talk Python 1.9k Dec 31, 2022
A system for Python that generates static type annotations by collecting runtime types

MonkeyType MonkeyType collects runtime types of function arguments and return values, and can automatically generate stub files or even add draft type

Instagram 4.1k Jan 07, 2023
Python syntax highlighted Markdown doctest.

phmdoctest 1.3.0 Introduction Python syntax highlighted Markdown doctest Command line program and Python library to test Python syntax highlighted cod

Mark Taylor 16 Aug 09, 2022
Near Zero-Overhead Python Code Coverage

Slipcover: Near Zero-Overhead Python Code Coverage by Juan Altmayer Pizzorno and Emery Berger at UMass Amherst's PLASMA lab. About Slipcover Slipcover

PLASMA @ UMass 325 Dec 28, 2022
Pydocstringformatter - A tool to automatically format Python docstrings that tries to follow recommendations from PEP 8 and PEP 257.

Pydocstringformatter A tool to automatically format Python docstrings that tries to follow recommendations from PEP 8 and PEP 257. See What it does fo

Daniël van Noord 31 Dec 29, 2022
Fun interactive program to sort a list :)

LHD-Build-Sort-a-list Fun interactive program to sort a list :) Inspiration LHD Build Write a script to sort a list. What it does It is a menu driven

Ananya Gupta 1 Jan 15, 2022
MkDocs Plugin allowing your visitors to *File > Print > Save as PDF* the entire site.

mkdocs-print-site-plugin MkDocs plugin that adds a page to your site combining all pages, allowing your site visitors to File Print Save as PDF th

Tim Vink 67 Jan 04, 2023
Automated Integration Testing and Live Documentation for your API

Automated Integration Testing and Live Documentation for your API

ScanAPI 1.3k Dec 30, 2022
Grokking the Object Oriented Design Interview

Grokking the Object Oriented Design Interview

Tusamma Sal Sabil 2.6k Jan 08, 2023
Some custom tweaks to the results produced by pytkdocs.

pytkdocs_tweaks Some custom tweaks for pytkdocs. For use as part of the documentation-generation-for-Python stack that comprises mkdocs, mkdocs-materi

Patrick Kidger 4 Nov 24, 2022
204-python-string-21BCA90 created by GitHub Classroom

204-Python This repository is created for subject "204 Programming Skill" Python Programming. This Repository contain list of programs of python progr

VIDYABHARTI TRUST COLLEGE OF BCA 6 Mar 31, 2022
Course Materials for Math 340

UBC Math 340 Materials This repository aims to be the one repository for which you can find everything you about Math 340. Lecture Notes Lecture Notes

2 Nov 25, 2021