# packages

pkgId: f458222de8ec2ddaf7e0af58f4b73cdf2eb622afd9f9035321085dfdebf4e21e
name: python-tvb-data
arch: src
version: 2.0
epoch: 0
release: 1
summary: A package with data for TVB
url: http://www.thevirtualbrain.org
rpm_license: GPL v3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7168caf0-9f48-4298-a282-075365a1d790
location_href: 00005344-python-tvb-data/python-tvb-data-2.0-1.src.rpm
checksum_type: sha256
description:
  Various demonstration datasets for use with The Virtual Brain are provided here.
  Here you will find:
  * compatible file/folder structures that can be uploaded thorugh the web interface of TVB; and
  * the default datasets used when working in ``console`` or `library` mode.
  This package should be treated as a regular Python module.
  Possibly what you want to do after cloning it locally from GitHub (https://github.com/the-virtual-brain/tvb-data) is::
      cd tvb-data/
      python setup.py develop
  to have it linked into your current Python environment.
  `tvb-data` also is shared on Pypi, but it has fewer files, due to size restrictions there.
  To work with this package from pypi, run::
      pip install tvb-data


pkgId: 6b9d19abec5a4cbf9a50646c344e83f270cea912a30c5d10ff81aa929f84d85b
name: python-tw2.core
arch: src
version: 2.3.0
epoch: 0
release: 1
summary: The runtime components for ToscaWidgets 2, a web widget toolkit.
url: http://toscawidgets.org/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-29268aee-d714-4158-b4cf-df4e55bb553c
location_href: 00005346-python-tw2-core/python-tw2.core-2.3.0-1.src.rpm
checksum_type: sha256
description:
  +--------------+------------------+---------------------+
  | Branch       | Build Status     | Test Coverage       |
  +==============+==================+=====================+
  | **master**   | |travis-master|  | |coveralls-master|  |
  +--------------+------------------+---------------------+
  | **develop**  | |travis-develop| | |coveralls-develop| |
  +--------------+------------------+---------------------+


pkgId: 43cf44e7a7ea93063ae3e23f124af147fb240e51441c29dea89fb3e619151fb6
name: python-twilio
arch: src
version: 7.16.5
epoch: 0
release: 1
summary: Twilio API client and TwiML generator
url: https://github.com/twilio/twilio-python/
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3784fb7d-31cb-44db-9a44-acaf227b6ac5
location_href: 00005349-python-twilio/python-twilio-7.16.5-1.src.rpm
checksum_type: sha256
description:
  [![Tests](https://github.com/twilio/twilio-python/actions/workflows/test-and-deploy.yml/badge.svg)](https://github.com/twilio/twilio-python/actions/workflows/test-and-deploy.yml)
  [![PyPI](https://img.shields.io/pypi/v/twilio.svg)](https://pypi.python.org/pypi/twilio)
  [![PyPI](https://img.shields.io/pypi/pyversions/twilio.svg)](https://pypi.python.org/pypi/twilio)
  [![Learn OSS Contribution in TwilioQuest](https://img.shields.io/static/v1?label=TwilioQuest&message=Learn%20to%20contribute%21&color=F22F46&labelColor=1f243c&style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAASFBMVEUAAAAZGRkcHBwjIyMoKCgAAABgYGBoaGiAgICMjIyzs7PJycnMzMzNzc3UoBfd3d3m5ubqrhfrMEDu7u739/f4vSb/3AD///9tbdyEAAAABXRSTlMAAAAAAMJrBrEAAAKoSURBVHgB7ZrRcuI6EESdyxXGYoNFvMD//+l2bSszRgyUYpFAsXOeiJGmj4NkuWx1Qeh+Ekl9DgEXOBwOx+Px5xyQhDykfgq4wG63MxxaR4ddIkg6Ul3g84vCIcjPBA5gmUMeXESrlukuoK33+33uID8TWeLAdOWsKpJYzwVMB7bOzYSGOciyUlXSn0/ABXTosJ1M1SbypZ4O4MbZuIDMU02PMbauhhHMHXbmebmALIiEbbbbbUrpF1gwE9kFfRNAJaP+FQEXCCTGyJ4ngDrjOFo3jEL5JdqjF/pueR4cCeCGgAtwmuRS6gDwaRiGvu+DMFwSBLTE3+jF8JyuV1okPZ+AC4hDFhCHyHQjdjPHUKFDlHSJkHQXMB3KpSwXNGJPcwwTdZiXlRN0gSp0zpWxNtM0beYE0nRH6QIbO7rawwXaBYz0j78gxjokDuv12gVeUuBD0MDi0OQCLvDaAho4juP1Q/jkAncXqIcCfd+7gAu4QLMACCLxpRsSuQh0igu0C9Svhi7weAGZg50L3IE3cai4IfkNZAC8dfdhsUD3CgKBVC9JE5ABAFzg4QL/taYPAAWrHdYcgfLaIgAXWJ7OV38n1LEF8tt2TH29E+QAoDoO5Ve/LtCQDmKM9kPbvCEBApK+IXzbcSJ0cIGF6e8gpcRhUDogWZ8JnaWjPXc/fNnBBUKRngiHgTUSivSzDRDgHZQOLvBQgf8rRt+VdBUUhwkU6VpJ+xcOwQUqZr+mR0kvBUgv6cB4+37hQAkXqE8PwGisGhJtN4xAHMzrsgvI7rccXqSvKh6jltGlrOHA3Xk1At3LC4QiPdX9/0ndHpGVvTjR4bZA1ypAKgVcwE5vx74ulwIugDt8e/X7JgfkucBMIAr26ndnB4UCLnDOqvteQsHlgX9N4A+c4cW3DXSPbwAAAABJRU5ErkJggg==)](https://twil.io/learn-open-source)



  The documentation for the Twilio API can be found [here][apidocs].

  The Python library documentation can be found [here][libdocs].



  `twilio-python` uses a modified version of [Semantic Versioning](https://semver.org) for all changes. [See this document](VERSIONS.md) for details.



  Please consult the [official migration guide](https://www.twilio.com/docs/libraries/python/migration-guide) for information on upgrading your application using twilio-python 5.x to 6.x



  This library supports the following Python implementations:

  * Python 3.6
  * Python 3.7
  * Python 3.8
  * Python 3.9
  * Python 3.10
  * Python 3.11



  Install from PyPi using [pip](https://pip.pypa.io/en/latest/), a
  package manager for Python.

      pip install twilio

  If pip install fails on Windows, check the path length of the directory. If it is greater 260 characters then enable [Long Paths](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation) or choose other shorter location.

  Don't have pip installed? Try installing it, by running this from the command
  line:

      $ curl https://bootstrap.pypa.io/get-pip.py | python

  Or, you can [download the source code
  (ZIP)](https://github.com/twilio/twilio-python/zipball/main "twilio-python
  source code") for `twilio-python`, and then run:

      python setup.py install

  You may need to run the above commands with `sudo`.



  Getting started with the Twilio API couldn't be easier. Create a
  `Client` and you're ready to go.



  The `Twilio` needs your Twilio credentials. You can either pass these
  directly to the constructor (see the code below) or via environment variables.

  ```python
  from twilio.rest import Client

  account = "ACXXXXXXXXXXXXXXXXX"
  token = "YYYYYYYYYYYYYYYYYY"
  client = Client(account, token)
  ```

  Alternatively, a `Client` constructor without these parameters will
  look for `TWILIO_ACCOUNT_SID` and `TWILIO_AUTH_TOKEN` variables inside the
  current environment.

  We suggest storing your credentials as environment variables. Why? You'll never
  have to worry about committing your credentials and accidentally posting them
  somewhere public.


  ```python
  from twilio.rest import Client
  client = Client()
  ```



  To take advantage of Twilio's [Global Infrastructure](https://www.twilio.com/docs/global-infrastructure), specify the target Region and/or Edge for the client:

  ```python
  from twilio.rest import Client

  client = Client(region='au1', edge='sydney')
  ```
  A `Client` constructor  without these parameters will also look for `TWILIO_REGION` and `TWILIO_EDGE` variables inside the current environment.

  Alternatively, you may specify the edge and/or region after constructing the Twilio client:

  ```python
  from twilio.rest import Client

  client = Client()
  client.region = 'au1'
  client.edge = 'sydney'
  ```

  This will result in the `hostname` transforming from `api.twilio.com` to `api.sydney.au1.twilio.com`.



  ```python
  from twilio.rest import Client

  account = "ACXXXXXXXXXXXXXXXXX"
  token = "YYYYYYYYYYYYYYYYYY"
  client = Client(account, token)

  call = client.calls.create(to="9991231234",
                             from_="9991231234",
                             url="http://twimlets.com/holdmusic?Bucket=com.twilio.music.ambient")
  print(call.sid)
  ```



  ```python
  from twilio.rest import Client

  account = "ACXXXXXXXXXXXXXXXXX"
  token = "YYYYYYYYYYYYYYYYYY"
  client = Client(account, token)

  message = client.messages.create(to="+12316851234", from_="+15555555555",
                                   body="Hello there!")
  ```



  Log the API request and response data to the console:

  ```python
  import logging

  client = Client(account, token)
  logging.basicConfig()
  client.http_client.logger.setLevel(logging.INFO)
  ```

  Log the API request and response data to a file:

  ```python
  import logging

  client = Client(account, token)
  logging.basicConfig(filename='./log.txt')
  client.http_client.logger.setLevel(logging.INFO)
  ```



  ```python
  from twilio.rest import Client
  from twilio.base.exceptions import TwilioRestException

  account = "ACXXXXXXXXXXXXXXXXX"
  token = "YYYYYYYYYYYYYYYYYY"
  client = Client(account, token)

  try:
    message = client.messages.create(to="+12316851234", from_="+15555555555",
                                     body="Hello there!")
  except TwilioRestException as e:
    print(e)
  ```

  For more descriptive exception types, please see the [Twilio documentation](https://www.twilio.com/docs/libraries/python/usage-guide#exceptions).



  To control phone calls, your application needs to output [TwiML][twiml].

  Use `twilio.twiml.Response` to easily create such responses.

  ```python
  from twilio.twiml.voice_response import VoiceResponse

  r = VoiceResponse()
  r.say("Welcome to twilio!")
  print(str(r))
  ```

  ```xml
  <?xml version="1.0" encoding="utf-8"?>
  <Response><Say>Welcome to twilio!</Say></Response>
  ```



  To use a custom HTTP client with this helper library, please see the [Twilio documentation](https://www.twilio.com/docs/libraries/python/custom-http-clients-python).



  The `Dockerfile` present in this repository and its respective `twilio/twilio-python` Docker image are currently used by Twilio for testing purposes only.



  If you need help installing or using the library, please check the [Twilio Support Help Center](https://support.twilio.com) first, and [file a support ticket](https://twilio.com/help/contact) if you don't find an answer to your question.

  If you've instead found a bug in the library or would like new features added, go ahead and open issues or pull requests against this repo!

  [apidocs]: https://www.twilio.com/docs/api
  [twiml]: https://www.twilio.com/docs/api/twiml
  [libdocs]: https://twilio.github.io/twilio-python


pkgId: 1ad213a0b984636f7a7838bce500f23d2538679da32808f9a33a997174cb32f7
name: python-twilio
arch: src
version: 8.0.0
epoch: 0
release: 1
summary: Twilio API client and TwiML generator
url: https://github.com/twilio/twilio-python/
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-cb7f7bcd-5b50-4b4e-af9d-21a9a8f349b1
location_href: 00008673-python-twilio/python-twilio-8.0.0-1.src.rpm
checksum_type: sha256
description:
  [![Tests](https://github.com/twilio/twilio-python/actions/workflows/test-and-deploy.yml/badge.svg)](https://github.com/twilio/twilio-python/actions/workflows/test-and-deploy.yml)
  [![PyPI](https://img.shields.io/pypi/v/twilio.svg)](https://pypi.python.org/pypi/twilio)
  [![PyPI](https://img.shields.io/pypi/pyversions/twilio.svg)](https://pypi.python.org/pypi/twilio)
  [![Learn OSS Contribution in TwilioQuest](https://img.shields.io/static/v1?label=TwilioQuest&message=Learn%20to%20contribute%21&color=F22F46&labelColor=1f243c&style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAASFBMVEUAAAAZGRkcHBwjIyMoKCgAAABgYGBoaGiAgICMjIyzs7PJycnMzMzNzc3UoBfd3d3m5ubqrhfrMEDu7u739/f4vSb/3AD///9tbdyEAAAABXRSTlMAAAAAAMJrBrEAAAKoSURBVHgB7ZrRcuI6EESdyxXGYoNFvMD//+l2bSszRgyUYpFAsXOeiJGmj4NkuWx1Qeh+Ekl9DgEXOBwOx+Px5xyQhDykfgq4wG63MxxaR4ddIkg6Ul3g84vCIcjPBA5gmUMeXESrlukuoK33+33uID8TWeLAdOWsKpJYzwVMB7bOzYSGOciyUlXSn0/ABXTosJ1M1SbypZ4O4MbZuIDMU02PMbauhhHMHXbmebmALIiEbbbbbUrpF1gwE9kFfRNAJaP+FQEXCCTGyJ4ngDrjOFo3jEL5JdqjF/pueR4cCeCGgAtwmuRS6gDwaRiGvu+DMFwSBLTE3+jF8JyuV1okPZ+AC4hDFhCHyHQjdjPHUKFDlHSJkHQXMB3KpSwXNGJPcwwTdZiXlRN0gSp0zpWxNtM0beYE0nRH6QIbO7rawwXaBYz0j78gxjokDuv12gVeUuBD0MDi0OQCLvDaAho4juP1Q/jkAncXqIcCfd+7gAu4QLMACCLxpRsSuQh0igu0C9Svhi7weAGZg50L3IE3cai4IfkNZAC8dfdhsUD3CgKBVC9JE5ABAFzg4QL/taYPAAWrHdYcgfLaIgAXWJ7OV38n1LEF8tt2TH29E+QAoDoO5Ve/LtCQDmKM9kPbvCEBApK+IXzbcSJ0cIGF6e8gpcRhUDogWZ8JnaWjPXc/fNnBBUKRngiHgTUSivSzDRDgHZQOLvBQgf8rRt+VdBUUhwkU6VpJ+xcOwQUqZr+mR0kvBUgv6cB4+37hQAkXqE8PwGisGhJtN4xAHMzrsgvI7rccXqSvKh6jltGlrOHA3Xk1At3LC4QiPdX9/0ndHpGVvTjR4bZA1ypAKgVcwE5vx74ulwIugDt8e/X7JgfkucBMIAr26ndnB4UCLnDOqvteQsHlgX9N4A+c4cW3DXSPbwAAAABJRU5ErkJggg==)](https://twil.io/learn-open-source)



  The documentation for the Twilio API can be found [here][apidocs].

  The Python library documentation can be found [here][libdocs].



  `twilio-python` uses a modified version of [Semantic Versioning](https://semver.org) for all changes. [See this document](VERSIONS.md) for details.



  Please consult the [official migration guide](https://www.twilio.com/docs/libraries/python/migration-guide) for information on upgrading your application using twilio-python 5.x to 6.x



  This library supports the following Python implementations:

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



  Install from PyPi using [pip](https://pip.pypa.io/en/latest/), a
  package manager for Python.

      pip install twilio

  If pip install fails on Windows, check the path length of the directory. If it is greater 260 characters then enable [Long Paths](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation) or choose other shorter location.

  Don't have pip installed? Try installing it, by running this from the command
  line:

      $ curl https://bootstrap.pypa.io/get-pip.py | python

  Or, you can [download the source code
  (ZIP)](https://github.com/twilio/twilio-python/zipball/main "twilio-python
  source code") for `twilio-python`, and then run:

      python setup.py install

  You may need to run the above commands with `sudo`.



  Getting started with the Twilio API couldn't be easier. Create a
  `Client` and you're ready to go.



  The `Twilio` client needs your Twilio credentials. You can either pass these
  directly to the constructor (see the code below) or via environment variables.

  Authenticating with Account SID and Auth Token:
  ```python
  from twilio.rest import Client

  account_sid = "ACXXXXXXXXXXXXXXXXX"
  auth_token = "YYYYYYYYYYYYYYYYYY"
  client = Client(account_sid, auth_token)
  ```

  Authenticating with API Key and API Secret:
  ```python
  from twilio.rest import Client

  api_key = "XXXXXXXXXXXXXXXXX"
  api_secret = "YYYYYYYYYYYYYYYYYY"
  account_sid = "ACXXXXXXXXXXXXXXXXX"
  client = Client(api_key, api_secret, account_sid)
  ```

  Alternatively, a `Client` constructor without these parameters will
  look for `TWILIO_ACCOUNT_SID` and `TWILIO_AUTH_TOKEN` variables inside the
  current environment.

  We suggest storing your credentials as environment variables. Why? You'll never
  have to worry about committing your credentials and accidentally posting them
  somewhere public.


  ```python
  from twilio.rest import Client
  client = Client()
  ```



  To take advantage of Twilio's [Global Infrastructure](https://www.twilio.com/docs/global-infrastructure), specify the target Region and/or Edge for the client:

  ```python
  from twilio.rest import Client

  client = Client(region='au1', edge='sydney')
  ```
  A `Client` constructor  without these parameters will also look for `TWILIO_REGION` and `TWILIO_EDGE` variables inside the current environment.

  Alternatively, you may specify the edge and/or region after constructing the Twilio client:

  ```python
  from twilio.rest import Client

  client = Client()
  client.region = 'au1'
  client.edge = 'sydney'
  ```

  This will result in the `hostname` transforming from `api.twilio.com` to `api.sydney.au1.twilio.com`.



  ```python
  from twilio.rest import Client

  username = "ACXXXXXXXXXXXXXXXXX"
  password = "YYYYYYYYYYYYYYYYYY"
  client = Client(username, password)

  call = client.calls.create(to="9991231234",
                             from_="9991231234",
                             url="http://twimlets.com/holdmusic?Bucket=com.twilio.music.ambient")
  print(call.sid)
  ```



  ```python
  from twilio.rest import Client

  username = "ACXXXXXXXXXXXXXXXXX"
  password = "YYYYYYYYYYYYYYYYYY"
  client = Client(username, password)

  message = client.messages.create(to="+12316851234", from_="+15555555555",
                                   body="Hello there!")
  ```



  By default, the Twilio Client will make synchronous requests to the Twilio API. To allow for asynchronous, non-blocking requests, we've included an optional asynchronous HTTP client. When used with the Client and the accompanying `*_async` methods, requests made to the Twilio API will be performed asynchronously.

  ```python
  from twilio.http.async_http_client import AsyncTwilioHttpClient
  from twilio.rest import Client

  async def main():
      username = "ACXXXXXXXXXXXXXXXXX"
      password = "YYYYYYYYYYYYYYYYYY"
      http_client = AsyncTwilioHttpClient()
      client = Client(username, password, http_client=http_client)

      message = await client.messages.create_async(to="+12316851234", from_="+15555555555",
                                                   body="Hello there!")

  asyncio.run(main())
  ```



  Log the API request and response data to the console:

  ```python
  import logging

  client = Client(username, password)
  logging.basicConfig()
  client.http_client.logger.setLevel(logging.INFO)
  ```

  Log the API request and response data to a file:

  ```python
  import logging

  client = Client(username, password)
  logging.basicConfig(filename='./log.txt')
  client.http_client.logger.setLevel(logging.INFO)
  ```



  ```python
  from twilio.rest import Client
  from twilio.base.exceptions import TwilioRestException

  username = "ACXXXXXXXXXXXXXXXXX"
  password = "YYYYYYYYYYYYYYYYYY"
  client = Client(username, password)

  try:
    message = client.messages.create(to="+12316851234", from_="+15555555555",
                                     body="Hello there!")
  except TwilioRestException as e:
    print(e)
  ```

  For more descriptive exception types, please see the [Twilio documentation](https://www.twilio.com/docs/libraries/python/usage-guide#exceptions).



  To control phone calls, your application needs to output [TwiML][twiml].

  Use `twilio.twiml.Response` to easily create such responses.

  ```python
  from twilio.twiml.voice_response import VoiceResponse

  r = VoiceResponse()
  r.say("Welcome to twilio!")
  print(str(r))
  ```

  ```xml
  <?xml version="1.0" encoding="utf-8"?>
  <Response><Say>Welcome to twilio!</Say></Response>
  ```



  To use a custom HTTP client with this helper library, please see the [Twilio documentation](https://www.twilio.com/docs/libraries/python/custom-http-clients-python).



  The `Dockerfile` present in this repository and its respective `twilio/twilio-python` Docker image are currently used by Twilio for testing purposes only.



  If you need help installing or using the library, please check the [Twilio Support Help Center](https://support.twilio.com) first, and [file a support ticket](https://twilio.com/help/contact) if you don't find an answer to your question.

  If you've instead found a bug in the library or would like new features added, go ahead and open issues or pull requests against this repo!

  [apidocs]: https://www.twilio.com/docs/api
  [twiml]: https://www.twilio.com/docs/api/twiml
  [libdocs]: https://twilio.github.io/twilio-python


pkgId: 52908eec1d93c9409ca3518e97510507f3299dbe4e928a5c0017b285f3644974
name: python-twitter
arch: src
version: 1.19.6
epoch: 0
release: 1
summary: An API and command-line toolset for Twitter (twitter.com)
url: https://mike.verdone.ca/twitter/
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9a820857-27df-4979-932f-1858c3ba45ed
location_href: 00005352-python-twitter/python-twitter-1.19.6-1.src.rpm
checksum_type: sha256
description:
  [![Tests](https://github.com/python-twitter-tools/twitter/workflows/Tests/badge.svg)](https://github.com/python-twitter-tools/twitter/actions)
  [![Coverage Status](https://coveralls.io/repos/github/python-twitter-tools/twitter/badge.svg?branch=master)](https://coveralls.io/github/python-twitter-tools/twitter?branch=master)
  The Minimalist Twitter API for Python is a Python API for Twitter,
  everyone's favorite Web 2.0 Facebook-style status updater for people
  on the go.
  Also included is a Twitter command-line tool for getting your friends'
  tweets and setting your own tweet from the safety and security of your
  favorite shell and an IRC bot that can announce Twitter updates to an
  IRC channel.
  For more information:
   * install the [package](https://pypi.org/project/twitter/) `pip install twitter`
   * import the `twitter` package and run `help()` on it
   * run `twitter -h` for command-line tool help


pkgId: 73c102afc3e69a4912a9876f6c3e46a29db6b590fe10456b11950f8b0b06c978
name: python-txredisapi
arch: src
version: 1.4.9
epoch: 0
release: 1
summary: non-blocking redis client for python
url: http://github.com/IlyaSkriblovsky/txredisapi
rpm_license: http://www.apache.org/licenses/LICENSE-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5b90ac1a-da7b-4232-b2a1-cc07b8fb2eda
location_href: 00008678-python-txredisapi/python-txredisapi-1.4.9-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://secure.travis-ci.org/IlyaSkriblovsky/txredisapi.png)](http://travis-ci.org/IlyaSkriblovsky/txredisapi)
  *For the latest source code, see <http://github.com/IlyaSkriblovsky/txredisapi>*
  ``txredisapi`` is a non-blocking client driver for the [redis](http://redis.io)
  database, written in Python. It uses [Twisted](http://twistedmatrix.com) for
  the asynchronous communication with redis.
  It started as a fork of the original
  [redis protocol for twisted](http://pypi.python.org/pypi/txredis/), and evolved
  into a more robust, reliable, and complete solution for applications like web
  servers. These types of applications often need a fault-tolerant pool of
  connections with multiple redis servers, making it possible to easily develop
  and maintain distributed systems.
  Most of the [redis commands](http://redis.io/commands) are supported, as well
  as other features such as silent reconnection, connection pools, and automatic
  sharding.
  This driver is distributed as part of the [cyclone](http://cyclone.io) web
  framework.

  See [CHANGELOG.md](CHANGELOG.md)

  - Connection Pools
  - Lazy Connections
  - Automatic Sharding
  - Automatic Reconnection
  - Connection using Redis Sentinel
  - Publish/Subscribe (PubSub)
  - Transactions
  - Unix Socket Connections


pkgId: 432c39d2db66378d0a36daaae925d5a99db4b41f7e07d145e8ea6097da116671
name: python-txtorcon
arch: src
version: 23.0.0
epoch: 0
release: 1
url: https://github.com/meejah/txtorcon
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1ab153ad-3cdd-4b99-b709-95d3e902cf3c
location_href: 00005355-python-txtorcon/python-txtorcon-23.0.0-1.src.rpm
checksum_type: sha256
summary:
  Twisted-based Tor controller client, with state-tracking and     configuration abstractions.     https://txtorcon.readthedocs.org     https://github.com/meejah/txtorcon

description:
  - **docs**: https://txtorcon.readthedocs.org or http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/
  - **code**: https://github.com/meejah/txtorcon
  - ``torsocks git clone git://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon.git``
  - MIT-licensed;
  - Python 3.5+, PyPy 5.0.0+;
  - depends on
    `Twisted`_,
    `Automat <https://github.com/glyph/automat>`_


pkgId: d6027887167a2a254a07b721c51dadb93d5e5c2a0eeba432c219f607ad7398e6
name: python-typed-ast
arch: src
version: 1.5.4
epoch: 0
release: 1
summary: a fork of Python 2 and 3 ast modules with type comment support
url: https://github.com/python/typed_ast
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8290bcc8-df02-4536-b9f6-3800a0dd60a8
location_href: 00005358-python-typed_ast/python-typed-ast-1.5.4-1.src.rpm
checksum_type: sha256
description:
  `typed_ast` is a Python 3 package that provides a Python 2.7 and Python 3
  parser similar to the standard `ast` library.  Unlike `ast` below Python 3.8,
  the parsers in
  `typed_ast` include PEP 484 type comments and are independent of the version of
  Python under which they are run.  The `typed_ast` parsers produce the standard
  Python AST (plus type comments), and are both fast and correct, as they are
  based on the CPython 2.7 and 3.7 parsers.

  **Note:** The `ast` module of Python 3.8+ supports all features of `typed_ast`.
  `typed_ast` does not support parsing code that uses syntax introduced in
  Python 3.8 onwards.
  We recommend using `ast` on Python 3.8 or above.


pkgId: 78b52f249402177f87891da3baa1ddd48fcc6582f03e83cbb333a75c95eaf58b
name: python-typeguard
arch: src
version: 2.13.3
epoch: 0
release: 1
summary: Run-time type checker for Python
url: https://pypi.org/project/typeguard/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-43a92d6b-c5ec-4418-adf5-85d3cacf1be7
location_href: 00005360-python-typeguard/python-typeguard-2.13.3-1.src.rpm
checksum_type: sha256
description:
  .. image:: https://travis-ci.com/agronholm/typeguard.svg?branch=master
    :target: https://travis-ci.com/agronholm/typeguard
    :alt: Build Status
  .. image:: https://coveralls.io/repos/agronholm/typeguard/badge.svg?branch=master&service=github
    :target: https://coveralls.io/github/agronholm/typeguard?branch=master
    :alt: Code Coverage
  .. image:: https://readthedocs.org/projects/typeguard/badge/?version=latest
    :target: https://typeguard.readthedocs.io/en/latest/?badge=latest

  This library provides run-time type checking for functions defined with
  `PEP 484 <https://www.python.org/dev/peps/pep-0484/>`_ argument (and return) type annotations.

  Four principal ways to do type checking are provided, each with its pros and cons:



     * debugger friendly (except when running with the pydev debugger with the C extension installed)
     * does not work reliably with dynamically defined type hints (e.g. in nested functions)


     * automatically type checks yields and sends of returned generators (regular and async)
     * adds an extra frame to the call stack for every call to a decorated function


     * emits warnings instead of raising ``TypeError``
     * requires very few modifications to the code
     * multiple TypeCheckers can be stacked/nested
     * does not work reliably with dynamically defined type hints (e.g. in nested functions)
     * may cause problems with badly behaving debuggers or profilers
     * cannot distinguish between an exception being raised and a ``None`` being returned


     * automatically annotates classes and functions with ``@typechecked`` on import
     * no code changes required in target modules
     * requires imports of modules you need to check to be deferred until after the import hook has
       been installed
     * may clash with other import hooks

  See the documentation_ for further instructions.

  .. _documentation: https://typeguard.readthedocs.io/en/latest/


pkgId: 3c9d2e9394408a1862abef60e17defef05566f796e83cd2502e12142f3f4e535
name: python-typepy
arch: src
version: 1.3.0
epoch: 0
release: 1
summary: typepy is a Python library for variable type checker/validator/converter at a run time.
url: https://github.com/thombashi/typepy
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-93e9c0a6-2b44-4025-b78c-bd67d23027c0
location_href: 00010681-python-typepy/python-typepy-1.3.0-1.src.rpm
checksum_type: sha256
description:
  `typepy <https://github.com/thombashi/typepy>`__ is a Python library for variable type checker/validator/converter at a run time.


pkgId: c3094903294ace63b4436e1b0055a0b57c878dcd5d7dba36730c6a1b05fc1d24
name: python-types-Flask
arch: src
version: 1.1.6
epoch: 0
release: 1
summary: Typing stubs for Flask
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7711ce4c-37a0-475d-bad4-f03a5636f980
location_href: 00011049-python-types-flask/python-types-Flask-1.1.6-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `Flask` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `Flask`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/Flask. All fixes for
  types and metadata should be contributed there.

  *Note:* The `Flask` package includes type annotations or type stubs
  since version 2.0. Please uninstall the `types-Flask`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `a5bc1e037fa9fb541d81de92ad27fa8543c65be4`.


pkgId: 7094aecf71f349d586c2f51ddd63ddbb517d9358bd6a5d4e141e5a711ea1006f
name: python-types-Jinja2
arch: src
version: 2.11.9
epoch: 0
release: 1
summary: Typing stubs for Jinja2
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-aff21052-3338-4879-af23-abaa489dcd85
location_href: 00010773-python-types-jinja2/python-types-Jinja2-2.11.9-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `Jinja2` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `Jinja2`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/Jinja2. All fixes for
  types and metadata should be contributed there.

  *Note:* The `Jinja2` package includes type annotations or type stubs
  since version 3.0. Please uninstall the `types-Jinja2`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `a5bc1e037fa9fb541d81de92ad27fa8543c65be4`.


pkgId: 21d8b89b84864014140bf3e503dd0e2667596483bdad9910af31ea8954e6264c
name: python-types-Markdown
arch: src
version: 3.4.2.7
epoch: 0
release: 1
summary: Typing stubs for Markdown
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e2f754ad-6a98-4001-80cd-23994d9c6651
location_href: 00011311-python-types-markdown/python-types-Markdown-3.4.2.7-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `Markdown` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `Markdown`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/Markdown. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `fe9eb630eedfc588c57cee51807c505c072c1348`.


pkgId: a262f4ca0ed72ff17aef6f154b6d8b983565ab5fde186a2c4a3d9bf997a43d7d
name: python-types-MarkupSafe
arch: src
version: 1.1.10
epoch: 0
release: 1
summary: Typing stubs for MarkupSafe
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f297379a-8f2b-4bee-a807-20616b8ac099
location_href: 00010758-python-types-markupsafe/python-types-MarkupSafe-1.1.10-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `MarkupSafe` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `MarkupSafe`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/MarkupSafe. All fixes for
  types and metadata should be contributed there.

  *Note:* The `MarkupSafe` package includes type annotations or type stubs
  since version 2.0. Please uninstall the `types-MarkupSafe`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `98af7d667fa668dec9dc640f0f2669c6e3453e86`.


pkgId: 6fd6a9d747bfde7b934be51e9db9d08261d3e95dbee77c6706e381f380b5b972
name: python-types-Pillow
arch: src
version: 9.4.0.19
epoch: 0
release: 1
summary: Typing stubs for Pillow
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9098189e-fcdd-420a-80e8-3b292272de49
location_href: 00013860-python-types-pillow/python-types-Pillow-9.4.0.19-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `Pillow` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `Pillow`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/Pillow. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `87c1b949cdf996148e44fb913a1b689f8d337a5a`.


pkgId: fa57a8c0dca66c10e883dea98e4fe3e98c6dbcc289b77e9f6e56234da89ea126
name: python-types-PyMySQL
arch: src
version: 1.0.19.6
epoch: 0
release: 1
summary: Typing stubs for PyMySQL
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-edba2c60-9f30-4933-bcef-da73def6796c
location_href: 00012713-python-types-pymysql/python-types-PyMySQL-1.0.19.6-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `PyMySQL` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `PyMySQL`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/PyMySQL. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: d06020621b5d176be5f8ddeb42ea545018ef815e1b249ce958a8201c54d488cb
name: python-types-PyYAML
arch: src
version: 6.0.12.9
epoch: 0
release: 1
summary: Typing stubs for PyYAML
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b6026077-9c40-4871-b7ed-561330cd7266
location_href: 00009512-python-types-pyyaml/python-types-PyYAML-6.0.12.9-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `PyYAML` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `PyYAML`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/PyYAML. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: 421ec06c3835fd9e71801d9325d9563ecd77f1bd4af4c3f3a9205b1954d93811
name: python-types-Pygments
arch: src
version: 2.14.0.7
epoch: 0
release: 1
summary: Typing stubs for Pygments
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-69399662-c85f-47a1-a33f-99c209f4f26b
location_href: 00011035-python-types-pygments/python-types-Pygments-2.14.0.7-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `Pygments` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `Pygments`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/Pygments. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: d6f5ea9bf78960f15d7b3967ab2097cf5b253895ad6d22dcc090c38e98eef63c
name: python-types-Werkzeug
arch: src
version: 1.0.9
epoch: 0
release: 1
summary: Typing stubs for Werkzeug
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a6de0b9f-6ec0-4812-87f8-d24229fc4dbe
location_href: 00010990-python-types-werkzeug/python-types-Werkzeug-1.0.9-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `Werkzeug` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `Werkzeug`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/Werkzeug. All fixes for
  types and metadata should be contributed there.

  *Note:* The `Werkzeug` package includes type annotations or type stubs
  since version 2.0. Please uninstall the `types-Werkzeug`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `a5bc1e037fa9fb541d81de92ad27fa8543c65be4`.


pkgId: 60587ecb63fd597190ff6ebefd45d306285f253f4efff8c51080b51f9d9fbc49
name: python-types-aiofiles
arch: src
version: 23.1.0.1
epoch: 0
release: 1
summary: Typing stubs for aiofiles
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-43f5ff10-7d91-46b9-adf5-395ba059fcd8
location_href: 00010776-python-types-aiofiles/python-types-aiofiles-23.1.0.1-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `aiofiles` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `aiofiles`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/aiofiles. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: 2052767b3019ad769b02cafc3d6fed299caf7fc919a71234ca51b3f1079f7cb0
name: python-types-bleach
arch: src
version: 6.0.0.2
epoch: 0
release: 1
summary: Typing stubs for bleach
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-93e5b640-c892-4c8c-97bd-2fa5cacb8778
location_href: 00012585-python-types-bleach/python-types-bleach-6.0.0.2-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `bleach` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `bleach`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/bleach. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: ec0ca158f958b3bcba1102b03e4db957efed141041924c0914939839b0153f3e
name: python-types-boto
arch: src
version: 2.49.18.7
epoch: 0
release: 1
summary: Typing stubs for boto
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-050429ec-fd9e-4704-aa14-5bcf45506d63
location_href: 00013065-python-types-boto/python-types-boto-2.49.18.7-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `boto` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `boto`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/boto. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: 380daed7a8eddc6a6f83e0aef1a48d2726aae8bc9ca736c9cce2afed61ee59e7
name: python-types-cachetools
arch: src
version: 5.3.0.5
epoch: 0
release: 1
summary: Typing stubs for cachetools
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-121fea5a-bce0-4127-99e4-088b778be33a
location_href: 00010576-python-types-cachetools/python-types-cachetools-5.3.0.5-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `cachetools` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `cachetools`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/cachetools. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: 2bbf13aae6a588467e742e157b0c7dc3db2c42a01c6963f17765a30634a1155f
name: python-types-certifi
arch: src
version: 2021.10.8.3
epoch: 0
release: 1
summary: Typing stubs for certifi
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-850260b3-7b45-42d3-87ff-8336c23d2bee
location_href: 00011584-python-types-certifi/python-types-certifi-2021.10.8.3-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `certifi` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `certifi`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/certifi. All fixes for
  types and metadata should be contributed there.

  *Note:* The `certifi` package includes type annotations or type stubs
  since version 2022.5.18.1. Please uninstall the `types-certifi`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `95128e61ec82c2ca8ec32d6c03bd9dad9ab68e65`.


pkgId: 08fbcf07752eea89f5acd931410cf613460c70798fc22fb95df6ece8e6ea56ca
name: python-types-chardet
arch: src
version: 5.0.4.3
epoch: 0
release: 1
summary: Typing stubs for chardet
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-70a007a7-129a-480a-9627-16c8e8e37cf6
location_href: 00010382-python-types-chardet/python-types-chardet-5.0.4.3-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `chardet` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `chardet`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/chardet. All fixes for
  types and metadata should be contributed there.

  *Note:* The `chardet` package includes type annotations or type stubs
  since version 5.1.0. Please uninstall the `types-chardet`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: 9aca05d4d1e505aa7258874cd6b11561fcf68df09eb38fad912836f78a90d52b
name: python-types-click
arch: src
version: 7.1.8
epoch: 0
release: 1
summary: Typing stubs for click
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9956aeea-4100-4938-92b3-8b505e73d3dc
location_href: 00010629-python-types-click/python-types-click-7.1.8-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `click` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `click`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/click. All fixes for
  types and metadata should be contributed there.

  *Note:* The `click` package includes type annotations or type stubs
  since version 8.0. Please uninstall the `types-click`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `2445eddb4b67fdaa58ec7c2113ff1542021a6206`.


pkgId: 7706683185304030bdfc9b67b854adcdfd3db1a888848ba2f5a6d2f2b6a709b7
name: python-types-croniter
arch: src
version: 1.3.2.8
epoch: 0
release: 1
summary: Typing stubs for croniter
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2a5e0483-f2c4-4018-b05b-68fde1c6ca42
location_href: 00013701-python-types-croniter/python-types-croniter-1.3.2.8-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `croniter` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `croniter`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/croniter. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `02b8f77630c8dbb60a4d00c362d01519e9639591`.


pkgId: 5e4c069e869d9134ef5153bb6f65bd59e1653995018e799ac096d81130dd52d7
name: python-types-cryptography
arch: src
version: 3.3.23.2
epoch: 0
release: 1
summary: Typing stubs for cryptography
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6058dc96-4544-406f-b261-a89514707265
location_href: 00010376-python-types-cryptography/python-types-cryptography-3.3.23.2-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `cryptography` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `cryptography`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/cryptography. All fixes for
  types and metadata should be contributed there.

  *Note:* The `cryptography` package includes type annotations or type stubs
  since version 3.4.4. Please uninstall the `types-cryptography`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `c0e9038f0d71a38efc672ac5ef11aae0292c0a96`.


pkgId: aaef42a8bc8249dafd18726f5957405f83aaebf683f0cc7393b487237f55a5b5
name: python-types-dataclasses
arch: src
version: 0.6.6
epoch: 0
release: 1
summary: Typing stubs for dataclasses
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-80bac7de-f506-441c-949e-e0d1b700b6be
location_href: 00009633-python-types-dataclasses/python-types-dataclasses-0.6.6-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `dataclasses` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `dataclasses`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/dataclasses. All fixes for
  types and metadata should be contributed there.

  *Note:* `types-dataclasses` is unmaintained and won't be updated.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `ec7ab6d4d6147adf01565d3b2bb2ae4d750f6b1e`.


pkgId: d25af5823e82b415168646eb684e9ff304b39b7a8e58d8827a05f64d2732a5be
name: python-types-dateparser
arch: src
version: 1.1.4.9
epoch: 0
release: 1
summary: Typing stubs for dateparser
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1a3ce2f1-b168-4c8a-9f06-7c4166e11c41
location_href: 00013584-python-types-dateparser/python-types-dateparser-1.1.4.9-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `dateparser` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `dateparser`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/dateparser. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: 66f2319660ea691309be1301fc948774c39a3ba97aba5c05542043a036db65e4
name: python-types-decorator
arch: src
version: 5.1.8.3
epoch: 0
release: 1
summary: Typing stubs for decorator
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4afd35f0-525b-4d4b-b463-4e85861183b8
location_href: 00010674-python-types-decorator/python-types-decorator-5.1.8.3-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `decorator` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `decorator`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/decorator. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `880c0da4045cd5ff2c29b73429629adf27e49d50`.


pkgId: c5b2d522d8942c08eeb1b1af09b5554293dfb843b0867977986ac4d6e639f1c7
name: python-types-docutils
arch: src
version: 0.19.1.7
epoch: 0
release: 1
summary: Typing stubs for docutils
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0e7b9cf5-ef80-45ba-b57b-9bd5b06edd87
location_href: 00010813-python-types-docutils/python-types-docutils-0.19.1.7-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `docutils` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `docutils`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/docutils. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: 4b92968df74050c0fdfe54470c4b1607ac4939322a3829985246da06133d7a92
name: python-types-enum34
arch: src
version: 1.1.8
epoch: 0
release: 1
summary: Typing stubs for enum34
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a8ee0b59-344f-440b-aa15-1ad463d1c45e
location_href: 00010350-python-types-enum34/python-types-enum34-1.1.8-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `enum34` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `enum34`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/enum34. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `aea52b35d1f5a9306f66e1b98314f4ecbe0ffa7a`.


pkgId: 348ae6cb7a22ac273ea5f780aaff4bd934583f1ea3b4f3ed7ab20fda951d3368
name: python-types-filelock
arch: src
version: 3.2.7
epoch: 0
release: 1
summary: Typing stubs for filelock
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2f709b70-e311-4397-8d52-532da8069155
location_href: 00011900-python-types-filelock/python-types-filelock-3.2.7-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `filelock` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `filelock`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/filelock. All fixes for
  types and metadata should be contributed there.

  *Note:* The `filelock` package includes type annotations or type stubs
  since version 3.3.0. Please uninstall the `types-filelock`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `81fd55a885e678559471710f249c7e27d02ec212`.


pkgId: 48c1c226ffa44ac3e0536c345f4093094bb15d20ce887b5dc9a78654b90501d6
name: python-types-freezegun
arch: src
version: 1.1.10
epoch: 0
release: 1
summary: Typing stubs for freezegun
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-75352760-97f9-405f-9950-04ea9a2440ed
location_href: 00011169-python-types-freezegun/python-types-freezegun-1.1.10-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `freezegun` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `freezegun`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/freezegun. All fixes for
  types and metadata should be contributed there.

  *Note:* The `freezegun` package includes type annotations or type stubs
  since version 1.2.1. Please uninstall the `types-freezegun`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `81fd55a885e678559471710f249c7e27d02ec212`.


pkgId: 2323392078aa864e7a42379707cb564cd552d2544c98fb7a84cb10886adc8744
name: python-types-frozendict
arch: src
version: 2.0.9
epoch: 0
release: 1
summary: Typing stubs for frozendict
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-94e95916-093e-4961-8f83-7f133d3f7b57
location_href: 00011594-python-types-frozendict/python-types-frozendict-2.0.9-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `frozendict` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `frozendict`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/frozendict. All fixes for
  types and metadata should be contributed there.

  *Note:* The `frozendict` package includes type annotations or type stubs
  since version 2.2.0. Please uninstall the `types-frozendict`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `81fd55a885e678559471710f249c7e27d02ec212`.


pkgId: be37a3062934273798d73a64072b3e115d4d7d90385aeb6e62e5a1cb212f4327
name: python-types-futures
arch: src
version: 3.3.8
epoch: 0
release: 1
summary: Typing stubs for futures
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a7c7831b-1e91-4eeb-8659-deccab605b4d
location_href: 00009743-python-types-futures/python-types-futures-3.3.8-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `futures` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `futures`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/futures. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `0e185f40877a614c5ddd87815707cf8153296872`.


pkgId: 17b9d1fe40fe8d1bfb7f066e5ca9f989b78358e3a51e184be3accbdadedede90
name: python-types-maxminddb
arch: src
version: 1.5.0
epoch: 0
release: 1
summary: Typing stubs for maxminddb
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-560a7203-51c3-437d-92c1-e56d6dde479a
location_href: 00013857-python-types-maxminddb/python-types-maxminddb-1.5.0-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `maxminddb` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `maxminddb`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/maxminddb. All fixes for
  types and metadata should be contributed there.

  *Note:* The `maxminddb` package includes type annotations or type stubs
  since version 2.0.2. Please uninstall the `types-maxminddb`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `8ea6d6f33176d23bf29fb4213bd0c48e4013a721`.


pkgId: d5c291f26cc6e7751f2b8269067eff7ecdaeb61b50235c9230d9ffa6221403c2
name: python-types-mock
arch: src
version: 5.0.0.6
epoch: 0
release: 1
summary: Typing stubs for mock
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1781702e-14cc-49d6-9022-4d895f0e7afe
location_href: 00010264-python-types-mock/python-types-mock-5.0.0.6-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `mock` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `mock`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/mock. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: 2c62d3e5a61826dafa14f8d29817c86d1698fa4fd11d89531883f3f41a1247cd
name: python-types-orjson
arch: src
version: 3.6.2
epoch: 0
release: 1
summary: Typing stubs for orjson
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8265bad1-a63d-4b11-b2d5-a6e2edb30c46
location_href: 00010487-python-types-orjson/python-types-orjson-3.6.2-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `orjson` package.
  It can be used by type-checking tools like mypy, PyCharm, pytype etc. to check code
  that uses `orjson`. The source for this package can be found at
  https://github.com/python/typeshed/tree/master/stubs/orjson. All fixes for
  types and metadata should be contributed there.

  *Note:* The `orjson` package includes type annotations or type stubs
  since version 3.6.1. Please uninstall the `types-orjson`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/master/README.md for more details.
  This package was generated from typeshed commit `032e6ee90cbb938259a2aa2183966502de19108e`.


pkgId: 3a71c57e4f6fa3c0506987ccd804a4648942596812b2608a84bbeb89022bc06b
name: python-types-paramiko
arch: src
version: 3.0.0.7
epoch: 0
release: 1
summary: Typing stubs for paramiko
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6a59f759-3ab4-45a3-828b-581fb3e2d577
location_href: 00010954-python-types-paramiko/python-types-paramiko-3.0.0.7-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `paramiko` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `paramiko`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/paramiko. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `60939b00afede13feeec3cee6f6dfe6eb2df1593`.


pkgId: 2c9984e2de9aa39cc70f5630087220196d5bc6474524decb8c2e50563366cba8
name: python-types-protobuf
arch: src
version: 4.22.0.2
epoch: 0
release: 1
summary: Typing stubs for protobuf
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ccde2878-d9ef-413b-8265-da1c8f81f7b6
location_href: 00009740-python-types-protobuf/python-types-protobuf-4.22.0.2-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `protobuf` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `protobuf`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/protobuf. All fixes for
  types and metadata should be contributed there.

  Generated with aid from mypy-protobuf v3.4.0

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `60939b00afede13feeec3cee6f6dfe6eb2df1593`.


pkgId: 734a53081e163a395da999cfc02e24423543529ca23e580f212df3831c2ba3e3
name: python-types-python-dateutil
arch: src
version: 2.8.19.12
epoch: 0
release: 1
summary: Typing stubs for python-dateutil
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ca093def-2db7-4929-9af1-988d37af3cba
location_href: 00009616-python-types-python-dateutil/python-types-python-dateutil-2.8.19.12-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `python-dateutil` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `python-dateutil`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/python-dateutil. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `60939b00afede13feeec3cee6f6dfe6eb2df1593`.


pkgId: 2ad0916d8f7066fe201acd87f28cbe9ab8bd339ae0d04ee2ad63d4536a379ae8
name: python-types-python-slugify
arch: src
version: 8.0.0.2
epoch: 0
release: 1
summary: Typing stubs for python-slugify
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fa2b54ba-a6f9-438e-bc8e-5dfcf97ae097
location_href: 00013287-python-types-python-slugify/python-types-python-slugify-8.0.0.2-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `python-slugify` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `python-slugify`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/python-slugify. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6fd7e36e80e0448d9199d62d582c659c147be149`.


pkgId: 8bc6a431bf5a98a09591acef4feb085fefc4501704acbd7f9061c2d4f14f1837
name: python-types-pytz
arch: src
version: 2023.3.0.0
epoch: 0
release: 1
summary: Typing stubs for pytz
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6e6714fc-9158-4f0c-95f3-b60d308e90b5
location_href: 00009611-python-types-pytz/python-types-pytz-2023.3.0.0-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `pytz` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `pytz`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/pytz. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6f3e568cecbde108354cad3230efd7f0b8e07b3a`.


pkgId: 0e15a715d651455b26fb1c87038e5e1f63d210d5a89e442f06616c54876aed48
name: python-types-redis
arch: src
version: 4.5.4.1
epoch: 0
release: 1
summary: Typing stubs for redis
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-76e1f787-9d43-494d-8e25-a7f98a4545a4
location_href: 00010034-python-types-redis/python-types-redis-4.5.4.1-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `redis` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `redis`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/redis. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `ff3b558fb3c74d49c957a2a400d32d7319ba9dca`.


pkgId: 7e9b96f1848f60c883cbb7b0e2d06069625cbc13f14ecb8daea14a6497c9e139
name: python-types-requests
arch: src
version: 2.28.11.17
epoch: 0
release: 1
summary: Typing stubs for requests
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6c52dd67-57c1-479a-9391-3d4b54860f9a
location_href: 00009409-python-types-requests/python-types-requests-2.28.11.17-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `requests` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `requests`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/requests. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6b485a882325829dcbb6dd1d59c5e54b0bcfece1`.


pkgId: 1a61a4090ce55edf123f526c15be685dfb981e13d63cf5132afb36ed5c8ef987
name: python-types-retry
arch: src
version: 0.9.9.3
epoch: 0
release: 1
summary: Typing stubs for retry
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-86dcf350-2d9d-4fc8-9476-e2f84586a6ba
location_href: 00010531-python-types-retry/python-types-retry-0.9.9.3-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `retry` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `retry`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/retry. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6b485a882325829dcbb6dd1d59c5e54b0bcfece1`.


pkgId: 20771a8160d76b0b36a92990f8b028a4c90c0f12da474804e856a107976d969b
name: python-types-setuptools
arch: src
version: 67.6.0.7
epoch: 0
release: 1
summary: Typing stubs for setuptools
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ae6e0bb4-df71-41b7-ac46-965b35c0a0c4
location_href: 00009799-python-types-setuptools/python-types-setuptools-67.6.0.7-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `setuptools` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `setuptools`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/setuptools. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `60939b00afede13feeec3cee6f6dfe6eb2df1593`.


pkgId: d72d1aaaed74d5784b7b89de88c191e27f743a54b66160c21366dac43e119314
name: python-types-simplejson
arch: src
version: 3.18.0.3
epoch: 0
release: 1
summary: Typing stubs for simplejson
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1310a60b-0240-47cb-b406-da917c0517fc
location_href: 00010302-python-types-simplejson/python-types-simplejson-3.18.0.3-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `simplejson` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `simplejson`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/simplejson. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `ed915c5cde48329e3d1e597e60c4baee27b7854a`.


pkgId: aa16bd37982b3ba9c65c666d782e3e7d619d051a5e5e350000483aa7b5807e11
name: python-types-tabulate
arch: src
version: 0.9.0.2
epoch: 0
release: 1
summary: Typing stubs for tabulate
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-82a641bf-2fce-4b68-b9ad-ea19c8fdaf70
location_href: 00010225-python-types-tabulate/python-types-tabulate-0.9.0.2-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `tabulate` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `tabulate`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/tabulate. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6b485a882325829dcbb6dd1d59c5e54b0bcfece1`.


pkgId: b77ce0ee6f1256b39ee83f1c562b1d6ded7fd028dcc51ee5fec38f81b81cbfec
name: python-types-termcolor
arch: src
version: 1.1.6.2
epoch: 0
release: 1
summary: Typing stubs for termcolor
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4aa5e43c-5fa5-4b21-85eb-d0f50e45116d
location_href: 00010604-python-types-termcolor/python-types-termcolor-1.1.6.2-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `termcolor` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `termcolor`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/termcolor. All fixes for
  types and metadata should be contributed there.

  *Note:* The `termcolor` package includes type annotations or type stubs
  since version 2.0.0. Please uninstall the `types-termcolor`
  package if you use this or a newer version.


  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `72456da2a3546044508828dc9075fa25cbdb3645`.


pkgId: c6d9bd46f308e7a41b0134c6b33be7be7e417c5d6d1d6037b5ea3ef8a7ba1a58
name: python-types-toml
arch: src
version: 0.10.8.6
epoch: 0
release: 1
summary: Typing stubs for toml
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-67355a47-b411-415f-8f0f-df3313bf0e03
location_href: 00010483-python-types-toml/python-types-toml-0.10.8.6-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `toml` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `toml`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/toml. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `6b485a882325829dcbb6dd1d59c5e54b0bcfece1`.


pkgId: caa9a0fc904b8cfd90fdb9f2d7c970a4af894222444f2bb73e76faf0130be296
name: python-types-ujson
arch: src
version: 5.7.0.1
epoch: 0
release: 1
summary: Typing stubs for ujson
url: https://github.com/python/typeshed
rpm_license: Apache-2.0 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-51f16978-486a-4413-9c5a-9f21edea2476
location_href: 00010421-python-types-ujson/python-types-ujson-5.7.0.1-1.src.rpm
checksum_type: sha256
description:
  This is a PEP 561 type stub package for the `ujson` package. It
  can be used by type-checking tools like
  [mypy](https://github.com/python/mypy/),
  [pyright](https://github.com/microsoft/pyright),
  [pytype](https://github.com/google/pytype/),
  PyCharm, etc. to check code that uses
  `ujson`. The source for this package can be found at
  https://github.com/python/typeshed/tree/main/stubs/ujson. All fixes for
  types and metadata should be contributed there.

  See https://github.com/python/typeshed/blob/main/README.md for more details.
  This package was generated from typeshed commit `880c0da4045cd5ff2c29b73429629adf27e49d50`.


pkgId: 2be0192612bccb912b67635ed8a8b43467773cbd3bd93f79f6d536a25199022a
name: python-typing
arch: src
version: 3.10.0.0
epoch: 0
release: 1
summary: Type Hints for Python
url: https://docs.python.org/3/library/typing.html
rpm_license: PSF
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-39fe4b8e-aadb-4fc0-a94b-4f9c2fde1e67
location_href: 00009116-python-typing/python-typing-3.10.0.0-1.src.rpm
checksum_type: sha256
description:
  Typing -- Type Hints for Python

  This is a backport of the standard library typing module to Python
  versions older than 3.5.  (See note below for newer versions.)

  Typing defines a standard notation for Python function and variable
  type annotations. The notation can be used for documenting code in a
  concise, standard format, and it has been designed to also be used by
  static and runtime type checkers, static analyzers, IDEs and other
  tools.

  NOTE: in Python 3.5 and later, the typing module lives in the stdlib,
  and installing this package has NO EFFECT, because stdlib takes higher
  precedence than the installation directory. To get a newer version of
  the typing module in Python 3.5 or later, you have to upgrade to a
  newer Python (bugfix) version.  For example, typing in Python 3.6.0 is
  missing the definition of 'Type' -- upgrading to 3.6.2 will fix this.

  Also note that most improvements to the typing module in Python 3.7
  will not be included in this package, since Python 3.7 has some
  built-in support that is not present in older versions (See PEP 560.)

  For package maintainers, it is preferred to use
  ``typing;python_version<"3.5"`` if your package requires it to support
  earlier Python versions. This will avoid shadowing the stdlib typing
  module when your package is installed via ``pip install -t .`` on
  Python 3.5 or later.


pkgId: 36b4e6e62a78c2e57ada979f3f7714ada5f095c8b3ca8060e90d9bb69d5478c8
name: python-typing-compat
arch: src
version: 0.1.0
epoch: 0
release: 1
summary: Python typing compatibility library
url: https://github.com/rossmacarthur/typing-compat
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f646274e-23bc-450d-aee4-d4a0a0c64858
location_href: 00010406-python-typing-compat/python-typing-compat-0.1.0-1.src.rpm
checksum_type: sha256
description:
  <h1 align="center">typing-compat</h1>
  <div align="center">
    <strong>Python typing compatibility library</a></strong>
  </div>
  <br />
  <div align="center">
    <a href="https://github.com/rossmacarthur/typing-compat/actions?query=workflow%3Abuild">
      <img src="https://github.com/rossmacarthur/typing-compat/workflows/build/badge.svg?branch=master" alt="Build status" />
    </a>
    <a href="https://github.com/psf/black">
      <img src="https://img.shields.io/badge/code%20style-black-101010.svg" alt="Code style: black" />
    </a>
  </div>
  <br />

  In Python >=3.8 the `typing.get_origin` and `typing.get_args` functions are
  provided. This library aims to bring the identical behaviour of these functions
  to other versions of Python.



  ```bash
  pip install typing-compat
  ```



  ```python
  >>> from typing import List, Tuple, TypeVar
  >>> from typing_compat import get_args, get_origin
  >>> T = TypeVar('T')

  >>> tp = List[Tuple[T, T]][int]

  >>> get_args(tp)
  (typing.Tuple[int, int],)

  >>> get_origin(tp)
  <class 'list'>

  ```



  This library is licensed under either of

  - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
    https://www.apache.org/licenses/LICENSE-2.0)
  - MIT License ([LICENSE-MIT](LICENSE-MIT) or
    https://opensource.org/licenses/MIT)

  at your option.


pkgId: 8f880d1235b9e8378a42eab407c5a9bc03fd80bf6d7cb1f612a416b99ac94cbb
name: python-typing-inspect
arch: src
version: 0.8.0
epoch: 0
release: 1
summary: Runtime inspection utilities for typing module.
url: https://github.com/ilevkivskyi/typing_inspect
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d33a796f-a789-4817-acf0-5e225208fe56
location_href: 00005361-python-typing-inspect/python-typing-inspect-0.8.0-1.src.rpm
checksum_type: sha256
description:
  The "typing_inspect" module defines experimental API for runtime
  inspection of types defined in the standard "typing" module.


pkgId: 3e7151b96d1799f7c66b873db14429e0b72af575a7cf47a5323e050423b3ffda
name: python-tzwhere
arch: src
version: 3.0.3
epoch: 0
release: 1
summary: Python library to look up timezone from lat / long offline
url: https://github.com/pegler/pytzwhere
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e584e187-30dc-4db1-aac4-49bacdb94482
location_href: 00010040-python-tzwhere/python-tzwhere-3.0.3-1.src.rpm
checksum_type: sha256
description:
  pytzwhere is a Python library to lookup the timezone for a given lat/lng entirely offline.
  Version 3.0 fixes how `pytzwhere` deals with [holes](https://github.com/pegler/pytzwhere/issues/34) in timezones. It is recommended that you use version 3.0.
  It is a port from https://github.com/mattbornski/tzwhere with a few improvements. The underlying timezone data is based on work done by [Eric Muller](http://efele.net/maps/tz/world/)
  If used as a library, basic usage is as follows:
      >>> from tzwhere import tzwhere
      >>> tz = tzwhere.tzwhere()
      >>> print tz.tzNameAt(35.29, -89.66)
      America/Chicago
  The polygons used for building the timezones are based on VMAP0. Sometimes points are outside a VMAP0 polygon, but are clearly within a certain timezone (see also this [discussion](https://github.com/mattbornski/tzwhere/issues/8)). As a solution you can search for the closest timezone within a user defined radius.
  Dependencies:
    * `numpy` (optional)
    * `shapely`


pkgId: cfede1084ac62e767ee0e6cf16625dea42c65a5f1bdfb23e894ffbf0423177ef
name: python-u-msgpack-python
arch: src
version: 2.7.2
epoch: 0
release: 1
summary: A portable, lightweight MessagePack serializer and deserializer written in pure Python.
url: https://github.com/vsergeev/u-msgpack-python
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5afdb0ff-e5fa-455f-a83b-517e371b99e1
location_href: 00012567-python-u-msgpack-python/python-u-msgpack-python-2.7.2-1.src.rpm
checksum_type: sha256
description:
  u-msgpack-python is a lightweight `MessagePack <http://msgpack.org/>`_ serializer and deserializer module written in pure Python, compatible with both Python 2 and Python 3, as well as CPython and PyPy implementations of Python. u-msgpack-python is fully compliant with the latest `MessagePack specification <https://github.com/msgpack/msgpack/blob/master/spec.md>`_. In particular, it supports the new binary, UTF-8 string, and application-defined ext types. See https://github.com/vsergeev/u-msgpack-python for more information.


pkgId: ede4bb2a1cbc0cf0a72fbcdce39757f73e11a46c70e11b296375c5678ac10a0b
name: python-uc-micro-py
arch: src
version: 1.0.1
epoch: 0
release: 1
summary: Micro subset of unicode data files for linkify-it-py projects.
url: https://github.com/tsutsu3/uc.micro-py
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6a0d9ac8-fc10-42c5-9c3d-ddc66c827992
location_href: 00013018-python-uc-micro-py/python-uc-micro-py-1.0.1-1.src.rpm
checksum_type: sha256
description:
  [![pypi](https://img.shields.io/pypi/v/uc-micro-py)](https://pypi.org/project/uc-micro-py/)
  [![CI](https://github.com/tsutsu3/uc.micro-py/workflows/CI/badge.svg?branch=main)](https://github.com/tsutsu3/uc.micro-py/actions)
  [![codecov](https://codecov.io/gh/tsutsu3/uc.micro-py/branch/main/graph/badge.svg?token=5Y7559D69U)](https://codecov.io/gh/tsutsu3/uc.micro-py)

  This is a Python port of [uc.micro](https://github.com/markdown-it/uc.micro).

  > Micro subset of unicode data files for [linkify-it-py](https://github.com/tsutsu3/linkify-it-py) projects.

  **This package content is ONLY for [linkify-it-py](https://github.com/tsutsu3/linkify-it-py)projects needs.**



  ```bash
  pip install uc-micro-py
  ```


pkgId: 9f552fe77c27a8430927dba1f8ca6bd57ff654c0c9e8f86f1b949c1f57f4bf89
name: python-ufoLib2
arch: src
version: 0.14.0
epoch: 0
release: 1
summary: ufoLib2 is a UFO font processing library.
url: https://github.com/fonttools/ufoLib2
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7f1654be-0a0b-494f-8920-3ae6ff2d0ba1
location_href: 00005366-python-ufoLib2/python-ufoLib2-0.14.0-1.src.rpm
checksum_type: sha256
description:
  ufoLib2 is meant to be a thin representation of the Unified Font Object (UFO) version 3 data model, intended for programmatic manipulation and fast batch processing of UFOs.

  It resembles the defcon library, but does without notifications, the layout engine and other support classes. Where useful and possible, ufoLib2 tries to be API-compatible with defcon.

  It does not replace `fontTools.ufoLib` but builds on it. The eventual goal is to merge it into `fontTools.ufoLib.objects`.

  Documentation: https://ufolib2.readthedocs.io/en/latest/


pkgId: edde327fd2994db07a7869dab312d0c33610c73bce3508a493ba14b2bfee1268
name: python-ujson
arch: src
version: 5.7.0
epoch: 0
release: 1
summary: Ultra fast JSON encoder and decoder for Python
url: https://github.com/ultrajson/ultrajson
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0272fca1-6c01-4e7b-878a-6c09db7f6fef
location_href: 00005368-python-ujson/python-ujson-5.7.0-1.src.rpm
checksum_type: sha256
description:
  [![PyPI version](https://img.shields.io/pypi/v/ujson.svg?logo=pypi&logoColor=FFE873)](https://pypi.org/project/ujson)
  [![Supported Python versions](https://img.shields.io/pypi/pyversions/ujson.svg?logo=python&logoColor=FFE873)](https://pypi.org/project/ujson)
  [![PyPI downloads](https://img.shields.io/pypi/dm/ujson.svg)](https://pypistats.org/packages/ujson)
  [![GitHub Actions status](https://github.com/ultrajson/ultrajson/workflows/Test/badge.svg)](https://github.com/ultrajson/ultrajson/actions)
  [![codecov](https://codecov.io/gh/ultrajson/ultrajson/branch/main/graph/badge.svg)](https://codecov.io/gh/ultrajson/ultrajson)
  [![DOI](https://zenodo.org/badge/1418941.svg)](https://zenodo.org/badge/latestdoi/1418941)
  [![Code style: Black](https://img.shields.io/badge/code%20style-Black-000000.svg)](https://github.com/psf/black)

  UltraJSON is an ultra fast JSON encoder and decoder written in pure C with bindings for
  Python 3.7+.

  Install with pip:

  ```sh
  python -m pip install ujson
  ```



  May be used as a drop in replacement for most other JSON parsers for Python:

  ```pycon
  >>> import ujson
  >>> ujson.dumps([{"key": "value"}, 81, True])
  '[{"key":"value"},81,true]'
  >>> ujson.loads("""[{"key": "value"}, 81, true]""")
  [{'key': 'value'}, 81, True]
  ```





  Used to enable special encoding of "unsafe" HTML characters into safer Unicode
  sequences. Default is `False`:

  ```pycon
  >>> ujson.dumps("<script>John&Doe", encode_html_chars=True)
  '"\\u003cscript\\u003eJohn\\u0026Doe"'
  ```



  Limits output to ASCII and escapes all extended characters above 127. Default is `True`.
  If your end format supports UTF-8, setting this option to false is highly recommended to
  save space:

  ```pycon
  >>> ujson.dumps("åäö")
  '"\\u00e5\\u00e4\\u00f6"'
  >>> ujson.dumps("åäö", ensure_ascii=False)
  '"åäö"'
  ```



  Controls whether forward slashes (`/`) are escaped. Default is `True`:

  ```pycon
  >>> ujson.dumps("http://esn.me")
  '"http:\\/\\/esn.me"'
  >>> ujson.dumps("http://esn.me", escape_forward_slashes=False)
  '"http://esn.me"'
  ```



  Controls whether indentation ("pretty output") is enabled. Default is `0` (disabled):

  ```pycon
  >>> ujson.dumps({"foo": "bar"})
  '{"foo":"bar"}'
  >>> print(ujson.dumps({"foo": "bar"}, indent=4))
  {
      "foo":"bar"
  }
  ```



  *UltraJSON* calls/sec compared to other popular JSON parsers with performance gain
  specified below each.



  Linux 5.0.0-1032-azure x86_64 #34-Ubuntu SMP Mon Feb 10 19:37:25 UTC 2020



  - CPython 3.8.2 (default, Feb 28 2020, 14:28:43) [GCC 7.4.0]
  - nujson    : 1.35.2
  - orjson    : 2.6.1
  - simplejson: 3.17.0
  - ujson     : 2.0.2

  |                                                                               | ujson      | nujson     | orjson     | simplejson | json       |
  |-------------------------------------------------------------------------------|-----------:|-----------:|-----------:|-----------:|-----------:|
  | Array with 256 doubles                                                        |            |            |            |            |            |
  | encode                                                                        |     22,082 |      4,282 |     76,975 |      5,328 |      5,436 |
  | decode                                                                        |     24,127 |     34,349 |     29,059 |     14,174 |     13,822 |
  | Array with 256 UTF-8 strings                                                  |            |            |            |            |            |
  | encode                                                                        |      3,557 |      2,528 |     24,300 |      3,061 |      2,068 |
  | decode                                                                        |      2,030 |      2,490 |        931 |        406 |        358 |
  | Array with 256 strings                                                        |            |            |            |            |            |
  | encode                                                                        |     39,041 |     31,769 |     76,403 |     16,615 |     16,910 |
  | decode                                                                        |     25,185 |     24,287 |     34,437 |     32,388 |     27,999 |
  | Medium complex object                                                         |            |            |            |            |            |
  | encode                                                                        |     10,382 |     11,427 |     32,995 |      3,959 |      5,275 |
  | decode                                                                        |      9,785 |      9,796 |     11,515 |      5,898 |      7,200 |
  | Array with 256 True values                                                    |            |            |            |            |            |
  | encode                                                                        |    114,341 |    101,039 |    344,256 |     62,382 |     72,872 |
  | decode                                                                        |    149,367 |    151,615 |    181,123 |    114,597 |    130,392 |
  | Array with 256 dict{string, int} pairs                                        |            |            |            |            |            |
  | encode                                                                        |     13,715 |     14,420 |     51,942 |      3,271 |      6,584 |
  | decode                                                                        |     12,670 |     11,788 |     12,176 |      6,743 |      8,278 |
  | Dict with 256 arrays with 256 dict{string, int} pairs                         |            |            |            |            |            |
  | encode                                                                        |         50 |         54 |        216 |         10 |         23 |
  | decode                                                                        |         32 |         32 |         30 |         20 |         23 |
  | Dict with 256 arrays with 256 dict{string, int} pairs, outputting sorted keys |            |            |            |            |            |
  | encode                                                                        |         46 |         41 |            |          8 |         24 |
  | Complex object                                                                |            |            |            |            |            |
  | encode                                                                        |        533 |        582 |            |        408 |        431 |
  | decode                                                                        |        466 |        454 |            |        154 |        164 |



  For those with particular needs, such as Linux distribution packagers, several
  build options are provided in the form of environment variables.





  By default, debugging symbols are stripped on Linux platforms. Setting this
  environment variable with a value of `1` or `True` disables this behavior.



  These two environment variables are typically used together, something like:

  ```sh
  export UJSON_BUILD_DC_INCLUDES='/usr/include/double-conversion'
  export UJSON_BUILD_DC_LIBS='-ldouble-conversion'
  ```

  Users planning to link against an external shared library should be aware of
  the ABI-compatibility requirements this introduces when upgrading system
  libraries or copying compiled wheels to other machines.



  One or more directories, delimited by `os.pathsep` (same as the `PATH`
  environment variable), in which to look for `double-conversion` header files;
  the default is to use the bundled copy.



  Compiler flags needed to link the `double-conversion` library; the default
  is to use the bundled copy.


pkgId: deb71ee186843001ef96d2b0e448b5b2bdaf7de5c64edb15de72da8e01d57144
name: python-ujson-debuginfo
arch: aarch64
version: 5.7.0
epoch: 0
release: 1
summary: Debug information for package python-ujson
url: https://github.com/ultrajson/ultrajson
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-0272fca1-6c01-4e7b-878a-6c09db7f6fef
rpm_sourcerpm: python-ujson-5.7.0-1.src.rpm
location_href: 00005368-python-ujson/python-ujson-debuginfo-5.7.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-ujson.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: a840b13d47dc7072c4f2b4ed226194c905aefd6f79f5d33539ec4b9ac6dbc067
name: python-ujson-debugsource
arch: aarch64
version: 5.7.0
epoch: 0
release: 1
summary: Debug sources for package python-ujson
url: https://github.com/ultrajson/ultrajson
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-0272fca1-6c01-4e7b-878a-6c09db7f6fef
rpm_sourcerpm: python-ujson-5.7.0-1.src.rpm
location_href: 00005368-python-ujson/python-ujson-debugsource-5.7.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-ujson.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 852d765741f6de0d655a234fe07aca736d439947690a68c4d4e08fb831803c59
name: python-ulid-py
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: Universally Unique Lexicographically Sortable Identifier
url: https://github.com/ahawker/ulid
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8358382d-e906-4806-9785-8fb3ea581106
location_href: 00011167-python-ulid-py/python-ulid-py-1.1.0-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.org/ahawker/ulid.svg?branch=master)](https://travis-ci.org/ahawker/ulid)
  [![Build Status](https://ci.appveyor.com/api/projects/status/fy0hufnb8h6gwk4d/branch/master?svg=true)](https://ci.appveyor.com/project/ahawker/ulid/branch/master)
  [![codecov](https://codecov.io/gh/ahawker/ulid/branch/master/graph/badge.svg)](https://codecov.io/gh/ahawker/ulid)
  [![Code Climate](https://codeclimate.com/github/ahawker/ulid/badges/gpa.svg)](https://codeclimate.com/github/ahawker/ulid)
  [![Issue Count](https://codeclimate.com/github/ahawker/ulid/badges/issue_count.svg)](https://codeclimate.com/github/ahawker/ulid)

  [![PyPI Version](https://badge.fury.io/py/ulid-py.svg)](https://badge.fury.io/py/ulid-py)
  [![PyPI Versions](https://img.shields.io/pypi/pyversions/ulid-py.svg)](https://pypi.python.org/pypi/ulid-py)

  [![Updates](https://pyup.io/repos/github/ahawker/ulid/shield.svg)](https://pyup.io/repos/github/ahawker/ulid/)

  [![Documentation Status](https://readthedocs.org/projects/ulid/badge/?version=latest)](http://ulid.readthedocs.io/en/latest/?badge=latest)

  [Universally Unique Lexicographically Sortable Identifier](https://github.com/alizain/ulid) in [Python 3](https://www.python.org/).



  This project is actively maintained.



  To install ulid from [pip](https://pypi.python.org/pypi/pip):
  ```bash
      $ pip install ulid-py
  ```

  To install ulid from source:
  ```bash
      $ git clone git@github.com:ahawker/ulid.git
      $ cd ulid && python setup.py install
  ```



  Create a brand new ULID.

  The timestamp value (48-bits) is from [time.time()](https://docs.python.org/3/library/time.html?highlight=time.time#time.time) with millisecond precision.

  The randomness value (80-bits) is from [os.urandom()](https://docs.python.org/3/library/os.html?highlight=os.urandom#os.urandom).

  ```python
  >>> import ulid
  >>> ulid.new()
  <ULID('01BJQE4QTHMFP0S5J153XCFSP9')>
  ```

  Create a new ULID from an existing 128-bit value, such as a [UUID](https://docs.python.org/3/library/uuid.html).

  Supports ULID values as `int`, `bytes`, `str`, and `UUID` types.

  ```python
  >>> import ulid, uuid
  >>> value = uuid.uuid4()
  >>> value
  UUID('0983d0a2-ff15-4d83-8f37-7dd945b5aa39')
  >>> ulid.from_uuid(value)
  <ULID('09GF8A5ZRN9P1RYDVXV52VBAHS')>
  ```

  Create a new ULID from an existing timestamp value, such as a [datetime](https://docs.python.org/3/library/datetime.html#module-datetime) object.

  Supports timestamp values as `int`, `float`, `str`, `bytes`, `bytearray`, `memoryview`, `datetime`, `Timestamp`, and `ULID` types.

  ```python
  >>> import datetime, ulid
  >>> ulid.from_timestamp(datetime.datetime(1999, 1, 1))
  <ULID('00TM9HX0008S220A3PWSFVNFEH')>
  ```

  Create a new ULID from an existing randomness value.

  Supports randomness values as `int`, `float`, `str`, `bytes`, `bytearray`, `memoryview`, `Randomness`, and `ULID` types.

  ```python
  >>> import os, ulid
  >>> randomness = os.urandom(10)
  >>> ulid.from_randomness(randomness)
  >>> <ULID('01BJQHX2XEDK0VN0GMYWT9JN8S')>
  ```

  For cases when you don't necessarily control the data type (input from external system), you can use the `parse` method
  which will attempt to make the correct determination for you. Please note that this will be slightly slower than creating
  the instance from the respective `from_*` method as it needs to make a number of type/conditional checks.

  Supports values as `int`, `float`, `str`, `bytes`, `bytearray`, `memoryview`, `uuid.UUID`, and `ULID` types.

  ```python
  >>> import ulid
  >>> value = db.model.get_id()  ## Unsure about datatype -- Could be int, UUID, or string?
  >>> ulid.parse(value)
  >>> <ULID('0K0EDFETFM8SH912DBBD4ABXSZ')>
  ```

  Once you have a ULID object, there are a number of ways to interact with it.

  The `timestamp` method will give you a snapshot view of the first 48-bits of the ULID while the `randomness` method
  will give you a snapshot of the last 80-bits.

  ```python
  >>> import ulid
  >>> u = ulid.new()
  >>> u
  <ULID('01BJQM7SC7D5VVTG3J68ABFQ3N')>
  >>> u.timestamp()
  <Timestamp('01BJQM7SC7')>
  >>> u.randomness()
  <Randomness('D5VVTG3J68ABFQ3N')>
  ```

  The `ULID`, `Timestamp`, and `Randomness` classes all derive from the same base class, a `MemoryView`.

  A `MemoryView` provides the `bin`, `bytes`, `hex`, `int`, `oct`, and `str`, methods for changing any values representation.

  ```python
  >>> import ulid
  >>> u = ulid.new()
  >>> u
  <ULID('01BJQMF54D093DXEAWZ6JYRPAQ')>
  >>> u.timestamp()
  <Timestamp('01BJQMF54D')>
  >>> u.timestamp().int
  1497589322893
  >>> u.timestamp().bytes
  b'\x01\\\xafG\x94\x8d'
  >>> u.timestamp().datetime
  datetime.datetime(2017, 6, 16, 5, 2, 2, 893000)
  >>> u.randomness().bytes
  b'\x02F\xde\xb9\\\xf9\xa5\xecYW'
  >>> u.bytes[6:] == u.randomness().bytes
  True
  >>> u.str
  '01BJQMF54D093DXEAWZ6JYRPAQ'
  >>> u.int
  1810474399624548315999517391436142935
  >>> u.bin
  '0b1010111001010111101000111100101001000110100000010010001101101111010111001010111001111100110100101111011000101100101010111'
  >>> u.hex
  '0x15caf47948d0246deb95cf9a5ec5957'
  >>> u.oct
  '0o12712750745106402215572712717464573054527'
  ```

  A `MemoryView` also provides rich comparison functionality.

  ```python
  >>> import datetime, time, ulid
  >>> u1 = ulid.new()
  >>> time.sleep(5)
  >>> u2 = ulid.new()
  >>> u1 < u2
  True
  >>> u3 = ulid.from_timestamp(datetime.datetime(2039, 1, 1))
  >>> u1 < u2 < u3
  True
  >>> [u.timestamp().datetime for u in sorted([u2, u3, u1])]
  [datetime.datetime(2017, 6, 16, 5, 7, 14, 847000), datetime.datetime(2017, 6, 16, 5, 7, 26, 775000), datetime.datetime(2039, 1, 1, 8, 0)]
  ```



  * Collection of benchmarks to track performance.
  * Backport to Python 2.7?
  * See [Github Issues](https://github.com/ahawker/ulid/issues) for more!



  A fast implementation in pure python of the spec with binary format support.



  If you would like to contribute, simply fork the repository, push your changes and send a pull request.
  Pull requests will be brought into the `master` branch via a rebase and fast-forward merge with the goal of having a linear branch history with no merge commits.



  [Apache 2.0](LICENSE)



  UUID can be suboptimal for many uses-cases because:

  * It isn't the most character efficient way of encoding 128 bits of randomness
  * UUID v1/v2 is impractical in many environments, as it requires access to a unique, stable MAC address
  * UUID v3/v5 requires a unique seed and produces randomly distributed IDs, which can cause fragmentation in many data structures
  * UUID v4 provides no other information than randomness which can cause fragmentation in many data structures

  ULID provides:

  * 128-bit compatibility with UUID
  * 1.21e+24 unique ULIDs per millisecond
  * Lexicographically sortable!
  * Canonically encoded as a 26 character string, as opposed to the 36 character UUID
  * Uses Crockford's base32 for better efficiency and readability (5 bits per character)
  * Case insensitive
  * No special characters (URL safe)



  Below is the current specification of ULID as implemented in this repository.

  The binary format is implemented.

  ```
   01AN4Z07BY      79KA1307SR9X4MV3

  |----------|    |----------------|
   Timestamp          Randomness
    10chars            16chars
     48bits             80bits
  ```



  **Timestamp**
  * 48 bit integer
  * UNIX-time in milliseconds
  * Won't run out of space till the year 10895 AD.

  **Randomness**
  * 80 bits
  * Cryptographically secure source of randomness, if possible



  The left-most character must be sorted first, and the right-most character sorted last (lexical order).
  The default ASCII character set must be used. Within the same millisecond, sort order is not guaranteed



  Crockford's Base32 is used as shown. This alphabet excludes the letters I, L, O, and U to avoid confusion and abuse.

  ```
  0123456789ABCDEFGHJKMNPQRSTVWXYZ
  ```



  The components are encoded as 16 octets. Each component is encoded with the Most Significant Byte first (network byte order).

  ```
  0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                      32_bit_uint_time_high                    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |     16_bit_uint_time_low      |       16_bit_uint_random      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       32_bit_uint_random                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       32_bit_uint_random                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  ```



  ```
  ttttttttttrrrrrrrrrrrrrrrr

  where
  t is Timestamp
  r is Randomness
  ```



  * [Original Implementation (Javascript)](https://github.com/alizain/ulid)
  * [ulid (python)](https://github.com/mdipierro/ulid)


pkgId: 6b3f18c981876e25afc32280a31418cbd2c66949108cc0dc392b76e9fd0e25b9
name: python-ultimate-hosts-blacklist-test-launcher
arch: src
version: 3.0.0b38
epoch: 0
release: 1
summary: The test launcher of the Ultimate-Hosts-Blacklist project.
description: The test launcher of the Ultimate-Hosts-Blacklist project.
url: https://github.com/Ultimate-Hosts-Blacklist/test-launcher
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-26b5eac4-2222-48a7-8ea2-403d4cc31228
checksum_type: sha256
location_href:
  00012760-python-ultimate-hosts-blacklist-test-launcher/python-ultimate-hosts-blacklist-test-launcher-3.0.0b38-1.src.rpm


pkgId: 97467764c71c1403a7465043bc880e27ceb1ad75227f90fe80e70b098c211372
name: python-ultimate-hosts-blacklist-test-launcher-help
arch: noarch
version: 3.0.0b38
epoch: 0
release: 1
summary: Development documents and examples for ultimate-hosts-blacklist-test-launcher
description: The test launcher of the Ultimate-Hosts-Blacklist project.
url: https://github.com/Ultimate-Hosts-Blacklist/test-launcher
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-26b5eac4-2222-48a7-8ea2-403d4cc31228
rpm_sourcerpm: python-ultimate-hosts-blacklist-test-launcher-3.0.0b38-1.src.rpm
checksum_type: sha256
location_href:
  00012760-python-ultimate-hosts-blacklist-test-launcher/python-ultimate-hosts-blacklist-test-launcher-help-3.0.0b38-1.noarch.rpm


pkgId: fefc52a98224aca62908aae27d94014f3163c960b05c129d2b2285e0fd57c963
name: python-ultimate-hosts-blacklist-whitelist-dev
arch: src
version: 3.27.1
epoch: 0
release: 1
summary: The whitelisting tool of the Ultimate Hosts Blacklist project.
url: https://github.com/Ultimate-Hosts-Blacklist/whitelist/tree/script
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fddc1e25-d88a-442c-b079-73df46ae075c
checksum_type: sha256
description:
  This is the whitelisting tool provided by the Ultimate Hosts Blacklist project.
  The script is mainly used to whitelist subject (domains, IP, URL) into our
  infrastructure but it can also easily be used outside our infrastructure.
  The ultimate hosts blacklist whitelist (**UHBW**) tool allows you:
  * to append your own whitelist as complementary to our whitelist.
      uhb_whitelist -f inputfile -o outputfile -w whitelistfile
  * to anti-whitelist (reverse) only particular domains while still using our core list.
      uhb_whitelist -f inputfile -o outputfile --anti-whitelist antiwhitelistfile
  * to whitelist and anti-whitelist while still using our core list.
      uhb_whitelist -f inputfile -o outputfile --anti-whitelist antiwhitelistfile -w whitelistfile
  * to override our core whitelist whilst still applying your own personal whitelist and anti-whitelist.
      uhb_whitelist -f inputfile -o outputfile --anti-whitelist antiwhitelistfile -w whitelistfile -wc
  * to have a whitelist tool ready to use as a Python module.

location_href:
  00012777-python-ultimate-hosts-blacklist-whitelist-dev/python-ultimate-hosts-blacklist-whitelist-dev-3.27.1-1.src.rpm


pkgId: 111b1eb95290d502daa2a9d0584d1c438793ed16b787050c2bd452bd0dada7a6
name: python-ultimate-hosts-blacklist-whitelist-dev-help
arch: noarch
version: 3.27.1
epoch: 0
release: 1
summary: Development documents and examples for ultimate-hosts-blacklist-whitelist-dev
url: https://github.com/Ultimate-Hosts-Blacklist/whitelist/tree/script
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fddc1e25-d88a-442c-b079-73df46ae075c
rpm_sourcerpm: python-ultimate-hosts-blacklist-whitelist-dev-3.27.1-1.src.rpm
checksum_type: sha256
description:
  This is the whitelisting tool provided by the Ultimate Hosts Blacklist project.
  The script is mainly used to whitelist subject (domains, IP, URL) into our
  infrastructure but it can also easily be used outside our infrastructure.
  The ultimate hosts blacklist whitelist (**UHBW**) tool allows you:
  * to append your own whitelist as complementary to our whitelist.
      uhb_whitelist -f inputfile -o outputfile -w whitelistfile
  * to anti-whitelist (reverse) only particular domains while still using our core list.
      uhb_whitelist -f inputfile -o outputfile --anti-whitelist antiwhitelistfile
  * to whitelist and anti-whitelist while still using our core list.
      uhb_whitelist -f inputfile -o outputfile --anti-whitelist antiwhitelistfile -w whitelistfile
  * to override our core whitelist whilst still applying your own personal whitelist and anti-whitelist.
      uhb_whitelist -f inputfile -o outputfile --anti-whitelist antiwhitelistfile -w whitelistfile -wc
  * to have a whitelist tool ready to use as a Python module.

location_href:
  00012777-python-ultimate-hosts-blacklist-whitelist-dev/python-ultimate-hosts-blacklist-whitelist-dev-help-3.27.1-1.noarch.rpm


pkgId: eaf3e72eb3bd64115b22306bce3cadb946320eadc3ee59d536d28be2f9805914
name: python-uncertainties
arch: src
version: 3.1.7
epoch: 0
release: 1
url: http://uncertainties-python-package.readthedocs.io/
rpm_license: Revised BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7ee8d9c9-9720-4d0e-8129-4018a8b353aa
location_href: 00011056-python-uncertainties/python-uncertainties-3.1.7-1.src.rpm
checksum_type: sha256
summary:
  Transparent calculations with uncertainties on the quantities involved (aka error propagation); fast calculation of derivatives

description:
  ``uncertainties`` allows **calculations** such as (2 +/- 0.1)*2 = 4 +/-
  0.2 to be **performed transparently**.  Much more complex mathematical
  expressions involving numbers with uncertainties can also be evaluated
  directly.
  The ``uncertainties`` package **takes the pain and complexity out**
  of uncertainty calculations.
  **Detailed information** about this package can be found on its `main
  website`_.


pkgId: 78167d19be0286040f73911ef1971352f087342485c8f62a142cac3f7732816f
name: python-undetected-chromedriver
arch: src
version: 3.4.6
epoch: 0
release: 1
url: https://github.com/ultrafunkamsterdam/undetected-chromedriver
rpm_license: GPL-3.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8ecb6b06-6795-44f8-87f9-a14353be5e12
location_href: 00010643-python-undetected-chromedriver/python-undetected-chromedriver-3.4.6-1.src.rpm
checksum_type: sha256
summary:
  ('Selenium.webdriver.Chrome replacement with compatiblity for Brave, and other Chromium based browsers.', 'Not triggered by CloudFlare/Imperva/hCaptcha and such.', 'NOTE: results may vary due to many factors. No guarantees are given, except for ongoing efforts in understanding detection algorithms.')

description:
  https://github.com/ultrafunkamsterdam/undetected-chromedriver


  Optimized Selenium Chromedriver patch which does not trigger anti-bot services like Distill Network / Imperva / DataDome / Botprotect.io
  Automatically downloads the driver binary and patches it.

  * Tested until current chrome beta versions
  * Works also on Brave Browser and many other Chromium based browsers, some tweaking
  * Python 3.6++**

  - - -

  I will be putting limits on the issue tracker. It has beeen abused too long.
  any good news?
  Yes, i've opened [Undetected-Discussions](https://github.com/ultrafunkamsterdam/undetected-chromedriver/discussions) which i think will help us better in the long run.
  - - -


  - What a week. Had the recent advancedments in Automation-Detection algorithms pwned (so i thought) with 3.4.0, but apparently, for some OS-es this caused an error when    interacting with elements. Had to revert back using a different method, fix bugs, and now eventually was still able to stick to the initial idea (+ fixing bugs)
  - Update to chrome 110 caused another surprise, this time for HEADLESS users.
  - although headless is unsupported officially, i did patch it!
  - happy to announce IT IS NOW UNDETECTED AS WELL (but still unsupported ;))
  - special thanks here to [@mdmintz](https://github.com/mdmintz) and [@abdulzain6](https://github.com/abdulzain6)
  - also special thanks to [@sebdelsol](https://github.com/sebdelsol) for his help troughout the issues section completely voluntarily, you must be crazy :)


  **Big update! be careful as it -potentially- could break your code.**

  * rewritten the anti-detection mechanism instead of removing and renaming variables, we just keep them, but prevent them from being injected in the first place. This will keep us safe from detection at least for the near future.

  * rewritten the file naming, to prevent ending up with 1000 of {randomstring}_chromedriver.exe 's instead it is just called undetected_chromedriver.exe

  * cleanup removed compat,v2 files and tests folder






  * added an example containing some typical webdriver code, answers to commonly asked questions, pitfalls + showcasing some tricks to ditch
    the need for multithreading.



  * added WebElement.click_safe() method, which you can try in case you get detected after clicking a link. This is not guaranteed t o work.

  * added WebElement.children(self, tag=None, recursive=False)
    to easily get/find child nodes. example:
      ```
      body = driver.find_element('tag name', 'body')

      
      images = body.children()[6].children('img', True)
      srcs = list(map(lambda _:_.attrs.get('src'), images))
      ```

  * added example.py where i can point people at when asking silly questions
    (no, its actually quite cool, everyone should see it)
  * added support for lambda platform
  * added support for x86_32
  * added support for systems reporting as linux2
  * some refactoring





  - use_subprocess now defaults to True. too many people don't understand multiprocessing and __name__ == '__main__, and after testing, it
    seems not to make a difference anymore in chrome 104+

  - added no_sandbox, which defaults to True, and this without the annoying "you are using unsecure command line ..." bar.

  - update [Docker image](https://hub.docker.com/r/ultrafunk/undetected-chromedriver). you can now vnc or rdp into your container to see the
    actual browser window
    [![demo](https://i.imgur.com/51Ang6R.gif)](https://i.imgur.com/W7vriN9.mp4)

  - of course, "regular" mode works as well
    [![demo](https://i.imgur.com/2qSNyuK.gif)](https://i.imgur.com/2qSNyuK.mp4)



  **this version `might` break your code, test before update!**

  - **added new anti-detection logic!**

  - v2 has become the main module, so no need for references to v2 anymore. this mean you can now simply use:
    ```python
    import undetected_chromedriver as uc
    driver = uc.Chrome()
    driver.get('https://nowsecure.nl')
    ```
    for backwards compatibility, v2 is not removed, but aliassed to the main module.

  - Fixed "welcome screen" nagging on non-windows OS-es. For those nagfetishists who ❤ welcome screens and feeding google with even more data,
    use Chrome(suppress_welcome=False).

  - replaced `executable_path` in constructor in favor of `browser_executable_path`
    which should not be used unless you are the edge case (yep, you are) who can't add your custom chrome installation folder to your PATH
    environment variable, or have an army of different browsers/versions and automatic lookup returns the wrong browser

  - "v1" (?) moved to _compat for now.

  - fixed dependency versions

  - ChromeOptions custom handling removed, so it is compatible with `webdriver.chromium.options.ChromiumOptions`.

  - removed Chrome.get() fu and restored back to "almost" original:
      - no `with` statements needed anymore, although it will still work for the sake of backward-compatibility.
      - no sleeps, stop-start-sessions, delays, or async cdp black magic!
      - this will solve a lot of other "issues" as well.

  - test success to date: 100%

  - just to mention it another time, since some people have hard time reading:
    **headless is still WIP. Raising issues is needless**



  - change process creation behavior to be fully detached
  - changed .get(url) method to always use the contextmanager
  - changed .get(url) method to use cdp under the hood.

    ... the `with` statement is not necessary anymore ..

  - todo: work towards asyncification and selenium 4



  Whenever you encounter the daunted

  ```from session not created: This version of ChromeDriver only supports Chrome version 96 # or what ever version```

  the solution is simple:

   ```python
      import undetected_chromedriver as uc
      driver = uc.Chrome( version_main = 95 )
   ```

  **July 2021: Currently busy implementing selenium 4 for undetected-chromedriver**

  **newsflash: https://github.com/ultrafunkamsterdam/undetected-chromedriver/pull/255**



  ```
  pip install undetected-chromedriver
  ```



  To prevent unnecessary hair-pulling and issue-raising, please mind the **[important note at the end of this document](#important-note) .**

  <br>



  Literally, this is all you have to do. Settings are included and your browser executable is found automagically. This is also the snippet i
  recommend using in case you experience an issue.

  ```python
  import undetected_chromedriver as uc


  driver = uc.Chrome()
  driver.get( 'https://nowsecure.nl' )  # my own test test site with max anti-bot protection
  ```



  Literally, this is all you have to do. If a specified folder does not exist, a NEW profile is created. Data dirs which are specified like
  this will not be autoremoved on exit.

  ```python
  import undetected_chromedriver as uc


  options = uc.ChromeOptions()


  options.user_data_dir = "c:\\temp\\profile"


  driver = uc.Chrome(
      options = options , version_main = 94
      )  # version_main allows to specify your chrome version instead of following chrome global version

  driver.get( 'https://nowsecure.nl' )  # my own test test site with max anti-bot protection

  ```



  Literally, this is all you have to do. You can now listen and subscribe to the low level devtools-protocol. I just recently found out that
  is also on planning for future release of the official chromedriver. However i implemented my own for now. Since i needed it myself for
  investigation.

  ```python

  import undetected_chromedriver as uc
  from pprint import pformat

  driver = uc.Chrome(enable_cdp_events=True)

  def mylousyprintfunction(eventdata):
      print(pformat(eventdata))


  driver.add_cdp_listener("Network.dataReceived", mylousyprintfunction)
  driver.get('https://nowsecure.nl')  # known url using cloudflare's "under attack mode"


  def mylousyprintfunction(message):
      print(pformat(message))






  driver.add_cdp_listener('Network.requestWillBeSent', mylousyprintfunction)
  driver.add_cdp_listener('Network.dataReceived', mylousyprintfunction)






  driver.get('https://nowsecure.nl')


  {'method': 'Network.requestWillBeSent',
   'params': {'documentURL': 'https://nowsecure.nl/',
              'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
              'hasUserGesture': False,
              'initiator': {'type': 'other'},
              'loaderId': '449906A5C736D819123288133F2797E6',
              'request': {'headers': {'Upgrade-Insecure-Requests': '1',
                                      'User-Agent': 'Mozilla/5.0 (Windows NT '
                                                    '10.0; Win64; x64) '
                                                    'AppleWebKit/537.36 (KHTML, '
                                                    'like Gecko) '
                                                    'Chrome/90.0.4430.212 '
                                                    'Safari/537.36',
                                      'sec-ch-ua': '" Not A;Brand";v="99", '
                                                   '"Chromium";v="90", "Google '
                                                   'Chrome";v="90"',
                                      'sec-ch-ua-mobile': '?0'},
                          'initialPriority': 'VeryHigh',
                          'method': 'GET',
                          'mixedContentType': 'none',
                          'referrerPolicy': 'strict-origin-when-cross-origin',
                          'url': 'https://nowsecure.nl/'},
              'requestId': '449906A5C736D819123288133F2797E6',
              'timestamp': 190010.996717,
              'type': 'Document',
              'wallTime': 1621835932.112026}}
  {'method': 'Network.requestWillBeSentExtraInfo',
   'params': {'associatedCookies': [],
              'headers': {':authority': 'nowsecure.nl',
                          ':method': 'GET',
                          ':path': '/',
                          ':scheme': 'https',
                          'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
                          'accept-encoding': 'gzip, deflate, br',
                          'accept-language': 'en-US,en;q=0.9',
                          'sec-ch-ua': '" Not A;Brand";v="99", '
                                       '"Chromium";v="90", "Google '
                                       'Chrome";v="90"',
                          'sec-ch-ua-mobile': '?0',
                          'sec-fetch-dest': 'document',
                          'sec-fetch-mode': 'navigate',
                          'sec-fetch-site': 'none',
                          'sec-fetch-user': '?1',
                          'upgrade-insecure-requests': '1',
                          'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; '
                                        'x64) AppleWebKit/537.36 (KHTML, like '
                                        'Gecko) Chrome/90.0.4430.212 '
                                        'Safari/537.36'},
              'requestId': '449906A5C736D819123288133F2797E6'}}
  {'method': 'Network.responseReceivedExtraInfo',
   'params': {'blockedCookies': [],
              'headers': {'alt-svc': 'h3-27=":443"; ma=86400, h3-28=":443"; '
                                     'ma=86400, h3-29=":443"; ma=86400',
                          'cache-control': 'private, max-age=0, no-store, '
                                           'no-cache, must-revalidate, '
                                           'post-check=0, pre-check=0',
                          'cf-ray': '65444b779ae6546f-LHR',
                          'cf-request-id': '0a3e8d7eba0000546ffd3fa000000001',
                          'content-type': 'text/html; charset=UTF-8',
                          'date': 'Mon, 24 May 2021 05:58:53 GMT',
                          'expect-ct': 'max-age=604800, '
                                       'report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
                          'expires': 'Thu, 01 Jan 1970 00:00:01 GMT',
                          'nel': '{"report_to":"cf-nel","max_age":604800}',
                          'permissions-policy': 'accelerometer=(),autoplay=(),camera=(),clipboard-read=(),clipboard-write=(),fullscreen=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()',
                          'report-to': '{"endpoints":[{"url":"https:\\/\\/a.nel.cloudflare.com\\/report?s=CAfobYlmWImQ90e%2B4BFBhpPYL%2FyGyBvkcWAj%2B%2FVOLoEq0NVrD5jU9m5pi%2BKI%2BOAnINLPXOCoX2psLphA5Z38aZzWNr3eW%2BDTIK%2FQidc%3D"}],"group":"cf-nel","max_age":604800}',
                          'server': 'cloudflare',
                          'vary': 'Accept-Encoding',
                          'x-frame-options': 'SAMEORIGIN'},
              'requestId': '449906A5C736D819123288133F2797E6',
              'resourceIPAddressSpace': 'Public'}}
  {'method': 'Network.responseReceived',
   'params': {'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
              'loaderId': '449906A5C736D819123288133F2797E6',
              'requestId': '449906A5C736D819123288133F2797E6',
              'response': {'connectionId': 158,
                           'connectionReused': False,
                           'encodedDataLength': 851,
                           'fromDiskCache': False,
                           'fromPrefetchCache': False,
                           'fromServiceWorker': False,
                           'headers': {'alt-svc': 'h3-27=":443"; ma=86400, '
                                                  'h3-28=":443"; ma=86400, '
                                                  'h3-29=":443"; ma=86400',
                                       'cache-control': 'private, max-age=0, '
                                                        'no-store, no-cache, '
                                                        'must-revalidate, '
                                                        'post-check=0, '
                                                        'pre-check=0',
                                       'cf-ray': '65444b779ae6546f-LHR',
                                       'cf-request-id': '0a3e8d7eba0000546ffd3fa000000001',
                                       'content-type': 'text/html; charset=UTF-8',
                                       'date': 'Mon, 24 May 2021 05:58:53 GMT',
                                       'expect-ct': 'max-age=604800, '
                                                    'report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
                                       'expires': 'Thu, 01 Jan 1970 00:00:01 GMT',
                                       'nel': '{"report_to":"cf-nel","max_age":604800}',
                                       'permissions-policy': 'accelerometer=(),autoplay=(),camera=(),clipboard-read=(),clipboard-write=(),fullscreen=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()',
                                       'report-to': '{"endpoints":[{"url":"https:\\/\\/a.nel.cloudflare.com\\/report?s=CAfobYlmWImQ90e%2B4BFBhpPYL%2FyGyBvkcWAj%2B%2FVOLoEq0NVrD5jU9m5pi%2BKI%2BOAnINLPXOCoX2psLphA5Z38aZzWNr3eW%2BDTIK%2FQidc%3D"}],"group":"cf-nel","max_age":604800}',
                                       'server': 'cloudflare',
                                       'vary': 'Accept-Encoding',
                                       'x-frame-options': 'SAMEORIGIN'},
                           'mimeType': 'text/html',
                           'protocol': 'h2',
                           'remoteIPAddress': '104.21.5.197',
                           'remotePort': 443,
                           'requestHeaders': {':authority': 'nowsecure.nl',
                                              ':method': 'GET',
                                              ':path': '/',
                                              ':scheme': 'https',
                                              'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
                                              'accept-encoding': 'gzip, deflate, '
                                                                 'br',
                                              'accept-language': 'en-US,en;q=0.9',
                                              'sec-ch-ua': '" Not '
                                                           'A;Brand";v="99", '
                                                           '"Chromium";v="90", '
                                                           '"Google '
                                                           'Chrome";v="90"',
                                              'sec-ch-ua-mobile': '?0',
                                              'sec-fetch-dest': 'document',
                                              'sec-fetch-mode': 'navigate',
                                              'sec-fetch-site': 'none',
                                              'sec-fetch-user': '?1',
                                              'upgrade-insecure-requests': '1',
                                              'user-agent': 'Mozilla/5.0 '
                                                            '(Windows NT 10.0; '
                                                            'Win64; x64) '
                                                            'AppleWebKit/537.36 '
                                                            '(KHTML, like Gecko) '
                                                            'Chrome/90.0.4430.212 '
                                                            'Safari/537.36'},
                           'responseTime': 1621835932177.923,
                           'securityDetails': {'certificateId': 0,
                                               'certificateTransparencyCompliance': 'compliant',
                                               'cipher': 'AES_128_GCM',
                                               'issuer': 'Cloudflare Inc ECC '
                                                         'CA-3',
                                               'keyExchange': '',
                                               'keyExchangeGroup': 'X25519',
                                               'protocol': 'TLS 1.3',
                                               'sanList': ['sni.cloudflaressl.com',
                                                           '*.nowsecure.nl',
                                                           'nowsecure.nl'],
                                               'signedCertificateTimestampList': [{'hashAlgorithm': 'SHA-256',
                                                                                   'logDescription': 'Google '
                                                                                                     "'Argon2021' "
                                                                                                     'log',
                                                                                   'logId': 'F65C942FD1773022145418083094568EE34D131933BFDF0C2F200BCC4EF164E3',
                                                                                   'origin': 'Embedded '
                                                                                             'in '
                                                                                             'certificate',
                                                                                   'signatureAlgorithm': 'ECDSA',
                                                                                   'signatureData': '30450221008A25458182A6E7F608FE1492086762A367381E94137952FFD621BA2E60F7E2F702203BCDEBCE1C544DECF0A113DE12B33E299319E6240426F38F08DFC04EF2E42825',
                                                                                   'status': 'Verified',
                                                                                   'timestamp': 1598706372839.0},
                                                                                  {'hashAlgorithm': 'SHA-256',
                                                                                   'logDescription': 'DigiCert '
                                                                                                     'Yeti2021 '
                                                                                                     'Log',
                                                                                   'logId': '5CDC4392FEE6AB4544B15E9AD456E61037FBD5FA47DCA17394B25EE6F6C70ECA',
                                                                                   'origin': 'Embedded '
                                                                                             'in '
                                                                                             'certificate',
                                                                                   'signatureAlgorithm': 'ECDSA',
                                                                                   'signatureData': '3046022100A95A49C7435DBFC73406AC409062C27269E6E69F443A2213F3A085E3BCBD234A022100DEA878296F8A1DB43546DC1865A4C5AD2B90664A243AE0A3A6D4925802EE68A8',
                                                                                   'status': 'Verified',
                                                                                   'timestamp': 1598706372823.0}],
                                               'subjectName': 'sni.cloudflaressl.com',
                                               'validFrom': 1598659200,
                                               'validTo': 1630238400},
                           'securityState': 'secure',
                           'status': 503,
                           'statusText': '',
                           'timing': {'connectEnd': 40.414,
                                      'connectStart': 0,
                                      'dnsEnd': 0,
                                      'dnsStart': 0,
                                      'proxyEnd': -1,
                                      'proxyStart': -1,
                                      'pushEnd': 0,
                                      'pushStart': 0,
                                      'receiveHeadersEnd': 60.361,
                                      'requestTime': 190011.002239,
                                      'sendEnd': 41.348,
                                      'sendStart': 41.19,
                                      'sslEnd': 40.405,
                                      'sslStart': 10.853,
                                      'workerFetchStart': -1,
                                      'workerReady': -1,
                                      'workerRespondWithSettled': -1,
                                      'workerStart': -1},
                           'url': 'https://nowsecure.nl/'},
              'timestamp': 190011.06449,
              'type': 'Document'}}
  {'method': 'Page.frameStartedLoading',
   'params': {'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700'}}
  {'method': 'Page.frameNavigated',
   'params': {'frame': {'adFrameType': 'none',
                        'crossOriginIsolatedContextType': 'NotIsolated',
                        'domainAndRegistry': 'nowsecure.nl',
                        'gatedAPIFeatures': ['SharedArrayBuffers',
                                             'SharedArrayBuffersTransferAllowed'],
                        'id': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
                        'loaderId': '449906A5C736D819123288133F2797E6',
                        'mimeType': 'text/html',
                        'secureContextType': 'Secure',
                        'securityOrigin': 'https://nowsecure.nl',
                        'url': 'https://nowsecure.nl/'}}}
  {'method': 'Network.dataReceived',
   'params': {'dataLength': 9835,
              'encodedDataLength': 0,
              'requestId': '449906A5C736D819123288133F2797E6',
              'timestamp': 190011.093343}}
  {'method': 'Network.loadingFinished',
   'params': {'encodedDataLength': 10713,
              'requestId': '449906A5C736D819123288133F2797E6',
              'shouldReportCorbBlocking': False,
              'timestamp': 190011.064011}}
  {'method': 'Network.requestWillBeSent',
   'params': {'documentURL': 'https://nowsecure.nl/',
              'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
              'hasUserGesture': False,
              'initiator': {'stack': {'callFrames': [{'columnNumber': 51,
                                                      'functionName': '',
                                                      'lineNumber': 114,
                                                      'scriptId': '8',
                                                      'url': 'https://nowsecure.nl/'},
                                                     {'columnNumber': 9,
                                                      'functionName': '',
                                                      'lineNumber': 115,
                                                      'scriptId': '8',
                                                      'url': 'https://nowsecure.nl/'}]},
                            'type': 'script'},
              'loaderId': '449906A5C736D819123288133F2797E6',
              'request': {'headers': {'Referer': 'https://nowsecure.nl/',
                                      'User-Agent': 'Mozilla/5.0 (Windows NT '
                                                    '10.0; Win64; x64) '
                                                    'AppleWebKit/537.36 (KHTML, '
                                                    'like Gecko) '
                                                    'Chrome/90.0.4430.212 '
                                                    'Safari/537.36',
                                      'sec-ch-ua': '" Not A;Brand";v="99", '
                                                   '"Chromium";v="90", "Google '
                                                   'Chrome";v="90"',
                                      'sec-ch-ua-mobile': '?0'},
                          'initialPriority': 'Low',
                          'method': 'GET',
                          'mixedContentType': 'none',
                          'referrerPolicy': 'strict-origin-when-cross-origin',
                          'url': 'https://nowsecure.nl/cdn-cgi/challenge-platform/h/b/orchestrate/jsch/v1?ray=65444b779ae6546f'},
              'requestId': '17180.2',
              'timestamp': 190011.106133,
              'type': 'Script',
              'wallTime': 1621835932.221325}}
  {'method': 'Network.requestWillBeSent',
   'params': {'documentURL': 'https://nowsecure.nl/',
              'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
              'hasUserGesture': False,
              'initiator': {'columnNumber': 13,
                            'lineNumber': 117,
                            'type': 'parser',
                            'url': 'https://nowsecure.nl/'},
              'loaderId': '449906A5C736D819123288133F2797E6',
              'request': {'headers': {'Referer': 'https://nowsecure.nl/',
                                      'User-Agent': 'Mozilla/5.0 (Windows NT '
                                                    '10.0; Win64; x64) '
                                                    'AppleWebKit/537.36 (KHTML, '
                                                    'like Gecko) '
                                                    'Chrome/90.0.4430.212 '
                                                    'Safari/537.36',
                                      'sec-ch-ua': '" Not A;Brand";v="99", '
                                                   '"Chromium";v="90", "Google '
                                                   'Chrome";v="90"',
                                      'sec-ch-ua-mobile': '?0'},
                          'initialPriority': 'Low',
                          'method': 'GET',
                          'mixedContentType': 'none',
                          'referrerPolicy': 'strict-origin-when-cross-origin',
                          'url': 'https://nowsecure.nl/cdn-cgi/images/trace/jschal/js/transparent.gif?ray=65444b779ae6546f'},
              'requestId': '17180.3',
              'timestamp': 190011.106911,
              'type': 'Image',
              'wallTime': 1621835932.222102}}
  {'method': 'Network.requestWillBeSent',
   'params': {'documentURL': 'https://nowsecure.nl/',
              'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
              'hasUserGesture': False,
              'initiator': {'type': 'parser', 'url': 'https://nowsecure.nl/'},
              'loaderId': '449906A5C736D819123288133F2797E6',
              'request': {'headers': {'Referer': 'https://nowsecure.nl/',
                                      'User-Agent': 'Mozilla/5.0 (Windows NT '
                                                    '10.0; Win64; x64) '
                                                    'AppleWebKit/537.36 (KHTML, '
                                                    'like Gecko) '
                                                    'Chrome/90.0.4430.212 '
                                                    'Safari/537.36',
                                      'sec-ch-ua': '" Not A;Brand";v="99", '
                                                   '"Chromium";v="90", "Google '
                                                   'Chrome";v="90"',
                                      'sec-ch-ua-mobile': '?0'},
                          'initialPriority': 'Low',
                          'method': 'GET',
                          'mixedContentType': 'none',
                          'referrerPolicy': 'strict-origin-when-cross-origin',
                          'url': 'https://nowsecure.nl/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray=65444b779ae6546f'},
              'requestId': '17180.4',
              'timestamp': 190011.109527,
              'type': 'Image',
              'wallTime': 1621835932.224719}}
  {'method': 'Page.domContentEventFired', 'params': {'timestamp': 190011.110345}}
  {'method': 'Network.requestWillBeSentExtraInfo',
   'params': {'associatedCookies': [],
              'clientSecurityState': {'initiatorIPAddressSpace': 'Public',
                                      'initiatorIsSecureContext': True,
                                      'privateNetworkRequestPolicy': 'WarnFromInsecureToMorePrivate'},
              'headers': {':authority': 'nowsecure.nl',
                          ':method': 'GET',
                          ':path': '/cdn-cgi/images/trace/jschal/js/transparent.gif?ray=65444b779ae6546f',
                          ':scheme': 'https',
                          'accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
                          'accept-encoding': 'gzip, deflate, br',
                          'accept-language': 'en-US,en;q=0.9',
                          'referer': 'https://nowsecure.nl/',
                          'sec-ch-ua': '" Not A;Brand";v="99", '
                                       '"Chromium";v="90", "Google '
                                       'Chrome";v="90"',
                          'sec-ch-ua-mobile': '?0',
                          'sec-fetch-dest': 'image',
                          'sec-fetch-mode': 'no-cors',
                          'sec-fetch-site': 'same-origin',
                          'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; '
                                        'x64) AppleWebKit/537.36 (KHTML, like '
                                        'Gecko) Chrome/90.0.4430.212 '
                                        'Safari/537.36'},
              'requestId': '17180.3'}}
  {'method': 'Network.requestWillBeSentExtraInfo',
   'params': {'associatedCookies': [],
              'clientSecurityState': {'initiatorIPAddressSpace': 'Public',
                                      'initiatorIsSecureContext': True,
                                      'privateNetworkRequestPolicy': 'WarnFromInsecureToMorePrivate'},
              'headers': {':authority': 'nowsecure.nl',
                          ':method': 'GET',
                          ':path': '/cdn-cgi/challenge-platform/h/b/orchestrate/jsch/v1?ray=65444b779ae6546f',
                          ':scheme': 'https',
                          'accept': '*/*',
                          'accept-encoding': 'gzip, deflate, br',
                          'accept-language': 'en-US,en;q=0.9',
                          'referer': 'https://nowsecure.nl/',
                          'sec-ch-ua': '" Not A;Brand";v="99", '
                                       '"Chromium";v="90", "Google '
                                       'Chrome";v="90"',
                          'sec-ch-ua-mobile': '?0',
                          'sec-fetch-dest': 'script',
                          'sec-fetch-mode': 'no-cors',
                          'sec-fetch-site': 'same-origin',
                          'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; '
                                        'x64) AppleWebKit/537.36 (KHTML, like '
                                        'Gecko) Chrome/90.0.4430.212 '
                                        'Safari/537.36'},
              'requestId': '17180.2'}}
  {'method': 'Network.requestWillBeSentExtraInfo',
   'params': {'associatedCookies': [],
              'clientSecurityState': {'initiatorIPAddressSpace': 'Public',
                                      'initiatorIsSecureContext': True,
                                      'privateNetworkRequestPolicy': 'WarnFromInsecureToMorePrivate'},
              'headers': {':authority': 'nowsecure.nl',
                          ':method': 'GET',
                          ':path': '/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray=65444b779ae6546f',
                          ':scheme': 'https',
                          'accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
                          'accept-encoding': 'gzip, deflate, br',
                          'accept-language': 'en-US,en;q=0.9',
                          'referer': 'https://nowsecure.nl/',
                          'sec-ch-ua': '" Not A;Brand";v="99", '
                                       '"Chromium";v="90", "Google '
                                       'Chrome";v="90"',
                          'sec-ch-ua-mobile': '?0',
                          'sec-fetch-dest': 'image',
                          'sec-fetch-mode': 'no-cors',
                          'sec-fetch-site': 'same-origin',
                          'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; '
                                        'x64) AppleWebKit/537.36 (KHTML, like '
                                        'Gecko) Chrome/90.0.4430.212 '
                                        'Safari/537.36'},
              'requestId': '17180.4'}}
  {'method': 'Network.responseReceivedExtraInfo',
   'params': {'blockedCookies': [],
              'headers': {'accept-ranges': 'bytes',
                          'cache-control': 'max-age=7200\npublic',
                          'cf-ray': '65444b781d1de604-LHR',
                          'content-length': '42',
                          'content-type': 'image/gif',
                          'date': 'Mon, 24 May 2021 05:58:53 GMT',
                          'etag': '"60a4d856-2a"',
                          'expires': 'Mon, 24 May 2021 07:58:53 GMT',
                          'last-modified': 'Wed, 19 May 2021 09:20:22 GMT',
                          'server': 'cloudflare',
                          'vary': 'Accept-Encoding',
                          'x-content-type-options': 'nosniff',
                          'x-frame-options': 'DENY'},
              'requestId': '17180.3',
              'resourceIPAddressSpace': 'Public'}}
  {'method': 'Network.responseReceivedExtraInfo',
   'params': {'blockedCookies': [],
              'headers': {'accept-ranges': 'bytes',
                          'cache-control': 'max-age=7200\npublic',
                          'cf-ray': '65444b781d1fe604-LHR',
                          'content-length': '42',
                          'content-type': 'image/gif',
                          'date': 'Mon, 24 May 2021 05:58:53 GMT',
                          'etag': '"60a4d856-2a"',
                          'expires': 'Mon, 24 May 2021 07:58:53 GMT',
                          'last-modified': 'Wed, 19 May 2021 09:20:22 GMT',
                          'server': 'cloudflare',
                          'vary': 'Accept-Encoding',
                          'x-content-type-options': 'nosniff',
                          'x-frame-options': 'DENY'},
              'requestId': '17180.4',
              'resourceIPAddressSpace': 'Public'}}
  {'method': 'Network.resourceChangedPriority',
   'params': {'newPriority': 'High',
              'requestId': '17180.4',
              'timestamp': 190011.171057}}
  {'method': 'Network.responseReceived',
   'params': {'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
              'loaderId': '449906A5C736D819123288133F2797E6',
              'requestId': '17180.3',
              'response': {'connectionId': 0,
                           'connectionReused': False,
                           'encodedDataLength': 214,
                           'fromDiskCache': False,
                           'fromPrefetchCache': False,
                           'fromServiceWorker': False,
                           'headers': {'accept-ranges': 'bytes',
                                       'cache-control': 'max-age=7200\npublic',
                                       'cf-ray': '65444b781d1de604-LHR',
                                       'content-length': '42',
                                       'content-type': 'image/gif',
                                       'date': 'Mon, 24 May 2021 05:58:53 GMT',
                                       'etag': '"60a4d856-2a"',
                                       'expires': 'Mon, 24 May 2021 07:58:53 GMT',
                                       'last-modified': 'Wed, 19 May 2021 '
                                                        '09:20:22 GMT',
                                       'server': 'cloudflare',
                                       'vary': 'Accept-Encoding',
                                       'x-content-type-options': 'nosniff',
                                       'x-frame-options': 'DENY'},
                           'mimeType': 'image/gif',
                           'protocol': 'h3-29',
                           'remoteIPAddress': '104.21.5.197',
                           'remotePort': 443,
                           'requestHeaders': {':authority': 'nowsecure.nl',
                                              ':method': 'GET',
                                              ':path': '/cdn-cgi/images/trace/jschal/js/transparent.gif?ray=65444b779ae6546f',
                                              ':scheme': 'https',
                                              'accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
                                              'accept-encoding': 'gzip, deflate, '
                                                                 'br',
                                              'accept-language': 'en-US,en;q=0.9',
                                              'referer': 'https://nowsecure.nl/',
                                              'sec-ch-ua': '" Not '
                                                           'A;Brand";v="99", '
                                                           '"Chromium";v="90", '
                                                           '"Google '
                                                           'Chrome";v="90"',
                                              'sec-ch-ua-mobile': '?0',
                                              'sec-fetch-dest': 'image',
                                              'sec-fetch-mode': 'no-cors',
                                              'sec-fetch-site': 'same-origin',
                                              'user-agent': 'Mozilla/5.0 '
                                                            '(Windows NT 10.0; '
                                                            'Win64; x64) '
                                                            'AppleWebKit/537.36 '
                                                            '(KHTML, like Gecko) '
                                                            'Chrome/90.0.4430.212 '
                                                            'Safari/537.36'},
                           'responseTime': 1621835932265.169,
                           'securityDetails': {'certificateId': 0,
                                               'certificateTransparencyCompliance': 'compliant',
                                               'cipher': 'AES_128_GCM',
                                               'issuer': 'Cloudflare Inc ECC '
                                                         'CA-3',
                                               'keyExchange': '',
                                               'keyExchangeGroup': 'X25519',
                                               'protocol': 'QUIC',
                                               'sanList': ['sni.cloudflaressl.com',
                                                           '*.nowsecure.nl',
                                                           'nowsecure.nl'],
                                               'signedCertificateTimestampList': [{'hashAlgorithm': 'SHA-256',
                                                                                   'logDescription': 'Google '
                                                                                                     "'Argon2021' "
                                                                                                     'log',
                                                                                   'logId': 'F65C942FD1773022145418083094568EE34D131933BFDF0C2F200BCC4EF164E3',
                                                                                   'origin': 'Embedded '
                                                                                             'in '
                                                                                             'certificate',
                                                                                   'signatureAlgorithm': 'ECDSA',
                                                                                   'signatureData': '30450221008A25458182A6E7F608FE1492086762A367381E94137952FFD621BA2E60F7E2F702203BCDEBCE1C544DECF0A113DE12B33E299319E6240426F38F08DFC04EF2E42825',
                                                                                   'status': 'Verified',
                                                                                   'timestamp': 1598706372839.0},
                                                                                  {'hashAlgorithm': 'SHA-256',
                                                                                   'logDescription': 'DigiCert '
                                                                                                     'Yeti2021 '
                                                                                                     'Log',
                                                                                   'logId': '5CDC4392FEE6AB4544B15E9AD456E61037FBD5FA47DCA17394B25EE6F6C70ECA',
                                                                                   'origin': 'Embedded '
                                                                                             'in '
                                                                                             'certificate',
                                                                                   'signatureAlgorithm': 'ECDSA',
                                                                                   'signatureData': '3046022100A95A49C7435DBFC73406AC409062C27269E6E69F443A2213F3A085E3BCBD234A022100DEA878296F8A1DB43546DC1865A4C5AD2B90664A243AE0A3A6D4925802EE68A8',
                                                                                   'status': 'Verified',
                                                                                   'timestamp': 1598706372823.0}],
                                               'subjectName': 'sni.cloudflaressl.com',
                                               'validFrom': 1598659200,
                                               'validTo': 1630238400},
                           'securityState': 'secure',
                           'status': 200,
                           'statusText': '',
                           'timing': {'connectEnd': 26.087,
                                      'connectStart': 0,
                                      'dnsEnd': 0,
                                      'dnsStart': 0,
                                      'proxyEnd': -1,
                                      'proxyStart': -1,
                                      'pushEnd': 0,
                                      'pushStart': 0,
                                      'receiveHeadersEnd': 40.709,
                                      'requestTime': 190011.109386,
                                      'sendEnd': 26.346,
                                      'sendStart': 26.182,
                                      'sslEnd': 26.087,
                                      'sslStart': 0,
                                      'workerFetchStart': -1,
                                      'workerReady': -1,
                                      'workerRespondWithSettled': -1,
                                      'workerStart': -1},
                           'url': 'https://nowsecure.nl/cdn-cgi/images/trace/jschal/js/transparent.gif?ray=65444b779ae6546f'},
              'timestamp': 190011.174536,
              'type': 'Image'}}
  {'method': 'Network.dataReceived',
   'params': {'dataLength': 42,
              'encodedDataLength': 0,
              'requestId': '17180.3',
              'timestamp': 190011.174737}}
  {'method': 'Network.dataReceived',
   'params': {'dataLength': 0,
              'encodedDataLength': 44,
              'requestId': '17180.3',
              'timestamp': 190011.17524}}
  {'method': 'Network.loadingFinished',
   'params': {'encodedDataLength': 258,
              'requestId': '17180.3',
              'shouldReportCorbBlocking': False,
              'timestamp': 190011.152073}}
  {'method': 'Network.responseReceived',
   'params': {'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
              'loaderId': '449906A5C736D819123288133F2797E6',
              'requestId': '17180.4',
              'response': {'connectionId': 0,
                           'connectionReused': True,
                           'encodedDataLength': 178,
                           'fromDiskCache': False,
                           'fromPrefetchCache': False,
                           'fromServiceWorker': False,
                           'headers': {'accept-ranges': 'bytes',
                                       'cache-control': 'max-age=7200\npublic',
                                       'cf-ray': '65444b781d1fe604-LHR',
                                       'content-length': '42',
                                       'content-type': 'image/gif',
                                       'date': 'Mon, 24 May 2021 05:58:53 GMT',
                                       'etag': '"60a4d856-2a"',
                                       'expires': 'Mon, 24 May 2021 07:58:53 GMT',
                                       'last-modified': 'Wed, 19 May 2021 '
                                                        '09:20:22 GMT',
                                       'server': 'cloudflare',
                                       'vary': 'Accept-Encoding',
                                       'x-content-type-options': 'nosniff',
                                       'x-frame-options': 'DENY'},
                           'mimeType': 'image/gif',
                           'protocol': 'h3-29',
                           'remoteIPAddress': '104.21.5.197',
                           'remotePort': 443,
                           'requestHeaders': {':authority': 'nowsecure.nl',
                                              ':method': 'GET',
                                              ':path': '/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray=65444b779ae6546f',
                                              ':scheme': 'https',
                                              'accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
                                              'accept-encoding': 'gzip, deflate, '
                                                                 'br',
                                              'accept-language': 'en-US,en;q=0.9',
                                              'referer': 'https://nowsecure.nl/',
                                              'sec-ch-ua': '" Not '
                                                           'A;Brand";v="99", '
                                                           '"Chromium";v="90", '
                                                           '"Google '
                                                           'Chrome";v="90"',
                                              'sec-ch-ua-mobile': '?0',
                                              'sec-fetch-dest': 'image',
                                              'sec-fetch-mode': 'no-cors',
                                              'sec-fetch-site': 'same-origin',
                                              'user-agent': 'Mozilla/5.0 '
                                                            '(Windows NT 10.0; '
                                                            'Win64; x64) '
                                                            'AppleWebKit/537.36 '
                                                            '(KHTML, like Gecko) '
                                                            'Chrome/90.0.4430.212 '
                                                            'Safari/537.36'},
                           'responseTime': 1621835932268.067,
                           'securityDetails': {'certificateId': 0,
                                               'certificateTransparencyCompliance': 'compliant',
                                               'cipher': 'AES_128_GCM',
                                               'issuer': 'Cloudflare Inc ECC '
                                                         'CA-3',
                                               'keyExchange': '',
                                               'keyExchangeGroup': 'X25519',
                                               'protocol': 'QUIC',
                                               'sanList': ['sni.cloudflaressl.com',
                                                           '*.nowsecure.nl',
                                                           'nowsecure.nl'],
                                               'signedCertificateTimestampList': [{'hashAlgorithm': 'SHA-256',
                                                                                   'logDescription': 'Google '
                                                                                                     "'Argon2021' "
                                                                                                     'log',
                                                                                   'logId': 'F65C942FD1773022145418083094568EE34D131933BFDF0C2F200BCC4EF164E3',
                                                                                   'origin': 'Embedded '
                                                                                             'in '
                                                                                             'certificate',
                                                                                   'signatureAlgorithm': 'ECDSA',
                                                                                   'signatureData': '30450221008A25458182A6E7F608FE1492086762A367381E94137952FFD621BA2E60F7E2F702203BCDEBCE1C544DECF0A113DE12B33E299319E6240426F38F08DFC04EF2E42825',
                                                                                   'status': 'Verified',
                                                                                   'timestamp': 1598706372839.0},
                                                                                  {'hashAlgorithm': 'SHA-256',
                                                                                   'logDescription': 'DigiCert '
                                                                                                     'Yeti2021 '
                                                                                                     'Log',
                                                                                   'logId': '5CDC4392FEE6AB4544B15E9AD456E61037FBD5FA47DCA17394B25EE6F6C70ECA',
                                                                                   'origin': 'Embedded '
                                                                                             'in '
                                                                                             'certificate',
                                                                                   'signatureAlgorithm': 'ECDSA',
                                                                                   'signatureData': '3046022100A95A49C7435DBFC73406AC409062C27269E6E69F443A2213F3A085E3BCBD234A022100DEA878296F8A1DB43546DC1865A4C5AD2B90664A243AE0A3A6D4925802EE68A8',
                                                                                   'status': 'Verified',
                                                                                   'timestamp': 1598706372823.0}],
                                               'subjectName': 'sni.cloudflaressl.com',
                                               'validFrom': 1598659200,
                                               'validTo': 1630238400},
                           'securityState': 'secure',
                           'status': 200,
                           'statusText': '',
                           'timing': {'connectEnd': -1,
                                      'connectStart': -1,
                                      'dnsEnd': -1,
                                      'dnsStart': -1,
                                      'proxyEnd': -1,
                                      'proxyStart': -1,
                                      'pushEnd': 0,
                                      'pushStart': 0,
                                      'receiveHeadersEnd': 42.415,
                                      'requestTime': 190011.110341,
                                      'sendEnd': 25.713,
                                      'sendStart': 25.609,
                                      'sslEnd': -1,
                                      'sslStart': -1,
                                      'workerFetchStart': -1,
                                      'workerReady': -1,
                                      'workerRespondWithSettled': -1,
                                      'workerStart': -1},
                           'url': 'https://nowsecure.nl/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray=65444b779ae6546f'},
              'timestamp': 190011.175727,
              'type': 'Image'}}
  {'method': 'Network.dataReceived',
   'params': {'dataLength': 42,
              'encodedDataLength': 0,
              'requestId': '17180.4',
              'timestamp': 190011.175856}}
  {'method': 'Network.dataReceived',
   'params': {'dataLength': 0,
              'encodedDataLength': 44,
              'requestId': '17180.4',
              'timestamp': 190011.176133}}
  {'method': 'Network.loadingFinished',
   'params': {'encodedDataLength': 222,
              'requestId': '17180.4',
              'shouldReportCorbBlocking': False,
              'timestamp': 190011.153335}}
  {'method': 'Network.responseReceivedExtraInfo',
   'params': {'blockedCookies': [],
              'headers': {'alt-svc': 'h3-27=":443"; ma=86400, h3-28=":443"; '
                                     'ma=86400, h3-29=":443"; ma=86400',
                          'cache-control': 'max-age=0, must-revalidate',
                          'cf-ray': '65444b781d1ee604-LHR',
                          'cf-request-id': '0a3e8d7f140000e60496387000000001',
                          'content-encoding': 'br',
                          'content-type': 'text/javascript',
                          'date': 'Mon, 24 May 2021 05:58:53 GMT',
                          'expect-ct': 'max-age=604800, '
                                       'report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
                          'nel': '{"report_to":"cf-nel","max_age":604800}',
                          'report-to': '{"endpoints":[{"url":"https:\\/\\/a.nel.cloudflare.com\\/report?s=ZtI%2Bx8B7DpI8%2FsDA72maecFVCPvIsfBOyJjT8weyiqfmrHrmcBYpRhc%2FI%2F6JmIlnxW%2F%2BBohxLi1F8mpjAUabJ0kXLYnmjGKp2Ndio9M%3D"}],"group":"cf-nel","max_age":604800}',
                          'server': 'cloudflare',
                          'vary': 'Accept-Encoding'},
              'requestId': '17180.2',
              'resourceIPAddressSpace': 'Public'}}
  {'method': 'Network.responseReceived',
   'params': {'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
              'loaderId': '449906A5C736D819123288133F2797E6',
              'requestId': '17180.2',
              'response': {'connectionId': 0,
                           'connectionReused': True,
                           'encodedDataLength': 510,
                           'fromDiskCache': False,
                           'fromPrefetchCache': False,
                           'fromServiceWorker': False,
                           'headers': {'alt-svc': 'h3-27=":443"; ma=86400, '
                                                  'h3-28=":443"; ma=86400, '
                                                  'h3-29=":443"; ma=86400',
                                       'cache-control': 'max-age=0, '
                                                        'must-revalidate',
                                       'cf-ray': '65444b781d1ee604-LHR',
                                       'cf-request-id': '0a3e8d7f140000e60496387000000001',
                                       'content-encoding': 'br',
                                       'content-type': 'text/javascript',
                                       'date': 'Mon, 24 May 2021 05:58:53 GMT',
                                       'expect-ct': 'max-age=604800, '
                                                    'report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
                                       'nel': '{"report_to":"cf-nel","max_age":604800}',
                                       'report-to': '{"endpoints":[{"url":"https:\\/\\/a.nel.cloudflare.com\\/report?s=ZtI%2Bx8B7DpI8%2FsDA72maecFVCPvIsfBOyJjT8weyiqfmrHrmcBYpRhc%2FI%2F6JmIlnxW%2F%2BBohxLi1F8mpjAUabJ0kXLYnmjGKp2Ndio9M%3D"}],"group":"cf-nel","max_age":604800}',
                                       'server': 'cloudflare',
                                       'vary': 'Accept-Encoding'},
                           'mimeType': 'text/javascript',
                           'protocol': 'h3-29',
                           'remoteIPAddress': '104.21.5.197',
                           'remotePort': 443,
                           'requestHeaders': {':authority': 'nowsecure.nl',
                                              ':method': 'GET',
                                              ':path': '/cdn-cgi/challenge-platform/h/b/orchestrate/jsch/v1?ray=65444b779ae6546f',
                                              ':scheme': 'https',
                                              'accept': '*/*',
                                              'accept-encoding': 'gzip, deflate, '
                                                                 'br',
                                              'accept-language': 'en-US,en;q=0.9',
                                              'referer': 'https://nowsecure.nl/',
                                              'sec-ch-ua': '" Not '
                                                           'A;Brand";v="99", '
                                                           '"Chromium";v="90", '
                                                           '"Google '
                                                           'Chrome";v="90"',
                                              'sec-ch-ua-mobile': '?0',
                                              'sec-fetch-dest': 'script',
                                              'sec-fetch-mode': 'no-cors',
                                              'sec-fetch-site': 'same-origin',
                                              'user-agent': 'Mozilla/5.0 '
                                                            '(Windows NT 10.0; '
                                                            'Win64; x64) '
                                                            'AppleWebKit/537.36 '
                                                            '(KHTML, like Gecko) '
                                                            'Chrome/90.0.4430.212 '
                                                            'Safari/537.36'},
                           'responseTime': 1621835932301.817,
                           'securityDetails': {'certificateId': 0,
                                               'certificateTransparencyCompliance': 'compliant',
                                               'cipher': 'AES_128_GCM',
                                               'issuer': 'Cloudflare Inc ECC '
                                                         'CA-3',
                                               'keyExchange': '',
                                               'keyExchangeGroup': 'X25519',
                                               'protocol': 'QUIC',
                                               'sanList': ['sni.cloudflaressl.com',
                                                           '*.nowsecure.nl',
                                                           'nowsecure.nl'],
                                               'signedCertificateTimestampList': [{'hashAlgorithm': 'SHA-256',
                                                                                   'logDescription': 'Google '
                                                                                                     "'Argon2021' "
                                                                                                     'log',
                                                                                   'logId': 'F65C942FD1773022145418083094568EE34D131933BFDF0C2F200BCC4EF164E3',
                                                                                   'origin': 'Embedded '
                                                                                             'in '
                                                                                             'certificate',
                                                                                   'signatureAlgorithm': 'ECDSA',
                                                                                   'signatureData': '30450221008A25458182A6E7F608FE1492086762A367381E94137952FFD621BA2E60F7E2F702203BCDEBCE1C544DECF0A113DE12B33E299319E6240426F38F08DFC04EF2E42825',
                                                                                   'status': 'Verified',
                                                                                   'timestamp': 1598706372839.0},
                                                                                  {'hashAlgorithm': 'SHA-256',
                                                                                   'logDescription': 'DigiCert '
                                                                                                     'Yeti2021 '
                                                                                                     'Log',
                                                                                   'logId': '5CDC4392FEE6AB4544B15E9AD456E61037FBD5FA47DCA17394B25EE6F6C70ECA',
                                                                                   'origin': 'Embedded '
                                                                                             'in '
                                                                                             'certificate',
                                                                                   'signatureAlgorithm': 'ECDSA',
                                                                                   'signatureData': '3046022100A95A49C7435DBFC73406AC409062C27269E6E69F443A2213F3A085E3BCBD234A022100DEA878296F8A1DB43546DC1865A4C5AD2B90664A243AE0A3A6D4925802EE68A8',
                                                                                   'status': 'Verified',
                                                                                   'timestamp': 1598706372823.0}],
                                               'subjectName': 'sni.cloudflaressl.com',
                                               'validFrom': 1598659200,
                                               'validTo': 1630238400},
                           'securityState': 'secure',
                           'status': 200,
                           'statusText': '',
                           'timing': {'connectEnd': -1,
                                      'connectStart': -1,
                                      'dnsEnd': -1,
                                      'dnsStart': -1,
                                      'proxyEnd': -1,
                                      'proxyStart': -1,
                                      'pushEnd': 0,
                                      'pushStart': 0,
                                      'receiveHeadersEnd': 78.885,
                                      'requestTime': 190011.107975,
                                      'sendEnd': 27.934,
                                      'sendStart': 27.809,
                                      'sslEnd': -1,
                                      'sslStart': -1,
                                      'workerFetchStart': -1,
                                      'workerReady': -1,
                                      'workerRespondWithSettled': -1,
                                      'workerStart': -1},
                           'url': 'https://nowsecure.nl/cdn-cgi/challenge-platform/h/b/orchestrate/jsch/v1?ray=65444b779ae6546f'},
              'timestamp': 190011.188468,
              'type': 'Script'}}
  {'method': 'Network.dataReceived',
   'params': {'dataLength': 31556,
              'encodedDataLength': 0,
              'requestId': '17180.2',
              'timestamp': 190011.188663}}
  {'method': 'Network.dataReceived',
   'params': {'dataLength': 6737,
              'encodedDataLength': 11251,
              'requestId': '17180.2',
              'timestamp': 190011.198249}}
  {'method': 'Network.dataReceived',
   'params': {'dataLength': 0,
              'encodedDataLength': 2049,
              'requestId': '17180.2',
              'timestamp': 190011.200943}}
  {'method': 'Network.loadingFinished',
   'params': {'encodedDataLength': 13810,
              'requestId': '17180.2',
              'shouldReportCorbBlocking': False,
              'timestamp': 190011.198142}}
  {'method': 'Page.loadEventFired', 'params': {'timestamp': 190011.204711}}
  {'method': 'Page.frameScheduledNavigation',
   'params': {'delay': 12,
              'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
              'reason': 'metaTagRefresh',
              'url': 'https://nowsecure.nl/'}}
  {'method': 'Page.frameStoppedLoading',
   'params': {'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700'}}
  {'method': 'Network.requestWillBeSent',
   'params': {'documentURL': 'https://nowsecure.nl/',
              'frameId': 'F42BAE4BDD4E428EE2503CB5A7B4F700',
              'hasUserGesture': False,
              'initiator': {'type': 'other'},
              'loaderId': '449906A5C736D819123288133F2797E6',
              'request': {'headers': {'Referer': 'https://nowsecure.nl/',
                                      'User-Agent': 'Mozilla/5.0 (Windows NT '
                                                    '10.0; Win64; x64) '
                                                    'AppleWebKit/537.36 (KHTML, '
                                                    'like Gecko) '
                                                    'Chrome/90.0.4430.212 '
                                                    'Safari/537.36',
                                      'sec-ch-ua': '" Not A;Brand";v="99", '
                                                   '"Chromium";v="90", "Google '
                                                   'Chrome";v="90"',
                                      'sec-ch-ua-mobile': '?0'},
                          'initialPriority': 'High',
                          'method': 'GET',
                          'mixedContentType': 'none',
                          'referrerPolicy': 'strict-origin-when-cross-origin',
                          'url': 'https://nowsecure.nl/favicon.ico'},
              'requestId': '17180.5',
              'timestamp': 190011.210491,
              'type': 'Other',
              'wallTime': 1621835932.325683}}
  {'method': 'Network.requestWillBeSentExtraInfo',
   'params': {'associatedCookies': [{'blockedReasons': [],
                                     'cookie': {'domain': 'nowsecure.nl',
                                                'expires': 1621839532,
                                                'httpOnly': False,
                                                'name': 'cf_chl_prog',
                                                'path': '/',
                                                'priority': 'Medium',
                                                'sameParty': False,
                                                'secure': False,
                                                'session': False,
                                                'size': 12,
                                                'sourcePort': 443,
                                                'sourceScheme': 'Secure',
                                                'value': 'e'}}],
              'clientSecurityState': {'initiatorIPAddressSpace': 'Public',
                                      'initiatorIsSecureContext': True,
                                      'privateNetworkRequestPolicy': 'WarnFromInsecureToMorePrivate'},
              'headers': {':authority': 'nowsecure.nl',
                          ':method': 'GET',
                          ':path': '/favicon.ico',
                          ':scheme': 'https',
                          'accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
                          'accept-encoding': 'gzip, deflate, br',
                          'accept-language': 'en-US,en;q=0.9',
                          'cookie': 'cf_chl_prog=e',
                          'referer': 'https://nowsecure.nl/',
                          'sec-ch-ua': '" Not A;Brand";v="99", '
                                       '"Chromium";v="90", "Google '
                                       'Chrome";v="90"',
                          'sec-ch-ua-mobile': '?0',
                          'sec-fetch-dest': 'image',
                          'sec-fetch-mode': 'no-cors',
                          'sec-fetch-site': 'same-origin',
                          'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; '
                                        'x64) AppleWebKit/537.36 (KHTML, like '
                                        'Gecko) Chrome/90.0.4430.212 '
                                        'Safari/537.36'},


  ```

  <br>
  <br>



  ```python
  import undetected_chromedriver as uc


  driver = uc.Chrome()
  driver.get( 'https://distilnetworks.com' )
  ```



  ```python
  import undetected_chromedriver as uc


  uc.TARGET_VERSION = 85
  driver = uc.Chrome()
  ```



  Needs to be done before importing from selenium package

  ```python
  import undetected_chromedriver as uc


  uc.install()

  from selenium.webdriver import Chrome


  driver = Chrome()
  driver.get( 'https://distilnetworks.com' )

  ```



  ```python
  import undetected_chromedriver as uc



  uc.TARGET_VERSION = 78



  uc.install(
      executable_path = 'c:/users/user1/chromedriver.exe' ,
      )

  opts = uc.ChromeOptions()
  opts.add_argument( f'--proxy-server=socks5://127.0.0.1:9050' )
  driver = uc.Chrome( options = opts )
  driver.get( 'https://distilnetworks.com' )
  ```



  These guys have actually a powerful product, and a link to this repo, which makes me wanna test their product. Make sure you use a "clean"ip
  for this one.

  ```python



  from selenium import webdriver


  chrome = webdriver.Chrome()
  chrome.get( 'https://datadome.co/customers-stories/toppreise-ends-web-scraping-and-content-theft-with-datadome/' )
  chrome.save_screenshot( 'datadome_regular_webdriver.png' )
  True  # it caused my ip to be flagged, unfortunately




  import undetected_chromedriver as uc


  options = uc.ChromeOptions()
  options.headless = True
  options.add_argument( '--headless' )
  chrome = uc.Chrome( options = options )
  chrome.get( 'https://datadome.co/customers-stories/toppreise-ends-web-scraping-and-content-theft-with-datadome/' )
  chrome.save_screenshot( 'datadome_undetected_webddriver.png' )

  ```

  **Check both saved screenhots [here](https://imgur.com/a/fEmqadP)**


pkgId: 627b698bdd41b3f5427f3053a2fa672e6446a8a575986a7d70c8e83a3ed0c139
name: python-unicode
arch: src
version: 2.9
epoch: 0
release: 1
summary: Display unicode character properties
url: http://kassiopeia.juls.savba.sk/~garabik/software/unicode.html
rpm_license: GNU GPL v3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3f780489-6fab-4134-82ba-10c57e346324
location_href: 00012185-python-unicode/python-unicode-2.9-1.src.rpm
checksum_type: sha256
description:
  Display unicode character properties:
  Enter regular expression, hexadecimal number or some characters as an
  argument. unicode will try to guess what you want to look up.
  Use four-digit hexadecimal number followed by two dots to display
  given unicode block in a nice tabular format.


pkgId: 7966ad3a5d8ffda8fdd584110f2200eac9f955365c9a9b452554c46e48290433
name: python-unicode-slugify
arch: src
version: 0.1.5
epoch: 0
release: 1
summary: A slug generator that turns strings into unicode slugs.
url: http://github.com/mozilla/unicode-slugify
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-575640e2-1f7c-4c0e-8bc5-8ebf6f749869
location_href: 00011553-python-unicode-slugify/python-unicode-slugify-0.1.5-1.src.rpm
checksum_type: sha256
description:
  Unicode Slugify is a slugifier that generates unicode slugs.  It was originally
  used in the Firefox Add-ons web site to generate slugs for add-ons and add-on
  collections. Many of these add-ons and collections had unicode characters and
  required more than simple transliteration.



  ```python

  from slugify import slugify, SLUG_OK


  slugify(u'Bän...g (bang)')



  slugify(u'Bän...g (bang)', lower=False, spaces=True)



  slugify(u'北京 (capital of China)', only_ascii=True)



  slugify(u'北京 (capital of China)', ok=SLUG_OK+'()', only_ascii=True)



  def snake_case(s):
      
      return slugify(s, ok='_', only_ascii=True)
  snake_case(u'北京 (capital of china)')



  def camel_case(s):
      return slugify(s.title(), ok='', only_ascii=True, lower=False)
  camel_case(u'北京 (capital of china)')

  ```



  Tomaz Solc, unidecode, https://pypi.python.org/pypi/Unidecode


pkgId: 7650737b136ba5b7e5e20fbb4db247be8ba3b4495c676f5420a7188ee634b6d0
name: python-unicodecsv
arch: src
version: 0.14.1
epoch: 0
release: 1
url: https://github.com/jdunck/python-unicodecsv
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-94a78efa-4be2-4341-9d02-5dd37c141c28
location_href: 00005369-python-unicodecsv/python-unicodecsv-0.14.1-1.src.rpm
checksum_type: sha256
summary:
  Python2's stdlib csv module is nice, but it doesn't support unicode. This module is a drop-in replacement which *does*.

description:
  The unicodecsv is a drop-in replacement for Python 2.7's csv module which supports unicode strings without a hassle.  Supported versions are python 2.7, 3.3, 3.4, 3.5, and pypy 2.4.0.


pkgId: 2db760e25b5757579745d5f79fbe966ec76c06ad62fc1453bae440147752b3d4
name: python-unicodedata2
arch: src
version: 15.0.0
epoch: 0
release: 1
summary: Unicodedata backport updated to the latest Unicode version.
url: http://github.com/fonttools/unicodedata2
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-30bd692a-76a0-43d0-ab80-fa79d4b9108c
location_href: 00012209-python-unicodedata2/python-unicodedata2-15.0.0-1.src.rpm
checksum_type: sha256
description:
  [unicodedata] backport/updates.
  The versions of this package match Unicode versions, so unicodedata2==13.0.0 is data from Unicode 13.0.0.
  Pre-compiled wheel packages are available on [PyPI] and can be installed via pip.
  [unicodedata]: https://docs.python.org/3/library/unicodedata.html
  [PyPI]: https://pypi.org/project/unicodedata2/


pkgId: c8382047ff503f989a2329e4317ec5653058d586dd6c128f8d52c9a68572f2b9
name: python-unicodedata2-debuginfo
arch: aarch64
version: 15.0.0
epoch: 0
release: 1
summary: Debug information for package python-unicodedata2
url: http://github.com/fonttools/unicodedata2
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-30bd692a-76a0-43d0-ab80-fa79d4b9108c
rpm_sourcerpm: python-unicodedata2-15.0.0-1.src.rpm
location_href: 00012209-python-unicodedata2/python-unicodedata2-debuginfo-15.0.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-unicodedata2.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 376e5ffe89c88c6ee675b0c43b5ee648ee16e62fa3c3bd37d781987aed62ee16
name: python-unicodedata2-debugsource
arch: aarch64
version: 15.0.0
epoch: 0
release: 1
summary: Debug sources for package python-unicodedata2
url: http://github.com/fonttools/unicodedata2
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-30bd692a-76a0-43d0-ab80-fa79d4b9108c
rpm_sourcerpm: python-unicodedata2-15.0.0-1.src.rpm
location_href: 00012209-python-unicodedata2/python-unicodedata2-debugsource-15.0.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-unicodedata2.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 2b432906e25280000d75323ffa386bb021652fa540f177b32d3b85967539a867
name: python-unicorn
arch: src
version: 2.0.1.post1
epoch: 0
release: 1
summary: Unicorn CPU emulator engine
url: http://www.unicorn-engine.org
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8a1ad471-2c34-44a0-b565-c1cf8395de9c
location_href: 00005370-python-unicorn/python-unicorn-2.0.1.post1-1.src.rpm
checksum_type: sha256
description:
  Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework
  based on [QEMU](http://qemu.org).

  Unicorn offers some unparalleled features:

  - Multi-architecture: ARM, ARM64 (ARMv8), M68K, MIPS, PowerPC, RISCV, SPARC, S390X, TriCore and X86 (16, 32, 64-bit)
  - Clean/simple/lightweight/intuitive architecture-neutral API
  - Implemented in pure C language, with bindings for Crystal, Clojure, Visual Basic, Perl, Rust, Ruby, Python, Java, .NET, Go, Delphi/Free Pascal, Haskell, Pharo, and Lua.
  - Native support for Windows & *nix (with Mac OSX, Linux, *BSD & Solaris confirmed)
  - High performance via Just-In-Time compilation
  - Support for fine-grained instrumentation at various levels
  - Thread-safety by design
  - Distributed under free software license GPLv2

  Further information is available at http://www.unicorn-engine.org


pkgId: 9866b3039082fa9b4454ef3047badcf57606ecb488c021b9e12e7cbd3da8ddae
name: python-unidic
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: UniDic packaged for Python
url: https://github.com/polm/unidic-py
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9f563380-8dcf-4d1e-aaab-e505b71d53ad
location_href: 00012879-python-unidic/python-unidic-1.1.0-1.src.rpm
checksum_type: sha256
description:
  This is a version of [UniDic](https://unidic.ninjal.ac.jp/) packaged for use
  with pip.

  Currently it supports 2.3.0, the latest version of UniDic. **Note this will
  take up 1GB on disk after install.** If you want a small package, try
  [unidic-lite](https://github.com/polm/unidic-lite).

  The data for this dictionary is hosted as part of the AWS Open Data
  Sponsorship Program. You can read the announcement
  [here](https://aws.amazon.com/jp/blogs/news/published-unidic-mecab-on-aws-open-data/).

  After installing via pip, you need to download the dictionary using the
  following command:

      python -m unidic download

  With [fugashi](https://github.com/polm/fugashi) or
  [mecab-python3](https://github.com/samurait/mecab-python3) unidic will be used
  automatically when installed, though if you want you can manually pass the
  MeCab arguments:

      import fugashi
      import unidic
      tagger = fugashi.Tagger('-d "{}"'.format(unidic.DICDIR))
      



  This has a few changes from the official UniDic release to make it easier to use.

  - entries for 令和 have been added
  - single-character numeric and alphabetic words have been deleted
  - `unk.def` has been modified so unknown punctuation won't be marked as a noun

  See the `extras` directory for details on how to replicate the build process.



  Here is a list of fields included in this edition of UniDic. For more information see the [UniDic FAQ](https://unidic.ninjal.ac.jp/faq#col_name), though not all fields are included. For fields in the UniDic FAQ the name given there is included.

  Fields which are not applicable are usually marked with an asterisk (`*`).

  - **pos1, pos2, pos3, pos4**: Part of speech fields. The earlier fields are more general, the later fields are more specific.
  - **cType:** 活用型, conjugation type. Will have a value like `五段-ラ行`.
  - **cForm:** 活用形, conjugation shape. Will have a value like `連用形-促音便`.
  - **lForm:** 語彙素読み, lemma reading. The reading of the lemma in katakana, this uses the same format as the `kana` field, not `pron`.
  - **lemma:** 語彙素（＋語彙素細分類）. The lemma is a non-inflected "dictionary form" of a word. UniDic lemmas sometimes include extra info or have unusual forms, like using katakana for some place names.
  - **orth:** 書字形出現形, the word as it appears in text, this appears to be identical to the surface.
  - **pron:** 発音形出現形, pronunciation. This is similar to kana except that long vowels are indicated with a ー, so 講師 is こーし.
  - **orthBase:** 書字形基本形, the uninflected form of the word using its current written form. For example, for 彷徨った the lemma is さ迷う but the orthBase is 彷徨う.
  - **pronBase:** 発音形基本形, the pronunciation of the base form. Like `pron` for the `lemma` or `orthBase`.
  - **goshu:** 語種, word type. Etymological category. In order of frequency, 和, 固, 漢, 外, 混, 記号, 不明. Defined for all dictionary words, blank for unks.
  - **iType:** 語頭変化化型, "i" is for "initial". This is the type of initial transformation the word undergoes when combining, for example 兵 is へ半濁 because it can be read as べい in combination. This is available for <2% of entries.
  - **iForm:** 語頭変化形, this is the initial form of the word in context, such as 基本形 or 半濁音形.
  - **fType:** 語末変化化型, "f" is for "final", but otherwise as iType. For example 医学 is ク促 because it can change to いがっ (apparently). This is available for <0.1% of entries.
  - **fForm:** 語末変化形, as iForm but for final transformations.
  - **iConType:** 語頭変化結合型, initial change fusion type. Describes phonetic change at the start of the word in counting expressions. Only available for a few hundred entries, mostly numbers. Values are N followed by a letter or number; most entries with this value are numeric.
  - **fConType:** 語末変化結合型, final change fusion type. This is also used for counting expressions, and like iConType it is only available for a few hundred entries. Unlike iConType the values are very complicated, like `B1S6SjShS,B1S6S8SjShS`.
  - **type:** Not entirely clear what this is, seems to have some overlap with POS.
  - **kana:** 読みがな, this is the typical representation of a word in kana, unlike pron. 講師 is こうし.
  - **kanaBase:** 仮名形基本形, this is the typical kana representation of the lemma.
  - **form:** 語形出現形, seems to be the same as `pron`.
  - **formBase:** 語形基本形 seems to be the same as `pronBase`.
  - **aType:** Accent type. This is a (potentially) comma-separated field which has the number of the mora taking the accent in 標準語 (standard language). When there are multiple values, more common accent patterns come first.
  - **aConType:** This describes how the accent shifts when the word is used in a counter expression. It uses complicated notation.
  - **aModType:** Presumably accent related but unclear use. Available for <25% of entries and only has 6 non-default values.
  - **lid:** 語彙表ID. A long lemma ID. This seems to be a kind of GUID. There is usually one entry per line in the CSV, except that half-width and full-width variations can be combined.
  - **lemma_id:** 語彙素ID. A shorter lemma id, starting from 1. This seems to be as unique as the `lemma` field, so many CSV lines can share this value.



  The modern Japanese UniDic is available under the GPL, LGPL, or BSD license,
  [see here](https://unidic.ninjal.ac.jp/download#unidic_bccwj). UniDic is
  developed by [NINJAL](https://www.ninjal.ac.jp/), the National Institute for
  Japanese Language and Linguistics. UniDic is copyrighted by the UniDic
  Consortium and is distributed here under the terms of the [BSD
  License](./LICENSE.unidic).

  The code in this repository is not written or maintained by NINJAL. The code is
  available under the MIT or WTFPL License, as you prefer.


pkgId: 5801fdf35208785737310175fc2fd585e1c1f3cf51fe5853f7ea0b60532a999e
name: python-unidic-lite
arch: src
version: 1.0.8
epoch: 0
release: 1
summary: A small version of UniDic packaged for Python
url: https://github.com/polm/unidic-lite
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b17f8e58-e820-4f0f-96b3-7665ea3cf6bf
location_href: 00013201-python-unidic-lite/python-unidic-lite-1.0.8-1.src.rpm
checksum_type: sha256
description:
  [![Current PyPI packages](https://badge.fury.io/py/unidic-lite.svg)](https://pypi.org/project/unidic-lite/)



  This is a version of [unidic-py](https://github.com/polm/unidic-py) that is
  designed to be installable with pip alone, not requiring any extra downloads.

  At the moment it uses Unidic 2.1.2, from 2013, which is the most recent release
  of UniDic that's small enough to be distributed via PyPI.

  **Note this package takes roughly 250MB on disk after being installed.**

  In order to use this you will need to install a MeCab wrapper such as
  [mecab-python3](https://github.com/SamuraiT/mecab-python3) or
  [fugashi](https://github.com/polm/fugashi).



  This has a few changes from the official UniDic release to make it easier to use.

  - entries for 令和 have been added
  - single-character numeric and alphabetic words have been deleted
  - `unk.def` has been modified so unknown punctuation won't be marked as a noun



  This code is licensed under the MIT or WTFPL license, as you prefer. Unidic
  2.1.2 is copyright the UniDic Consortium and distributed under the terms of the
  [BSD license](./LICENSE.unidic).


pkgId: 01d45ef451b77b71d7452839e8b55dda3ae6367a6b8ebf0b287215148ee63d80
name: python-unittest2
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: The new features in unittest backported to Python 2.4+.
url: http://pypi.python.org/pypi/unittest2
rpm_license: UNKNOWN
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-37d8823a-411b-4303-a006-c9b0577a9832
location_href: 00009751-python-unittest2/python-unittest2-1.1.0-1.src.rpm
checksum_type: sha256
description:
  Differences between unittest2 and unittest in Python 2.7:
  ``assertItemsEqual`` does not silence Py3k warnings as this uses
  ``warnings.catch_warnings()`` which is new in Python 2.6 (and is used as a
  context manager which would be a pain to make work with Python 2.4).
  ``TestCase.longMessage`` defaults to True because it is better. It defaults to
  False in Python 2.7 for backwards compatibility reasons.
  ``python -m package`` doesn't work in versions of Python before Python 2.7. The
  command line features of unittest2 are provided by a ``unit2`` (and
  ``unit2.py``) script instead.
  unittest2 includes a very basic setuptools compatible test collector. Specify
  ``test_suite = 'unittest2.collector'`` in your setup.py. This starts test
  discovery with the default parameters from the directory containing setup.py, so
  it is perhaps most useful as an example (see unittest2/collector.py).
  In unittest2 TextTestResult.stopTestRun is responsible for calling printErrors.
  This is desirable behaviour but in Python 3.1 TestResult.stopTestRun was
  documented as being empty and subclasses shouldn't need to call it. This would
  make the change backwards incompatible and needs thinking about.


pkgId: 42f45d138b3951b25b3f641ef94b1a27f97d6ca14b1712e7bbe7a9f8eee2b50d
name: python-unpaddedbase64
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: Encode and decode Base64 without "=" padding
url: https://github.com/matrix-org/python-unpaddedbase64
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-75ca2e5d-0714-469e-9df3-ef160f94ffd5
location_href: 00005374-python-unpaddedbase64/python-unpaddedbase64-2.1.0-1.src.rpm
checksum_type: sha256
description:
  Encode and decode Base64 without "=" padding.
  `RFC 4648`_ specifies that Base64 should be padded to a multiple of 4 bytes
  using "=" characters. However many protocols choose to omit the "=" padding.


pkgId: 87071aced7592bd220b769937d5b9d05fcb3423c419aa66925d2bd7202cd1aed
name: python-untangle
arch: src
version: 1.2.1
epoch: 0
release: 1
summary: Converts XML to Python objects
url: https://pypi.org/project/untangle/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-79d0fd09-e405-4c54-b979-7cca1db4e2ba
location_href: 00011363-python-untangle/python-untangle-1.2.1-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://github.com/stchris/untangle/actions/workflows/build.yml/badge.svg)](https://github.com/stchris/untangle/actions)
  [![PyPi version](https://img.shields.io/pypi/v/untangle.svg)](https://pypi.python.org/pypi/untangle)
  <a href="https://github.com/psf/black"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a>
  [Documentation](http://readthedocs.org/docs/untangle/en/latest/)
  * Converts XML to a Python object.
  * Siblings with similar names are grouped into a list.
  * Children can be accessed with ``parent.child``, attributes with ``element['attribute']``.
  * You can call the ``parse()`` method with a filename, an URL or an XML string.
  * Substitutes ``-``, ``.`` and ``:`` with ``_`` ``<foobar><foo-bar/></foobar>`` can be accessed with ``foobar.foo_bar``, ``<foo.bar.baz/>`` can be accessed with ``foo_bar_baz`` and ``<foo:bar><foo:baz/></foo:bar>`` can be accessed with ``foo_bar.foo_baz``
  * Works with Python 3.7 - 3.10


pkgId: eef9add49040d151d8a7fd37050c464fa16286959112e684a2a0408e1b612502
name: python-uplink
arch: src
version: 0.9.7
epoch: 0
release: 1
summary: A Declarative HTTP Client for Python.
url: https://uplink.readthedocs.io/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-645af7b5-03e9-4caa-92ef-2a664ac1fa00
location_href: 00010501-python-uplink/python-uplink-0.9.7-1.src.rpm
checksum_type: sha256
description:
  Uplink turns your HTTP API into a Python class.
     from uplink import Consumer, get, Path, Query
     class GitHub(Consumer):
         """A Python Client for the GitHub API."""
         @get("users/{user}/repos")
         def get_repos(self, user: Path, sort_by: Query("sort")):
             """Retrieves the user's public repositories."""
  Build an instance to interact with the webservice.
     github = GitHub(base_url="https://api.github.com/")
  Then, executing an HTTP request is as simply as invoking a method.
     repos = github.get_repos(user="octocat", sort_by="created")
  The returned object is a friendly |requests.Response|_:
     print(repos.json())
     
  For sending non-blocking requests, Uplink comes with support for
  |aiohttp and twisted|_.
  Ready to launch your first API client with Uplink? Start with this `quick tutorial`_!


pkgId: f6f94b8c5edcb38502aeb003d9737dbd672540b58b54e85e9bdbfc0ec7be81a3
name: python-upoints
arch: src
version: 0.12.2
epoch: 0
release: 1
summary: Modules for working with points on Earth
url: https://github.com/JNRowe/upoints/
rpm_license: GPL-3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-50108c68-f90e-4602-a25d-17026abd66b1
location_href: 00005377-python-upoints/python-upoints-0.12.2-1.src.rpm
checksum_type: sha256
description:
     At this point ``upoints`` only exists to assist the users who have been using
     it for years, I *absolutely* do **not** recommend its use to new users.


pkgId: 6c8d833878b50932b7002d1fcc0dfda3d6e409739457e958b680d63196a63ada
name: python-uptime
arch: src
version: 3.0.1
epoch: 0
release: 1
summary: Cross-platform uptime library
url: https://github.com/Cairnarvon/uptime
rpm_license: UNKNOWN
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-891cc0c0-2528-49d8-b3ed-9750f8081950
location_href: 00005382-python-uptime/python-uptime-3.0.1-1.src.rpm
checksum_type: sha256
description:
  This module provides a cross-platform way to retrieve system uptime and boot time.
  See documentation for a full list of supported platforms (yours is likely one of them).


pkgId: 155156251bacc093969101f7048bf1a031603d6298a4761f2e68167dd7c2e7c8
name: python-uranium
arch: src
version: 2.1.2
epoch: 0
release: 1
summary: a build system for python
url: http://uranium.readthedocs.org
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-177c587c-8c97-4580-904a-56eafdc4bf05
location_href: 00005383-python-uranium/python-uranium-2.1.2-1.src.rpm
checksum_type: sha256
description:
  Uranium: an assembly tool for python, in python.
  uranium is an assembly tool that facilitates reuse and allows
  for execution of arbitrary setup code for Python services. Examples
  include:
  * downloading and installing eggs in a sandbox (using virtualenv internally)
  * downloading remote configuration
  * providing a framework for assembly configuration (e.g. differences
    between dev and test mode)
  * any other arbitrary tasks
  You can find out more here:
  http://uranium.readthedocs.org/en/latest/


pkgId: e6affa865ce9a11371e6ccddc57cd2945cdf0f2b9219122a65ddb07eb51821db
name: python-uritemplate
arch: src
version: 4.1.1
epoch: 0
release: 1
summary: Implementation of RFC 6570 URI Templates
url: https://uritemplate.readthedocs.org
rpm_license: BSD 3-Clause License or Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-97e0c1ca-72e7-471e-9c6a-0fbffd670c14
location_href: 00008969-python-uritemplate/python-uritemplate-4.1.1-1.src.rpm
checksum_type: sha256
description:
  Documentation_ -- GitHub_ -- Travis-CI_
  Simple python library to deal with `URI Templates`_. The API looks like
      from uritemplate import URITemplate, expand
      
      gist_uri = 'https://api.github.com/users/sigmavirus24/gists{/gist_id}'
      t = URITemplate(gist_uri)
      print(t.expand(gist_id='123456'))
      
      
      print(expand(gist_uri, gist_id='123456'))
      
      t.expand({'gist_id': '123456'})
      print(expand(gist_uri, {'gist_id': '123456'}))
  Where it might be useful to have a class
      import requests
      class GitHubUser(object):
          url = URITemplate('https://api.github.com/user{/login}')
          def __init__(self, name):
              self.api_url = url.expand(login=name)
              response = requests.get(self.api_url)
              if response.status_code == 200:
                  self.__dict__.update(response.json())
  When the module containing this class is loaded, ``GitHubUser.url`` is
  evaluated and so the template is created once. It's often hard to notice in
  Python, but object creation can consume a great deal of time and so can the
  ``re`` module which uritemplate relies on. Constructing the object once should
  reduce the amount of time your code takes to run.


pkgId: f68c757f5d3e1f53366376cb11f68d6b93dd66417726e9d0834919e5e42cc6b7
name: python-uritemplate.py
arch: src
version: 3.0.2
epoch: 0
release: 1
summary: URI templates
url: https://uritemplate.readthedocs.org
rpm_license: BSD 3-Clause License or Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-96480f5a-aa5d-4ac1-9e22-c78c843e605b
location_href: 00014043-python-uritemplate-py/python-uritemplate.py-3.0.2-1.src.rpm
checksum_type: sha256
description:
  Documentation_ -- GitHub_ -- BitBucket_ -- Travis-CI_
  Simple python library to deal with `URI Templates`_. The API looks like
      from uritemplate import URITemplate, expand
      
      gist_uri = 'https://api.github.com/users/sigmavirus24/gists{/gist_id}'
      t = URITemplate(gist_uri)
      print(t.expand(gist_id='123456'))
      
      
      print(expand(gist_uri, gist_id='123456'))
      
      t.expand({'gist_id': '123456'})
      print(expand(gist_uri, {'gist_id': '123456'}))
  Where it might be useful to have a class
      import requests
      class GitHubUser(object):
          url = URITemplate('https://api.github.com/user{/login}')
          def __init__(self, name):
              self.api_url = url.expand(login=name)
              response = requests.get(self.api_url)
              if response.status_code == 200:
                  self.__dict__.update(response.json())
  When the module containing this class is loaded, ``GitHubUser.url`` is
  evaluated and so the template is created once. It's often hard to notice in
  Python, but object creation can consume a great deal of time and so can the
  ``re`` module which uritemplate relies on. Constructing the object once should
  reduce the amount of time your code takes to run.


pkgId: 0cb9fd15e913216b0b6680d2c19ab76d8e1f5c8a93340bcd52d8662585ef76f7
name: python-uritools
arch: src
version: 4.0.1
epoch: 0
release: 1
summary: URI parsing, classification and composition
url: https://github.com/tkem/uritools/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9ce7bda7-a08c-4811-af03-61bbce8332a3
location_href: 00009565-python-uritools/python-uritools-4.0.1-1.src.rpm
checksum_type: sha256
description:
  This module provides RFC 3986 compliant functions for parsing,
  classifying and composing URIs and URI references, largely replacing
  the Python Standard Library's ``urllib.parse`` module.
      >>> from uritools import uricompose, urijoin, urisplit, uriunsplit
      >>> uricompose(scheme='foo', host='example.com', port=8042,
      'foo://example.com:8042/over/there?name=ferret#nose'
      >>> parts = urisplit(_)
      >>> parts.scheme
      'foo'
      >>> parts.authority
      'example.com:8042'
      >>> parts.getport(default=80)
      8042
      >>> parts.getquerydict().get('name')
      ['ferret']
      >>> parts.isuri()
      True
      >>> parts.isabsuri()
      False
      >>> urijoin(uriunsplit(parts), '/right/here?name=swallow#beak')
      'foo://example.com:8042/right/here?name=swallow#beak'
  For various reasons, ``urllib.parse`` and its Python 2 predecessor
  ``urlparse`` are not compliant with current Internet standards.  As
  stated in `Lib/urllib/parse.py
  <https://github.com/python/cpython/blob/3.8/Lib/urllib/parse.py>`_:
      RFC 3986 is considered the current standard and any future changes
      to urlparse module should conform with it.  The urlparse module is
      currently not entirely compliant with this RFC due to defacto
      scenarios for parsing, and for backward compatibility purposes,
      some parsing quirks from older RFCs are retained.
  This module aims to provide fully RFC 3986 compliant replacements for
  the most commonly used functions found in ``urllib.parse``.  It also
  includes functions for distinguishing between the different forms of
  URIs and URI references, and for conveniently creating URIs from their
  individual components.


pkgId: 2c29c60182c621839bf986e32b9d510a54b9efe3e2a18e24d07dc85fa4899065
name: python-url-normalize
arch: src
version: 1.4.3
epoch: 0
release: 1
summary: URL normalization for Python
url: https://github.com/niksite/url-normalize
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-529bbb61-b46a-4857-a187-649b4c085a22
location_href: 00010023-python-url-normalize/python-url-normalize-1.4.3-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.org/niksite/url-normalize.svg?branch=master)](https://travis-ci.org/niksite/url-normalize)
  [![Coverage Status](https://coveralls.io/repos/github/niksite/url-normalize/badge.svg?branch=master)](https://coveralls.io/github/niksite/url-normalize?branch=master)
  URI Normalization function:
  * Take care of IDN domains.
  * Always provide the URI scheme in lowercase characters.
  * Always provide the host, if any, in lowercase characters.
  * Only perform percent-encoding where it is essential.
  * Always use uppercase A-through-F characters when percent-encoding.
  * Prevent dot-segments appearing in non-relative URI paths.
  * For schemes that define a default authority, use an empty authority if the default is desired.
  * For schemes that define an empty path to be equivalent to a path of "/", use "/".
  * For schemes that define a port, use an empty port if the default is desired
  * All portions of the URI must be utf-8 encoded NFC from Unicode strings
  Inspired by Sam Ruby's [urlnorm.py](http://intertwingly.net/blog/2004/08/04/Urlnorm)
  Example:
  ```sh
  $ pip install url-normalize
  Collecting url-normalize
  Successfully installed future-0.16.0 url-normalize-1.3.3
  $ python
  Python 3.6.1 (default, Jul  8 2017, 05:00:20)
  [GCC 4.9.2] on linux
  Type "help", "copyright", "credits" or "license" for more information.
  > from url_normalize import url_normalize
  > print(url_normalize('www.foo.com:80/foo'))
  > https://www.foo.com/foo
  ```
  History:
  * 1.4.3: Added LICENSE file
  * 1.4.2: Added an optional param sort_query_params (True by default)
  * 1.4.1: Added an optional param default_scheme to the url_normalize ('https' by default)
  * 1.4.0: A bit of code refactoring and cleanup
  * 1.3.3: Support empty string and double slash urls (//domain.tld)
  * 1.3.2: Same code support both Python 3 and Python 2.
  * 1.3.1: Python 3 compatibility
  * 1.2.1: PEP8, setup.py
  * 1.1.2: support for shebang (#!) urls
  * 1.1.1: using 'http' schema by default when appropriate
  * 1.1.0: added handling of IDN domains
  * 1.0.0: code pep8
  * 0.1.0: forked from Sam Ruby's urlnorm.py
  License: MIT License


pkgId: 8713fddd29eb6b25de53848fa94183cefa24904aafd342347f2ba80fc784199b
name: python-urlbuster
arch: src
version: 0.5.1
epoch: 0
release: 1
summary: URL bruteforcer to locate existing and/or hidden files or directories.
url: https://github.com/cytopia/urlbuster
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-00709aa6-1709-485a-a15d-8d02b23e03b6
location_href: 00005387-python-urlbuster/python-urlbuster-0.5.1-1.src.rpm
checksum_type: sha256
description:
  Connection:      keep-alive
  Accept-Encoding: gzip, deflate
  Accept:          */*
  User-Agent:      python-requests/2.22.0


pkgId: 2162f6856c9e021feb4cfb2d9fa3ec4797a3e2eda3b36009e0fbe79c9808fcd4
name: python-urlextract
arch: src
version: 1.8.0
epoch: 0
release: 1
summary: Collects and extracts URLs from given text.
url: https://github.com/lipoja/URLExtract
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7478af49-31f9-4f21-81e6-e04227961a96
location_href: 00009583-python-urlextract/python-urlextract-1.8.0-1.src.rpm
checksum_type: sha256
description:
  URLExtract is python class for collecting (extracting) URLs from given
  text based on locating TLD.
  How does it work
  ~~~~~~~~~~~~~~~~
  It tries to find any occurrence of TLD in given text. If TLD is found it
  starts from that position to expand boundaries to both sides searching
  for "stop character" (usually whitespace, comma, single or double
  quote).
  A dns check option is available to also reject invalid domain names.
  NOTE: List of TLDs is downloaded from iana.org to keep you up to date with new TLDs.
  Installation
  ~~~~~~~~~~~~
  Package is available on PyPI - you can install it via pip.
     pip install urlextract
  Documentation
  ~~~~~~~~~~~~~
  Online documentation is published at http://urlextract.readthedocs.io/
  Requirements
  ~~~~~~~~~~~~
  - IDNA for converting links to IDNA format
  - uritools for domain name validation
  - platformdirs for determining user's cache directory
  - dnspython to cache DNS results
         pip install idna
         pip install uritools
         pip install platformdirs
         pip install dnspython
  Or you can install the requirements with `requirements.txt`:
         pip install -r requirements.txt
  Run tox
  ~~~~~~~
  Install tox:
         pip install tox
  Then run it:
         tox
  Example
  ~~~~~~~
  You can look at command line program at the end of *urlextract.py*.
  But everything you need to know is this:
      from urlextract import URLExtract
      extractor = URLExtract()
      urls = extractor.find_urls("Text with URLs. Let's have URL janlipovsky.cz as an example.")
      print(urls) # prints: ['janlipovsky.cz']
  Or you can get generator over URLs in text by:
      from urlextract import URLExtract
      extractor = URLExtract()
      example_text = "Text with URLs. Let's have URL janlipovsky.cz as an example."
      for url in extractor.gen_urls(example_text):
          print(url) # prints: ['janlipovsky.cz']
  Or if you want to just check if there is at least one URL you can do:
      from urlextract import URLExtract
      extractor = URLExtract()
      example_text = "Text with URLs. Let's have URL janlipovsky.cz as an example."
      if extractor.has_urls(example_text):
          print("Given text contains some URL")
  If you want to have up to date list of TLDs you can use ``update()``:
      from urlextract import URLExtract
      extractor = URLExtract()
      extractor.update()
  or ``update_when_older()`` method:
      from urlextract import URLExtract
      extractor = URLExtract()
      extractor.update_when_older(7) # updates when list is older that 7 days
  Known issues
  ~~~~~~~~~~~~
  Since TLD can be not only shortcut but also some meaningful word we might see "false matches" when we are searching
  for URL in some HTML pages. The false match can occur for example in css or JS when you are referring to HTML item
  using its classes.
  Example HTML code:
    <p class="bold name">Jan</p>
    <style>
      p.bold.name {
        font-weight: bold;
      }
    </style>
  If this HTML snippet is on the input of ``urlextract.find_urls()`` it will return ``p.bold.name`` as an URL.
  Behavior of urlextract is correct, because ``.name`` is valid TLD and urlextract just see that there is ``bold.name``
  valid domain name and ``p`` is valid sub-domain.
  License
  ~~~~~~~
  This piece of code is licensed under The MIT License.


pkgId: c4a8b200499884d87441bb851ce12572f49c04e1c5386cf66dcb392a4f79e348
name: python-urllib3
arch: src
version: 1.26.15
epoch: 0
release: 1
summary: HTTP library with thread-safe connection pooling, file post, and more.
url: https://urllib3.readthedocs.io/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ceadfe15-9d26-42e2-98fe-e66078cea189
location_href: 00008875-python-urllib3/python-urllib3-1.26.15-1.src.rpm
checksum_type: sha256
description:
  urllib3 can be installed with `pip <https://pip.pypa.io>`_::
      $ python -m pip install urllib3
  Alternatively, you can grab the latest source code from `GitHub <https://github.com/urllib3/urllib3>`_::
      $ git clone https://github.com/urllib3/urllib3.git
      $ cd urllib3
      $ git checkout 1.26.x
      $ pip install .


pkgId: da293f4febc67dc9491d49af7f848c447941be53f704d5186beb457aba0aacf4
name: python-urlparse3
arch: src
version: 1.1
epoch: 0
release: 1
summary: urlparse3 is simple and powerful url parsing tool
url: UNKNOWN
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a1534c72-7502-4a2c-ace8-7d985d5dae65
location_href: 00012970-python-urlparse3/python-urlparse3-1.1-1.src.rpm
checksum_type: sha256
description:
  *urlparse3*

  Urlparse3 is simple and powerful url parsing tool.
  Example: ::

      import urlparse3


      url = 'http://admin:secret@local-domain.com:8000/path?q=123#anchor'
      parsed_url = urlparse3.parse_url(url)
      print parsed_url.scheme  # http
      print parsed_url.username  # admin
      print parsed_url.password  # secret
      print parsed_url.domain  # domain.com
      print parsed_url.port    # 8000
      print parsed_url.path    # path
      
      print parsed_url.query  # {'q': '123'}
      print parsed_url.fragment # anchor

      
      parsed_url.query['name'] = 'alex'
      
      print parsed_url.geturl()  #
      http://admin:secret@local-domain.com:8000/path?q=123&name=alex#anchor


  **Changes:**

  * Version 1.0.4. Fix parsing url path with slashes
  * Version 1.0.5. Fix parsing url query with slashes
  * Version 1.0.6. Fix urls with port. Add port property to ParsedUrl. Add test for check url with ports.
  * Version 1.0.7. Fix urls with dashes. Add test.
  * Version 1.0.8. Fix queries with dashes.
  * Version 1.0.9. Fix queries with "@" and "+" symbols.
  * Version 1.0.10. Fix url fragment regexp.
  * Version 1.1. Query parameters retain the order in which they were added.


pkgId: 0292b71a74135bf920e91ad2689ea3e41c6089a7bb4c21b0acba7eefec85c6ea
name: python-us
arch: src
version: 2.0.2
epoch: 0
release: 1
summary: US state meta information and other fun stuff
url: https://github.com/unitedstates/python-us
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5aa64344-613f-429c-9aea-8e0cc1db90bd
location_href: 00010213-python-us/python-us-2.0.2-1.src.rpm
checksum_type: sha256
description:
  A package for easily working with US and state metadata.
  * all US states and territories
  * postal abbreviations
  * Associated Press style abbreviations
  * FIPS codes
  * capitals
  * years of statehood
  * time zones
  * phonetic state name lookup
  * is contiguous or continental
  * URLs to shapefiles for state, census, congressional districts,
    counties, and census tracts


pkgId: f3630d8dd0f32c40b11e40cb4f69a028df125d593208a8332b571eae9ed221cb
name: python-usbinfo
arch: src
version: 1.1.2
epoch: 0
release: 1
summary: Module for introspecting USB devices on a system
url: https://pypi.org/project/usbinfo/
rpm_license: Apache 2 license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b2339126-930d-4778-b72f-0c2482a554e6
location_href: 00010790-python-usbinfo/python-usbinfo-1.1.2-1.src.rpm
checksum_type: sha256
description:
  usbinfo is a Python module for performing introspection on endpoints attached
  to the USB subsystems. usbinfo allows scripts to access information about those
  endpoints such as vendor and product ID, manufacturer and product names,
  serial numbers, and character device files.

  usbinfo is eventually intended to be portable across as many platforms that
  Python itself is ported to.


pkgId: db9f749dfa81b951a03f7a378ce1874978bf95193530039bd24d7f37373f7511
name: python-user-agents
arch: src
version: 2.2.0
epoch: 0
release: 1
url: https://github.com/selwin/python-user-agents
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5416506e-c235-4f8b-b888-1bcedd9caa42
location_href: 00009373-python-user-agents/python-user-agents-2.2.0-1.src.rpm
checksum_type: sha256
summary:
  A library to identify devices (phones, tablets) and their capabilities by parsing browser user agent strings.

description:
  `user_agents` is a Python library that provides an easy way to identify/detect devices like mobile phones, tablets and their capabilities by parsing (browser/HTTP) user agent strings. The goal is to reliably detect whether:
  * User agent is a mobile, tablet or PC based device
  * User agent has touch capabilities (has touch screen)
  `user_agents` relies on the excellent [ua-parser](https://github.com/ua-parser/uap-python) to do the actual parsing of the raw user agent string.


pkgId: 61a642cba8a84dafad4dadbbc8b9fde1969be37a164273d228ac1d1b5f626526
name: python-userpath
arch: src
version: 1.8.0
epoch: 0
release: 1
summary: Cross-platform tool for adding locations to the user PATH
url: https://pypi.org/project/userpath/
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7a154610-e1c7-4071-857b-269928e8b9c9
location_href: 00005391-python-userpath/python-userpath-1.8.0-1.src.rpm
checksum_type: sha256
description:
  This is a tool for modifying a user's `PATH`.
  **Table of Contents**
  - [Installation](#installation)
  - [CLI](#cli)
  - [API](#api)
  - [License](#license)

  ```console
  pip install userpath
  ```

  ```console
  $ userpath -h
  Usage: userpath [OPTIONS] COMMAND [ARGS]...
  Options:
    --version   Show the version and exit.
    -h, --help  Show this message and exit.
  Commands:
    append   Appends to the user PATH
    prepend  Prepends to the user PATH
    verify   Checks if locations are in the user PATH
  ```

  ```pycon
  >>> import userpath
  >>> location = r'C:\Users\Ofek\Desktop\test'
  >>>
  >>> userpath.in_current_path(location)
  False
  >>> userpath.in_new_path(location)
  False
  >>> userpath.append(location)
  True
  >>> userpath.in_new_path(location)
  True
  >>> userpath.need_shell_restart(location)
  True
  ```

  `userpath` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.


pkgId: daee28debd3aa78577fb896fd4af65b61d1a830daf38898a3f2b8bece4662c58
name: python-uvloop
arch: src
version: 0.17.0
epoch: 0
release: 1
summary: Fast implementation of asyncio event loop on top of libuv
url: http://github.com/MagicStack/uvloop
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1905423f-1a33-45fa-a963-dde638e7beea
location_href: 00005395-python-uvloop/python-uvloop-0.17.0-1.src.rpm
checksum_type: sha256
description:
  uvloop makes asyncio 2-4x faster.
  The above chart shows the performance of an echo server with different
  message sizes.  The *sockets* benchmark uses ``loop.sock_recv()`` and
  ``loop.sock_sendall()`` methods; the *streams* benchmark uses asyncio
  high-level streams, created by the ``asyncio.start_server()`` function;
  and the *protocol* benchmark uses ``loop.create_server()`` with a simple
  echo protocol.  Read more about uvloop in a
  `blog post <http://magic.io/blog/uvloop-blazing-fast-python-networking/>`_
  about it.


pkgId: 09cbe2668d605a2dd1a449b2513dff76346505eb9e35609096fc95423daac504
name: python-uwsgidecorators
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: uwsgidecorators standalone package
url: http://uwsgi-docs.readthedocs.org/en/latest/PythonDecorators.html
rpm_license: UNKNOWN
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-153c1fbe-9701-4448-bb3c-93e589dc33e8
location_href: 00005396-python-uwsgidecorators/python-uwsgidecorators-1.1.0-1.src.rpm
checksum_type: sha256
description:
  uwsgidecorators (http://uwsgi-docs.readthedocs.org/en/latest/) module on Pypi.
  People asked for it and here it is.


pkgId: 873a412a83116c702226bf7a83e2351a1b77a03d8d1310409c8fd3a4ea587f06
name: python-uwsgitop
arch: src
version: 0.11
epoch: 0
release: 1
summary: uWSGI top-like interface
url: https://pypi.org/project/uwsgitop/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-dfd38661-4e0a-42ef-a7d5-136674832242
location_href: 00011782-python-uwsgitop/python-uwsgitop-0.11-1.src.rpm
checksum_type: sha256
description:
  ``uwsgitop`` is a top-like command that uses the uWSGI Stats Server to
  monitor your uwsgi application.
  To use uWSGI Stat Server simply use the ``stats`` option followed by
  a valid socket address, for example::
      uwsgi --module myapp --socket :3030 --stats /tmp/stats.socket
  To start monitoring your application with ``uwsgitop`` call it with
  the socket address like so::
      uwsgitop /tmp/stats.socket
  If you want the stats served over HTTP you will need to add
  the ``stats-http`` option in uWSGI::
      uwsgi --module myapp --http :3030 --stats :3031 --stats-http
  You'll now need to call uwsgitop as::
      uwsgitop http://127.0.0.1:3031


pkgId: 2033ff9db989d57b5e8d1efbbf7001b337f41a196be0d7bfc31c2283adee1494
name: python-vaderSentiment
arch: src
version: 3.3.2
epoch: 0
release: 1
url: https://github.com/cjhutto/vaderSentiment
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2a969b47-8bb1-4bd0-9b1b-5b03c8088e4e
location_href: 00010717-python-vadersentiment/python-vaderSentiment-3.3.2-1.src.rpm
checksum_type: sha256
summary:
  VADER Sentiment Analysis. VADER (Valence Aware Dictionary and sEntiment Reasoner) is a lexicon and rule-based sentiment analysis tool that is specifically attuned to sentiments expressed in social media, and works well on texts from other domains.

description:
          VADER (Valence Aware Dictionary and sEntiment Reasoner) is a lexicon and rule-based sentiment analysis tool that is *specifically attuned to sentiments expressed in social media*. It is fully open-sourced under the `[MIT License] <http://choosealicense.com/>`_ (we sincerely appreciate all attributions and readily accept most contributions, but please don't hold us liable).

          **Citation Information**

          If you use either the dataset or any of the VADER sentiment analysis tools (VADER sentiment lexicon or Python code for rule-based sentiment analysis engine) in your research, please cite the above paper. For example:

            **Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014.**


          * Code examples are provided on the `[VADER GitHub Repo] <https://github.com/cjhutto/vaderSentiment>`_
          * Details about the scoring are provided on the `[VADER GitHub Repo] <https://github.com/cjhutto/vaderSentiment>`_
          * VADER has been ported to Java, JavaScript, PHP, Scala, C#, Rust, and Go (see details and links to these on the `[VADER GitHub Repo] <https://github.com/cjhutto/vaderSentiment>`_



  Keywords: vader,sentiment,analysis,opinion,mining,nlp,text,data,text analysis,opinion analysis,sentiment analysis,text mining,twitter sentiment,opinion mining,social media,twitter,social,media
  Platform: any
  Classifier: Development Status :: 5 - Production/Stable
  Classifier: Intended Audience :: Science/Research
  Classifier: License :: OSI Approved :: MIT License
  Classifier: Natural Language :: English
  Classifier: Programming Language :: Python :: 3.5
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
  Classifier: Topic :: Scientific/Engineering :: Information Analysis
  Classifier: Topic :: Text Processing :: Linguistic
  Classifier: Topic :: Text Processing :: General
  Description-Content-Type: text/x-rst


pkgId: 91de5f588423981fe1092b4bd2eac53c23f480fbf07d286331ad8929d67e5b87
name: python-vagrantpy
arch: src
version: 0.6.0
epoch: 0
release: 1
summary: Python bindings for interacting with Vagrant virtual machines.
url: https://github.com/vagrantpy/vagrantpy
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4c37f85a-4a5f-4c9a-b84f-94c33009a76c
location_href: 00005397-python-vagrantpy/python-vagrantpy-0.6.0-1.src.rpm
checksum_type: sha256
description:
  VagrantPy is a python module that provides a _thin_ wrapper around the
  `vagrant` command line executable, allowing programmatic control of Vagrant
  virtual machines (boxes).  This module is useful for:

  - Starting a Vagrant virtual machine (VM) (`up`).
  - Terminating a Vagrant VM (`destroy`).
  - Halting a Vagrant VM without destroying it (`halt`).
  - Querying the status of a VM or VMs (`status`).
  - Getting ssh configuration information useful for SSHing into the VM. (`host`, `port`, ...)
  - Running `vagrant` commands in a multi-VM environment
    (http://vagrantup.com/v1/docs/multivm.html) by using `vm_name` parameter.
  - Initializing the VM based on a named base box, using init().
  - Adding, Removing, and Listing boxes (`box add`, `box remove`, `box list`).
  - Provisioning VMs - up() accepts options like `no_provision`, `provision`, and `provision_with`, and there is a `provision()` method.
  - Using sandbox mode from the Sahara gem (https://github.com/jedi4ever/sahara).

  This project began because I wanted python bindings for Vagrant so I could
  programmatically access my vagrant box using Fabric.  Drop me a line to let me
  know how you use vagrantpy.  I'd love to share more use cases.  -Todd DeLuca




  This package is _beta_ and its API is not guaranteed to be stable.  The API
  attempts to be congruent with the `vagrant` API terminology, to facilitate
  knowledge transfer for users already familiar with Vagrant.  Over time, the
  vagrantpy API has changed to better match the underling `vagrant` CLI and
  to evolve with the changes in that CLI.

  The package version numbering is in the form `0.X.Y`.  The initial `0` reflects
  the _beta_ nature of this project.  The number `X` is incremented when
  backwards-incompatible changes occur.  The number `Y` is incremented when
  backwards-compatible features or bug fixes are added.




  - Vagrant 1.4 or greater (currently tested with 1.7.2).  Using the latest
    version of Vagrant is strongly recommended.
  - Vagrant requires VirtualBox, VMWare, or another supported provider.
  - Python 2.7 (the only version this package has been tested with.) or Python
    3.3 or higher.
  - The Sahara gem for Vagrant is optional.  It will allow you to use
    `SandboxVagrant`.






  Download and install vagrantpy:

      pip install vagrantpy



  Clone and install vagrantpy

      cd ~
      git clone https://github.com/vagrantpy/vagrantpy.git
      cd vagrantpy
      python setup.py install




  A contrived example of starting a vagrant box (using a Vagrantfile from the
  current directory) and running a fabric task on it:

      import vagrant
      from fabric.api import env, execute, task, run

      @task
      def mytask():
          run('echo $USER')


      v = vagrant.Vagrant()
      v.up()
      env.hosts = [v.user_hostname_port()]
      env.key_filename = v.keyfile()
      env.disable_known_hosts = True # useful for when the vagrant box ip changes.
      execute(mytask) # run a fabric task on the vagrant host.

  Another example showing how to use vagrant multi-vm feature with fabric:

      import vagrant
      from fabric.api import *

      @task
      def start(machine_name):
         """Starts the specified machine using vagrant"""
         v = vagrant.Vagrant()
         v.up(vm_name=machine_name)
         with settings(host_string= v.user_hostname_port(vm_name=machine_name),
                       key_filename = v.keyfile(vm_name=machine_name),
                       disable_known_hosts = True):
              run("echo hello")

  By default python vagrant instances are quiet, meaning that they capture stdout
  and stderr.  For a "loud" instance, use `vagrant.Vagrant(quiet_stdout=False)`.
  Set `quiet_stderr=False` for an even louder version.



  The `Vagrant` class works by executing `vagrant` commands in a subprocess and
  interpreting the output.  Depending on the needs of the user, the communication
  to and from the subprocess can be tailored by altering its environment and
  where it sends its stdout and stderr.



  The stdout and stderr of the underlying vagrant process can be silenced by
  using the `out_cm` and `err_cm` parameters, or by using the `quiet_stdout` and
  `quiet_stderr` parameters of `Vagrant.__init__`.

  Using `out_cm` and `err_cm` to redirect stdout and stderr to `/dev/null`:

      v = vagrant.Vagrant(out_cm=vagrant.devnull_cm, err_cm=vagrant.devnull_cm)
      v.up() # normally noisy

  Using `quiet_stdout` and `quiet_stderr` to redirect stdout and stderr to
  `/dev/null`:

      v = vagrant.Vagrant(quiet_stdout=True, quiet_stderr=True)
      v.up() # normally noisy

  These are functionally equivalent.



  A user might wish to direct the stdout and stderr of a vagrant subprocess to
  a file, perhaps to log and analyze the results of an automated process.  This
  can be accomplished using the `out_cm` and `err_cm` parameters of
  `Vagrant.__init__`.

  For example, log the stdout and stderr of the subprocess to the file
  'deployment.log':

      log_cm = vagrant.make_file_cm('deployment.log')
      v = vagrant.Vagrant(out_cm=log_cm, err_cm=log_cm)
      v.up() # normally noisy



  It's possible to communicate with the Vagrant subprocess using environment
  variables. The `Vagrantfile` could expect environment variables to be present
  and act accordingly. The environment variables can be set by `vagrantpy`.

  ```python
  import vagrant

  v = vagrant.Vagrant()

  os_env = os.environ.copy()
  os_env['USE_NFS'] = '1'

  v.env = os_env
  v.up()  # will pass env to the vagrant subprocess
  ```

  Alternatively, the environment can be passed at instantiation time.

  ```python
  import vagrant

  os_env = os.environ.copy()
  os_env['USE_NFS'] = '1'

  v = vagrant.Vagrant(env=env)
  assert v.env is env  # True
  v.up()  # will pass env to the vagrant subprocess
  ```



  If you use python and vagrant and this project does not do what you want,
  please open an issue or a pull request on github at
  https://github.com/vagrantpy/vagrantpy.

  Please see CHANGELOG.md for a detailed list of contributions and authors.

  When making a pull request, please include unit tests that test your changes
  and make sure any existing tests still work.  See the Testing section below.




  Running the full suite of tests might take 10 minutes or so.  It involves
  downloading boxes and starting and stopping virtual machines several times.

  Run the tests from the top-level directory of the repository:

      nosetests

  Here is an example of running an individual test:

      nosetests tests.test_vagrant:test_boxes


  Manual test of functionality for controlling where the vagrant subcommand
  output is sent -- console or devnull:

      >>> import vagrant
      >>> import os
      >>> vagrantfile = '/Users/tfd/proj/vagrantpy/tests/vagrantfiles/single_box'
      >>> # Demonstrate a quiet Vagrant.  Equivalent to out_cm=vagrant.devnull_cm
      ... v1 = vagrant.Vagrant(vagrantfile)
      >>> v1.destroy() # output to /dev/null
      >>> # Demonstrate a loud Vagrant.  Equivalent to out_cm=vagrant.stdout_cm
      ... v2 = vagrant.Vagrant(vagrantfile, quiet_stdout=False)
      >>> v2.destroy() # stdout sent to console
      ==> default: VM not created. Moving on...
      >>> # Demonstrate that out_cm takes precedence over quiet_stdout=True
      ... v3 = vagrant.Vagrant(vagrantfile, out_cm=vagrant.stdout_cm)
      >>> v3.destroy() # output to console
      ==> default: VM not created. Moving on...
      >>> # Demonstrate a quiet Vagrant using devnull_cm directly
      ... v4 = vagrant.Vagrant(vagrantfile, out_cm=vagrant.devnull_cm)
      >>> v4.destroy() # output to console
      >>>


pkgId: f5bb5626bd3eefe1b024f98240539fbc8dff51530bdc110742d68fb99ceb47a3
name: python-vconnector
arch: src
version: 0.6.0
epoch: 0
release: 1
summary: VMware vSphere Connector Module for Python
url: https://github.com/dnaeon/py-vconnector
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-47485dfd-444b-4511-840d-2939fd5f0deb
location_href: 00005401-python-vconnector/python-vconnector-0.6.0-1.src.rpm
checksum_type: sha256
description:
  vConnector is a wrapper module around
  `pyVmomi VMware vSphere bindings <https://github.com/vmware/pyvmomi>`_,
  which provides methods for connecting and retrieving of
  objects from a VMware vSphere server.
  The purpose of vConnector is to provide the basic primitives for
  building complex applications. vConnector can also be used for
  managing the user/pass/host credentials for your vSphere environment
  using an SQLite database, which in turn can be shared between
  multiple applications requiring access to your vSphere environment
  through a common interface.


pkgId: 09b100c7ca6e7255ec94b492b79cf254d1e7c387f8663c2999fe00395f4ef58c
name: python-vcrpy
arch: src
version: 4.2.1
epoch: 0
release: 1
summary: Automatically mock your HTTP interactions to simplify and speed up testing
url: https://github.com/kevin1024/vcrpy
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ec0fdb52-f8a2-4bbb-bbea-b918a30a1ce5
location_href: 00005402-python-vcrpy/python-vcrpy-4.2.1-1.src.rpm
checksum_type: sha256
description:
  This is a Python version of `Ruby's VCR
  library <https://github.com/vcr/vcr>`__.
  Source code
    https://github.com/kevin1024/vcrpy
  Documentation
    https://vcrpy.readthedocs.io/


pkgId: c634fd0b868348893bbe28f4d00c9f07b83c7996385347f0372eefd0ace62c3b
name: python-vcstool
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: vcstool provides a command line tool to invoke vcs commands on multiple repositories.
url: https://github.com/dirk-thomas/vcstool
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4e5689be-4b95-47fc-9841-58b9f49492e8
location_href: 00005403-python-vcstool/python-vcstool-0.3.0-1.src.rpm
checksum_type: sha256
description:
  vcstool enables batch commands on multiple different vcs repositories. Currently it supports git, hg, svn and bzr.


pkgId: 73dba700d5f769bd5d8440169597e19ea54c28d170a073e5ce0df735d06a8b5f
name: python-vcstools
arch: src
version: 0.1.42
epoch: 0
release: 1
summary: VCS/SCM source control library for svn, git, hg, and bzr
url: http://wiki.ros.org/vcstools
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8aca5c35-c5d5-4c15-8b59-425e6be01b47
location_href: 00005404-python-vcstools/python-vcstools-0.1.42-1.src.rpm
checksum_type: sha256
description:
  The vcstools module provides a Python API for interacting with different version control systems (VCS/SCMs)
  It is used in tools like `wstool <https://wiki.ros.org/wstool>`_ and `rosinstall <https://docs.ros.org/independent/api/rosinstall/html/>`_, which are frequently used in ROS.
  This should not be confused with ``vcstool`` (no trailing ``s``), which provides the ``vcs`` command line tool and is otherwise unrelated to this repository, see: https://github.com/dirk-thomas/vcstool
  See http://www.ros.org/doc/independent/api/vcstools/html/


pkgId: 2d382202b5721dcf416f8bf295bea55007dab8ae7786c427c6edf476cd46b94a
name: python-verboselogs
arch: src
version: 1.7
epoch: 0
release: 1
summary: Verbose logging level for Python's logging module
url: https://verboselogs.readthedocs.io
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-72a5f18c-7966-44e3-bf13-f4645afd01ae
location_href: 00005409-python-verboselogs/python-verboselogs-1.7-1.src.rpm
checksum_type: sha256
description:
  The verboselogs_ package extends Python's logging_ module to add the log levels
  NOTICE_, SPAM_, SUCCESS_ and VERBOSE_:
  - The NOTICE level sits between the predefined WARNING and INFO levels.
  - The SPAM level sits between the predefined DEBUG and NOTSET levels.
  - The SUCCESS level sits between the predefined WARNING and ERROR levels.
  - The VERBOSE level sits between the predefined INFO and DEBUG levels.
  The code to do this is simple and short, but I still don't want to copy/paste
  it to every project I'm working on, hence this package. It's currently tested
  on Python 2.6, 2.7, 3.4, 3.5, 3.6 and PyPy.


pkgId: 15592b49f72af827fcf08338b1661e764eee29b04e31fd542e60b6e55a0e76c2
name: python-versioneer
arch: src
version: 0.28
epoch: 0
release: 1
summary: Easy VCS-based management of project version strings
url: https://github.com/python-versioneer/python-versioneer
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2237ee52-8a09-4222-868c-36e3fd097275
location_href: 00005410-python-versioneer/python-versioneer-0.28-1.src.rpm
checksum_type: sha256
description:
  * like a rocketeer, but for versions!
  * https://github.com/python-versioneer/python-versioneer
  * Brian Warner
  * License: Public Domain (Unlicense)
  * Compatible with: Python 3.7, 3.8, 3.9, 3.10 and pypy3
  * [![Latest Version][pypi-image]][pypi-url]
  * [![Build Status][travis-image]][travis-url]
  This is a tool for managing a recorded version number in setuptools-based
  python projects. The goal is to remove the tedious and error-prone "update
  the embedded version string" step from your release process. Making a new
  release should be as easy as recording a new tag in your version-control
  system, and maybe making new tarballs.

  Versioneer provides two installation modes. The "classic" vendored mode installs
  a copy of versioneer into your repository. The experimental build-time dependency mode
  is intended to allow you to skip this step and simplify the process of upgrading.

  * `pip install versioneer` to somewhere in your $PATH
     * A [conda-forge recipe](https://github.com/conda-forge/versioneer-feedstock) is
       available, so you can also use `conda install -c conda-forge versioneer`
  * add a `[tool.versioneer]` section to your `pyproject.toml` or a
    `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))
     * Note that you will need to add `tomli; python_version < "3.11"` to your
       build-time dependencies if you use `pyproject.toml`
  * run `versioneer install --vendor` in your source tree, commit the results
  * verify version information with `python setup.py version`

  * `pip install versioneer` to somewhere in your $PATH
     * A [conda-forge recipe](https://github.com/conda-forge/versioneer-feedstock) is
       available, so you can also use `conda install -c conda-forge versioneer`
  * add a `[tool.versioneer]` section to your `pyproject.toml` or a
    `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))
  * add `versioneer` (with `[toml]` extra, if configuring in `pyproject.toml`)
    to the `requires` key of the `build-system` table in `pyproject.toml`:
    ```toml
    [build-system]
    requires = ["setuptools", "versioneer[toml]"]
    build-backend = "setuptools.build_meta"
    ```
  * run `versioneer install --no-vendor` in your source tree, commit the results
  * verify version information with `python setup.py version`

  Source trees come from a variety of places:
  * a version-control system checkout (mostly used by developers)
  * a nightly tarball, produced by build automation
  * a snapshot tarball, produced by a web-based VCS browser, like github's
    "tarball from tag" feature
  * a release tarball, produced by "setup.py sdist", distributed through PyPI
  Within each source tree, the version identifier (either a string or a number,
  this tool is format-agnostic) can come from a variety of places:
  * ask the VCS tool itself, e.g. "git describe" (for checkouts), which knows
    about recent "tags" and an absolute revision-id
  * the name of the directory into which the tarball was unpacked
  * an expanded VCS keyword ($Id$, etc)
  * a `_version.py` created by some earlier build step
  For released software, the version identifier is closely related to a VCS
  tag. Some projects use tag names that include more than just the version
  string (e.g. "myproject-1.2" instead of just "1.2"), in which case the tool
  needs to strip the tag prefix to extract the version identifier. For
  unreleased software (between tags), the version identifier should provide
  enough information to help developers recreate the same tree, while also
  giving them an idea of roughly how old the tree is (after version 1.2, before
  version 1.3). Many VCS systems can report a description that captures this,
  for example `git describe --tags --dirty --always` reports things like
  "0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the
  0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has
  uncommitted changes).
  The version identifier is used for multiple purposes:
  * to allow the module to self-identify its version: `myproject.__version__`
  * to choose a name and prefix for a 'setup.py sdist' tarball

  Versioneer works by adding a special `_version.py` file into your source
  tree, where your `__init__.py` can import it. This `_version.py` knows how to
  dynamically ask the VCS tool for version information at import time.
  `_version.py` also contains `$Revision$` markers, and the installation
  process marks `_version.py` to have this marker rewritten with a tag name
  during the `git archive` command. As a result, generated tarballs will
  contain enough information to get the proper version.
  To allow `setup.py` to compute a version too, a `versioneer.py` is added to
  the top level of your source tree, next to `setup.py` and the `setup.cfg`
  that configures it. This overrides several distutils/setuptools commands to
  compute the version when invoked, and changes `setup.py build` and `setup.py
  sdist` to replace `_version.py` with a small static file that contains just
  the generated version data.

  See [INSTALL.md](./INSTALL.md) for detailed installation instructions.

  Code which uses Versioneer can learn about its version string at runtime by
  importing `_version` from your main `__init__.py` file and running the
  `get_versions()` function. From the "outside" (e.g. in `setup.py`), you can
  import the top-level `versioneer.py` and run `get_versions()`.
  Both functions return a dictionary with different flavors of version
  information:
  * `['version']`: A condensed version string, rendered using the selected
    style. This is the most commonly used value for the project's version
    string. The default "pep440" style yields strings like `0.11`,
    `0.11+2.g1076c97`, or `0.11+2.g1076c97.dirty`. See the "Styles" section
    below for alternative styles.
  * `['full-revisionid']`: detailed revision identifier. For Git, this is the
    full SHA1 commit id, e.g. "1076c978a8d3cfc70f408fe5974aa6c092c949ac".
  * `['date']`: Date and time of the latest `HEAD` commit. For Git, it is the
    commit date in ISO 8601 format. This will be None if the date is not
    available.
  * `['dirty']`: a boolean, True if the tree has uncommitted changes. Note that
    this is only accurate if run in a VCS checkout, otherwise it is likely to
    be False or None
  * `['error']`: if the version string could not be computed, this will be set
    to a string describing the problem, otherwise it will be None. It may be
    useful to throw an exception in setup.py if this is set, to avoid e.g.
    creating tarballs with a version string of "unknown".
  Some variants are more useful than others. Including `full-revisionid` in a
  bug report should allow developers to reconstruct the exact code being tested
  (or indicate the presence of local changes that should be shared with the
  developers). `version` is suitable for display in an "about" box or a CLI
  `--version` output: it can be easily compared against release notes and lists
  of bugs fixed in various releases.
  The installer adds the following text to your `__init__.py` to place a basic
  version in `YOURPROJECT.__version__`:
      from ._version import get_versions
      __version__ = get_versions()['version']
      del get_versions

  The setup.cfg `style=` configuration controls how the VCS information is
  rendered into a version string.
  The default style, "pep440", produces a PEP440-compliant string, equal to the
  un-prefixed tag name for actual releases, and containing an additional "local
  version" section with more detail for in-between builds. For Git, this is
  TAG[+DISTANCE.gHEX[.dirty]] , using information from `git describe --tags
  --dirty --always`. For example "0.11+2.g1076c97.dirty" indicates that the
  tree is like the "1076c97" commit but has uncommitted changes (".dirty"), and
  that this commit is two revisions ("+2") beyond the "0.11" tag. For released
  software (exactly equal to a known tag), the identifier will only contain the
  stripped tag, e.g. "0.11".
  Other styles are available. See [details.md](details.md) in the Versioneer
  source tree for descriptions.

  Versioneer tries to avoid fatal errors: if something goes wrong, it will tend
  to return a version of "0+unknown". To investigate the problem, run `setup.py
  version`, which will run the version-lookup code in a verbose mode, and will
  display the full contents of `get_versions()` (including the `error` string,
  which may help identify what went wrong).

  Some situations are known to cause problems for Versioneer. This details the
  most significant ones. More can be found on Github
  [issues page](https://github.com/python-versioneer/python-versioneer/issues).

  Versioneer has limited support for source trees in which `setup.py` is not in
  the root directory (e.g. `setup.py` and `.git/` are *not* siblings). The are
  two common reasons why `setup.py` might not be in the root:
  * Source trees which contain multiple subprojects, such as
    [Buildbot](https://github.com/buildbot/buildbot), which contains both
    "master" and "slave" subprojects, each with their own `setup.py`,
    `setup.cfg`, and `tox.ini`. Projects like these produce multiple PyPI
    distributions (and upload multiple independently-installable tarballs).
  * Source trees whose main purpose is to contain a C library, but which also
    provide bindings to Python (and perhaps other languages) in subdirectories.
  Versioneer will look for `.git` in parent directories, and most operations
  should get the right version string. However `pip` and `setuptools` have bugs
  and implementation details which frequently cause `pip install .` from a
  subproject directory to fail to find a correct version string (so it usually
  defaults to `0+unknown`).
  `pip install --editable .` should work correctly. `setup.py install` might
  work too.
  Pip-8.1.1 is known to have this problem, but hopefully it will get fixed in
  some later version.
  [Bug #38](https://github.com/python-versioneer/python-versioneer/issues/38) is tracking
  this issue. The discussion in
  [PR #61](https://github.com/python-versioneer/python-versioneer/pull/61) describes the
  issue from the Versioneer side in more detail.
  [pip PR#3176](https://github.com/pypa/pip/pull/3176) and
  [pip PR#3615](https://github.com/pypa/pip/pull/3615) contain work to improve
  pip to let Versioneer work correctly.
  Versioneer-0.16 and earlier only looked for a `.git` directory next to the
  `setup.cfg`, so subprojects were completely unsupported with those releases.

  `setup.py develop` and `pip install --editable .` allow you to install a
  project into a virtualenv once, then continue editing the source code (and
  test) without re-installing after every change.
  "Entry-point scripts" (`setup(entry_points={"console_scripts": ..})`) are a
  convenient way to specify executable scripts that should be installed along
  with the python package.
  These both work as expected when using modern setuptools. When using
  setuptools-18.5 or earlier, however, certain operations will cause
  `pkg_resources.DistributionNotFound` errors when running the entrypoint
  script, which must be resolved by re-installing the package. This happens
  when the install happens with one version, then the egg_info data is
  regenerated while a different version is checked out. Many setup.py commands
  cause egg_info to be rebuilt (including `sdist`, `wheel`, and installing into
  a different virtualenv), so this can be surprising.
  [Bug #83](https://github.com/python-versioneer/python-versioneer/issues/83) describes
  this one, but upgrading to a newer version of setuptools should probably
  resolve it.

  To upgrade your project to a new release of Versioneer, do the following:
  * install the new Versioneer (`pip install -U versioneer` or equivalent)
  * edit `setup.cfg` and `pyproject.toml`, if necessary,
    to include any new configuration settings indicated by the release notes.
    See [UPGRADING](./UPGRADING.md) for details.
  * re-run `versioneer install --[no-]vendor` in your source tree, to replace
    `SRC/_version.py`
  * commit any changed files

  This tool is designed to make it easily extended to other version-control
  systems: all VCS-specific components are in separate directories like
  src/git/ . The top-level `versioneer.py` script is assembled from these
  components by running make-versioneer.py . In the future, make-versioneer.py
  will take a VCS name as an argument, and will construct a version of
  `versioneer.py` that is specific to the given VCS. It might also take the
  configuration arguments that are currently provided manually during
  installation by editing setup.py . Alternatively, it might go the other
  direction and include code from all supported VCS systems, reducing the
  number of intermediate scripts.

  * [setuptools_scm](https://github.com/pypa/setuptools_scm/) - a non-vendored build-time
    dependency
  * [minver](https://github.com/jbweston/miniver) - a lightweight reimplementation of
    versioneer
  * [versioningit](https://github.com/jwodder/versioningit) - a PEP 518-based setuptools
    plugin

  To make Versioneer easier to embed, all its code is dedicated to the public
  domain. The `_version.py` that it creates is also in the public domain.
  Specifically, both are released under the "Unlicense", as described in
  https://unlicense.org/.
  [pypi-image]: https://img.shields.io/pypi/v/versioneer.svg
  [pypi-url]: https://pypi.python.org/pypi/versioneer/
  [travis-image]:
  https://img.shields.io/travis/com/python-versioneer/python-versioneer.svg
  [travis-url]: https://travis-ci.com/github/python-versioneer/python-versioneer

rpm_license:
  This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. 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 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. For more information, please refer to <http://unlicense.org/>


pkgId: 38b61f9f5ce6ddb74c708ebc06282bbb2427df371b087da0931e31f0200ac908
name: python-vertica-python
arch: src
version: 1.3.1
epoch: 0
release: 1
summary: Official native Python client for the Vertica database.
url: https://github.com/vertica/vertica-python
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c3dfb3bf-bb5b-4729-8832-cc5d5270d503
location_href: 00010477-python-vertica-python/python-vertica-python-1.3.1-1.src.rpm
checksum_type: sha256
description:
  vertica-python is the official Vertica database client for the Python programming language. Please check the [project homepage](https://github.com/vertica/vertica-python) for the details.


pkgId: 7a3d3ca79f4d379836be2ea7298fe975b94179fab4af30a93acf0591c715f990
name: python-viivakoodi
arch: src
version: 0.8.0
epoch: 0
release: 1
summary: Create standard barcodes with Python. No external modules needed (optional PIL support included).
url: https://github.com/kxepal/viivakoodi
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c0144184-863b-47ba-b71b-ebb94ae52d85
location_href: 00014297-python-viivakoodi/python-viivakoodi-0.8.0-1.src.rpm
checksum_type: sha256
description:
  `Viivakoodi` (`barcode in Suomi <https://fi.wikipedia.org/wiki/Viivakoodi>`_)
  is the fork of `pyBarcode <https://bitbucket.org/whitie/python-barcode/>`_
  project.
  This library provides a simple way to create barcodes using only the
  Python standardlib. The barcodes where created as SVG objects.
  Report bugs at https://github.com/kxepal/viivakoodi/issues/


pkgId: 57f04ef8ef159a06ef128f383a980b2bf1fed37bfc53903eaad6742d9314e4fb
name: python-vincenty
arch: src
version: 0.1.4
epoch: 0
release: 1
summary: Calculate the geographical distance between 2 points with extreme accuracy.
url: https://github.com/maurycyp/vincenty
rpm_license: Unlicense
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5b621f87-4546-4b79-95d1-1699e01d1f22
location_href: 00013391-python-vincenty/python-vincenty-0.1.4-1.src.rpm
checksum_type: sha256
description:
  Calculate the geographical distance (in kilometers or miles) between 2 points
  with extreme accuracy.
  This library implements Vincenty's solution to the inverse geodetic problem. It
  is based on the WGS 84 reference ellipsoid and is accurate to within 1 mm (!) or
  better.
  This formula is widely used in geographic information systems (GIS) and is much
  more accurate than methods for computing the great-circle distance (which assume
  a spherical Earth).


pkgId: e4fdb46e4bd544ae5c64128eee44b84a7a54230ca21369d81c21cd18dd68b9e2
name: python-virtualenv-api
arch: src
version: 2.1.18
epoch: 0
release: 1
summary: An API for virtualenv/pip
url: https://github.com/sjkingo/virtualenv-api
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3e8fa477-8588-408b-baca-281939fe123a
location_href: 00005419-python-virtualenv-api/python-virtualenv-api-2.1.18-1.src.rpm
checksum_type: sha256
description:
  |Build Status|
  |Latest version|
  |BSD License|
  `virtualenv`_ is a tool to create isolated Python environments. Unfortunately,
  it does not expose a native Python API.  This package aims to provide an API in
  the form of a wrapper around virtualenv.
  It can be used to create and delete environments and perform package management
  inside the environment.
  Full support is provided for all supported versions of Python.


pkgId: 29ce6bbb2b295f7ed7355e117e9b7baf376dacecffd3fd0d167b598cb5478cd2
name: python-virtualenv-clone
arch: src
version: 0.5.7
epoch: 0
release: 1
summary: script to clone virtualenvs.
url: https://github.com/edwardgeorge/virtualenv-clone
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b7b3817a-2828-46ac-8e18-54ab80c84703
location_href: 00005420-python-virtualenv-clone/python-virtualenv-clone-0.5.7-1.src.rpm
checksum_type: sha256
description:
  virtualenv cloning script.

  [![Build Status](https://travis-ci.org/edwardgeorge/virtualenv-clone.svg?branch=master)](https://travis-ci.org/edwardgeorge/virtualenv-clone)

  A script for cloning a non-relocatable virtualenv.

  Virtualenv provides a way to make virtualenv's relocatable which could then be
  copied as we wanted. However making a virtualenv relocatable this way breaks
  the no-site-packages isolation of the virtualenv as well as other aspects that
  come with relative paths and `/usr/bin/env` shebangs that may be undesirable.

  Also, the .pth and .egg-link rewriting doesn't seem to work as intended. This
  attempts to overcome these issues and provide a way to easily clone an
  existing virtualenv.

  It performs the following:

  - copies `sys.argv[1]` dir to `sys.argv[2]`
  - updates the hardcoded `VIRTUAL_ENV` variable in the activate script to the
    new repo location. (`--relocatable` doesn't touch this)
  - updates the shebangs of the various scripts in bin to the new Python if
    they pointed to the old Python. (version numbering is retained.)

      it can also change `/usr/bin/env python` shebangs to be absolute too,
      though this functionality is not exposed at present.

  - checks `sys.path` of the cloned virtualenv and if any of the paths are from
    the old environment it finds any `.pth` or `.egg` link files within sys.path
    located in the new environment and makes sure any absolute paths to the
    old environment are updated to the new environment.

  - finally it double checks `sys.path` again and will fail if there are still
    paths from the old environment present.

  NOTE: This script requires Python 2.7 or 3.4+


pkgId: 16603f2d09fb0275d10e05d918e8058ec2dc5214323037726fe33b6268146725
name: python-visdom
arch: src
version: 0.2.4
epoch: 0
release: 1
summary: A tool for visualizing live, rich data for Torch and Numpy
url: https://github.com/facebookresearch/visdom
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5affe7aa-0352-47ea-b7e0-0a0680dfc17b
location_href: 00012228-python-visdom/python-visdom-0.2.4-1.src.rpm
checksum_type: sha256
description:
  <h3 align="center">
      <br/>
      <img src="https://user-images.githubusercontent.com/19650074/198746195-574bb828-026f-41cb-82a9-250fcbc4e090.png" width="300" alt="Logo"/><br/><br/>
      Creating, organizing & sharing visualizations of live, rich data. Supports <a href="https://pypi.org/project/visdom/">Python</a>.
  </h3>


  <p align="center"> Jump To: <a href="#setup">Setup</a>, <a href="#usage">Usage</a>, <a href="#api">API</a>, <a href="#customizing-visdom">Customizing</a>, <a href="#contributing">Contributing</a>, <a href="#license">License</a>
  </p>


  <p align="center">
      <a href="https://github.com/fossasia/visdom/releases"><img src="https://img.shields.io/github/v/release/fossasia/visdom?colorA=363a4f&colorB=a6da95&style=for-the-badge"/></a>
      <a href="https://pypi.org/project/visdom"><img src="https://img.shields.io/pypi/dd/visdom?colorA=363a4f&colorB=156df1&style=for-the-badge"></a>
      <a href="https://github.com/fossasia/visdom/commits"><img src="https://img.shields.io/github/commit-activity/m/fossasia/visdom?colorA=363a4f&colorB=0099ff&style=for-the-badge"/></a>
      <a href="https://github.com/fossasia/visdom/contributors"><img src="https://img.shields.io/github/contributors/fossasia/visdom?colorA=363a4f&colorB=60b9f4&style=for-the-badge"/></a>
  </p>


  <p align="center">
  Visdom aims to facilitate visualization of (remote) data with an emphasis on supporting scientific experimentation.<br/>
  Broadcast visualizations of plots, images, and text for yourself and your collaborators.
  Organize your visualization space programmatically or through the UI to create dashboards for live data, inspect results of experiments, or debug experimental code.
  </p>

  <p align="center">
    <img src="https://user-images.githubusercontent.com/19650074/198747904-7a8a580f-851a-45fb-8f45-94e54a910ee2.png"/>
  </p>
  <p align="center">
    <img width="49.5%" src="https://user-images.githubusercontent.com/19650074/198748177-c973f387-c392-4f6e-9e3d-27dfe578eb59.gif"/>
    <img width="49.5%" src="https://user-images.githubusercontent.com/19650074/198748189-917091b6-95c4-4415-b965-ba3e7e81e1f8.png"/>
  </p>


  Visdom has a simple set of features that can be composed for various use-cases.

  <details>
  <summary><b>Windows</b></summary>
  <p align="center">
  <img width=500 align="center" src="https://user-images.githubusercontent.com/19650074/198821065-6666cb22-d34a-4839-ae19-f6f6a4a1bae4.png"/>
  </p>

  The UI begins as a blank slate – you can populate it with plots, images, and text. These appear in windows that you can drag, drop, resize, and destroy. The windows live in `envs` and the state of `envs` is stored across sessions. You can download the content of windows – including your plots in `svg`.

  > **Tip**: You can use the zoom of your browser to adjust the scale of the UI.
  </details>
  <details>
  <summary><b>Callbacks</b></summary>

  The python Visdom implementation supports callbacks on a window. The demo shows an example of this in the form of an editable text pad. The functionality of these callbacks allows the Visdom object to receive and react to events that happen in the frontend.

  You can subscribe a window to events by adding a function to the event handlers dict for the window id you want to subscribe by calling `viz.register_event_handler(handler, win_id)` with your handler and the window id. Multiple handlers can be registered to the same window. You can remove all event handlers from a window using `viz.clear_event_handlers(win_id)`. When an event occurs to that window, your callbacks will be called on a dict containing:

   - `event_type`: one of the below event types
   - `pane_data`: all of the stored contents for that window including layout and content.
   - `eid`: the current environment id
   - `target`: the window id the event is called on

  Additional parameters are defined below.

  Right now the following callback events are supported:

  1. `Close` - Triggers when a window is closed. Returns a dict with only the aforementioned fields.
  2. `KeyPress` - Triggers when a key is pressed. Contains additional parameters:
      - `key` - A string representation of the key pressed (applying state modifiers such as SHIFT)
      - `key_code` - The javascript event keycode for the pressed key (no modifiers)
  3. `PropertyUpdate` - Triggers when a property is updated in Property pane
      - `propertyId` - Position in properties list
      - `value` - New property value
  4. `Click` - Triggers when Image pane is clicked on, has a parameter:
      - `image_coord` - dictionary with the fields `x` and `y` for the click coordinates in the coordinate frame of the possibly zoomed/panned image (*not* the enclosing pane).

  </details>

  <details>
  <summary><b>Editable Plot Parameters</b></summary>
  Use the top-right *edit*-Button to inspect all parameters used for plot in the respective window.
  The visdom client supports dynamic change of plot parameters as well. Just change one of the listed parameters, the plot will be altered on-the-fly.
  Click the button again to close the property list.
  <p align="center"><img align="center" src="https://user-images.githubusercontent.com/19650074/156751970-0915757d-8bf0-4a6d-a510-1d34a918e47a.gif" width="400" /></p>
  </details>


  <details>
  <summary><b>Environments</b></summary>
  <p align="center"><img align="center" src="https://user-images.githubusercontent.com/19650074/198821281-ea1cea1a-66c3-495e-be52-cd0f1a3300f7.png" width="300" /></p>

  You can partition your visualization space with `envs`. By default, every user will have an env called `main`. New envs can be created in the UI or programmatically. The state of envs is chronically saved. Environments are able to keep entirely different pools of plots.

  You can access a specific env via url: `http://localhost.com:8097/env/main`. If your server is hosted, you can share this url so others can see your visualizations too.

  Environments are automatically hierarchically organized by the first `_`.


  <p align="center"><img align="center" src="https://user-images.githubusercontent.com/19650074/198821299-6602d557-7a02-4b9f-b1d5-d57615cdc15c.png" width="300" /></p>

  From the main page it is possible to toggle between different environments using the environment selector. Selecting a new environment will query the server for the plots that exist in that environment. The environment selector allows for searching and filtering for the new enironment.



  From the main page it is possible to compare different environments using the environment selector. Selecting multiple environments in the check box will query the server for the plots with the same titles in all environments and plot them in a single plot. An additional compare legend pane is created with a number corresponding to each selected environment. Individual plots are updated with legends corresponding to "x_name" where `x` is a number corresponding with the compare legend pane and `name` is the original name in the legend.

  > **Note**: The compare envs view is not robust to high throughput data, as the server is responsible for generating the compared content. Do not compare an environment that is receiving a high quantity of updates on any plot, as every update will request regenerating the comparison. If you need to compare two plots that are receiving high quantities of data, have them share the same window on a singular env.


  You can use the eraser button to remove all of the current contents of an environment. This closes the plot windows for that environment but keeps the empty environment for new plots.


  <p align="center"><img align="center" src="https://user-images.githubusercontent.com/19650074/198821309-4c6449fd-978a-462a-aa35-e59d872b61bd.png" width="400" /></p>

  Pressing the folder icon opens a dialog that allows you to fork or force save the current environment, or delete any of your existing environments. Use of this feature is fully described in the **State** section.

  >**Env Files:**
  >Your envs are loaded upon request by the user, by default from `$HOME/.visdom/`. Custom paths can be passed as a cmd-line argument. Envs are removed by using the delete button or by deleting the corresponding `.json` file from the env dir. In case you want the server to pre-load all files into cache, use the flag `-eager_data_loading`.

  </details>


  <details>
  <summary><b>State</b></summary>

  Once you've created a few visualizations, state is maintained. The server automatically caches your visualizations -- if you reload the page, your visualizations reappear.

  <p align="center"><img align="center" src="https://user-images.githubusercontent.com/19650074/198821344-cb8c424e-455c-4249-b3b4-5554309a5ec7.gif" width="400" /></p>


  * **Save:** You can manually do so with the `save` button. This will serialize the env's state (to disk, in JSON), including window positions. You can save an `env` programmatically.
  <br/>This is helpful for more sophisticated visualizations in which configuration is meaningful, e.g. a data-rich demo, a model training dashboard, or systematic experimentation. This also makes them easy to share and reuse.

  * **Fork:** If you enter a new env name, saving will create a new env -- effectively **forking** the previous env.

  > **Tip**: Fork an environment before you begin to make edits to ensure that your changes are saved seperately.


  You can use the `filter` to dynamically sift through windows present in an env -- just provide a regular expression with which to match titles of window you want to show. This can be helpful in use cases involving an env with many windows e.g. when systematically checking experimental results.

  <p align="center"><img align="center" src="https://user-images.githubusercontent.com/19650074/198821379-eeebd8a2-bcab-407a-b47f-9b2d0290c23e.png" width="300" /></p>

  > **Note**: If you have saved your current view, the view will be restored after clearing the filter.
  > <p align="center"><img align="center" src="https://user-images.githubusercontent.com/19650074/198821402-4702611e-1038-4093-8cd5-9c8120444211.gif" width="500" /></p>


  <p align="center"><img align="center" src="https://user-images.githubusercontent.com/19650074/198821420-458c863b-c304-4d10-8906-0cc2f0c20241.png" width="300" /></p>

  It is possible to manage the views simply by dragging the tops of windows around, however additional features exist to keep views organized and save common views. View management can be useful for saving and switching between multiple common organizations of your windows.


  Using the folder icon, a dialog window opens where views can be forked in the same way that envs can be. Saving a view will retain the position and sizes of all of the windows in a given environment. Views are saved in `$HOME/.visdom/view/layouts.json` in the visdom filepath.

  > **Note**: Saved views are static, and editing a saved view copies that view over to the `current` view where editing can occur.


  Using the repack icon (9 boxes), visdom will attempt to pack your windows in a way that they best fit while retaining row/column ordering.

  > **Note**: Due to the reliance on row/column ordering and `ReactGridLayout` the final layout might be slightly different than what might be expected. We're working on improving that experience or providing alternatives that give more fine-tuned control.


  <p align="center"><img align="center" src="https://user-images.githubusercontent.com/19650074/198821436-6c7957b5-dd67-4afc-9fc3-4bf074137022.gif" width="600" /></p>

  Using the view dropdown it is possible to select previously saved views, restoring the locations and sizes of all of the windows within the current environment to the places they were when that view was saved last.
  </details>






  Python and web clients come bundled with the python server.

  Install from pip
  ```bash
  > pip install visdom
  ```

  Install from source
  ```bash
  > pip install git+https://github.com/fossasia/visdom
  ```



  Start the server (probably in a  `screen` or `tmux`) from the command line:

  ```bash
  > visdom
  ```

  Visdom now can be accessed by going to `http://localhost:8097` in your browser, or your own host address if specified.

  > The `visdom` command is equivalent to running `python -m visdom.server`.

  >If the above does not work, try using an SSH tunnel to your server by adding the following line to your local  `~/.ssh/config`:
  ```LocalForward 127.0.0.1:8097 127.0.0.1:8097```.



  The following options can be provided to the server:

  1. `-port` : The port to run the server on.
  2. `-hostname` : The hostname to run the server on.
  3. `-base_url` : The base server url (default = /).
  4. `-env_path` : The path to the serialized session to reload.
  5. `-logging_level` : Logging level (default = INFO). Accepts both standard text and numeric logging values.
  6. `-readonly` : Flag to start server in readonly mode.
  7. `-enable_login` : Flag to setup authentication for the sever, requiring a username and password to login.
  8. `-force_new_cookie` : Flag to reset the secure cookie used by the server, invalidating current login cookies.
  Requires `-enable_login`.
  9. `-bind_local` : Flag to make the server accessible only from localhost.
  10. `-eager_data_loading` : By default visdom loads environments lazily upon user request. Setting this flag lets visdom pre-fetch all environments upon startup.

  When `-enable_login` flag is provided, the server asks user to input credentials using terminal prompt. Alternatively,
  you can setup `VISDOM_USE_ENV_CREDENTIALS` env variable, and then provide your username and password via
  `VISDOM_USERNAME` and `VISDOM_PASSWORD` env variables without manually interacting with the terminal. This setup
  is useful in case if you would like to launch `visdom` server from bash script, or from Jupyter notebook.
  ```bash
  VISDOM_USERNAME=username
  VISDOM_PASSWORD=password
  VISDOM_USE_ENV_CREDENTIALS=1 visdom -enable_login
  ```
  You can also use `VISDOM_COOKIE` variable to provide cookies value if the cookie file wasn't generated, or the
  flag `-force_new_cookie` was set.


  ```python
  import visdom
  import numpy as np
  vis = visdom.Visdom()
  vis.text('Hello, world!')
  vis.image(np.ones((3, 10, 10)))
  ```


  If you have cloned this repository, you can run our demo showcase.
  ```bash
  python example/demo.py
  ```



  For a quick introduction into the capabilities of `visdom`, have a look at the `example` directory, or read the details below.


  The python visdom client takes a few options:
  - `server`: the hostname of your visdom server (default: `'http://localhost'`)
  - `port`: the port for your visdom server (default: `8097`)
  - `base_url`: the base visdom server url (default: `/`)
  - `env`: Default environment to plot to when no `env` is provided (default: `main`)
  - `raise_exceptions`: Raise exceptions upon failure rather than printing them (default: `True` (soon))
  - `log_to_filename`: If not none, log all plotting and updating events to the given file (append mode) so that they can be replayed later using `replay_log` (default: `None`)
  - `use_incoming_socket`: enable use of the socket for receiving events from the web client, allowing user to register callbacks (default: `True`)
  - `http_proxy_host`: Deprecated. Use Proxies argument for complete proxy support.
  - `http_proxy_port`: Deprecated. Use Proxies argument for complete proxy support.
  - `username`: username to use for authentication, if server started with `-enable_login` (default: `None`)
  - `password`: password to use for authentication, if server started with `-enable_login` (default: `None`)
  - `proxies`: Dictionary mapping protocol to the URL of the proxy (e.g. {`http`: `foo.bar:3128`}) to be used on each Request. (default: `None`)
  - `offline`: Flag to run visdom in offline mode, where all requests are logged to file rather than to the server. Requires `log_to_filename` is set. In offline mode, all visdom commands that don't create or update plots will simply return `True`. (default: `False`)

  Other options are either currently unused (endpoint, ipv6) or used for internal functionality.


  Visdom offers the following basic visualization functions:
  - [`vis.image`](#visimage)    : image
  - [`vis.images`](#visimages)   : list of images
  - [`vis.text`](#vistext)     : arbitrary HTML
  - [`vis.properties`](#visproperties)     : properties grid
  - [`vis.audio`](#visaudio)    : audio
  - [`vis.video`](#visvideo)    : videos
  - [`vis.svg`](#vissvg)      : SVG object
  - [`vis.matplot`](#vismatplot)  : matplotlib plot
  - [`vis.save`](#vissave)     : serialize state server-side


  We have wrapped several common plot types to make creating basic visualizations easily. These visualizations are powered by [Plotly](https://plot.ly/).

  The following API is currently supported:
  - [`vis.scatter`](#visscatter)  : 2D or 3D scatter plots
  - [`vis.line`](#visline)     : line plots
  - [`vis.stem`](#visstem)     : stem plots
  - [`vis.heatmap`](#visheatmap)  : heatmap plots
  - [`vis.bar`](#visbar)  : bar graphs
  - [`vis.histogram`](#vishistogram) : histograms
  - [`vis.boxplot`](#visboxplot)  : boxplots
  - [`vis.surf`](#vissurf)     : surface plots
  - [`vis.contour`](#viscontour)  : contour plots
  - [`vis.quiver`](#visquiver)   : quiver plots
  - [`vis.mesh`](#vismesh)     : mesh plots
  - [`vis.dual_axis_lines`](#visdual_axis_lines)     : double y axis line plots


  Note that the server API adheres to the Plotly convention of `data` and `layout` objects, such that you can produce your own arbitrary `Plotly` visualizations:

  ```python
  import visdom
  vis = visdom.Visdom()

  trace = dict(x=[1, 2, 3], y=[4, 5, 6], mode="markers+lines", type='custom',
               marker={'color': 'red', 'symbol': 104, 'size': "10"},
               text=["one", "two", "three"], name='1st Trace')
  layout = dict(title="First Plot", xaxis={'title': 'x1'}, yaxis={'title': 'x2'})

  vis._send({'data': [trace], 'layout': layout, 'win': 'mywin'})
  ```


  - [`vis.close`](#visclose)    : close a window by id
  - [`vis.delete_env`](#visdelete_env) : delete an environment by env_id
  - [`vis.win_exists`](#viswin_exists) : check if a window already exists by id
  - [`vis.get_env_list`](#visget_env_list) : get a list of all of the environments on your server
  - [`vis.win_hash`](#viswin_hash): get md5 hash of window's contents
  - [`vis.get_window_data`](#visget_window_data): get current data for a window
  - [`vis.check_connection`](#vischeck_connection): check if the server is connected
  - [`vis.replay_log`](#visreplay_log): replay the actions from the provided log file



  <img src="https://user-images.githubusercontent.com/19650074/198747904-7a8a580f-851a-45fb-8f45-94e54a910ee2.png"/>




  This function draws an `img`. It takes as input an `CxHxW` tensor `img`
  that contains the image.

  The following `opts` are supported:

  - `jpgquality`: JPG quality (`number` 0-100). If defined image will be saved as JPG to reduce file size. If not defined image will be saved as PNG.
  - `caption`: Caption for the image
  - `store_history`: Keep all images stored to the same window and attach a slider to the bottom that will let you select the image to view. You must always provide this opt when sending new images to an image with history.

  > **Note** You can use alt on an image pane to view the x/y coordinates of the cursor. You can also ctrl-scroll to zoom, alt scroll to pan vertically, and alt-shift scroll to pan horizontally. Double click inside the pane to restore the image to default.




  This function draws a list of `images`. It takes an input `B x C x H x W` tensor or a `list of images` all of the same size. It makes a grid of images of size (B / nrow, nrow).

  The following arguments and `opts` are supported:

  - `nrow`: Number of images in a row
  - `padding`: Padding around the image, equal padding around all 4 sides
  - `opts.jpgquality`: JPG quality (`number` 0-100). If defined image will be saved as JPG to reduce file size. If not defined image will be saved as PNG.
  - `opts.caption`: Caption for the image


  This function prints text in a  box. You can use this to embed arbitrary HTML.
  It takes as input a `text` string.
  No specific `opts` are currently supported.


  This function shows editable properties in a pane. Properties are expected to be a List of Dicts e.g.:
  ```
      properties = [
          {'type': 'text', 'name': 'Text input', 'value': 'initial'},
          {'type': 'number', 'name': 'Number input', 'value': '12'},
          {'type': 'button', 'name': 'Button', 'value': 'Start'},
          {'type': 'checkbox', 'name': 'Checkbox', 'value': True},
          {'type': 'select', 'name': 'Select', 'value': 1, 'values': ['Red', 'Green', 'Blue']},
      ]
  ```
  Supported types:
   - text: string
   - number: decimal number
   - button: button labeled with "value"
   - checkbox: boolean value rendered as a checkbox
   - select: multiple values select box
      - `value`: id of selected value (zero based)
      - `values`: list of possible values

  Callback are called on property value update:
   - `event_type`: `"PropertyUpdate"`
   - `propertyId`: position in the `properties` list
   - `value`: new value

  No specific `opts` are currently supported.


  This function plays audio. It takes as input the filename of the audio
  file or an `N` tensor containing the waveform (use an `Nx2` matrix for stereo
  audio). The function does not support any plot-specific `opts`.

  The following `opts` are supported:

  - `opts.sample_frequency`: sample frequency (`integer` > 0; default = 44100)

  Known issue: Visdom uses scipy to convert tensor inputs to wave files. Some
  versions of Chrome are known not to play these wave files (Firefox and Safari work fine).


  This function plays a video. It takes as input the filename of the video
  `videofile` or a `LxHxWxC`-sized
  `tensor` containing all the frames of the video as input. The
  function does not support any plot-specific `opts`.

  The following `opts` are supported:

  - `opts.fps`: FPS for the video (`integer` > 0; default = 25)

  Note: Using `tensor` input requires that ffmpeg is installed and working.
  Your ability to play video may depend on the browser you use: your browser has
  to support the Theano codec in an OGG container (Chrome supports this).


  This function draws an SVG object. It takes as input a SVG string `svgstr` or
  the name of an SVG file `svgfile`. The function does not support any specific
  `opts`.


  This function draws a Matplotlib `plot`. The function supports
  one plot-specific option: `resizable`.

  > **Note** When set to `True` the plot is resized with the
  pane. You need `beautifulsoup4` and `lxml`
  packages installed to use this option.

  > **Note**: `matplot` is not rendered using the same backend as plotly plots, and is somewhat less efficient. Using too many matplot windows may degrade visdom performance.



  This function draws a Plotly `Figure` object. It does not explicitly take options as it assumes you have already explicitly configured the figure's `layout`.

  > **Note** You must have the `plotly` Python package installed to use this function. It can typically be installed by running `pip install plotly`.



  This function visualizes a collection of features using the [Barnes-Hut t-SNE algorithm](https://github.com/lvdmaaten/bhtsne).

  The function accepts the following arguments:
  - `features`: a list of tensors
  - `labels`: a list of corresponding labels for the tensors provided for `features`
  - `data_getter=fn`: (optional) a function that takes as a parameter an index into the features array and returns a summary representation of the tensor. If this is set, `data_type` must also be set.
  - `data_type=str`: (optional) currently the only acceptable value here is `"html"`

  We currently assume that there are no more than 10 unique labels, in the future we hope to provide a colormap in opts for other cases.

  From the UI you can also draw a lasso around a subset of features. This will rerun the t-SNE visualization on the selected subset.


  This function saves the `envs` that are alive on the visdom server. It takes input a list of env ids to be saved.


  Further details on the wrapped plotting functions are given below.

  The exact inputs into the plotting functions vary, although most of them take as input a tensor `X` than contains the data and an (optional) tensor `Y` that contains optional data variables (such as labels or timestamps). All plotting functions take as input an optional `win` that can be used to plot into a specific window; each plotting function also returns the `win` of the window it plotted in. One can also specify the `env`  to which the visualization should be added.



  This function draws a 2D or 3D scatter plot. It takes as input an `Nx2` or
  `Nx3` tensor `X` that specifies the locations of the `N` points in the
  scatter plot. An optional `N` tensor `Y` containing discrete labels that
  range between `1` and `K` can be specified as well -- the labels will be
  reflected in the colors of the markers.

  `update` can be used to efficiently update the data of an existing plot. Use `'append'` to append data, `'replace'` to use new data, or `'remove'` to remove the trace specified by `name`.
  Using `update='append'` will create a plot if it doesn't exist and append to the existing plot otherwise.
  If updating a single trace, use `name` to specify the name of the trace to be updated. Update data that is all NaN is ignored (can be used for masking update).


  The following `opts` are supported:

  - `opts.markersymbol`     : marker symbol (`string`; default = `'dot'`)
  - `opts.markersize`       : marker size (`number`; default = `'10'`)
  - `opts.markercolor`      : color per marker. (`torch.*Tensor`; default = `nil`)
  - `opts.markerborderwidth`: marker border line width (`float`; default = 0.5)
  - `opts.legend`           : `table` containing legend names
  - `opts.textlabels`       : text label for each point (`list`: default = `None`)
  - `opts.layoutopts`       : dict of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.
  - `opts.traceopts`        : dict mapping trace names or indices to dicts of additional options that the graph backend accepts. For example `traceopts = {'plotly': {'myTrace': {'mode': 'markers'}}}`.
  - `opts.webgl`            : use WebGL for plotting (`boolean`; default = `false`). It is faster if a plot contains too many points. Use sparingly as browsers won't allow more than a couple of WebGL contexts on a single page.

  `opts.markercolor` is a Tensor with Integer values. The tensor can be of size `N` or `N x 3` or `K` or `K x 3`.

  - Tensor of size `N`: Single intensity value per data point. 0 = black, 255 = red
  - Tensor of size `N x 3`: Red, Green and Blue intensities per data point. 0,0,0 = black, 255,255,255 = white
  - Tensor of size `K` and `K x 3`: Instead of having a unique color per data point, the same color is shared for all points of a particular label.


  This function draws a sunburst chart. It takes two inputs: `parents` and `labels` array.
  values from `parents` array is used as parents object, like it define above which sector
  should the this sector shown. values from `labels` array is used to define sector's label
  or you can say name. keep in mind that lenght of array `parents` and `labels` should be
  equal. There is a third array that you can pass to which is `value`, it is use to show
  a value on hovering over a sector, it is optional argument, but if you are passing it then
  keep in mind lenght of `values` should be equal to `parents` or `labels`.

  Following `opts` are currently supported:
  - `opts.font_size`    : define font size of label (`int`)
  - `opts.font_color`    : define font color of label (`string`)
  - `opts.opacity`    : define opacity of chart (`float`)
  - `opts.line_width`    : define distance between two sectors and sector to its parents (`int`)



  This function draws a line plot. It takes as input an `N` or `NxM` tensor
  `Y` that specifies the values of the `M` lines (that connect `N` points)
  to plot. It also takes an optional `X` tensor that specifies the
  corresponding x-axis values; `X` can be an `N` tensor (in which case all
  lines will share the same x-axis values) or have the same size as `Y`.

  `update` can be used to efficiently update the data of an existing plot. Use 'append' to append data, 'replace' to use new data, or 'remove' to remove the trace specified by `name`. If updating a single trace, use `name` to specify the name of the trace to be updated. Update data that is all NaN is ignored (can be used for masking update).

  **Smoothing**: Line plots can be smoothened using [Savitzky-Golay filtering](https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter). This feature can be enabled by clicking the `~`-symbol in the top right corner of a window that contains a line plot.

  ![Demo of interactive smoothing.](https://user-images.githubusercontent.com/19650074/159366736-1f5d8099-0ea5-4a3b-af17-49d3e24cb32c.gif)

  The following `opts` are supported:

  - `opts.fillarea`    : fill area below line (`boolean`)
  - `opts.markers`     : show markers (`boolean`; default = `false`)
  - `opts.markersymbol`: marker symbol (`string`; default = `'dot'`)
  - `opts.markersize`  : marker size (`number`; default = `'10'`)
  - `opts.linecolor`   : line colors (`np.array`; default = None)
  - `opts.dash`        : line dash type for each line (`np.array`; default = 'solid'), one of `solid`, `dash`, `dashdot` or `dash`, size should match number of lines being drawn
  - `opts.legend`      : `table` containing legend names
  - `opts.layoutopts`  : `dict` of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.
  - `opts.traceopts`   : `dict` mapping trace names or indices to `dict`s of additional options that plot.ly accepts for a trace.
  - `opts.webgl`       : use WebGL for plotting (`boolean`; default = `false`). It is faster if a plot contains too many points. Use sparingly as browsers won't allow more than a couple of WebGL contexts on a single page.



  This function draws a stem plot. It takes as input an `N` or `NxM` tensor
  `X` that specifies the values of the `N` points in the `M` time series.
  An optional `N` or `NxM` tensor `Y` containing timestamps can be specified
  as well; if `Y` is an `N` tensor then all `M` time series are assumed to
  have the same timestamps.

  The following `opts` are supported:

  - `opts.colormap`: colormap (`string`; default = `'Viridis'`)
  - `opts.legend`  : `table` containing legend names
  - `opts.layoutopts`  : `dict` of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.


  This function draws a heatmap. It takes as input an `NxM` tensor `X` that
  specifies the value at each location in the heatmap.

  `update` can be used to efficiently update the data of an existing plot. Use 'appendRow' to append data row-wise, 'appendColumn' to append data column-wise, 'prependRow' to prepend data row-wise, 'prependColumn' to prepend data column-wise, 'replace' to use new data, or 'remove' to remove the plot specified by `win`.

  The following `opts` are supported:

  - `opts.colormap`   : colormap (`string`; default = `'Viridis'`)
  - `opts.xmin`       : clip minimum value (`number`; default = `X:min()`)
  - `opts.xmax`       : clip maximum value (`number`; default = `X:max()`)
  - `opts.columnnames`: `table` containing x-axis labels
  - `opts.rownames`   : `table` containing y-axis labels
  - `opts.layoutopts` : `dict` of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.
  - `opts.nancolor`   : color for plotting `NaN`s. If this is `None`, `NaN`s will be plotted as transparent. (`string`; default = `None`)


  This function draws a regular, stacked, or grouped bar plot. It takes as
  input an `N` or `NxM` tensor `X` that specifies the height of each of the
  bars. If `X` contains `M` columns, the values corresponding to each row
  are either stacked or grouped (depending on how `opts.stacked` is
  set). In addition to `X`, an (optional) `N` tensor `Y` can be specified
  that contains the corresponding x-axis values.

  The following plot-specific `opts` are currently supported:

  - `opts.rownames`: `table` containing x-axis labels
  - `opts.stacked`    : stack multiple columns in `X`
  - `opts.legend`     : `table` containing legend labels
  - `opts.layoutopts`  : `dict` of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.


  This function draws a histogram of the specified data. It takes as input
  an `N` tensor `X` that specifies the data of which to construct the
  histogram.

  The following plot-specific `opts` are currently supported:

  - `opts.numbins`: number of bins (`number`; default = 30)
  - `opts.layoutopts`  : `dict` of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.


  This function draws boxplots of the specified data. It takes as input
  an `N` or an `NxM` tensor `X` that specifies the `N` data values of which
  to construct the `M` boxplots.

  The following plot-specific `opts` are currently supported:

  - `opts.legend`: labels for each of the columns in `X`
  - `opts.layoutopts`  : `dict` of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.


  This function draws a surface plot. It takes as input an `NxM` tensor `X`
  that specifies the value at each location in the surface plot.

  The following `opts` are supported:

  - `opts.colormap`: colormap (`string`; default = `'Viridis'`)
  - `opts.xmin`    : clip minimum value (`number`; default = `X:min()`)
  - `opts.xmax`    : clip maximum value (`number`; default = `X:max()`)
  - `opts.layoutopts`  : `dict` of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.


  This function draws a contour plot. It takes as input an `NxM` tensor `X`
  that specifies the value at each location in the contour plot.

  The following `opts` are supported:

  - `opts.colormap`: colormap (`string`; default = `'Viridis'`)
  - `opts.xmin`    : clip minimum value (`number`; default = `X:min()`)
  - `opts.xmax`    : clip maximum value (`number`; default = `X:max()`)
  - `opts.layoutopts`  : `dict` of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.


  This function draws a quiver plot in which the direction and length of the
  arrows is determined by the `NxM` tensors `X` and `Y`. Two optional `NxM`
  tensors `gridX` and `gridY` can be provided that specify the offsets of
  the arrows; by default, the arrows will be done on a regular grid.

  The following `opts` are supported:

  - `opts.normalize`:  length of longest arrows (`number`)
  - `opts.arrowheads`: show arrow heads (`boolean`; default = `true`)
  - `opts.layoutopts`  : `dict` of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.


  This function draws a mesh plot from a set of vertices defined in an
  `Nx2` or `Nx3` matrix `X`, and polygons defined in an optional `Mx2` or
  `Mx3` matrix `Y`.

  The following `opts` are supported:

  - `opts.color`: color (`string`)
  - `opts.opacity`: opacity of polygons (`number` between 0 and 1)
  - `opts.layoutopts`  : `dict` of any additional options that the graph backend accepts for a layout. For example `layoutopts = {'plotly': {'legend': {'x':0, 'y':0}}}`.


  This function will create a line plot using plotly with different Y-Axis.

  `X`  = A numpy array of the range.

  `Y1` = A numpy array of the same count as `X`.

  `Y2` = A numpy array of the same count as `X`.

  The following `opts` are supported:

  - `opts.height` : Height of the plot
  - `opts.width` :  Width of the plot
  - `opts.name_y1` : Axis name for Y1 plot
  - `opts.name_y2` : Axis name for Y2 plot
  - `opts.title` :  Title of the plot
  - `opts.color_title_y1` :  Color of the Y1 axis Title
  - `opts.color_tick_y1`  :  Color of the Y1 axis Ticks
  - `opts.color_title_y2` :  Color of the Y2 axis Title
  - `opts.color_tick_y2`  :  Color of the Y2 axis Ticks
  - `opts.side` :  side on which the Y2 tick has to be placed. Has values 'right' or `left`.
  - `opts.showlegend` :  Display legends (boolean values)
  - `opts.top` :  Set the top margin of the plot
  - `opts.bottom` :  Set the bottom margin of the plot
  - `opts.right` :  Set the right margin of the plot
  - `opts.left` :  Set the left margin of the plot

  This is the image of the output:
  <p align="center"><img align="center" src="https://user-images.githubusercontent.com/19650074/198822367-666cc42e-4354-4a7a-8dd3-d8ff143f885d.gif" width="400" /></p>




  This function draws a graph, in which the nodes and edges are taken from a 2-D matrix of size [,2] where each row contains a source and destination node value. The numeric value used to define nodes should be strictly between (0 to n-1), where n is the number of nodes.

  There are two optional arguments :
  - `edgeLabels` : list of custom edge labels. If not provided each edge gets a label, "source-destination", eg "1-2", size should be equal to size of input "edges". Optional.
  - `nodeLabels` : list of custom node labels. If not provided each node gets a label same as the numeric value defined in the "edges". size should be equal to number of nodes present. Optional.

  The following opts are supported:
  - `opts.height` : Height of the plot. Default : 500
  - `opts.width` : Width of the plot. Default : 500
  - `opts.directed` : whether the plot should have a arrow or not. Default : false
  - `opts.showVertexLabels` : Whether to show vertex labels. Default : true
  - `opts.showEdgeLabels` : Whether to show edge labels. Default : false
  - `opts.scheme` : Whether all nodes shoud have "same" color or "different". Default : "same"



  The plotting functions take an optional `opts` table as input that can be used to change (generic or plot-specific) properties of the plots.

  All input arguments are specified in a single table; the input arguments are matches based on the keys they have in the input table.

  The following `opts` are generic in the sense that they are the same for all visualizations (except `plot.image`, `plot.text`, `plot.video`, and `plot.audio`):

  - `opts.title`       : figure title
  - `opts.width`       : figure width
  - `opts.height`      : figure height
  - `opts.showlegend`  : show legend (`true` or `false`)
  - `opts.xtype`       : type of x-axis (`'linear'` or `'log'`)
  - `opts.xlabel`      : label of x-axis
  - `opts.xtick`       : show ticks on x-axis (`boolean`)
  - `opts.xtickmin`    : first tick on x-axis (`number`)
  - `opts.xtickmax`    : last tick on x-axis (`number`)
  - `opts.xtickvals`   : locations of ticks on x-axis (`table` of `number`s)
  - `opts.xticklabels` : ticks labels on x-axis (`table` of `string`s)
  - `opts.xtickstep`   : distances between ticks on x-axis (`number`)
  - `opts.xtickfont`   : font for x-axis labels (dict of [font information](https://plot.ly/javascript/reference/#layout-font))
  - `opts.ytype`       : type of y-axis (`'linear'` or `'log'`)
  - `opts.ylabel`      : label of y-axis
  - `opts.ytick`       : show ticks on y-axis (`boolean`)
  - `opts.ytickmin`    : first tick on y-axis (`number`)
  - `opts.ytickmax`    : last tick on y-axis (`number`)
  - `opts.ytickvals`   : locations of ticks on y-axis (`table` of `number`s)
  - `opts.yticklabels` : ticks labels on y-axis (`table` of `string`s)
  - `opts.ytickstep`   : distances between ticks on y-axis (`number`)
  - `opts.ytickfont`   : font for y-axis labels (dict of [font information](https://plot.ly/javascript/reference/#layout-font))
  - `opts.marginleft`  : left margin (in pixels)
  - `opts.marginright` : right margin (in pixels)
  - `opts.margintop`   : top margin (in pixels)
  - `opts.marginbottom`: bottom margin (in pixels)

  `opts` are passed as dictionary in python scripts.You can pass `opts` like:

      opts=dict(title="my title", xlabel="x axis",ylabel="y axis")

  OR

      opts={"title":"my title", "xlabel":"x axis","ylabel":"y axis"}

  The other options are visualization-specific, and are described in the
  documentation of the functions.





  This function closes a specific window. It takes input window id `win` and environment id `eid`. Use `win` as `None` to close all windows in an environment.



  This function deletes a specified env entirely. It takes env id `eid` as input.

  > **Note**: `delete_env` is deletes all data for an environment and is IRREVERSIBLE. Do not use unless you absolutely want to remove an environment.




  This function forks an environment, similiar to the UI feature.

  Arguments:
  - `prev_eid`: Environment ID that we want to fork.
  - `eid`: New Environment ID that will be created with the fork.

  > **Note**: `fork_env` an exception will occur if an env that doesn't exist is forked.



  This function returns a bool indicating whether or not a window `win` exists on the server already. Returns None if something went wrong.

  Optional arguments:
  - `env`: Environment to search for the window in. Default is `None`.



  This function returns a list of all of the environments on the server at the time of calling. It takes no arguments.



  This function returns md5 hash of the contents of a window `win` if it exists on the server. Returns None otherwise.

  Optional arguments:
  - `env` : Environment to search for the window in. Default is `None`.



  This function returns the window data for the given window. Returns data for all windows in an env if win is None.

  Arguments:
  - `env`: Environment to search for the window in.
  - `win`: Window to return data for. Set to `None` to retrieve all the windows in an environment.



  This function returns a bool indicating whether or not the server is connected. It accepts an optional argument `timeout_seconds` for a number of seconds to wait for the server to come up.


  This function takes the contents of a visdom log and replays them to the current server to restore a state or handle any missing entries.

  Arguments:
  - `log_filename`: log file to replay the contents of.


  The user config directory for visdom is
  - `~/.config/visdom` for Linux
  - `~/Library/Preferences/visdom` for OSX
  - `%APPDATA%/visdom` for Windows

  By placing a `style.css` in you user config directory, visdom will serve the customized css file along with the default style-file.
  In addition, it is also possible to create a project-specific file; just place the file `style.css` in your `env_path`.


  visdom is Apache 2.0 licensed, as found in the LICENSE file.


  Support for Lua Torch was deprecated following `v0.1.8.4`. If you'd like to use torch support, you'll need to download that release. You can follow the usage instructions there, but it is no longer officially supported.


  See guidelines for contributing [here.](./CONTRIBUTING.md)


  Visdom was inspired by tools like [display](https://github.com/szym/display) and relies on [Plotly](https://plot.ly/) as a plotting front-end.


pkgId: ba38e8eb21b93848cf153fa7435d9c513681a3708f11e5093ac00e239d2d916f
name: python-visidata
arch: src
version: 2.11
epoch: 0
release: 1
summary: terminal interface for exploring and arranging tabular data
url: https://visidata.org
rpm_license: GPLv3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a8d9d5e3-fbf7-4feb-8803-9ab8aa4a50aa
location_href: 00005422-python-visidata/python-visidata-2.11-1.src.rpm
checksum_type: sha256
description:
  [![twitter @VisiData][1.1]][1]
  [![Tests](https://github.com/saulpw/visidata/workflows/visidata-ci-build/badge.svg)](https://github.com/saulpw/visidata/actions/workflows/main.yml)
  [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/saulpw/visidata)
  [![discord](https://img.shields.io/discord/880915750007750737?label=discord)](https://visidata.org/chat)

  A terminal interface for exploring and arranging tabular data.

  ![Frequency table](http://visidata.org/freq-move-row.gif)

  VisiData supports tsv, csv, sqlite, json, xlsx (Excel), hdf5, and [many other formats](https://visidata.org/formats).



  - Linux, OS/X, or Windows (with WSL)
  - Python 3.7+
  - additional Python modules are required for certain formats and sources



  To install the latest release from PyPi:

      pip3 install visidata

  To install the cutting edge `develop` branch (no warranty expressed or implied):

      pip3 install git+https://github.com/saulpw/visidata.git@develop

  See [visidata.org/install](https://visidata.org/install) for detailed instructions for all available platforms and package managers.



      $ vd <input>
      $ <command> | vd

  Press `Ctrl+Q` to quit at any time.

  Hundreds of other commands and options are also available; see the documentation.



  * [VisiData documentation](https://visidata.org/docs)
  * [Plugin Author's Guide and API Reference](https://visidata.org/docs/api)
  * [Quick reference](https://visidata.org/man) (available within `vd` with `Ctrl+H`), which has a list of commands and options.
  * [Intro to VisiData Tutorial](https://jsvine.github.io/intro-to-visidata/) by [Jeremy Singer-Vine](https://www.jsvine.com/)



  If you have a question, issue, or suggestion regarding VisiData, please [create an issue on Github](https://github.com/saulpw/visidata/issues) or chat with us at #visidata on [irc.libera.chat](https://libera.chat/).

  If you use VisiData regularly, please [support me on Patreon](https://www.patreon.com/saulpw)!



  Code in the `stable` branch of this repository, including the main `vd` application, loaders, and plugins, is available for use and redistribution under GPLv3.



  VisiData is conceived and developed by Saul Pwanson `<vd@saul.pw>`.

  Anja Kefala `<anja.kefala@gmail.com>` maintains the documentation and packages for all platforms.

  Many thanks to numerous other [contributors](https://visidata.org/credits/), and to those wonderful users who provide feedback, for helping to make VisiData the awesome tool that it is.

  [1.1]: http://i.imgur.com/tXSoThF.png
  [1]: http://www.twitter.com/VisiData

  <!-- Please don't remove this: Grab your social icons from https://github.com/carlsednaoui/gitsocial -->


pkgId: 8e8fc871ce431cc8246025242f14530195ca306dc636a9e464cd387371b5ceb7
name: python-visitor
arch: src
version: 0.1.3
epoch: 0
release: 1
summary: A tiny pythonic visitor implementation.
url: http://github.com/mbr/visitor
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-76506e31-e1a3-4d16-9ad9-4f0f7d2899e4
location_href: 00005424-python-visitor/python-visitor-0.1.3-1.src.rpm
checksum_type: sha256
description:
  A tiny library to facilitate `visitor
  <https://en.wikipedia.org/wiki/Visitor_pattern>`_ implementation in Python
  (which are slightly peculiar due to dynamic typing). In fact, it is so small,
  you may just be better off copy & pasting the source straight into your
  project...


pkgId: ea7a374246c8cffb6967cdaefa57fe452d3571b778a2f98bdfbc274989de7ac2
name: python-visvis
arch: src
version: 1.14.0
epoch: 0
release: 1
summary: An object oriented approach to visualization of 1D to 4D data.
url: https://github.com/almarklein/visvis
rpm_license: (new) BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-90b14bde-1c0e-43d9-97f7-163d53ed5df5
location_href: 00005425-python-visvis/python-visvis-1.14.0-1.src.rpm
checksum_type: sha256
description:
  Visvis is a pure Python library for visualization of 1D to 4D data in an
  object oriented way. Essentially, visvis is an object oriented layer of
  Python on top of OpenGl, thereby combining the power of OpenGl with the
  usability of Python. A Matlab-like interface in the form of a set of
  functions allows easy creation of objects (e.g. plot(), imshow(), volshow(),
  surf()).

  With visvis a range of different data can be visualized by simply adding
  world objects to a scene (or axes). These world objects can be anything
  from plots (lines with markers), to images, 3D rendered volumes,
  shaded meshes, or you can program your own world object class. If required,
  these data can also be moved in time.

  Visvis can be used in Python scripts, interactive Python sessions (as
  with IPython or IEP) and can be embedded in applications.

  Requirements:
    * Numpy
    * PyOpengl
    * A backend GUI toolkit (PySide, PyQt4, PyQt5, wxPython, GTK, fltk)
    * (optionally, to enable reading and writing of images) imageio

  usage:
  import visvis as vv

  All wobjects, wibjects and functions are present in the visvis
  namespace. For clean lists, see vv.wibjects, vv.wobjects, or vv.functions,
  respectively.

  For more help, see ...
    * the docstrings
    * the examples in the examples dir
    * the examples at the bottom of the function modules (in the functions dir)
    * the online docs: https://github.com/almarklein/visvis/wiki

  Visvis is maintained by Almar Klein.


pkgId: 6b887a0fdd673bc01aec82d59d5de67fe0a10ba7895edf27d9f26f23a707bd83
name: python-viztracer
arch: src
version: 0.15.6
epoch: 0
release: 1
summary: A debugging and profiling tool that can trace and visualize python code execution
url: https://github.com/gaogaotiantian/viztracer
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e46bdf84-6136-46bc-b67f-4bce3619d6f1
location_href: 00014150-python-viztracer/python-viztracer-0.15.6-1.src.rpm
checksum_type: sha256
description:
  [![build](https://github.com/gaogaotiantian/viztracer/workflows/build/badge.svg)](https://github.com/gaogaotiantian/viztracer/actions?query=workflow%3Abuild)  [![flake8](https://github.com/gaogaotiantian/viztracer/workflows/lint/badge.svg)](https://github.com/gaogaotiantian/viztracer/actions?query=workflow%3ALint)  [![readthedocs](https://img.shields.io/readthedocs/viztracer)](https://viztracer.readthedocs.io/en/stable/)  [![coverage](https://img.shields.io/codecov/c/github/gaogaotiantian/viztracer)](https://codecov.io/gh/gaogaotiantian/viztracer)  [![pypi](https://img.shields.io/pypi/v/viztracer.svg)](https://pypi.org/project/viztracer/)  [![support-version](https://img.shields.io/pypi/pyversions/viztracer)](https://img.shields.io/pypi/pyversions/viztracer)  [![license](https://img.shields.io/github/license/gaogaotiantian/viztracer)](https://github.com/gaogaotiantian/viztracer/blob/master/LICENSE)  [![commit](https://img.shields.io/github/last-commit/gaogaotiantian/viztracer)](https://github.com/gaogaotiantian/viztracer/commits/master)  [![twitter](https://img.shields.io/twitter/follow/viztracer?label=viztracer&style=flat&logo=twitter)](https://twitter.com/viztracer)

  VizTracer is a low-overhead logging/debugging/profiling tool that can trace and visualize your python code execution.

  The front-end UI is powered by [Perfetto](https://perfetto.dev/). **Use "AWSD" to zoom/navigate**.
  More help can be found in "Support - Controls".

  [![example_img](https://github.com/gaogaotiantian/viztracer/blob/master/img/example.png)](https://github.com/gaogaotiantian/viztracer/blob/master/img/example.png)




  * Detailed function entry/exit information on timeline with source code
  * Super easy to use, no source code change for most features, no package dependency
  * Supports threading, multiprocessing, subprocess and async
  * Logs arbitrary function/variable using RegEx without code change
  * Powerful front-end, able to render GB-level trace smoothly
  * Works on Linux/MacOS/Windows



  The preferred way to install VizTracer is via pip

  ```sh
  pip install viztracer
  ```





  Assume you have a python script to run:

  ```sh
  python3 my_script.py arg1 arg2
  ```

  You can simply use VizTracer by

  ```
  viztracer my_script.py arg1 arg2
  ```

  <details>

  <summary>
  A <code>result.json</code> file will be generated, which you can open with <code>vizviewer</code>
  </summary>

  vizviewer will host an HTTP server on ``http://localhost:9001``. You can also open your browser and use that address.

  If you do not want vizviewer to open the webbrowser automatically, you can use

  ```sh
  vizviewer --server_only result.json
  ```

  If you just need to bring up the trace report once, and do not want the persistent server, use

  ```sh
  vizviewer --once result.json
  ```

  </details>

  ```sh
  vizviewer result.json

  vizviewer ./

  vizviewer --use_external_processor result.json
  ```

  <details>

  <summary>
  You can also generate standalone <code>html</code> file
  </summary>

  ```sh
  viztracer -o result.html my_script.py arg1 arg2
  ```

  The standalone HTML file is powered by [catapult](https://github.com/catapult-project/catapult) trace viewer which is an old tool Google made and is being replaced by [Perfetto](https://perfetto.dev/) gradually.

  Catapult trace viewer is sluggish with larger traces and is not actively maintained. It is recommended to use Perfetto instead.

  However, if you really need a standalone HTML file, this is the only option. Perfetto does not support standalone files.

  You can use vizviewer to open the html file as well, just to make the interface consistent

  ```sh
  vizviewer result.html
  ```

  </details>

  <details>

  <summary>
  Or add <code>--open</code> to open the reports right after tracing
  </summary>

  ```sh
  viztracer --open my_scripy.py arg1 arg2
  viztracer -o result.html --open my_script.py arg1 arg2
  ```

  </details>

  <details>

  <summary>
  modules and console scripts(like <code>flask</code>) are supported as well
  </summary>

  ```
  viztracer -m your_module
  ```

  ```
  viztracer flask run
  ```

  </details>



  You can also manually start/stop VizTracer in your script as well.

  ```python
  from viztracer import VizTracer

  tracer = VizTracer()
  tracer.start()

  tracer.stop()
  tracer.save() # also takes output_file as an optional argument
  ```

  Or, you can do it with ```with``` statement

  ```python
  with VizTracer(output_file="optional.json") as tracer:
      
  ```



  If you are using Jupyter, you can use viztracer cell magics.

  ```python

  %load_ext viztracer
  ```

  ```python
  %viztracer

  ```

  A ``VizTracer Report`` button will appear after the cell and you can click it to view the results





  VizTracer can filter out the data you don't want to reduce overhead and keep info of a longer time period before you dump the log.

  * [Min Duration](https://viztracer.readthedocs.io/en/stable/filter.html#min-duration)
  * [Max Stack Depth](https://viztracer.readthedocs.io/en/stable/filter.html#max-stack-depth)
  * [Include Files](https://viztracer.readthedocs.io/en/stable/filter.html#include-files)
  * [Exclude Files](https://viztracer.readthedocs.io/en/stable/filter.html#exclude-files)
  * [Ignore C Function](https://viztracer.readthedocs.io/en/stable/filter.html#ignore-c-function)
  * [Sparse Log](https://viztracer.readthedocs.io/en/stable/filter.html#log-sparse)



  VizTracer can log extra information without changing your source code

  * [Any Variable/Attribute with RegEx](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-variable)
  * [Function Entry](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-function-entry)
  * [Variables in Specified Function](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-function-execution)
  * [Garbage Collector Operation](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-garbage-collector)
  * [Function Input Arguments](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-function-arguments)
  * [Function Return Value](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-function-return-value)
  * [Audit Events](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-audit)
  * [Raised Exceptions](https://viztracer.readthedocs.io/en/stable/extra_log.html#log-exception)



  VizTracer supports inserting custom events while the program is running. This works like a print debug, but you can know when this print happens while looking at trace data.

  * [Instant Event](https://viztracer.readthedocs.io/en/stable/custom_event_intro.html#instant-event)
  * [Variable Event](https://viztracer.readthedocs.io/en/stable/custom_event_intro.html#variable-event)
  * [Duration Event](https://viztracer.readthedocs.io/en/stable/custom_event_intro.html#duration-event)





  VizTracer supports python native ```threading``` module without the need to do any modification to your code. Just start ```VizTracer``` before you create threads and it will just work.

  For other multi-thread scenarios, you can use ``enable_thread_tracing()`` to let VizTracer know about the thread to trace it.

  [![example_img](https://github.com/gaogaotiantian/viztracer/blob/master/img/multithread_example.png)](https://github.com/gaogaotiantian/viztracer/blob/master/img/multithread_example.png)

  Refer to [multi thread docs](https://viztracer.readthedocs.io/en/stable/concurrency.html) for details




  VizTracer supports ```subprocess```, ```multiprocessing```, ```os.fork()```, ```concurrent.futures```, and ```loky``` out of the box.

  For more general multi-process cases, VizTracer can support with some extra steps.

  [![example_img](https://github.com/gaogaotiantian/viztracer/blob/master/img/multiprocess_example.png)](https://github.com/gaogaotiantian/viztracer/blob/master/img/multiprocess_example.png)

  Refer to [multi process docs](https://viztracer.readthedocs.io/en/stable/concurrency.html) for details



  VizTracer supports ```asyncio``` natively, but could enhance the report by using ```--log_async```.

  [![example_img](https://github.com/gaogaotiantian/viztracer/blob/master/img/async_example.png)](https://github.com/gaogaotiantian/viztracer/blob/master/img/async_example.png)

  Refer to [async docs](https://viztracer.readthedocs.io/en/stable/concurrency.html) for details



  VizTracer can show flamegraph of traced data.

  ```sh
  vizviewer --flamegraph result.json
  ```

  [![example_img](https://github.com/gaogaotiantian/viztracer/blob/master/img/flamegraph.png)](https://github.com/gaogaotiantian/viztracer/blob/master/img/flamegraph.png)



  VizTracer supports remote attach to an arbitrary Python process to trace it, as long as viztracer is importable

  Refer to [remote attach docs](https://viztracer.readthedocs.io/en/stable/remote_attach.html)



  VizTracer needs to dump the internal data to json format. It is recommended for the users to install ```orjson```, which is much faster than the builtin ```json``` library. VizTracer will try to import ```orjson``` and fall back to the builtin ```json``` library if ```orjson``` does not exist.



  You can virtually debug your program with you saved json report. The interface is very similar to ```pdb```. Even better, you can **go back in time**
  because VizTracer has all the info recorded for you.

  ```sh
  vdb <your_json_report>
  ```

  Refer to the [docs](https://viztracer.readthedocs.io/en/stable/virtual_debug.html) for detailed commands



  VizTracer will introduce 2x to 3x overhead in the worst case. The overhead is much better if there are less function calls or if filters are applied correctly.

  <details>

  <summary>
  An example run for test_performance with Python 3.8 / Ubuntu 18.04.4 on Github VM
  </summary>

  ```sh
  fib:
  0.000678067(1.00)[origin]
  0.019880272(29.32)[py] 0.011103901(16.38)[parse] 0.021165599(31.21)[json]
  0.001344933(1.98)[c] 0.008181911(12.07)[parse] 0.015789866(23.29)[json]
  0.001472846(2.17)[cProfile]

  hanoi     (6148, 4100):
  0.000550255(1.00)[origin]
  0.016343521(29.70)[py] 0.007299123(13.26)[parse] 0.016779364(30.49)[json]
  0.001062505(1.93)[c] 0.006416136(11.66)[parse] 0.011463236(20.83)[json]
  0.001144914(2.08)[cProfile]

  qsort     (8289, 5377):
  0.002817679(1.00)[origin]
  0.052747431(18.72)[py] 0.011339725(4.02)[parse] 0.023644345(8.39)[json]
  0.004767673(1.69)[c] 0.008735166(3.10)[parse] 0.017173703(6.09)[json]
  0.007248019(2.57)[cProfile]

  slow_fib  (1135, 758):
  0.028759652(1.00)[origin]
  0.033994071(1.18)[py] 0.001630461(0.06)[parse] 0.003386635(0.12)[json]
  0.029481623(1.03)[c] 0.001152415(0.04)[parse] 0.002191417(0.08)[json]
  0.028289305(0.98)[cProfile]
  ```
  </details>



  For full documentation, please see [https://viztracer.readthedocs.io/en/stable](https://viztracer.readthedocs.io/en/stable)



  Please send bug reports and feature requests through [github issue tracker](https://github.com/gaogaotiantian/viztracer/issues). VizTracer is currently under development now and it's open to any constructive suggestions.



  Copyright Tian Gao, 2020.

  Distributed under the terms of the  [Apache 2.0 license](https://github.com/gaogaotiantian/viztracer/blob/master/LICENSE).


pkgId: b8ed66493f52608b23571896b350f6c1170b39f34a6976f53b327ca0e926681f
name: python-viztracer-debuginfo
arch: aarch64
version: 0.15.6
epoch: 0
release: 1
summary: Debug information for package python-viztracer
url: https://github.com/gaogaotiantian/viztracer
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-e46bdf84-6136-46bc-b67f-4bce3619d6f1
rpm_sourcerpm: python-viztracer-0.15.6-1.src.rpm
location_href: 00014150-python-viztracer/python-viztracer-debuginfo-0.15.6-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-viztracer.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 8f00952d3ee2c15d756ec91fdf5c3de872448fcc8efd08a3e616f4c0a9e1eb70
name: python-viztracer-debugsource
arch: aarch64
version: 0.15.6
epoch: 0
release: 1
summary: Debug sources for package python-viztracer
url: https://github.com/gaogaotiantian/viztracer
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-e46bdf84-6136-46bc-b67f-4bce3619d6f1
rpm_sourcerpm: python-viztracer-0.15.6-1.src.rpm
location_href: 00014150-python-viztracer/python-viztracer-debugsource-0.15.6-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-viztracer.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 3b8e50d84228cc39cebec84f335de6aec5b17f077d9bab487c06b397157c87a3
name: python-vobject
arch: src
version: 0.9.6.1
epoch: 0
release: 1
summary: A full-featured Python package for parsing and creating iCalendar and vCard files
url: http://eventable.github.io/vobject/
rpm_license: Apache
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ece6efec-ca6f-48af-99b0-6ae871130cf6
location_href: 00005427-python-vobject/python-vobject-0.9.6.1-1.src.rpm
checksum_type: sha256
description:
  Parses iCalendar and vCard files into Python data structures, decoding the
  relevant encodings. Also serializes vobject data structures to iCalendar, vCard,
  or (experimentally) hCalendar unicode strings.


pkgId: e927fce352a09b4bfe117fed478b25754cb71e4c9bc712da1932bbacd6fc4d92
name: python-volatile
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: A small extension for the tempfile module.
url: https://github.com/mbr/volatile
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-370666c3-9278-4773-bab9-3516286ce2e5
location_href: 00005428-python-volatile/python-volatile-2.1.0-1.src.rpm
checksum_type: sha256
description:
  Temporary files and directories.
  Contains replacement for ``tempfile.NamedTemporaryFile`` that does not delete
  the file on ``close()``, but still unlinks it after the context manager ends,
  as well as a ``mkdtemp``-based temporary directory implementation.
  * Mostly reuses the stdlib implementations, supporting the same signatures.
  * Due to that, uses the OS's built-in temporary file facilities, no custom
    schemes.
  * Tested on Python 2.6+ and 3.3+


pkgId: 6d51a3ca4741eaba31335adfe1a6a7cb19c9b5f6888eaf88b858402df250bee9
name: python-volkszaehler
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: Python Wrapper for interacting with the Volkszahler API.
url: https://github.com/home-assistant-ecosystem/python-volkszaehler
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7504d12c-f14e-4d19-b7ec-4a984c3391e7
location_href: 00005429-python-volkszaehler/python-volkszaehler-0.4.0-1.src.rpm
checksum_type: sha256
description:
  Python API for interacting with `Volkszaehler <https://volkszaehler.org>`_. At
  the moment only the consumption of data is supported. Sorry, uploading is not
  possible.
  This module is not official, developed, supported or endorsed by Volkzaehler.


pkgId: 1ed609402c28f424eb2cdbcbb163575f677d1971f455919f46982b6666ed0e0c
name: python-voluptuous
arch: src
version: 0.13.1
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/alecthomas/voluptuous
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5231cffb-4461-4ce8-bad1-b2a8c46a776b
location_href: 00005430-python-voluptuous/python-voluptuous-0.13.1-1.src.rpm
checksum_type: sha256
description:
  **What does this mean?** I do not have time to fix issues myself. The only way fixes or new features will be added is by people submitting PRs.

  **Current status:** Voluptuous is largely feature stable. There hasn't been a need to add new features in a while, but there are some bugs that should be fixed.

  **Why?** I no longer use Voluptuous personally (in fact I no longer regularly write Python code). Rather than leave the project in a limbo of people filing issues and wondering why they're not being worked on, I believe this notice will more clearly set expectations.



  [![image](https://img.shields.io/pypi/v/voluptuous.svg)](https://python.org/pypi/voluptuous)
  [![image](https://img.shields.io/pypi/l/voluptuous.svg)](https://python.org/pypi/voluptuous)
  [![image](https://img.shields.io/pypi/pyversions/voluptuous.svg)](https://python.org/pypi/voluptuous)
  [![Build Status](https://travis-ci.org/alecthomas/voluptuous.svg)](https://travis-ci.org/alecthomas/voluptuous)
  [![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.svg)](https://gitter.im/alecthomas/Lobby)

  Voluptuous, *despite* the name, is a Python data validation library. It
  is primarily intended for validating data coming into Python as JSON,
  YAML, etc.

  It has three goals:

  1. Simplicity.
  2. Support for complex data structures.
  3. Provide useful error messages.



  Voluptuous now has a mailing list! Send a mail to
  [<voluptuous@librelist.com>](mailto:voluptuous@librelist.com) to subscribe. Instructions
  will follow.

  You can also contact me directly via [email](mailto:alec@swapoff.org) or
  [Twitter](https://twitter.com/alecthomas).

  To file a bug, create a [new issue](https://github.com/alecthomas/voluptuous/issues/new) on GitHub with a short example of how to replicate the issue.



  The documentation is provided [here](http://alecthomas.github.io/voluptuous/).



  See [CHANGELOG.md](https://github.com/alecthomas/voluptuous/blob/master/CHANGELOG.md).



  **Validators are simple callables:**
  No need to subclass anything, just use a function.

  **Errors are simple exceptions:**
  A validator can just `raise Invalid(msg)` and expect the user to get
  useful messages.

  **Schemas are basic Python data structures:**
  Should your data be a dictionary of integer keys to strings?
  `{int: str}` does what you expect. List of integers, floats or
  strings? `[int, float, str]`.

  **Designed from the ground up for validating more than just forms:**
  Nested data structures are treated in the same way as any other
  type. Need a list of dictionaries? `[{}]`

  **Consistency:**
  Types in the schema are checked as types. Values are compared as
  values. Callables are called to validate. Simple.



  Twitter's [user search API](https://dev.twitter.com/rest/reference/get/users/search) accepts
  query URLs like:

  ```bash
  $ curl 'https://api.twitter.com/1.1/users/search.json?q=python&per_page=20&page=1'
  ```

  To validate this we might use a schema like:

  ```pycon
  >>> from voluptuous import Schema
  >>> schema = Schema({
  ...   'q': str,
  ...   'per_page': int,
  ...   'page': int,
  ... })
  ```

  This schema very succinctly and roughly describes the data required by
  the API, and will work fine. But it has a few problems. Firstly, it
  doesn't fully express the constraints of the API. According to the API,
  `per_page` should be restricted to at most 20, defaulting to 5, for
  example. To describe the semantics of the API more accurately, our
  schema will need to be more thoroughly defined:

  ```pycon
  >>> from voluptuous import Required, All, Length, Range
  >>> schema = Schema({
  ...   Required('q'): All(str, Length(min=1)),
  ...   Required('per_page', default=5): All(int, Range(min=1, max=20)),
  ...   'page': All(int, Range(min=0)),
  ... })
  ```

  This schema fully enforces the interface defined in Twitter's
  documentation, and goes a little further for completeness.

  "q" is required:

  ```pycon
  >>> from voluptuous import MultipleInvalid, Invalid
  >>> try:
  ...   schema({})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "required key not provided @ data['q']"
  True
  ```

  ...must be a string:

  ```pycon
  >>> try:
  ...   schema({'q': 123})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "expected str for dictionary value @ data['q']"
  True
  ```

  ...and must be at least one character in length:

  ```pycon
  >>> try:
  ...   schema({'q': ''})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "length of value must be at least 1 for dictionary value @ data['q']"
  True
  >>> schema({'q': '#topic'}) == {'q': '#topic', 'per_page': 5}
  True
  ```

  "per\_page" is a positive integer no greater than 20:

  ```pycon
  >>> try:
  ...   schema({'q': '#topic', 'per_page': 900})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "value must be at most 20 for dictionary value @ data['per_page']"
  True
  >>> try:
  ...   schema({'q': '#topic', 'per_page': -10})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "value must be at least 1 for dictionary value @ data['per_page']"
  True
  ```

  "page" is an integer \>= 0:

  ```pycon
  >>> try:
  ...   schema({'q': '#topic', 'per_page': 'one'})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc)
  "expected int for dictionary value @ data['per_page']"
  >>> schema({'q': '#topic', 'page': 1}) == {'q': '#topic', 'page': 1, 'per_page': 5}
  True
  ```



  Schemas are nested data structures consisting of dictionaries, lists,
  scalars and *validators*. Each node in the input schema is pattern
  matched against corresponding nodes in the input data.



  Literals in the schema are matched using normal equality checks:

  ```pycon
  >>> schema = Schema(1)
  >>> schema(1)
  1
  >>> schema = Schema('a string')
  >>> schema('a string')
  'a string'
  ```



  Types in the schema are matched by checking if the corresponding value
  is an instance of the type:

  ```pycon
  >>> schema = Schema(int)
  >>> schema(1)
  1
  >>> try:
  ...   schema('one')
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "expected int"
  True
  ```



  URLs in the schema are matched by using `urlparse` library.

  ```pycon
  >>> from voluptuous import Url
  >>> schema = Schema(Url())
  >>> schema('http://w3.org')
  'http://w3.org'
  >>> try:
  ...   schema('one')
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "expected a URL"
  True
  ```



  Lists in the schema are treated as a set of valid values. Each element
  in the schema list is compared to each value in the input data:

  ```pycon
  >>> schema = Schema([1, 'a', 'string'])
  >>> schema([1])
  [1]
  >>> schema([1, 1, 1])
  [1, 1, 1]
  >>> schema(['a', 1, 'string', 1, 'string'])
  ['a', 1, 'string', 1, 'string']
  ```

  However, an empty list (`[]`) is treated as is. If you want to specify a list that can
  contain anything, specify it as `list`:

  ```pycon
  >>> schema = Schema([])
  >>> try:
  ...   schema([1])
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "not a valid value @ data[1]"
  True
  >>> schema([])
  []
  >>> schema = Schema(list)
  >>> schema([])
  []
  >>> schema([1, 2])
  [1, 2]
  ```



  Sets and frozensets are treated as a set of valid values. Each element
  in the schema set is compared to each value in the input data:

  ```pycon
  >>> schema = Schema({42})
  >>> schema({42}) == {42}
  True
  >>> try:
  ...   schema({43})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "invalid value in set"
  True
  >>> schema = Schema({int})
  >>> schema({1, 2, 3}) == {1, 2, 3}
  True
  >>> schema = Schema({int, str})
  >>> schema({1, 2, 'abc'}) == {1, 2, 'abc'}
  True
  >>> schema = Schema(frozenset([int]))
  >>> try:
  ...   schema({3})
  ...   raise AssertionError('Invalid not raised')
  ... except Invalid as e:
  ...   exc = e
  >>> str(exc) == 'expected a frozenset'
  True
  ```

  However, an empty set (`set()`) is treated as is. If you want to specify a set
  that can contain anything, specify it as `set`:

  ```pycon
  >>> schema = Schema(set())
  >>> try:
  ...   schema({1})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "invalid value in set"
  True
  >>> schema(set()) == set()
  True
  >>> schema = Schema(set)
  >>> schema({1, 2}) == {1, 2}
  True
  ```



  Validators are simple callables that raise an `Invalid` exception when
  they encounter invalid data. The criteria for determining validity is
  entirely up to the implementation; it may check that a value is a valid
  username with `pwd.getpwnam()`, it may check that a value is of a
  specific type, and so on.

  The simplest kind of validator is a Python function that raises
  ValueError when its argument is invalid. Conveniently, many builtin
  Python functions have this property. Here's an example of a date
  validator:

  ```pycon
  >>> from datetime import datetime
  >>> def Date(fmt='%Y-%m-%d'):
  ...   return lambda v: datetime.strptime(v, fmt)
  ```

  ```pycon
  >>> schema = Schema(Date())
  >>> schema('2013-03-03')
  datetime.datetime(2013, 3, 3, 0, 0)
  >>> try:
  ...   schema('2013-03')
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "not a valid value"
  True
  ```

  In addition to simply determining if a value is valid, validators may
  mutate the value into a valid form. An example of this is the
  `Coerce(type)` function, which returns a function that coerces its
  argument to the given type:

  ```python
  def Coerce(type, msg=None):
      """Coerce a value to a type.

      If the type constructor throws a ValueError, the value will be marked as
      Invalid.
      """
      def f(v):
          try:
              return type(v)
          except ValueError:
              raise Invalid(msg or ('expected %s' % type.__name__))
      return f
  ```

  This example also shows a common idiom where an optional human-readable
  message can be provided. This can vastly improve the usefulness of the
  resulting error messages.



  Each key-value pair in a schema dictionary is validated against each
  key-value pair in the corresponding data dictionary:

  ```pycon
  >>> schema = Schema({1: 'one', 2: 'two'})
  >>> schema({1: 'one'})
  {1: 'one'}
  ```



  By default any additional keys in the data, not in the schema will
  trigger exceptions:

  ```pycon
  >>> schema = Schema({2: 3})
  >>> try:
  ...   schema({1: 2, 2: 3})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "extra keys not allowed @ data[1]"
  True
  ```

  This behaviour can be altered on a per-schema basis. To allow
  additional keys use
  `Schema(..., extra=ALLOW_EXTRA)`:

  ```pycon
  >>> from voluptuous import ALLOW_EXTRA
  >>> schema = Schema({2: 3}, extra=ALLOW_EXTRA)
  >>> schema({1: 2, 2: 3})
  {1: 2, 2: 3}
  ```

  To remove additional keys use
  `Schema(..., extra=REMOVE_EXTRA)`:

  ```pycon
  >>> from voluptuous import REMOVE_EXTRA
  >>> schema = Schema({2: 3}, extra=REMOVE_EXTRA)
  >>> schema({1: 2, 2: 3})
  {2: 3}
  ```

  It can also be overridden per-dictionary by using the catch-all marker
  token `extra` as a key:

  ```pycon
  >>> from voluptuous import Extra
  >>> schema = Schema({1: {Extra: object}})
  >>> schema({1: {'foo': 'bar'}})
  {1: {'foo': 'bar'}}
  ```



  By default, keys in the schema are not required to be in the data:

  ```pycon
  >>> schema = Schema({1: 2, 3: 4})
  >>> schema({3: 4})
  {3: 4}
  ```

  Similarly to how extra\_ keys work, this behaviour can be overridden
  per-schema:

  ```pycon
  >>> schema = Schema({1: 2, 3: 4}, required=True)
  >>> try:
  ...   schema({3: 4})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "required key not provided @ data[1]"
  True
  ```

  And per-key, with the marker token `Required(key)`:

  ```pycon
  >>> schema = Schema({Required(1): 2, 3: 4})
  >>> try:
  ...   schema({3: 4})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "required key not provided @ data[1]"
  True
  >>> schema({1: 2})
  {1: 2}
  ```



  If a schema has `required=True`, keys may be individually marked as
  optional using the marker token `Optional(key)`:

  ```pycon
  >>> from voluptuous import Optional
  >>> schema = Schema({1: 2, Optional(3): 4}, required=True)
  >>> try:
  ...   schema({})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "required key not provided @ data[1]"
  True
  >>> schema({1: 2})
  {1: 2}
  >>> try:
  ...   schema({1: 2, 4: 5})
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "extra keys not allowed @ data[4]"
  True
  ```

  ```pycon
  >>> schema({1: 2, 3: 4})
  {1: 2, 3: 4}
  ```



  You can use `voluptuous.Self` to define a nested schema:

  ```pycon
  >>> from voluptuous import Schema, Self
  >>> recursive = Schema({"more": Self, "value": int})
  >>> recursive({"more": {"value": 42}, "value": 41}) == {'more': {'value': 42}, 'value': 41}
  True
  ```



  Often it comes handy to have a base `Schema` that is extended with more
  requirements. In that case you can use `Schema.extend` to create a new
  `Schema`:

  ```pycon
  >>> from voluptuous import Schema
  >>> person = Schema({'name': str})
  >>> person_with_age = person.extend({'age': int})
  >>> sorted(list(person_with_age.schema.keys()))
  ['age', 'name']
  ```

  The original `Schema` remains unchanged.



  Each key-value pair in a schema dictionary is validated against each
  attribute-value pair in the corresponding object:

  ```pycon
  >>> from voluptuous import Object
  >>> class Structure(object):
  ...     def __init__(self, q=None):
  ...         self.q = q
  ...     def __repr__(self):
  ...         return '<Structure(q={0.q!r})>'.format(self)
  ...
  >>> schema = Schema(Object({'q': 'one'}, cls=Structure))
  >>> schema(Structure(q='one'))
  <Structure(q='one')>
  ```



  To allow value to be None as well, use Any:

  ```pycon
  >>> from voluptuous import Any

  >>> schema = Schema(Any(None, int))
  >>> schema(None)
  >>> schema(5)
  5
  ```



  Validators must throw an `Invalid` exception if invalid data is passed
  to them. All other exceptions are treated as errors in the validator and
  will not be caught.

  Each `Invalid` exception has an associated `path` attribute representing
  the path in the data structure to our currently validating value, as well
  as an `error_message` attribute that contains the message of the original
  exception. This is especially useful when you want to catch `Invalid`
  exceptions and give some feedback to the user, for instance in the context of
  an HTTP API.

  ```pycon
  >>> def validate_email(email):
  ...     """Validate email."""
  ...     if not "@" in email:
  ...         raise Invalid("This email is invalid.")
  ...     return email
  >>> schema = Schema({"email": validate_email})
  >>> exc = None
  >>> try:
  ...     schema({"email": "whatever"})
  ... except MultipleInvalid as e:
  ...     exc = e
  >>> str(exc)
  "This email is invalid. for dictionary value @ data['email']"
  >>> exc.path
  ['email']
  >>> exc.msg
  'This email is invalid.'
  >>> exc.error_message
  'This email is invalid.'
  ```

  The `path` attribute is used during error reporting, but also during matching
  to determine whether an error should be reported to the user or if the next
  match should be attempted. This is determined by comparing the depth of the
  path where the check is, to the depth of the path where the error occurred. If
  the error is more than one level deeper, it is reported.

  The upshot of this is that *matching is depth-first and fail-fast*.

  To illustrate this, here is an example schema:

  ```pycon
  >>> schema = Schema([[2, 3], 6])
  ```

  Each value in the top-level list is matched depth-first in-order. Given
  input data of `[[6]]`, the inner list will match the first element of
  the schema, but the literal `6` will not match any of the elements of
  that list. This error will be reported back to the user immediately. No
  backtracking is attempted:

  ```pycon
  >>> try:
  ...   schema([[6]])
  ...   raise AssertionError('MultipleInvalid not raised')
  ... except MultipleInvalid as e:
  ...   exc = e
  >>> str(exc) == "not a valid value @ data[0][0]"
  True
  ```

  If we pass the data `[6]`, the `6` is not a list type and so will not
  recurse into the first element of the schema. Matching will continue on
  to the second element in the schema, and succeed:

  ```pycon
  >>> schema([6])
  [6]
  ```



  Validation rules that involve multiple fields can be implemented as
  custom validators. It's recommended to use `All()` to do a two-pass
  validation - the first pass checking the basic structure of the data,
  and only after that, the second pass applying your cross-field
  validator:

  ```python
  def passwords_must_match(passwords):
      if passwords['password'] != passwords['password_again']:
          raise Invalid('passwords must match')
      return passwords

  schema = Schema(All(
      
      {'password': str, 'password_again': str},
      
      passwords_must_match
  ))


  schema({'password': '123', 'password_again': '123'})


  schema({'password': '123', 'password_again': 'and now for something completely different'})

  ```

  With this structure, your multi-field validator will run with
  pre-validated data from the first "pass" and so will not have to do
  its own type checking on its inputs.

  The flipside is that if the first "pass" of validation fails, your
  cross-field validator will not run:

  ```python


  schema({'password': '123', 'password_again': 1337})
  ```



  Voluptuous is using `pytest`:

  ```bash
  $ pip install pytest
  $ pytest
  ```

  To also include a coverage report:

  ```bash
  $ pip install pytest pytest-cov coverage>=3.0
  $ pytest --cov=voluptuous voluptuous/tests/
  ```



  Voluptuous is heavily inspired by
  [Validino](http://code.google.com/p/validino/), and to a lesser extent,
  [jsonvalidator](http://code.google.com/p/jsonvalidator/) and
  [json\_schema](http://blog.sendapatch.se/category/json_schema.html).

  [pytest-voluptuous](https://github.com/F-Secure/pytest-voluptuous) is a
  [pytest](https://github.com/pytest-dev/pytest) plugin that helps in
  using voluptuous validators in `assert`s.

  I greatly prefer the light-weight style promoted by these libraries to
  the complexity of libraries like FormEncode.


pkgId: 06f43378b00a8b2fabdeac4777f072d69a6caa35ff5522c94d56cc1fac52fafa
name: python-vpoller
arch: src
version: 0.7.3
epoch: 0
release: 1
summary: Distributed VMware vSphere API Proxy
url: https://github.com/dnaeon/py-vpoller
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d5b49cd2-1329-412f-8f1c-f98576f40014
location_href: 00005433-python-vpoller/python-vpoller-0.7.3-1.src.rpm
checksum_type: sha256
description:
  vPoller is a distributed VMware vSphere API Proxy, designed for
  discovering and polling of vSphere objects.
  It uses the `VMware vSphere API <https://www.vmware.com/support/developer/vc-sdk/>`_
  in order to perform discovery and polling of vSphere objects.
  vPoller uses the `ZeroMQ messaging library <http://zeromq.org/>`_ for
  distributing tasks to workers and load balancing of client requests.
  vPoller can be integrated with other systems, which require access to
  vSphere objects, but do not have native support for it.
  Possible scenarios where vPoller could be used is integration with
  monitoring systems as part of the discovery and polling process
  in order to provide monitoring of your VMware vSphere environment.
  vPoller has been tested with VMware vSphere 5.x and with very limited
  testing on vSphere 4.x.
  vPoller is Open Source and licensed under the
  `BSD License <http://opensource.org/licenses/BSD-2-Clause>`_.


pkgId: c29537b9cef8ccb7d320dd9c3f680e4dbaa67e7d362def98cfc63eb3e142a961
name: python-vt-py
arch: src
version: 0.17.5
epoch: 0
release: 1
summary: The official Python client library for VirusTotal
url: https://github.com/VirusTotal/vt-py
rpm_license: Apache 2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3842e653-e892-4b32-9a35-f80838281769
location_href: 00011437-python-vt-py/python-vt-py-0.17.5-1.src.rpm
checksum_type: sha256
description:
  ![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/VirusTotal/vt-py)
  ![GitHub](https://img.shields.io/github/license/VirusTotal/vt-py)
  ![GitHub issues](https://img.shields.io/github/issues/VirusTotal/vt-py)




  This is the official Python client library for VirusTotal. With this library
  you can interact with the [VirusTotal REST API v3](https://developers.virustotal.com/v3.0/reference)
  and automate your workflow quickly and efficiently.



  * Scan files and URLs
  * Get information about files, URLs, domains, etc
  * Perform VirusTotal Intelligence searches
  * Manage your LiveHunt rulesets and notifications
  * Launch Retrohunt jobs and retrieve matches
  * Manipulate your VirusTotal Graphs
  * And much more ...

  For more information about how to use *vt-py* visit the [documentation](https://virustotal.github.io/vt-py/) page.

  You may also want to take a look at some of our [example scripts](https://github.com/VirusTotal/vt-py/tree/master/examples),
  where you can find some useful tools that can serve as a guidance on how to use *vt-py*.


pkgId: e4ef97117573ebdd20abd3fb7a5a17e944d6ad56372c13bfca90c75b13fdaff3
name: python-vulture
arch: src
version: 2.7
epoch: 0
release: 1
summary: Find dead code
url: https://github.com/jendrikseipp/vulture
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0a63db27-67de-4e94-afc3-455c3e613138
location_href: 00005447-python-vulture/python-vulture-2.7-1.src.rpm
checksum_type: sha256
description:
  ![CI:Test](https://github.com/jendrikseipp/vulture/workflows/CI/badge.svg)
  [![Codecov Badge](https://codecov.io/gh/jendrikseipp/vulture/branch/main/graphs/badge.svg)](https://codecov.io/gh/jendrikseipp/vulture?branch=main)

  Vulture finds unused code in Python programs. This is useful for
  cleaning up and finding errors in large code bases. If you run Vulture
  on both your library and test suite you can find untested code.

  Due to Python's dynamic nature, static code analyzers like Vulture are
  likely to miss some dead code. Also, code that is only called implicitly
  may be reported as unused. Nonetheless, Vulture can be a very helpful
  tool for higher code quality.



  * fast: uses static code analysis
  * tested: tests itself and has complete test coverage
  * complements pyflakes and has the same output syntax
  * sorts unused classes and functions by size with `--sort-by-size`
  * supports Python \>= 3.6



      $ pip install vulture



      $ vulture myscript.py  # or
      $ python3 -m vulture myscript.py
      $ vulture myscript.py mypackage/
      $ vulture myscript.py --min-confidence 100  # Only report 100% dead code.

  The provided arguments may be Python files or directories. For each
  directory Vulture analyzes all contained
  <span class="title-ref">\*.py</span> files.

  After you have found and deleted dead code, run Vulture again, because
  it may discover more dead code.



  In addition to finding unused functions, classes, etc., Vulture can detect
  unreachable code. Each chunk of dead code is assigned a *confidence value*
  between 60% and 100%, where a value of 100% signals that it is certain that the
  code won't be executed. Values below 100% are *very rough* estimates (based on
  the type of code chunk) for how likely it is that the code is unused.

  | Code type | Confidence value |
  | ------------------- | -- |
  | function/method/class argument, unreachable code | 100% |
  | import | 90% |
  | attribute, class, function, method, property, variable | 60% |

  You can use the `--min-confidence` flag to set the minimum confidence
  for code to be reported as unused. Use `--min-confidence 100` to only
  report code that is guaranteed to be unused within the analyzed files.



  When Vulture incorrectly reports chunks of code as unused, you have
  several options for suppressing the false positives. If fixing your false
  positives could benefit other users as well, please file an issue report.



  The recommended option is to add used code that is reported as unused to a
  Python module and add it to the list of scanned paths. To obtain such a
  whitelist automatically, pass `--make-whitelist` to Vulture:

      $ vulture mydir --make-whitelist > whitelist.py
      $ vulture mydir whitelist.py

  Note that the resulting `whitelist.py` file will contain valid Python
  syntax, but for Python to be able to *run* it, you will usually have to
  make some modifications.

  We collect whitelists for common Python modules and packages in
  `vulture/whitelists/` (pull requests are welcome).



  If you want to ignore a whole file or directory, use the `--exclude` parameter
  (e.g., `--exclude "*settings.py,*/docs/*.py,*/test_*.py,*/.venv/*.py"`). The
  exclude patterns are matched against absolute paths.



  <!-- Hide noqa docs until we decide whether we want to support it.
  Another way of ignoring errors is to annotate the line causing the false
  positive with `# noqa: <ERROR_CODE>` in a trailing comment (e.g., `#
  noqa: V103`). The `ERROR_CODE` specifies what kind of dead code to
  ignore (see the table below for the list of error codes). In case no
  error code is specified, Vulture ignores all results for the line.
  (Note that the line number for decorated objects is the line number of
  the first decorator.)
  -->

  For compatibility with [flake8](https://flake8.pycqa.org/), Vulture
  supports the [F401 and
  F841](https://flake8.pycqa.org/en/latest/user/error-codes.html) error
  codes for ignoring unused imports (`# noqa: F401`) and unused local
  variables (`# noqa: F841`). However, we recommend using whitelists instead
  of `noqa` comments, since `noqa` comments add visual noise to the code and
  make it harder to read.



  You can use `--ignore-names foo*,ba[rz]` to let Vulture ignore all names
  starting with `foo` and the names `bar` and `baz`. Additionally, the
  `--ignore-decorators` option can be used to ignore functions decorated
  with the given decorator. This is helpful for example in Flask projects,
  where you can use `--ignore-decorators "@app.route"` to ignore all
  functions with the `@app.route` decorator.

  We recommend using whitelists instead of `--ignore-names` or
  `--ignore-decorators` whenever possible, since whitelists are
  automatically checked for syntactic correctness when passed to Vulture
  and often you can even pass them to your Python interpreter and let it
  check that all whitelisted code actually still exists in your project.



  There are situations where you can't just remove unused variables, e.g.,
  in function signatures. The recommended solution is to use the `del`
  keyword as described in the
  [PyLint manual](http://pylint-messages.wikidot.com/messages:w0613) and on
  [StackOverflow](https://stackoverflow.com/a/14836005):

  ```python
  def foo(x, y):
      del y
      return x + 3
  ```

  Vulture will also ignore all variables that start with an underscore, so
  you can use `_x, y = get_pos()` to mark unused tuple assignments or
  function arguments, e.g., `def foo(x, _y)`.



  Raise the minimum [confidence value](#types-of-unused-code) with the `--min-confidence` flag.



  If Vulture complains about code like `if False:`, you can use a Boolean
  flag `debug = False` and write `if debug:` instead. This makes the code
  more readable and silences Vulture.



  See [#216](https://github.com/jendrikseipp/vulture/issues/216). For
  example, instead of `def foo(arg: "Sequence"): ...`, we recommend using

  ``` python
  from __future__ import annotations

  def foo(arg: Sequence):
      ...
  ```

  if you're using Python 3.7+.




  You can also store command line arguments in `pyproject.toml` under the
  `tool.vulture` section. Simply remove leading dashes and replace all
  remaining dashes with underscores.

  Options given on the command line have precedence over options in
  `pyproject.toml`.

  Example Config:

  ``` toml
  [tool.vulture]
  exclude = ["*file*.py", "dir/"]
  ignore_decorators = ["@app.route", "@require_*"]
  ignore_names = ["visit_*", "do_*"]
  make_whitelist = true
  min_confidence = 80
  paths = ["myscript.py", "mydir"]
  sort_by_size = true
  verbose = true
  ```



  You can use a [pre-commit](https://pre-commit.com/#install) hook to run
  Vulture before each commit. For this, install pre-commit and add the
  following to the `.pre-commit-config.yaml` file in your repository:

  ```yaml
  repos:
    - repo: https://github.com/jendrikseipp/vulture
      rev: 'v2.3'  # or any later Vulture version
      hooks:
        - id: vulture
  ```

  Then run `pre-commit install`. Finally, create a `pyproject.toml` file
  in your repository and specify all files that Vulture should check under
  `[tool.vulture] --> paths` (see above).



  Vulture uses the `ast` module to build abstract syntax trees for all
  given files. While traversing all syntax trees it records the names of
  defined and used objects. Afterwards, it reports the objects which have
  been defined, but not used. This analysis ignores scopes and only takes
  object names into account.

  Vulture also detects unreachable code by looking for code after
  `return`, `break`, `continue` and `raise` statements, and by searching
  for unsatisfiable `if`- and `while`-conditions.



  When using the `--sort-by-size` option, Vulture sorts unused code by its
  number of lines. This helps developers prioritize where to look for dead
  code first.



  Consider the following Python script (`dead_code.py`):

  ``` python
  import os

  class Greeter:
      def greet(self):
          print("Hi")

  def hello_world():
      message = "Hello, world!"
      greeter = Greeter()
      func_name = "greet"
      greet_func = getattr(greeter, func_name)
      greet_func()

  if __name__ == "__main__":
      hello_world()
  ```

  Calling :

      $ vulture dead_code.py

  results in the following output:

      dead_code.py:1: unused import 'os' (90% confidence)
      dead_code.py:4: unused function 'greet' (60% confidence)
      dead_code.py:8: unused variable 'message' (60% confidence)

  Vulture correctly reports `os` and `message` as unused but it fails to
  detect that `greet` is actually used. The recommended method to deal
  with false positives like this is to create a whitelist Python file.

  **Preparing whitelists**

  In a whitelist we simulate the usage of variables, attributes, etc. For
  the program above, a whitelist could look as follows:

  ``` python

  from dead_code import Greeter
  Greeter.greet
  ```

  Alternatively, you can pass `--make-whitelist` to Vulture and obtain an
  automatically generated whitelist.

  Passing both the original program and the whitelist to Vulture

      $ vulture dead_code.py whitelist_dead_code.py

  makes Vulture ignore the `greet` method:

      dead_code.py:1: unused import 'os' (90% confidence)
      dead_code.py:8: unused variable 'message' (60% confidence)

  <!-- Hide noqa docs until we decide whether we want to support it.
  **Using "# noqa"**

  ```python
  import os  # noqa

  class Greeter:  # noqa: V102
      def greet(self):  # noqa: V103
          print("Hi")
  ```



  For compatibility with [flake8](https://flake8.pycqa.org/), Vulture
  supports the [F401 and
  F841](https://flake8.pycqa.org/en/latest/user/error-codes.html) error
  codes.

  | Error codes |    Description    |
  | ----------- | ----------------- |
  | V101        | Unused attribute  |
  | V102        | Unused class      |
  | V103        | Unused function   |
  | V104, F401  | Unused import     |
  | V105        | Unused property   |
  | V106        | Unused method     |
  | V107, F841  | Unused variable   |
  | V201        | Unreachable code  |

  -->



  | Exit code |                          Description                          |
  | --------- | ------------------------------------------------------------- |
  |     0     | No dead code found                                            |
  |     1     | Dead code found                                               |
  |     1     | Invalid input (file missing, syntax error, wrong encoding)    |
  |     2     | Invalid command line arguments                                |



    - [pyflakes](https://pypi.org/project/pyflakes/) finds unused imports
      and unused local variables (in addition to many other programmatic
      errors).
    - [coverage](https://pypi.org/project/coverage/) finds unused code
      more reliably than Vulture, but requires all branches of the code to
      actually be run.
    - [uncalled](https://pypi.org/project/uncalled/) finds dead code by
      using the abstract syntax tree (like Vulture), regular expressions,
      or both.
    - [dead](https://pypi.org/project/dead/) finds dead code by using the
      abstract syntax tree (like Vulture).



  Please visit <https://github.com/jendrikseipp/vulture> to report any
  issues or to make pull requests.

    - Contributing guide:
      [CONTRIBUTING.md](https://github.com/jendrikseipp/vulture/blob/main/CONTRIBUTING.md)
    - Release notes:
      [CHANGELOG.md](https://github.com/jendrikseipp/vulture/blob/main/CHANGELOG.md)
    - Roadmap:
      [TODO.md](https://github.com/jendrikseipp/vulture/blob/main/TODO.md)




  * Ignore `setup_module()`, `teardown_module()`, etc. in pytest `test_*.py` files (Jendrik Seipp).
  * Add whitelist for `socketserver.TCPServer.allow_reuse_address` (Ben Elliston).
  * Clarify that `--exclude` patterns are matched against absolute paths (Jendrik Seipp, #260).
  * Fix example in README file (Jendrik Seipp, #272).



  * Add basic `match` statement support (kreathon, #276, #291).



  * Mark imports in `__all__` as used (kreathon, #172, #282).
  * Add whitelist for `pint.UnitRegistry.default_formatter` (Ben Elliston, #258).



  * Print absolute filepaths as relative again (as in version 2.1 and before)
    if they are below the current directory (The-Compiler, #246).
  * Run tests and add PyPI trove for Python 3.10 (chayim, #266).
  * Allow using the `del` keyword to mark unused variables (sshishov, #279).



  * Add [pre-commit](https://pre-commit.com) hook (Clément Robert, #244).



  * Only parse format strings when being used with `locals()` (jingw, #225).
  * Don't override paths in pyproject.toml with empty CLI paths (bcbnz, #228).
  * Run continuous integration tests for Python 3.9 (ju-sh, #232).
  * Use pathlib internally (ju-sh, #226).



  * Treat `getattr/hasattr(obj, "constant_string", ...)` as a reference to
    `obj.constant_string` (jingw, #219).
  * Fix false positives when assigning to `x.some_name` but reading via
    `some_name`, at the cost of potential false negatives (jingw, #221).
  * Allow reading options from `pyproject.toml` (Michel Albert, #164, #215).



  * Parse `# type: ...` comments if on Python 3.8+ (jingw, #220).
  * Bump minimum Python version to 3.6 (Jendrik Seipp, #218). The last
    Vulture release that supports Python 2.7 and Python 3.5 is version 1.6.
  * Consider all files under `test` or `tests` directories test files
    (Jendrik Seipp).
  * Ignore `logging.Logger.propagate` attribute (Jendrik Seipp).



  * Differentiate between functions and methods (Jendrik Seipp, #112, #209).
  * Move from Travis to GitHub actions (RJ722, #211).



  * Support flake8 "noqa" error codes F401 (unused import) and F841 (unused
    local variable) (RJ722, #195).
  * Detect unreachable code in conditional expressions
    (Agathiyan Bragadeesh, #178).



  * Ignore unused import statements in `__init__.py` (RJ722, #192).
  * Report first decorator's line number for unused decorated objects on
    Python 3.8+ (RJ722, #200).
  * Check code with black and pyupgrade.



  * Detect redundant 'if' conditions without 'else' blocks.
  * Add whitelist for `string.Formatter` (Joseph Bylund, #183).



  * Fix tests for Python 3.8 (#166).
  * Use new `Constant` AST node under Python 3.8+ (#175).
  * Add test for f-strings (#177).
  * Add whitelist for `logging` module.



  * Add `sys.excepthook` to `sys` whitelist.
  * Add whitelist for `ctypes` module.
  * Check that type annotations are parsed and type comments are ignored
    (thanks @kx-chen).
  * Support checking files with BOM under Python 2.7 (#170).



  * Add `--ignore-decorators` flag (thanks @RJ722).
  * Add whitelist for `threading` module (thanks @andrewhalle).



  * Add `--ignore-names` flag for ignoring names matching the given glob
    patterns (thanks @RJ722).



  * Add `--make-whitelist` flag for reporting output in whitelist format
    (thanks @RJ722).
  * Ignore case of `--exclude` arguments on Windows.
  * Add `*-test.py` to recognized test file patterns.
  * Add `failureException`, `longMessage` and `maxDiff` to `unittest`
    whitelist.
  * Refer to actual objects rather than their mocks in default
    whitelists (thanks @RJ722).
  * Don't import any Vulture modules in setup.py (thanks @RJ722).



  * Report `while (True): ... else: ...` as unreachable (thanks @RJ722).
  * Use `argparse` instead of `optparse`.
  * Whitelist Mock.return\_value and Mock.side\_effect in unittest.mock
    module.
  * Drop support for Python 2.6 and 3.3.
  * Improve documentation and test coverage (thanks @RJ722).



  * Detect `async` function definitions (thanks @RJ722).
  * Add `Item.get_report()` method (thanks @RJ722).
  * Move method for finding Python modules out of Vulture class.



  * Detect unsatisfiable statements containing `and`, `or` and `not`.
  * Use filenames and line numbers as tie-breakers when sorting by size.
  * Store first and last line numbers in Item objects.
  * Pass relevant options directly to `scavenge()` and `report()`.



  * Detect unsatisfiable `while`-conditions (thanks @RJ722).
  * Detect unsatisfiable `if`- and `else`-conditions (thanks @RJ722).
  * Handle null bytes in source code.



  * Add `--min-confidence` flag (thanks @RJ722).



  * Detect unreachable code after `return`, `break`, `continue` and
    `raise` (thanks @RJ722).
  * Parse all variable and attribute names in new format strings.
  * Extend ast whitelist.



  * If an unused item is defined multiple times, report it multiple
    times.
  * Make size estimates for function calls more accurate.
  * Create wheel files for Vulture (thanks @RJ722).



  * Report unused tuple assignments as dead code.
  * Report attribute names that have the same names as variables as dead
    code.
  * Let Item class inherit from `object` (thanks @RJ722).
  * Handle names imported as aliases like all other used variable names.
  * Rename Vulture.used\_vars to Vulture.used\_names.
  * Use function for determining which imports to ignore.
  * Only try to import each whitelist file once.
  * Store used names and used attributes in sets instead of lists.
  * Fix estimating the size of code containing ellipses (...).
  * Refactor and simplify code.



  * Don't ignore <span class="title-ref">\_\_foo</span> variable names.
  * Use separate methods for determining whether to ignore classes and
    functions.
  * Only try to find a whitelist for each defined import once (thanks
    @roivanov).
  * Fix finding the last child for many types of AST nodes.



  * Make <span class="title-ref">--sort-by-size</span> faster and more
    accurate (thanks @RJ722).



  * Add <span class="title-ref">get\_unused\_code()</span> method.
  * Return with exit code 1 when syntax errors are found or files can't
    be read.



  * Differentiate between unused classes and functions (thanks @RJ722).
  * Add --sort-by-size option (thanks @jackric and @RJ722).
  * Count imports as used if they are accessed as module attributes.



  * Automatically include whitelists based on imported modules (thanks
    @RJ722).
  * Add --version parameter (thanks @RJ722).
  * Add appveyor tests for testing on Windows (thanks @RJ722).



  * Add stub whitelist file for Python standard library (thanks @RJ722)
  * Ignore class names starting with "Test" in "test\_" files (thanks
    @thisch).
  * Ignore "test\_" functions only in "test\_" files.



  * Ignore star-imported names since we cannot detect whether they are
    used.
  * Move repository to GitHub.



  * Detect unused imports.
  * Use tokenize.open() on Python \>= 3.2 for reading input files,
    assume UTF-8 encoding on older Python versions.



  * Use the system's default encoding when reading files.
  * Report syntax errors instead of aborting.



  * Detect unused function and method arguments (issue #15).
  * Detect unused \*args and \*\*kwargs parameters.
  * Change license from GPL to MIT.



  * Don't flag attributes as unused if they are used as global variables
    in another module (thanks Florian Bruhin).
  * Don't consider "True" and "False" variable names.
  * Abort with error message when invoked on .pyc files.



  * Fix code for Python 3.



  * Do not flag names imported with "import as" as dead code (thanks Tom
    Terrace).



  * Exit with exitcode 1 if path on commandline can't be found.
  * Test vulture with vulture using a whitelist module for false
    positives.
  * Add tests that run vulture as a script.
  * Add "python setup.py test" command for running tests.
  * Add support for tox.
  * Raise test coverage to 100%.
  * Remove ez\_setup.py.



  * Ignore function names starting with "test\_".
  * Parse variable names in new format strings (e.g. "This is
    {x}".format(x="nice")).
  * Only parse alphanumeric variable names in format strings and ignore
    types.
  * Abort with exit code 1 on syntax errors.
  * Support installation under Windows by using setuptools (thanks
    Reuben Fletcher-Costin).



  * If dead code is found, exit with 1.



  * Only warn if a path given on the command line cannot be found.



  * Ignore unused variables starting with an underscore.
  * Show warning for syntax errors instead of aborting directly.
  * Print warning if a file cannot be found.



  * Add support for python3
  * Report unused attributes
  * Find tuple assignments in comprehensions
  * Scan files given on the command line even if they don't end with .py



  * Only format nodes in verbose mode (gives 4x speedup).



  * First release.


pkgId: 7f53079e2362d782ad8e022867440f56fc8975d5de7db891f3fe2c57a0fd6474
name: python-wagtail
arch: src
version: 4.2.2
epoch: 0
release: 1
summary: A Django content management system.
url: https://wagtail.org/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-94968de7-9703-4049-a462-a6973a6a3840
location_href: 00011448-python-wagtail/python-wagtail-4.2.2-1.src.rpm
checksum_type: sha256
description:
  Wagtail is an open source content management system built on Django, with a strong community and commercial support. It’s focused on user experience, and offers precise control for designers and developers.

  For more details, see https://wagtail.org, https://docs.wagtail.org and https://github.com/wagtail/wagtail/.


pkgId: e237f10327974c9aafe71bb04df1626a0971ab8e61aaa7092554c91a8134ed4a
name: python-waiting
arch: src
version: 1.4.1
epoch: 0
release: 1
summary: Utility for waiting for stuff to happen
url: https://pypi.org/project/waiting/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-06f582da-7db4-4c30-a772-67909d4949aa
location_href: 00010578-python-waiting/python-waiting-1.4.1-1.src.rpm
checksum_type: sha256
description:
  *waiting* is a small library for waiting for stuff to happen. It basically waits for a function to return **True**, in various modes.
  *Waiting* is compatible with `flux <http://flux.readthedocs.org>`_ for simulated timelines.


pkgId: 6ba66f75c40390ba8e2d10c8a27a388d029d14215ec5f2f62efc59a14a221987
name: python-waitress
arch: src
version: 2.1.2
epoch: 0
release: 1
summary: Waitress WSGI server
url: https://github.com/Pylons/waitress
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a6feb362-7f78-421b-9351-3b5e31a5b127
location_href: 00009347-python-waitress/python-waitress-2.1.2-1.src.rpm
checksum_type: sha256
description:
  Waitress is a production-quality pure-Python WSGI server with very acceptable
  performance. It has no dependencies except ones which live in the Python
  standard library. It runs on CPython on Unix and Windows under Python 3.7+. It
  is also known to run on PyPy 3 (version 3.7 compatible python) on UNIX. It
  supports HTTP/1.0 and HTTP/1.1.
  For more information, see the "docs" directory of the Waitress package or visit
  https://docs.pylonsproject.org/projects/waitress/en/latest/


pkgId: 0e212d2f500bd9b0e0e4818020c8ae543a80e8c9b9cab3e0dc8ad393101e68f4
name: python-wakeonlan
arch: src
version: 3.0.0
epoch: 0
release: 1
summary: A small python module for wake on lan.
url: https://github.com/remcohaszing/pywakeonlan
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-03022c99-44bc-4ccd-a707-c29a3ced46af
location_href: 00012131-python-wakeonlan/python-wakeonlan-3.0.0-1.src.rpm
checksum_type: sha256
description:
  Import the module
  >>> from wakeonlan import send_magic_packet
  Wake up a single computer by its mac address
  >>> send_magic_packet('ff.ff.ff.ff.ff.ff')
  Wake up multiple computers by their mac addresses.
  >>> send_magic_packet('ff.ff.ff.ff.ff.ff',
  An external host may be specified. Do note that port forwarding on that host is
  required. The default ip address is 255.255.255.255 and the default port is 9.
  >>> send_magic_packet('ff.ff.ff.ff.ff.ff',
  A network adapter may be specified. The magic packet will be routed through this interface.
  >>> send_magic_packet('ff.ff.ff.ff.ff.ff',


pkgId: fccad6912d00c71b23d71282fe4b708ca81efe85b48f5ff77874e505e69eebbd
name: python-walkdir
arch: src
version: 0.4.1
epoch: 0
release: 1
summary: Tools to manipulate and filter os.walk() style iteration
url: http://walkdir.readthedocs.org
rpm_license: Simplified BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-af2a9350-49a2-4969-a99f-42ebfc786aa8
location_href: 00005450-python-walkdir/python-walkdir-0.4.1-1.src.rpm
checksum_type: sha256
description:
  walkdir is a simple set of iterator tools intended to make it
  easy to manipulate and filter the output of os.walk() in a way
  that is also easily applicable to any source iterator that
  produces data in the same format.
  It offers tools such as:
  - glob-style filtering for file and directory names
  - depth limiting for directory recursion
  - flattening of output into simple sequences of path names
  - detection of symlink loops when following symlinks


pkgId: 31a262c91969103914e1ae3ed0e68437f0646eb6c47c0ca9b3d5f6cde1119cba
name: python-warlock
arch: src
version: 2.0.1
epoch: 0
release: 1
summary: Python object model built on JSON schema and JSON patch.
url: http://github.com/bcwaldon/warlock
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b238d28a-aa5f-45bd-80f4-21ee77c3c048
location_href: 00005453-python-warlock/python-warlock-2.0.1-1.src.rpm
checksum_type: sha256
description:
  **Create self-validating Python objects using JSON schema.**

  [![PyPI](https://img.shields.io/pypi/v/warlock.svg)][warlock]
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/warlock.svg)][warlock]
  [![PyPI - Downloads](https://img.shields.io/pypi/dw/warlock.svg)][pypistats]

  [![Build Status](https://github.com/bcwaldon/warlock/actions/workflows/ci.yaml/badge.svg)][ci-builds]
  [![Coverage Status](https://coveralls.io/repos/github/bcwaldon/warlock/badge.svg?branch=master)][coveralls]
  ![GitHub commits since latest release (branch)](https://img.shields.io/github/commits-since/bcwaldon/warlock/latest/master.svg)

  [![Package management: poetry](https://img.shields.io/badge/deps-poetry-blueviolet.svg)][poetry]
  [![Code Style Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black/)



  Warlock is [available on PyPI][warlock]:

  ```shell
  pip install warlock
  ```



  1) Create your schema

      ```python
      >>> schema = {
          'name': 'Country',
          'properties': {
              'name': {'type': 'string'},
              'abbreviation': {'type': 'string'},
              'population': {'type': 'integer'},
          },
          'additionalProperties': False,
      }
      ```

  2) Create a model

      ```python
      >>> import warlock
      >>> Country = warlock.model_factory(schema)
      ```

  3) Create an object using your model

      ```python
      >>> sweden = Country(name='Sweden', abbreviation='SE')
      ```

  4) Let the object validate itself

      ```python
      >>> sweden.name = 5
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "warlock/core.py", line 53, in __setattr__
          raise InvalidOperation(msg)
      warlock.core.InvalidOperation: Unable to set 'name' to '5'

      >>> sweden.overlord = 'Bears'
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        File "warlock/core.py", line 53, in __setattr__
          raise InvalidOperation(msg)
      warlock.core.InvalidOperation: Unable to set 'overlord' to 'Bears'
      ```

  5) Generate a [JSON Patch document](http://tools.ietf.org/html/draft-ietf-appsawg-json-patch) to track changes

      ```python
      >>> sweden.population=9453000
      >>> sweden.patch
      '[{"path": "/population", "value": 9453000, "op": "add"}]'
      ```

  [warlock]: https://pypi.org/project/warlock/
  [pip]: https://pip.pypa.io/en/stable/
  [ci-builds]: https://github.com/bcwaldon/warlock/actions/workflows/ci.yaml
  [coveralls]: https://coveralls.io/github/bcwaldon/warlock?branch=master
  [poetry]: https://poetry.eustace.io/docs/
  [pypistats]: https://pypistats.org/packages/warlock


pkgId: e921970d09023140f3369edd75296173067c5801852b029e90ba5b9ec0147fb4
name: python-wasabi
arch: src
version: 1.1.1
epoch: 0
release: 1
summary: A lightweight console printing and formatting toolkit
url: https://github.com/explosion/wasabi
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-eb695d04-aabb-402a-a9e6-8735d9b92c85
location_href: 00009269-python-wasabi/python-wasabi-1.1.1-1.src.rpm
checksum_type: sha256
description:
        a1      a2       a3
        b1      b2       b3
  ```
  | Argument    | Type                | Description                                                                                                                         | Default  |
  | ----------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------- |
  | `data`      | iterable / dict     | The data to render. Either a list of lists (one per row) or a dict for two-column tables.                                           |          |
  | `header`    | iterable            | Optional header columns.                                                                                                            | `None`   |
  | `footer`    | iterable            | Optional footer columns.                                                                                                            | `None`   |
  | `divider`   | bool                | Show a divider line between header/footer and body.                                                                                 | `False`  |
  | `widths`    | iterable / `"auto"` | Column widths in order. If `"auto"`, widths will be calculated automatically based on the largest value.                            | `"auto"` |
  | `max_col`   | int                 | Maximum column width.                                                                                                               | `30`     |
  | `spacing`   | int                 | Number of spaces between columns.                                                                                                   | `3`      |
  | `aligns`    | iterable / unicode  | Columns alignments in order. `"l"` (left, default), `"r"` (right) or `"c"` (center). If If a string, value is used for all columns. | `None`   |
  | `multiline` | bool                | If a cell value is a list of a tuple, render it on multiple lines, with one value per line.                                         | `False`  |
  | `env_prefix` | unicode                | Prefix for environment variables, e.g. WASABI_LOG_FRIENDLY.                                         | `"WASABI"` |
  | `color_values` | dict                | Add or overwrite color values, name mapped to value.                                         | `None`   |
  | `fg_colors` | iterable                | Foreground colors, one per column. None can be specified for individual columns to retain the default background color. | `None`   |
  | `bg_colors` | iterable                | Background colors, one per column. None can be specified for individual columns to retain the default background color. | `None`   |
  | **RETURNS** | str                 | The formatted table.                                                                                                                |          |

  ```python
  from wasabi import row
  data = ("a1", "a2", "a3")
  formatted = row(data)
  ```
  ```
  a1   a2   a3
  ```
  | Argument    | Type                      | Description                                                                                                                                                | Default  |
  | ----------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
  | `data`      | iterable                  | The individual columns to format.                                                                                                                          |          |
  | `widths`    | list / int / `"auto"` | Column widths, either one integer for all columns or an iterable of values. If "auto", widths will be calculated automatically based on the largest value. | `"auto"` |
  | `spacing`   | int                       | Number of spaces between columns.                                                                                                                          | `3`      |
  | `aligns`    | list                  | Columns alignments in order. `"l"` (left), `"r"` (right) or `"c"` (center).                                                                                | `None`   |
  | `env_prefix` | unicode                | Prefix for environment variables, e.g. WASABI_LOG_FRIENDLY.                                         | `"WASABI"` |
  | `fg_colors`    | list                  | Foreground colors for the columns, in order. None can be specified for individual columns to retain the default foreground color. | `None`   |
  | `bg_colors`    | list                  | Background colors for the columns, in order. None can be specified for individual columns to retain the default background color. | `None`   |
  | **RETURNS** | str                       | The formatted row.                                                                                                                                         |          |

  Helper to output custom formatted tracebacks and error messages. Currently used
  in [Thinc](https://github.com/explosion/thinc).

  Initialize a traceback printer.
  ```python
  from wasabi import TracebackPrinter
  tb = TracebackPrinter(tb_base="thinc", tb_exclude=("check.py",))
  ```
  | Argument          | Type               | Description                                                                                                                                                              | Default    |
  | ----------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
  | `color_error`     | str / int          | Color name or code for errors (passed to `color` helper).                                                                                                                | `"red"`    |
  | `color_tb`        | str / int          | Color name or code for traceback headline (passed to `color` helper).                                                                                                    | `"blue"`   |
  | `color_highlight` | str / int          | Color name or code for highlighted text (passed to `color` helper).                                                                                                      | `"yellow"` |
  | `indent`          | int                | Number of spaces to use for indentation.                                                                                                                                 | `2`        |
  | `tb_base`         | str                | Name of directory to use to show relative paths. For example, `"thinc"` will look for the last occurence of `"/thinc/"` in a path and only show path to the right of it. | `None`     |
  | `tb_exclude`      | tuple              | List of filenames to exclude from traceback.                                                                                                                             | `tuple()`  |
  | **RETURNS**       | `TracebackPrinter` | The traceback printer.                                                                                                                                                   |            |

  Output custom formatted tracebacks and errors.
  ```python
  from wasabi import TracebackPrinter
  import traceback
  tb = TracebackPrinter(tb_base="thinc", tb_exclude=("check.py",))
  error = tb("Some error", "Error description", highlight="kwargs", tb=traceback.extract_stack())
  raise ValueError(error)
  ```
  ```
    Some error
    Some error description
    Traceback:
    ├─ <lambda> [61] in .env/lib/python3.6/site-packages/pluggy/manager.py
    ├─── _multicall [187] in .env/lib/python3.6/site-packages/pluggy/callers.py
    └───── pytest_fixture_setup [969] in .env/lib/python3.6/site-packages/_pytest/fixtures.py
           >>> result = call_fixture_func(fixturefunc, request, kwargs)
  ```
  | Argument    | Type     | Description                                                                                | Default |
  | ----------- | -------- | ------------------------------------------------------------------------------------------ | ------- |
  | `title`     | str      | The message title.                                                                         |         |
  | `*texts`    | str      | Optional texts to print (one per line).                                                    |         |
  | `highlight` | str      | Optional sequence to highlight in the traceback, e.g. the bad value that caused the error. | `False` |
  | `tb`        | iterable | The traceback, e.g. generated by `traceback.extract_stack()`.                              | `None`  |
  | **RETURNS** | str      | The formatted traceback. Can be printed or raised by custom exception.                     |         |

  Helper to create Markdown-formatted content. Will store the blocks added to the Markdown document in order.
  ```python
  from wasabi import MarkdownRenderer
  md = MarkdownRenderer()
  md.add(md.title(1, "Hello world"))
  md.add("This is a paragraph")
  print(md.text)
  ```

  Initialize a Markdown renderer.
  ```python
  from wasabi import MarkdownRenderer
  md = MarkdownRenderer()
  ```
  | Argument    | Type               | Description                    | Default |
  | ----------- | ------------------ | ------------------------------ | ------- |
  | `no_emoji`  | bool               | Don't include emoji in titles. | `False` |
  | **RETURNS** | `MarkdownRenderer` | The renderer.                  |

  Add a block to the Markdown document.
  ```python
  from wasabi import MarkdownRenderer
  md = MarkdownRenderer()
  md.add("This is a paragraph")
  ```
  | Argument | Type | Description         | Default |
  | -------- | ---- | ------------------- | ------- |
  | `text`   | str  | The content to add. |         |

  The rendered Markdown document.
  ```python
  md = MarkdownRenderer()
  md.add("This is a paragraph")
  print(md.text)
  ```
  | Argument    | Type | Description                      | Default |
  | ----------- | ---- | -------------------------------- | ------- |
  | **RETURNS** | str  | The document as a single string. |         |

  Create a Markdown-formatted table.
  ```python
  md = MarkdownRenderer()
  table = md.table([("a", "b"), ("c", "d")], ["Column 1", "Column 2"])
  md.add(table)
  ```
  <!-- prettier-ignore -->
  ```markdown
  | Column 1 | Column 2 |
  | --- | --- |
  | a | b |
  | c | d |
  ```
  | Argument    | Type                    | Description                                                                          | Default |
  | ----------- | ----------------------- | ------------------------------------------------------------------------------------ | ------- |
  | `data`      | Iterable[Iterable[str]] | The body, one iterable per row, containig an interable of column contents.           |         |
  | `header`    | Iterable[str]           | The column names.                                                                    |         |
  | `aligns`    | Iterable[str]           | Columns alignments in order. `"l"` (left, default), `"r"` (right) or `"c"` (center). | `None`  |
  | **RETURNS** | str                     | The table.                                                                           |         |

  Create a Markdown-formatted heading.
  ```python
  md = MarkdownRenderer()
  md.add(md.title(1, "Hello world"))
  md.add(md.title(2, "Subheading", "💖"))
  ```
  ```markdown


  ```
  | Argument    | Type | Description                            | Default |
  | ----------- | ---- | -------------------------------------- | ------- |
  | `level`     | int  | The heading level, e.g. `3` for `###`. |         |
  | `text`      | str  | The heading text.                      |         |
  | `emoji`     | str  | Optional emoji to show before heading. | `None`  |
  | **RETURNS** | str  | The rendered title.                    |         |

  Create a Markdown-formatted non-nested list.
  ```python
  md = MarkdownRenderer()
  md.add(md.list(["item", "other item"]))
  md.add(md.list(["first item", "second item"], numbered=True))
  ```
  ```markdown
  - item
  - other item
  1. first item
  2. second item
  ```
  | Argument    | Type          | Description                     | Default |
  | ----------- | ------------- | ------------------------------- | ------- |
  | `items`     | Iterable[str] | The list items.                 |         |
  | `numbered`  | bool          | Whether to use a numbered list. | `False` |
  | **RETURNS** | str           | The rendered list.              |         |

  Create a Markdown-formatted link.
  ```python
  md = MarkdownRenderer()
  md.add(md.link("Google", "https://google.com"))
  ```
  ```markdown
  [Google](https://google.com)
  ```
  | Argument    | Type | Description        | Default |
  | ----------- | ---- | ------------------ | ------- |
  | `text`      | str  | The link text.     |         |
  | `url`       | str  | The link URL.      |         |
  | **RETURNS** | str  | The rendered link. |         |

  Create a Markdown-formatted code block.
  ```python
  md = MarkdownRenderer()
  md.add(md.code_block("import spacy", "python"))
  ```
  ````markdown
  ```python
  import spacy
  ```
  ````
  | Argument    | Type | Description              | Default |
  | ----------- | ---- | ------------------------ | ------- |
  | `text`      | str  | The code text.           |         |
  | `lang`      | str  | Optional code language.  | `""`    |
  | **RETURNS** | str  | The rendered code block. |         |

  Create a Markdown-formatted text.
  ```python
  md = MarkdownRenderer()
  md.add(md.code("import spacy"))
  md.add(md.bold("Hello!"))
  md.add(md.italic("Emphasis"))
  ```
  ```markdown
  `import spacy`
  **Hello!**
  _Emphasis_
  ```


  ```python
  from wasabi import color
  formatted = color("This is a text", fg="white", bg="green", bold=True)
  ```
  | Argument    | Type      | Description                                   | Default |
  | ----------- | --------- | --------------------------------------------- | ------- |
  | `text`      | str       | The text to be formatted.                     | -       |
  | `fg`        | str / int | Foreground color. String name or `0` - `256`. | `None`  |
  | `bg`        | str / int | Background color. String name or `0` - `256`. | `None`  |
  | `bold`      | bool      | Format the text in bold.                      | `False` |
  | `underline` | bool      | Format the text by underlining.               | `False` |
  | **RETURNS** | str       | The formatted string.                         |         |

  ```python
  from wasabi import wrap
  wrapped = wrap("Hello world, this is a text.", indent=2)
  ```
  | Argument    | Type | Description                                | Default |
  | ----------- | ---- | ------------------------------------------ | ------- |
  | `text`      | str  | The text to wrap.                          | -       |
  | `wrap_max`  | int  | Maximum line width, including indentation. | `80`    |
  | `indent`    | int  | Number of spaces used for indentation.     | `4`     |
  | **RETURNS** | str  | The wrapped text with line breaks.         |         |

  ```python
  from wasabi import diff_strings
  diff = diff_strings("hello world!", "helloo world")
  ```
  | Argument    | Type      | Description                                                                  | Default            |
  | ----------- | --------- | ---------------------------------------------------------------------------- | ------------------ |
  | `a`         | str       | The first string to diff.                                                    |
  | `b`         | str       | The second string to diff.                                                   |
  | `fg`        | str / int | Foreground color. String name or `0` - `256`.                                | `"black"`          |
  | `bg`        | tuple     | Background colors as `(insert, delete)` tuple of string name or `0` - `256`. | `("green", "red")` |
  | **RETURNS** | str       | The formatted diff.                                                          |                    |

  Wasabi also respects the following environment variables. The prefix can be
  customised on the `Printer` via the `env_prefix` argument. For example, setting
  `env_prefix="SPACY"` will expect the environment variable `SPACY_LOG_FRIENDLY`.
  | Name                   | Description                                            |
  | ---------------------- | ------------------------------------------------------ |
  | `ANSI_COLORS_DISABLED` | Disable colors.                                        |
  | `WASABI_LOG_FRIENDLY`  | Make output nicer for logs (no colors, no animations). |
  | `WASABI_NO_PRETTY`     | Disable pretty printing, e.g. colors and icons.        |

  Fork or clone the repo, make sure you have `pytest` installed and then run it on
  the package directory. The tests are located in
  [`/wasabi/tests`](/wasabi/tests).
  ```bash
  pip install pytest
  cd wasabi
  python -m pytest wasabi
  ```


