# packages

pkgId: 0ee15a848c4a40bb0836f5b63c612e30e2a229e4b180762d33f2c739d3fb047e
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-4d54a7cb-4af0-418e-84e2-51df0a214e8b
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: 2d8d99a830ce5ad4d45bd6d0afea6ddaf71895b17ea3be116cc5e240979db69e
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-e075e809-5bd9-4554-9f4c-267205d1bb1c
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: 104b45d470614af7bb998c6202749cbbfc54c74792218a52ac3aa52e5cc1a74e
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-94fcd928-7b9a-4363-8c60-29a68a6f2f67
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: 40c456b61bfba4c67454ab02c517150e64336c8f3df704f2ed1c72d3f7a40ba5
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-b400e618-6c1d-4bbd-9796-7f698c0e9fb8
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: 3c0d1926db7da45a8078ceb5e056708e295b44c1e6994a71f9f6fe03c67274f5
name: python-unicodedata2-debuginfo
arch: x86_64
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-b400e618-6c1d-4bbd-9796-7f698c0e9fb8
rpm_sourcerpm: python-unicodedata2-15.0.0-1.src.rpm
location_href: 00012209-python-unicodedata2/python-unicodedata2-debuginfo-15.0.0-1.x86_64.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: 9e6db8b1f6b75acf042dc11f5f299ad57fc45401cffa18fab9a08b1403a88671
name: python-unicodedata2-debugsource
arch: x86_64
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-b400e618-6c1d-4bbd-9796-7f698c0e9fb8
rpm_sourcerpm: python-unicodedata2-15.0.0-1.src.rpm
location_href: 00012209-python-unicodedata2/python-unicodedata2-debugsource-15.0.0-1.x86_64.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: 1f7093e34377bb9c6ce7ec071bdd88f59cf488dd4c3d9b0b0b7a5e889aad43c0
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-634c02e5-4754-48ac-8b37-20ba409c678d
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: cfc0630e4a985c98d6f5feaf99b3f57410dc1457ccf4e878aff68c9fb6a1c958
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-ef10f80e-1481-4333-b246-c05d663983b3
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: 87b8c9ca07fbb2d39e94a1d1100b7a7972485616fbeaba95b777a854528001b6
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-bb383923-371a-41ba-9e78-eb625f499273
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: 83448da77b530c9225ae25a1fd39c936ef6263efb10d74164cb0496d196d6f5d
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-2103922d-0ec6-4158-9be3-b32c3189a50b
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: 0bac80e6217769301840966be75038d1e55f22a8f1c23a9f17a3c76377a16084
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-60abf49c-9604-48fb-9527-8cedc8c4a960
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: 11c93094efd3c1c86bc190a2ffd9a2d95d9609aacf46691f8615eeb6c498e4e7
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-2cd5125d-b3e3-4471-9dd0-af73b537c184
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: d2c570f2cd9e70159ec37a86f9245c2b35f21b06f3037fe5925152b7627284b6
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-3915580d-a36d-4d34-86dc-3e4780f01d01
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: fadfca0fee3959c637a3856c856675d5144a25d7acc56ea9711b3aa5c75942f9
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-086dffac-f640-4d4e-81f3-5701b519e4eb
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: b3a6f7185dfaf6d1e555022066d37c89376fac265517c5cf5fab96900637fcdb
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-01221340-fa67-4fcd-a90d-f859d307fba8
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: 68b804efaa2550eb808383aa9062b27210029a62f0c091712f7e3253823847f0
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-18976b8e-66ae-45de-9801-c2adb07ed2a2
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: 00cef2338d9927e950452884b52d3a839b4e3ad9a873f2358fc771f32917b2bd
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-3ce8d425-5514-4237-a4eb-b5c6bd7bca35
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: 3c9ded60bf7a1beeaad8dcf5f34ccdc6480bae3937103af322d6b078d552741d
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-b9cd5916-da78-4f38-aad8-c05e8e273a8f
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: c414b694d506aea760f33a6caed3b5104db192aa3fec2b9113e3259095b25ef7
name: python-url64
arch: src
version: 0.1.0
epoch: 0
release: 1
summary: url64 decode/encode for python
url: https://github.com/puria/url64
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0f3ec7d7-4505-4d9e-a2c6-18195fcc0942
location_href: 00012665-python-url64/python-url64-0.1.0-1.src.rpm
checksum_type: sha256
description:
  <h1 align="center">
    url64 <br>
    <sub>🐍 base64url decode/encode for python</sub>
  </h1>

  <p align="center">
    <a href="https://travis-ci.com/puria/url64">
      <img src="https://travis-ci.com/puria/url64.svg?branch=master" alt="Build Status">
    </a>
    <a href="https://codecov.io/gh/puria/url64">
      <img src="https://codecov.io/gh/puria/url64/branch/master/graph/badge.svg" alt="coverage"/>
    </a>
    <a href="https://pypi.org/project/url64/">
      <img alt="PyPI" src="https://img.shields.io/pypi/v/url64.svg" alt="Latest release">
    </a>
  </p>

  <br><br>

  <h4 align="center">
    <a href="#-install">💾 Install</a>
    <span> • </span>
    <a href="#-quick-start">🎮 Quick start</a>
    <span> • </span>
    <a href="#-links">🌐 Links</a>
    <span> • </span>
    <a href="#-contributing">👤 Contributing</a>
    <span> • </span>
    <a href="#-license">💼 License</a>
  </h4>


  `url64` is the common name for the `base64url` described in the
   [RFC4648 §5](https://tools.ietf.org/html/rfc4648#section-5).
   Since the original base64 alphabet contains invalid characters for URLs a safe
   base64 for url is suggested, replacing the 62nd (plus sign +) and 63rd
   (slash /) with new chars respectively the minus `-` and underscore `_` and
   removing also the padding that is represented with the equal sign `=`.

   This a handy small utility to encode/decode strings in url64 with python3
   very useful for JWT

  <details>
   <summary><strong>🚩 Table of Contents</strong> (click to expand)</summary>

  * [Install](#-install)
  * [Quick start](#-quick-start)
  * [Links](#-links)
  * [Contributing](#-contributing)
  * [License](#-license)
  </details>

  ***

  ```pip install url64```

  ***




  ```python

  import url64

  encoded = url64.encode('Hello world!')
  print(encoded)  # SGVsbG8gd29ybGQh

  dict_exncode = url64.encode(dict(alg="HS256", typ="JWT"))
  print(dict_exncode) # eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9
  ```



  ```python

  import url64

  decoded = url64.decode('SGVsbG8gd29ybGQh')
  print(decoded)  # Hello world!

  dict_decoded = url64.decode('eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9')
  print(dict_decoded) # {"alg": "HS256", "typ": "JWT"}
  ```

  ***


  https://tools.ietf.org/html/rfc4648#section-5

  https://en.wikipedia.org/wiki/Base64#URL_applications

  https://base64.guru/standards/base64url

  ***


  1.  🔀 [FORK IT](../../fork)
  2.  Create your feature branch `git checkout -b feature/branch`
  3.  Commit your changes `git commit -am 'Add some fooBar'`
  4.  Push to the branch `git push origin feature/branch`
  5.  Create a new Pull Request
  6.  🙏 Thank you


  ***


      Copyright (c) 2019 Puria Nafisi Azizi

      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.


pkgId: e3e954ae6662a20405287f3843b8ea0950af0a3f7697e48c277db05898fd7dcb
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-f74b8dd4-fe18-47f3-8156-2ff6669abc04
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: 289e47622eddc541496068c35602dea576f4c67cd55045ad26966d0b5819fa17
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-37c0f4e1-199b-4ae4-9c1f-0d47ca628931
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: ec1f78ffe5bf05515d239c67bf64f364ffc10ddbf1d11244203592b5a7891c7e
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-13a3bba0-1d49-46f7-ae3e-9377879dfbdf
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: 314230f314e9ba9a7e093055b76b50154dcd46214e2f0d12a7f6e17553aa5dab
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-c5c5b550-17f8-41d3-850f-50fcb19e658a
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: 5028e1ab2138ed7c9bca07b87223bb6570515ad25cb9e8d5a6abd5d845f25654
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-0c40ffc8-d74a-4ab9-a416-89f3fc354045
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: a0fbc1ec20d046a9bc3dbe8aa9c96c9e88bca67b20c8c77048d58aa5d3e44346
name: python-usaddress
arch: src
version: 0.5.10
epoch: 0
release: 1
summary: Parse US addresses using conditional random fields
url: https://github.com/datamade/usaddress
rpm_license: The MIT License: http://www.opensource.org/licenses/mit-license.php
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-becf2209-e738-4570-ba18-621af3d0a1b4
location_href: 00009866-python-usaddress/python-usaddress-0.5.10-1.src.rpm
checksum_type: sha256
description:
  usaddress is a python library for parsing unstructured address strings into
      address components, using advanced NLP methods.

      From the python interpreter:

      >>> import usaddress
      >>> usaddress.parse('123 Main St. Suite 100 Chicago, IL')
      [('123', 'AddressNumber'),
       ('Main', 'StreetName'),
       ('St.', 'StreetNamePostType'),
       ('Suite', 'OccupancyType'),
       ('100', 'OccupancyIdentifier'),
       ('Chicago,', 'PlaceName'),
       ('IL', 'StateName')]


pkgId: 27418adbd1a10e993743ab5dd4c6f97871240c6a111d51e27c35d3ae44c21515
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-14e8574b-be5c-4640-be7e-dd420c9cbd6a
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: e8d326aa5c0cbecfd514eaa2a08806ef01e530e3ca9af1be14ce81b56913e4bd
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-acca560f-96c6-4334-b544-319e74f5267d
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: 10f0e9de1aaf9a0287db9abc75263bdfa76e21a804be1be24c5e881e04a9d1a0
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-77761e0d-8389-4bfe-bc3a-b6135fa56bee
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: 1d033ae37b67fceab28be46ebeffa9fbb3354c3aef7645798c47691055d4a4dc
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-82124373-ace9-40ed-94ba-bbb9c29e2a7d
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: 832f7134cb7ac3fd557d8d03b8f99fc1a1b7f10b0345600d2eaedb2832a44050
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-df01224f-df97-4689-a669-c178e0c32175
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: ce4671f2955ebb0db7f89e10a10c3ae055aac6d453b6d46969c9d05fe7de483c
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-9d2ee7d0-cf86-4e91-ad9f-7efd2cb7104f
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: 549c5c82111ffd28309ea48624704b75c3a1d9070b98c5b9e86a479871d8c363
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-c5483480-c8b7-4e02-b141-ef7abc205a04
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: 3ab751372006e65bcfbab3fa24c3b627469a5b393e439220f6a62a6f1cce5d37
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-6609d23f-7714-454f-939b-4c3e9c5c27e7
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: e238eba22868c11175561ee17b3712909b2db449934a989b709a085762c926d6
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-0c942fc3-4bf1-42bb-ba14-1ab2f4395347
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: fa9cd30e4a2053b544417536c9599113a4db2b34d6bf96ba3da924b848e4ace6
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-c5867baf-af2c-4742-a1f9-365cbbcd3b4c
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: 440744a633499ba688ef3c038d847025b3e7fff41d319cdb37950cc632bca890
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-d07ebd66-3b3f-4906-bac7-22fe5df57c47
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: 504ff412f4ac70dbcae09b30d3ea6a979d5f299f01f13e411caa7ec989fd9e5e
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-4be78c46-3ed0-4109-8779-858219cb7a53
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: 86ed8cc1d98baab165d0cfd0cdc96eea6ba0bc3abb8f7addc3faed6844106eb6
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-351fc899-0dc6-498e-84dd-d52ba497ebd3
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: 0a2bd565b2e571de0a2bb87222c4a679a44bbc3524aef8eccb388c66a870b836
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-7271d3fe-1270-43e9-92ab-a122f0d9e8e3
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: 93c75e2b69722a3d9d7cfcd9fdc0d291b5dfa4f186aa505fa3369dd21b11e8e6
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-fe428329-faa5-4ab3-a574-9be840721c68
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: 0839e86fa2dba73134c31b8802a64afc226e4b933d23b3d393866f859317e7c3
name: python-vici
arch: src
version: 5.9.10
epoch: 0
release: 1
summary: Native Python interface for strongSwan's VICI protocol
url: https://docs.strongswan.org/docs/5.9/plugins/vici.html
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-eadddd4e-f3c7-43d3-bdab-22e8b0ef8a12
location_href: 00012274-python-vici/python-vici-5.9.10-1.src.rpm
checksum_type: sha256
description:
  The strongSwan VICI protocol allows external applications to monitor, configure
  and control the IKE daemon charon. This Python package provides a native client
  side implementation of the VICI protocol, well suited to script automated tasks
  in a reliable way.


pkgId: 7681bffbbc8cbc81ad644c38c9e2475b15dbd4af45bbb97fbb5ee39c3e7d4cff
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-688edb74-46a4-4410-b77c-6dd4ff3db424
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: 951f9ed3f1ae2518bbd26cbfe5cf4a6f384cd02f768a2d2fedc6e04f6cd95abf
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-50d045b5-81d7-4b16-a059-8194fec2eea0
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: 67fa87239fc97c8facef39ad724fc044f891c8bc3c1777f2aad4a4c0c189286e
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-a6ed6abc-a896-4f0c-b83a-025fa60daa52
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: 4e83abbbd03d1f7a5b2c33b2162f1c6ed74cb88b142fe646ac6f07d89b478b4d
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-9eecedec-805d-4f4f-a4dd-609d61146370
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: ba08f483632ee49437b62613f098bd70c9036d3fd988bc09405cecef5e46d672
name: python-visions
arch: src
version: 0.7.5
epoch: 0
release: 1
summary: Visions
url: https://github.com/dylan-profiler/visions
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b1f5fe53-eb1a-40b0-8aa3-7f03bc786f1e
location_href: 00009847-python-visions/python-visions-0.7.5-1.src.rpm
checksum_type: sha256
description:
  |JossPaper|
  |PyPiDownloadsBadge|
  |PyPiDownloadsMonthlyBadge|
  |PyPiVersionBadge|
  |PythonBadge|
  |BinderBadge|
      *And these visions of data types, they kept us up past the dawn.*
  ``Visions`` provides an extensible suite of tools to support common data analysis operations including
  * type inference on unknown data
  * casting data types
  * automated data summarization


pkgId: c0cfe4fe176da8eefb7c7429dd5c8cdbc0f27f48efa9bd5fe43ba163fb25b403
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-8ce6ed16-5b8d-4e92-9382-f517f3765484
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: fbe6bbf957fff7d98bf23d976989f94f4beaa47b08bd752f242ad6e5f9c88d6a
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-0a99b040-a134-4a99-87ac-cd3a2991e74d
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: 84f917cef4edaca4550d995523a8b00488a617052ef5a0ea669a45dafd74b18b
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-801501ec-82ad-4f7f-b88a-9745f941d7d8
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: 5d518e6469863f682260a77b2d8e88934411181d5846ab53a6ef5054375a423e
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-d33849ca-d7c0-4fdd-a3e2-2140031df0c0
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: c5d0e379b646f90ce54dad3bf986884cd17d37c8d5a40fc2e131b87402a33fd5
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-c46dee77-dbf7-466d-8991-193ede3b09c6
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: 31342b2feca4b86fea7be1d2da937b4423cf9a6b995ef47475d67e1362c072ad
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-631ca823-d264-4536-bea4-2808353b4679
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: 52b5e5b911977026ffa1e959cd29314990cd3ea12ec2c38289ca547dfaffecec
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-46b33d6e-9f2d-474f-ae79-aef40cd71955
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: 40c9541aa3224847f23f2f62884f3567d111778d36afe931d2a4b81b3bfcc404
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-d2325563-6e59-48ad-b29c-aa2f0339bd5d
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: 4159a9a2baf3ed5bebe40d8a787317398280a4b1ab3cdcd8ae39ae226b4796cc
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-b2e174ef-f162-4da1-b96f-a91ee6dfc694
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: ea854d419b4e9722cd73cd4f077ad0426bc1685c0c96bd8b92514e3f71bce034
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-7893392e-89a2-4a65-8e86-d157886045f3
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: 4acf09a8f192f646957cd74633a0f6797f40076c661635c43f8fc582c8b204a6
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-7e77a37f-c78e-4851-91a9-55202ce2aa4f
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: a673073cd0b263bb934903d804e0e94ff6e38965f43d353ad466860ddecfab9e
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-2bc4210e-f58d-4274-b2dd-042fbfdbc098
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: 9e419c3d4a08e4e0a2542e56420f75449d91c4ebd941b80965afe3d7a180cb3c
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-e9c28c21-7f50-48e9-8fab-2d2ca6d004b7
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: 3316874bed0d296aa7274f07fd5b0bad5cd54fdb1aaa8888e1bcbeb0760d0630
name: python-wandb
arch: src
version: 0.14.2
epoch: 0
release: 1
summary: A CLI and library for interacting with the Weights and Biases API.
url: https://github.com/wandb/wandb
rpm_license: MIT license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f988e2da-7a59-4976-a7d8-6ae6dca20e4e
location_href: 00009944-python-wandb/python-wandb-0.14.2-1.src.rpm
checksum_type: sha256
description:
  <div align="center">
    <img src="https://i.imgur.com/RUtiVzH.png" width="600" /><br><br>
  </div>



  Use W&B to build better models faster. Track and visualize all the pieces of your machine learning pipeline, from datasets to production models.

  - Quickly identify model regressions. Use W&B to visualize results in real time, all in a central dashboard.
  - Focus on the interesting ML. Spend less time manually tracking results in spreadsheets and text files.
  - Capture dataset versions with W&B Artifacts to identify how changing data affects your resulting models.
  - Reproduce any model, with saved code, hyperparameters, launch commands, input data, and resulting model weights.

  [Sign up for a free account →](https://wandb.ai/login?signup=true)



  -   Store hyper-parameters used in a training run
  -   Search, compare, and visualize training runs
  -   Analyze system usage metrics alongside runs
  -   Collaborate with team members
  -   Replicate historic results
  -   Run parameter sweeps
  -   Keep records of experiments available forever

  [Documentation →](https://docs.wandb.com)



  ```shell
  pip install wandb
  ```

  In your training script:

  ```python
  import wandb


  args = ...

  wandb.init(config=args, project="my-project")
  wandb.config["more"] = "custom"


  def training_loop():
      while True:
          
          epoch, loss, val_loss = ...
          
          wandb.log({"epoch": epoch, "loss": loss, "val_loss": val_loss})
  ```

  If you're already using Tensorboard or [TensorboardX](https://github.com/lanpa/tensorboardX), you can integrate with one line:

  ```python
  wandb.init(sync_tensorboard=True)
  ```



  Run `wandb login` from your terminal to signup or authenticate your machine (we store your api key in ~/.netrc). You can also set the `WANDB_API_KEY` environment variable with a key from your [settings](https://app.wandb.ai/settings).

  Run your script with `python my_script.py` and all metadata will be synced to the cloud. You will see a url in your terminal logs when your script starts and finishes. Data is staged locally in a directory named _wandb_ relative to your script. If you want to test your script without syncing to the cloud you can set the environment variable `WANDB_MODE=dryrun`.

  If you are using [docker](https://docker.com) to run your code, we provide a wrapper command `wandb docker` that mounts your current directory, sets environment variables, and ensures the wandb library is installed. Training your models in docker gives you the ability to restore the exact code and environment with the `wandb restore` command.



  [Sign up for a free account →](https://wandb.com)
  [![Watch the video](https://i.imgur.com/PW0Ejlc.png)](https://youtu.be/EeqhOSvNX-A)
  [Introduction video →](https://youtu.be/EeqhOSvNX-A)



  Framework specific and detailed usage can be found in our [documentation](http://docs.wandb.com/).



  To run basic test use `make test`.  More detailed information can be found at CONTRIBUTING.md.

  We use [circleci](https://circleci.com) for CI.


  If you'd like a free academic account for your research group, [reach out to us →](https://www.wandb.com/academic)

  We make it easy to cite W&B in your published paper. [Learn more →](https://www.wandb.com/academic)
  [![](https://i.imgur.com/loKLiez.png)](https://www.wandb.com/academic)


  Got questions, feedback or want to join a community of ML engineers working on exciting projects?

  <a href="https://bit.ly/wb-slack"><img src="https://svgshare.com/i/M93.svg" alt="slack" width="55"/></a> Join our [slack](https://bit.ly/wb-slack) community.

  [![Twitter](https://img.shields.io/twitter/follow/weights_biases?style=social)](https://twitter.com/weights_biases) Follow us on [Twitter](https://twitter.com/weights_biases).


pkgId: 98c8aea8646a2a8ba317ba200c8b35578672b352221c43ba791f296596a41d6d
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-580487ce-a0fa-4553-a044-e361e4603d15
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: d4cef6bd6014cb1dd8593960095ac9a722d719e090cc297f99df7e957d84e2df
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-8559e6d8-0c61-47af-902b-2c7c7e66195b
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
  ```


pkgId: 55fd9efe24806536f38929cd3453f1e6793fb9f2b093990f2e313d835edeb3a3
name: python-watchdog
arch: src
version: 2.3.1
epoch: 0
release: 1
summary: Filesystem events monitoring
url: https://github.com/gorakhargosh/watchdog
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1947b69c-5522-455f-b6fa-3665d6d4f672
location_href: 00005454-python-watchdog/python-watchdog-2.3.1-1.src.rpm
checksum_type: sha256
description:
  |Build Status|
  |CirrusCI Status|
  Python API and shell utilities to monitor file system events.
  Works on 3.6+.


pkgId: 9ad0f3b0f574637e5d5f4ba80eaafb3680d30da53ae982a3268b2b9a14cd10ff
name: python-watchgod
arch: src
version: 0.8.2
epoch: 0
release: 1
summary: Simple, modern file watching and code reload in python.
url: https://github.com/samuelcolvin/watchfiles
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8bd74bbc-ab40-4cea-8121-2cb18a78613f
location_href: 00005455-python-watchgod/python-watchgod-0.8.2-1.src.rpm
checksum_type: sha256
description:
  **Please note:** This package (watchgod) has been renamed to [watchfiles](https://pypi.org/project/watchfiles/).
  Please replace `watchgod` with `watchfiles`, see [the migration guide](https://watchfiles.helpmanual.io/migrating/)
  for help and instructions on switching.
  As well as a better name, `watchfiles` has a whole new backend based on rust-notify which makes watching
  for filesystem events much more efficient.


pkgId: e01eac7a94548f5ced86aa6808bf85f1f2e63a17a93df4742b08f7167093fe1d
name: python-watchtower
arch: src
version: 3.0.1
epoch: 0
release: 1
summary: Python CloudWatch Logging
url: https://github.com/kislyuk/watchtower
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2d8b3b96-c237-416b-99ab-e2d83e9ec004
location_href: 00009310-python-watchtower/python-watchtower-3.0.1-1.src.rpm
checksum_type: sha256
description:
  Watchtower is a log handler for `Amazon Web Services CloudWatch Logs
  <https://aws.amazon.com/blogs/aws/cloudwatch-log-service/>`_.
  CloudWatch Logs is a log management service built into AWS. It is conceptually similar to services like Splunk, Datadog,
  and Loggly, but is more lightweight, cheaper, and tightly integrated with the rest of AWS.
  Watchtower, in turn, is a lightweight adapter between the `Python logging system
  <https://docs.python.org/library/logging.html>`_ and CloudWatch Logs. It uses the `boto3 AWS SDK
  <https://github.com/boto/boto3>`_, and lets you plug your application logging directly into CloudWatch without the need
  to install a system-wide log collector like `awscli-cwlogs <https://pypi.python.org/pypi/awscli-cwlogs>`_ and round-trip
  your logs through the instance's syslog. It aggregates logs into batches to avoid sending an API request per each log
  message, while guaranteeing a delivery deadline (60 seconds by default).
  Installation
  ~~~~~~~~~~~~
      pip install watchtower
  Synopsis
  ~~~~~~~~
  Install `awscli <https://pypi.python.org/pypi/awscli>`_ and set your AWS credentials (run ``aws configure``).
      import watchtower, logging
      logging.basicConfig(level=logging.INFO)
      logger = logging.getLogger(__name__)
      logger.addHandler(watchtower.CloudWatchLogHandler())
      logger.info("Hi")
      logger.info(dict(foo="bar", details={}))
  After running the example, you can see the log output in your `AWS console
  <https://console.aws.amazon.com/cloudwatch/home>`_ under the **watchtower** log group.
  IAM permissions
  ~~~~~~~~~~~~~~~
  The process running watchtower needs to have access to IAM credentials to call the CloudWatch Logs API. The standard
  procedure for loading and configuring credentials is described in the
  `Boto3 Credentials documentation <https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html>`_.
  When running Watchtower on an EC2 instance or other AWS compute resource, boto3 automatically loads credentials from
  `instance metadata <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html>`_ (IMDS) or
  container credentials provider (AWS_WEB_IDENTITY_TOKEN_FILE or AWS_CONTAINER_CREDENTIALS_FULL_URI). The easiest way to
  grant the right permissions to the IAM role associated with these credentials is by attaching an AWS
  `managed IAM policy <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html>`_ to the
  role. While AWS provides no generic managed CloudWatch Logs writer policy, we recommend that you use the
  ``arn:aws:iam::aws:policy/AWSOpsWorksCloudWatchLogs`` managed policy, which has just the right permissions without being
  overly broad.
  Example: Flask logging with Watchtower
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Use the following configuration to send Flask logs to a CloudWatch Logs stream called "loggable":
      import watchtower, flask, logging
      logging.basicConfig(level=logging.INFO)
      app = flask.Flask("loggable")
      handler = watchtower.CloudWatchLogHandler(log_group_name=app.name)
      app.logger.addHandler(handler)
      logging.getLogger("werkzeug").addHandler(handler)
      @app.route('/')
      def hello_world():
          return 'Hello World!'
      if __name__ == '__main__':
          app.run()
  (See also `http://flask.pocoo.org/docs/errorhandling/ <http://flask.pocoo.org/docs/errorhandling/>`_.)
  Example: Django logging with Watchtower
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  This is an example of Watchtower integration with Django. In your Django project, add the following to ``settings.py``:
      import boto3
      AWS_REGION_NAME = "us-west-2"
      boto3_logs_client = boto3.client("logs", region_name=AWS_REGION_NAME)
      LOGGING = {
          'version': 1,
          'disable_existing_loggers': False,
          'root': {
              'level': 'DEBUG',
              
              
              
              
              'handlers': ['watchtower', 'console'],
          },
          'handlers': {
              'console': {
                  'class': 'logging.StreamHandler',
              },
              'watchtower': {
                  'class': 'watchtower.CloudWatchLogHandler',
                  'boto3_client': boto3_logs_client,
                  'log_group_name': 'YOUR_DJANGO_PROJECT_NAME',
                  
                  
                  
                  'level': 'DEBUG'
              }
          },
          'loggers': {
              
              
              
              
              
              'django': {
                  'level': 'DEBUG',
                  'handlers': ['console'],
                  'propagate': False
              }
              
          }
      }
  Using this configuration, logs from Django will be sent to Cloudwatch in the log group ``YOUR_DJANGO_PROJECT_NAME``.
  To supply AWS credentials to this configuration in development, set your
  `AWS CLI profile settings <https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html>`_ with
  ``aws configure``. To supply credentials in production or when running on an EC2 instance,
  assign an IAM role to your instance, which will cause boto3 to automatically ingest IAM role credentials from
  `instance metadata <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html>`_.
  (See also the `Django logging documentation <https://docs.djangoproject.com/en/dev/topics/logging/>`_.)
  Examples: Querying CloudWatch logs
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  This section is not specific to Watchtower. It demonstrates the use of awscli and jq to read and search CloudWatch logs
  on the command line.
  For the Flask example above, you can retrieve your application logs with the following two commands::
      aws logs get-log-events --log-group-name watchtower --log-stream-name loggable | jq '.events[].message'
      aws logs get-log-events --log-group-name watchtower --log-stream-name werkzeug | jq '.events[].message'
  In addition to the raw get-log-events API, CloudWatch Logs supports
  `extraction of your logs into an S3 bucket <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/S3Export.html>`_,
  `log analysis with a query language <https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html>`_,
  and alerting and dashboards based on `metric filters
  <http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/FilterAndPatternSyntax.html>`_, which are pattern
  rules that extract information from your logs and feed it to alarms and dashboard graphs. If you want to make use of
  these features on the command line, the author of Watchtower has published an open source CLI toolkit called
  `aegea <https://github.com/kislyuk/aegea>`_ that includes the commands ``aegea logs`` and ``aegea grep`` to easily
  access the S3 Export and Insights features.
  Examples: Python Logging Config
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  The Python ``logging.config`` module has the ability to provide a configuration file that can be loaded in order to
  separate the logging configuration from the code.
  The following are two example YAML configuration files that can be loaded using PyYAML. The resulting ``dict`` object
  can then be loaded into ``logging.config.dictConfig``. The first example is a basic example that relies on the default
  configuration provided by ``boto3``:
      
      version: 1
      disable_existing_loggers: False
      formatters:
        json:
          format: "[s] d s s:s:s - s"
        plaintext:
          format: "[s] d s s:s:s - s"
      handlers:
        console:
          class: logging.StreamHandler
          formatter: plaintext
          level: DEBUG
          stream: ext://sys.stdout
        logfile:
          class: logging.handlers.RotatingFileHandler
          formatter: plaintext
          level: DEBUG
          filename: watchtower.log
          maxBytes: 1000000
          backupCount: 3
        watchtower:
          class: watchtower.CloudWatchLogHandler
          formatter: json
          level: DEBUG
          log_group_name: watchtower
          log_stream_name: "{logger_name}-{strftime:%y-%m-%d}"
          send_interval: 10
          create_log_group: False
      root:
        level: DEBUG
        propagate: True
        handlers: [console, logfile, watchtower]
      loggers:
        botocore:
          level: INFO
        urllib3:
          level: INFO
  The above works well if you can use the default boto3 credential configuration, or rely on environment variables.
  However, sometimes one may want to use different credentials for logging than used for other functionality;
  in this case the ``boto3_profile_name`` option to Watchtower can be used to provide a boto3 profile name:
      
      version: 1
      handlers:
        watchtower:
          boto3_profile_name: watchtowerlogger
  Finally, the following shows how to load the configuration into the working application:
      import logging.config
      import flask
      import yaml
      app = flask.Flask("loggable")
      @app.route('/')
      def hello_world():
          return 'Hello World!'
      if __name__ == '__main__':
          with open('logging.yml') as log_config:
              config_yml = log_config.read()
              config_dict = yaml.safe_load(config_yml)
              logging.config.dictConfig(config_dict)
              app.run()
  Log stream naming
  ~~~~~~~~~~~~~~~~~
  For high volume logging applications that utilize process pools, it is recommended that you keep the default log stream
  name (``{machine_name}/{program_name}/{logger_name}/{process_id}``) or otherwise make it unique per source using a
  combination of these template variables. Because logs must be submitted sequentially to each log stream, independent
  processes sending logs to the same log stream will encounter sequence token synchronization errors and spend extra resources
  automatically recovering from them. As the number of processes increases, this overhead will grow until logs fail to
  deliver and get dropped (causing a warning on stderr). Partitioning logs into streams by source avoids this contention.
  Boto3/botocore/urllib3 logs
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Because watchtower uses boto3 to send logs, the act of sending them generates a number of DEBUG level log messages
  from boto3's dependencies, botocore and urllib3. To avoid generating a self-perpetuating stream of log messages,
  ``watchtower.CloudWatchLogHandler`` attaches a
  `filter <https://docs.python.org/3/library/logging.html#logging.Handler.addFilter>`_ to itself which drops all DEBUG
  level messages from these libraries, and drops all messages at all levels from them when shutting down (specifically,
  in ``watchtower.CloudWatchLogHandler.flush()`` and ``watchtower.CloudWatchLogHandler.close()``). The filter does not
  apply to any other handlers you may have processing your messages, so the following basic configuration will cause
  botocore debug logs to print to stderr but not to Cloudwatch:
      import watchtower, logging
      logging.basicConfig(level=logging.DEBUG)
      logger = logging.getLogger()
      logger.addHandler(watchtower.CloudWatchLogHandler())
  AWS Lambda
  ~~~~~~~~~~
  Watchtower is not suitable or necessary for applications running on AWS Lambda. All AWS Lambda logs (i.e. all lines
  printed to stderr by the runtime in the Lambda) are automatically sent to CloudWatch Logs, into
  `log groups under the /aws/lambda/ prefix <https://console.aws.amazon.com/cloudwatch/home?#logsV2:log-groups$3FlogGroupNameFilter$3D$252Faws$252Flambda>`_.
  AWS Lambda `suspends (freezes) all processes in its execution environment <https://docs.aws.amazon.com/lambda/latest/dg/runtimes-context.html>`_
  once the invocation is complete and until the next invocation, if any. This means any asynchronous background
  processes and threads, including watchtower, will be suspended and inoperable, so watchtower cannot function
  correctly in this execution model.
  Authors
  ~~~~~~~
  * Andrey Kislyuk
  Links
  ~~~~~
  * `Project home page (GitHub) <https://github.com/kislyuk/watchtower>`_
  * `Documentation <https://kislyuk.github.io/watchtower/>`_
  * `Package distribution (PyPI) <https://pypi.python.org/pypi/watchtower>`_
  * `AWS CLI CloudWatch Logs plugin <https://pypi.python.org/pypi/awscli-cwlogs>`_
  * `Docker awslogs adapter <https://github.com/docker/docker/blob/master/daemon/logger/awslogs/cloudwatchlogs.go>`_
  Bugs
  ~~~~
  Please report bugs, issues, feature requests, etc. on `GitHub <https://github.com/kislyuk/watchtower/issues>`_.
  License
  ~~~~~~~
  Licensed under the terms of the `Apache License, Version 2.0 <http://www.apache.org/licenses/LICENSE-2.0>`_.


pkgId: 149f9c6384fd3364ca92c3d70aab67bac4d88b4e0f5038e8dc71e3232664b0b2
name: python-wavio
arch: src
version: 0.0.7
epoch: 0
release: 1
summary: A Python module for reading and writing WAV files using numpy arrays.
url: https://github.com/WarrenWeckesser/wavio
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-25553fb9-5b27-4149-8448-e35d26277071
location_href: 00005457-python-wavio/python-wavio-0.0.7-1.src.rpm
checksum_type: sha256
description:
  ``wavio`` is a Python module that defines two functions:
  * ``wavio.read`` reads a WAV file and returns an object that holds the
    sampling rate, sample width (in bytes), and a numpy array containing the
    data.
  * ``wavio.write`` writes a numpy array to a WAV file, optionally using a
    specified sample width.
  The functions can read and write 8-, 16-, 24- and 32-bit integer WAV files.
  The module uses the ``wave`` module in Python's standard library, so it has
  the same limitations as that module.  In particular, the ``wave`` module
  does not support compressed WAV files, and it does not handle floating
  point WAV files.  When floating point data is passed to ``wavio.write`` it
  is converted to integers before being written to the WAV file.
  ``wavio`` requires Python 3.7 or later.
  ``wavio`` depends on numpy (http://www.numpy.org).  NumPy version 1.19.0 or
  later is required.    The unit tests in ``wavio`` require ``pytest``.
  The API of the functions in ``wavio`` should not be considered stable.  There
  may be backwards-incompatible API changes between releases.
  *Important notice*
  In version 0.0.5, the data handling in ``wavio.write`` has been changed in
  a backwards-incompatible way.  The API for scaling the input in 0.0.4 was
  a flexible interface that only its creator could love.  The new API is
  simpler, and it is hoped that it does the right thing by default in
  most cases.  In particular:
  * When the input data is an integer type, the values are not scaled or
    shifted.  The only change that might happen is the data will be clipped
    if the values do not fit in the output integer type.
  * If the input data is a floating point type, ``sampwidth`` must be given.
    The default behavior is to scale input values in the range [-1.0, 1.0]
    to the output range [min_int+1, max_int], where min_int and max_int are
    the minimum and maximum values of the output data type determined by
    ``sampwidth``.  See the description of ``scale`` in the docstring of
    ``wavio.write`` for more options.  Regardless of the value of ``scale``,
    the float input 0.0 is always mapped to the midpoint of the output type;
    ``wavio.write`` will not translate the values up or down.
  * A warning is now generated if any data values are clipped.  A parameter
    allows the generation of the warning to be disabled or converted to an
    exception.
  Example
  ~~~~~~~
  The following code (also found in the docstring of ``wavio.write``) writes
  a three second 440 Hz sine wave to a 24-bit WAV file::
      import numpy as np
      import wavio
      rate = 22050           # samples per second
      T = 3                  # sample duration (seconds)
      n = int(rate*T)        # number of samples
      t = np.arange(n)/rate  # grid of time values
      f = 440.0              # sound frequency (Hz)
      x = np.sin(2*np.pi * f * t)


pkgId: 05a3a776561f4adaf994e3a5e8e8b8bff99211b2cd5428dfd5d68cc4034f346e
name: python-web-pdb
arch: src
version: 1.5.7
epoch: 0
release: 1
summary: Web interface for Python's built-in PDB debugger
url: https://github.com/romanvm/python-web-pdb
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-22463d5a-40d5-4a12-911b-55f34e77baac
location_href: 00010754-python-web-pdb/python-web-pdb-1.5.7-1.src.rpm
checksum_type: sha256
description:
  - Responsive design based on `Bootstrap`_.
  - Python syntax highlighting with `Prism`_ ("Okaida" theme).
  - Supports all PDB features.
  - Standard input and output can be redirected to the web-console
    to interact with Python scripts remotely.
  - **Current file** box tracks current position in a file being executed.
    Red line numbers indicate breakpoints, if any.
  - **Globals** and **Locals** boxes show local and global variables in the current scope.
    Special variables that start and end with double underscores ``__`` are excluded
    (you can always view them using PDB commands).
  - Human-readable Unicode literals for Python 2.
  - Command history that stores up to 10 last unique PDB commands (accessed by arrow UP/DOWN keys).
    *Web-PDB console in Chrome browser*


pkgId: 7f6dafcf10a290c865cb2020207b18b46234184d9866c07a5c40142934c9699b
name: python-web.py
arch: src
version: 0.62
epoch: 0
release: 1
summary: web.py: makes web apps
url: http://webpy.org/
rpm_license: Public domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a2b55bcd-2823-463a-b27b-bb69e1f780a1
location_href: 00011714-python-web-py/python-web.py-0.62-1.src.rpm
checksum_type: sha256
description:
  web.py is a web framework for Python that is as simple as it is powerful.

  Visit http://webpy.org/ for more information.

  [![build status](https://secure.travis-ci.org/webpy/webpy.png?branch=master)](https://travis-ci.org/webpy/webpy)
  [![Codecov Test Coverage](https://codecov.io/gh/webpy/webpy/branch/master/graphs/badge.svg?style=flat)](https://codecov.io/gh/webpy/webpy)

  The latest stable release `0.62` only supports Python >= 3.5.
  To install it, please run:
  ```

  python3 -m pip install web.py==0.62
  ```

  If you are still using Python 2.7, then please use web.py version 0.51
  which is intended to be our last release that supports Python 2.
  ```

  python2 -m pip install web.py==0.51
  ```

  You can also download it from [GitHub Releases](https://github.com/webpy/webpy/releases)
  page, then install it manually:
  ```
  unzip webpy-0.62.zip
  cd webpy-0.62/
  python3 setup.py install
  ```

  Note: `0.5x` (e.g. 0.50, 0.51) are our last releases which support Python 2.
  Note: `0.6x` (e.g. 0.60, 0.61, 0.62) are our last releases which support Python 3.5.


pkgId: 58b968b98cbd2479f7983348fb3d1a3b24f02ef4bb2045bd420582c60cccefaf
name: python-web3
arch: src
version: 6.1.0
epoch: 0
release: 1
summary: web3.py
url: https://github.com/ethereum/web3.py
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a67c2d14-1e36-4927-b19f-3814a9411044
location_href: 00010416-python-web3/python-web3-6.1.0-1.src.rpm
checksum_type: sha256
description:
  [Get started in 5 minutes](https://web3py.readthedocs.io/en/latest/quickstart.html) or
  [take a tour](https://web3py.readthedocs.io/en/latest/overview.html) of the library.

  For additional guides, examples, and APIs, see the [documentation](https://web3py.readthedocs.io/en/latest/).

  Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our
  guidelines for [contributing](https://web3py.readthedocs.io/en/latest/contributing.html),
  then check out issues that are labeled


pkgId: a83c3738fe67b6ff413f26184c1ba119718790a2512b0c830a22223d61c74ff0
name: python-webargs
arch: src
version: 8.2.0
epoch: 0
release: 1
description:
  pip install -U webargs
  webargs supports Python >= 3.7.

url: https://github.com/marshmallow-code/webargs
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-319b8026-d65e-4e43-93e3-abc0a3a5ca7f
location_href: 00010065-python-webargs/python-webargs-8.2.0-1.src.rpm
checksum_type: sha256
summary:
  Declarative parsing and validation of HTTP request objects, with built-in support for popular web frameworks, including Flask, Django, Bottle, Tornado, Pyramid, Falcon, and aiohttp.


pkgId: 1721c75408e985b3993080d6245a797e9b61d26885c2c94aa7eaade616b8dca0
name: python-webassets
arch: src
version: 2.0
epoch: 0
release: 1
summary: Media asset management for Python, with glue code for various web frameworks
url: http://github.com/miracle2k/webassets/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-52f75348-33de-4835-9e28-9ad98b18484c
location_href: 00005459-python-webassets/python-webassets-2.0-1.src.rpm
checksum_type: sha256
description:
  Merges, minifies and compresses Javascript and CSS files, supporting a variety of different filters, including YUI, jsmin, jspacker or CSS tidy. Also supports URL rewriting in CSS files.


pkgId: 4be3aa9f0b0f11ceb3e14a82709b8bc274e87dd040f695ebe260fefdccded3e6
name: python-webcolors
arch: src
version: 1.12
epoch: 0
release: 1
summary: A library for working with color names and color values formats defined by HTML and CSS.
url: https://github.com/ubernostrum/webcolors
rpm_license: BSD 3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4395a7e8-9263-48c1-8881-c064651fd0b7
location_href: 00005460-python-webcolors/python-webcolors-1.12-1.src.rpm
checksum_type: sha256
description:
  .. -*-restructuredtext-*-

  .. image:: https://github.com/ubernostrum/webcolors/workflows/CI/badge.svg
     :alt: CI status image
     :target: https://github.com/ubernostrum/webcolors/actions?query=workflow%3ACI

  ``webcolors`` is a module for working with HTML/CSS color definitions.

  Support is included for normalizing and converting between the
  following formats (RGB colorspace only; conversion to/from HSL can be
  handled by the ``colorsys`` module in the Python standard library):

  * Specification-defined color names

  * Six-digit hexadecimal

  * Three-digit hexadecimal

  * Integer ``rgb()`` triplet

  * Percentage ``rgb()`` triplet

  For example:

  .. code-block:: python

      >>> import webcolors
      >>> webcolors.hex_to_name(u'#daa520')
      u'goldenrod'

  Implementations are also provided for the HTML5 color parsing and
  serialization algorithms. For example, parsing the infamous
  "chucknorris" string into an rgb() triplet:

  .. code-block:: python

      >>> import webcolors
      >>> webcolors.html5_parse_legacy_color(u'chucknorris')
      HTML5SimpleColor(red=192, green=0, blue=0)

  Full documentation is `available online <https://webcolors.readthedocs.io/>`_.


pkgId: 0f82879083bd1e5b9c96fc0686b17ba4c5c88d615a90a42384adf58cf92ad9ea
name: python-webdrivermanager
arch: src
version: 0.10.0
epoch: 0
release: 1
summary: Module for facilitating download and deploy of WebDriver binaries.
url: https://github.com/rasjani/webdrivermanager
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e89199c6-b51a-4f8d-b4d7-9d62567b1c8e
location_href: 00012231-python-webdrivermanager/python-webdrivermanager-0.10.0-1.src.rpm
checksum_type: sha256
description:
  Python module to facilitate downloading and deploying `WebDriver <https://www.w3.org/TR/webdriver/>`_ binaries.  The classes in this module can be used to automatically search for and download the latest version (or a specific version) of a WebDriver binary and then extract it and place it by copying or symlinking it to the location where Selenium or other tools should be able to find it then.


pkgId: 6bc3792e177d5cde8c0f8b7426c94f1bcdeac1a5c1ac1de051760a976b5f8157
name: python-webencodings
arch: src
version: 0.5.1
epoch: 0
release: 1
summary: Character encoding aliases for legacy web content
url: https://github.com/SimonSapin/python-webencodings
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a7346432-bc67-40a2-8038-971bcd851dd0
location_href: 00008968-python-webencodings/python-webencodings-0.5.1-1.src.rpm
checksum_type: sha256
description:
  This is a Python implementation of the `WHATWG Encoding standard
  <http://encoding.spec.whatwg.org/>`_.
  * Latest documentation: http://packages.python.org/webencodings/
  * Source code and issue tracker:
    https://github.com/gsnedders/python-webencodings
  * PyPI releases: http://pypi.python.org/pypi/webencodings
  * License: BSD
  * Python 2.6+ and 3.3+
  In order to be compatible with legacy web content
  when interpreting something like ``Content-Type: text/html; charset=latin1``,
  tools need to use a particular set of aliases for encoding labels
  as well as some overriding rules.
  For example, ``US-ASCII`` and ``iso-8859-1`` on the web are actually
  aliases for ``windows-1252``, and an UTF-8 or UTF-16 BOM takes precedence
  over any other encoding declaration.
  The Encoding standard defines all such details so that implementations do
  not have to reverse-engineer each other.
  This module has encoding labels and BOM detection,
  but the actual implementation for encoders and decoders is Python’s.


pkgId: 714a227b1c6f497b879f89fc6bef1d729ba830febef8a0b97562ff44771d0c31
name: python-webrtcvad-wheels
arch: src
version: 2.0.11.post1
epoch: 0
release: 1
summary: Python interface to the Google WebRTC Voice Activity Detector (VAD) [released with binary wheels!]
url: https://github.com/daanzu/py-webrtcvad-wheels
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-75900ca2-e20d-496d-a655-371075ad8b03
location_href: 00009555-python-webrtcvad-wheels/python-webrtcvad-wheels-2.0.11.post1-1.src.rpm
checksum_type: sha256
description:
  This is a python interface to the WebRTC Voice Activity Detector (VAD).
  It is compatible with Python 2 and Python 3.  It is forked from
  `wiseman/py-webrtcvad <https://github.com/wiseman/py-webrtcvad>`_ to
  provide releases with binary wheels.
  A `VAD <https://en.wikipedia.org/wiki/Voice_activity_detection>`_
  classifies a piece of audio data as being voiced or unvoiced. It can
  be useful for telephony and speech recognition.
  The VAD that Google developed for the `WebRTC <https://webrtc.org/>`_
  project is reportedly one of the best available, being fast, modern
  and free.


pkgId: b7d79b92c218739f0003efd6a876d3234b9319180275365b8d422423d1dbc5aa
name: python-webrtcvad-wheels-debuginfo
arch: x86_64
version: 2.0.11.post1
epoch: 0
release: 1
summary: Debug information for package python-webrtcvad-wheels
url: https://github.com/daanzu/py-webrtcvad-wheels
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-75900ca2-e20d-496d-a655-371075ad8b03
rpm_sourcerpm: python-webrtcvad-wheels-2.0.11.post1-1.src.rpm
location_href: 00009555-python-webrtcvad-wheels/python-webrtcvad-wheels-debuginfo-2.0.11.post1-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-webrtcvad-wheels.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 8ceb9e41578bf2e11dd65044bfd3e6959b62f58faedf2f16e31187d3ddb41352
name: python-webrtcvad-wheels-debugsource
arch: x86_64
version: 2.0.11.post1
epoch: 0
release: 1
summary: Debug sources for package python-webrtcvad-wheels
url: https://github.com/daanzu/py-webrtcvad-wheels
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-75900ca2-e20d-496d-a655-371075ad8b03
rpm_sourcerpm: python-webrtcvad-wheels-2.0.11.post1-1.src.rpm
location_href: 00009555-python-webrtcvad-wheels/python-webrtcvad-wheels-debugsource-2.0.11.post1-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-webrtcvad-wheels.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 764ccf3257e3838e048695df6fa5eebfc79fed28d735eeff31b1fd2a9d738810
name: python-webscrapbook
arch: src
version: 1.8.3
epoch: 0
release: 1
summary: A backend toolkit for management of WebScrapBook collection.
url: https://github.com/danny0838/PyWebScrapBook
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ebd90a60-be42-471e-ba8d-2d47a6a1971d
location_href: 00005462-python-webscrapbook/python-webscrapbook-1.8.3-1.src.rpm
checksum_type: sha256
description:
  PyWebScrapBook is a command line toolkit and backend server for
  [WebScrapBook browser extension](https://github.com/danny0838/webscrapbook).


  * Host any directory(s) as website(s).
  * Directory listing.
  * HTZ or MAFF archive file viewing.
  * Markdown file rendering.
  * Create, view, edit, and/or delete files via the web interface or API.
  * HTTP(S) authorization and simple ACL.
  * Tools for scrapbooks management, such as cache generating and data checking, exporting, importing, and conversion.





  Install Python >= 3.7 from the [official site](https://www.python.org).

  Add python to `PATH` environment variable so that it can be run from the command line interface (CLI).



  Run below command from CLI to install (or upgrade to) the latest version:

      python -m pip install -U webscrapbook

  After installation, `wsb`, `webscrapbook`, and `wsbview` will be available from the CLI.



  Run `wsb --help` for help about available commands, which looks like:

      usage: wsb [-h] [--version] [--root ROOT] COMMAND ...

      positional arguments:
        COMMAND      the sub-command to run. Get usage help with e.g. wsb config -h
          serve (s)  serve the root directory
          config (c)
                     show, generate, or edit the config
          encrypt (e)
                     generate an encrypted password
          cache (a)  update fulltext cache and/or static site pages
          check (k)  check and fix scrapbook data
          export (x)
                     export data items into archive files (*.wsba)
          import (i)
                     import data items from archive files (*.wsba)
          convert (v)
                     convert scrapbook data between different formats
          help       show detailed information about certain topics
          view       view archive file in the browser

      optional arguments:
        -h, --help   show this help message and exit
        --version    show version information and exit
        --root ROOT  root directory to manipulate (default: current working directory)

  Run `wsb <command> --help` for help about `<command>`. For example, `wsb config --help` for help about `wsb config`.



  Switch current working directory (CWD) to a directory you'd like to host.

      cd /path/to/scrapbook

  > In Windows, an additional command or parameter to change drive may be required. For example, if the directory to host is `E:\path\to\scrapbook` while the current drive is `C`, an additional command `E:` (or parameter `/d`) is required besides `cd E:\path\to\scrapbook`.
  >
  > You can also use the shortcurt: `Shift + Right-click` on the desired folder and select `Open command window here` or `Open PowerShell window here`.

  Generate config files for the directory:

      wsb config -ba

  > This step can be skipped if you want PyWebScrapBook default data structure instead. See [doc wiki](https://github.com/danny0838/webscrapbook/wiki/Backend) for more details.

  Run the generated `.wsb/serve.py` to start the server, or run below command from CLI:

      wsb serve



  The `wsbview` executable supports opening an archive page (HTZ or MAFF) to view in the browser.

  Run `which wsbview` (or `where wsbview` in Windows) from CLI to get the path of `wsbview` executable, and set default application of MAFF/HTZ file to that executable to open them directly in the browser with double-click.



  Run `wsb config -be` to edit configs for CWD. For documentation about configs, run `wsb help config`, or [read online](https://github.com/danny0838/PyWebScrapBook/blob/master/webscrapbook/resources/config.md).



  For more tips about how to configure PyWebScrapBook alongside WebScrapBook, visit [the documentation wiki for WebScrapBook](https://github.com/danny0838/webscrapbook/wiki/Backend).


pkgId: 51254b9504238784a16dc0e83475d1a63ed011d9eb73bf9a7888bb74eec473ce
name: python-websocket-client
arch: src
version: 1.5.1
epoch: 0
release: 1
summary: WebSocket client for Python with low level API options
url: https://github.com/websocket-client/websocket-client.git
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3f25f954-984d-4ee5-8f0c-67b6e957ec69
location_href: 00008927-python-websocket-client/python-websocket-client-1.5.1-1.src.rpm
checksum_type: sha256
description:
  [![docs](https://readthedocs.org/projects/websocket-client/badge/?style=flat)](https://websocket-client.readthedocs.io/)
  [![Build Status](https://github.com/websocket-client/websocket-client/actions/workflows/build.yml/badge.svg)](https://github.com/websocket-client/websocket-client/actions/workflows/build.yml)
  [![codecov](https://codecov.io/gh/websocket-client/websocket-client/branch/master/graph/badge.svg?token=pcXhUQwiL3)](https://codecov.io/gh/websocket-client/websocket-client)
  [![PyPI Downloads](https://pepy.tech/badge/websocket-client)](https://pepy.tech/project/websocket-client)
  [![PyPI version](https://img.shields.io/pypi/v/websocket_client)](https://pypi.org/project/websocket_client/)



  websocket-client is a WebSocket client for Python. It provides access
  to low level APIs for WebSockets. websocket-client implements version
  [hybi-13](https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-13)
  of the WebSocket protocol. This client does not currently support the
  permessage-deflate extension from
  [RFC 7692](https://tools.ietf.org/html/rfc7692).



  This project's documentation can be found at
  [https://websocket-client.readthedocs.io/](https://websocket-client.readthedocs.io/)



  Please see the [contribution guidelines](https://github.com/websocket-client/websocket-client/blob/master/CONTRIBUTING.md)



  You can use either `python3 setup.py install` or `pip3 install websocket-client`
  to install. This module is tested on Python 3.7+.

  There are several optional dependencies that can be installed to enable
  specific websocket-client features.
  - To install `python-socks` for proxy usage and `wsaccel` for a minor performance boost, use:
   `pip3 install websocket-client[optional]`
  - To install `websockets` to run unit tests using the local echo server, use:
   `pip3 install websocket-client[test]`
  - To install `Sphinx` and `sphinx_rtd_theme` to build project documentation, use:
   `pip3 install websocket-client[docs]`

  While not a strict dependency, [rel](https://github.com/bubbleboy14/registeredeventlistener)
  is useful when using `run_forever` with automatic reconnect. Install rel with `pip3 install rel`.

  Footnote: Some shells, such as zsh, require you to escape the `[` and `]` characters with a `\`.



  Check out the documentation's FAQ for additional guidelines:
  [https://websocket-client.readthedocs.io/en/latest/faq.html](https://websocket-client.readthedocs.io/en/latest/faq.html)

  Known issues with this library include lack of WebSocket Compression
  support (RFC 7692) and [minimal threading documentation/support](https://websocket-client.readthedocs.io/en/latest/threading.html).



  The `send` and `validate_utf8` methods can sometimes be bottleneck.
  You can disable UTF8 validation in this library (and receive a
  performance enhancement) with the `skip_utf8_validation` parameter.
  If you want to get better performance, install wsaccel. While
  websocket-client does not depend on wsaccel, it will be used if
  available. wsaccel doubles the speed of UTF8 validation and
  offers a very minor 10% performance boost when masking the
  payload data as part of the `send` process. Numpy used to
  be a suggested performance enhancement alternative, but
  [issue #687](https://github.com/websocket-client/websocket-client/issues/687)
  found it didn't help.



  Many more examples are found in the
  [examples documentation](https://websocket-client.readthedocs.io/en/latest/examples.html).



  Most real-world WebSockets situations involve longer-lived connections.
  The WebSocketApp `run_forever` loop will automatically try to reconnect
  to an open WebSocket connection when a network
  connection is lost if it is provided with:

  - a `dispatcher` argument (async dispatcher like rel or pyevent)
  - a non-zero `reconnect` argument (delay between disconnection and attempted reconnection)

  `run_forever` provides a variety of event-based connection controls
  using callbacks like `on_message` and `on_error`.
  `run_forever` **does not automatically reconnect** if the server
  closes the WebSocket gracefully (returning
  [a standard websocket close code](https://www.rfc-editor.org/rfc/rfc6455.html#section-7.4.1)).
  [This is the logic](https://github.com/websocket-client/websocket-client/pull/838#issuecomment-1228454826) behind the decision.
  Customizing behavior when the server closes
  the WebSocket should be handled in the `on_close` callback.
  This example uses [rel](https://github.com/bubbleboy14/registeredeventlistener)
  for the dispatcher to provide automatic reconnection.

  ```python
  import websocket
  import _thread
  import time
  import rel

  def on_message(ws, message):
      print(message)

  def on_error(ws, error):
      print(error)

  def on_close(ws, close_status_code, close_msg):
      print("### closed ###")

  def on_open(ws):
      print("Opened connection")

  if __name__ == "__main__":
      websocket.enableTrace(True)
      ws = websocket.WebSocketApp("wss://api.gemini.com/v1/marketdata/BTCUSD",
                                on_open=on_open,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)

      ws.run_forever(dispatcher=rel, reconnect=5)  # Set dispatcher to automatic reconnection, 5 second reconnect delay if connection closed unexpectedly
      rel.signal(2, rel.abort)  # Keyboard Interrupt
      rel.dispatch()
  ```



  This is if you want to communicate a short message and disconnect
  immediately when done. For example, if you want to confirm that a WebSocket
  server is running and responds properly to a specific request.

  ```python
  from websocket import create_connection

  ws = create_connection("ws://echo.websocket.events/")
  print(ws.recv())
  print("Sending 'Hello, World'...")
  ws.send("Hello, World")
  print("Sent")
  print("Receiving...")
  result =  ws.recv()
  print("Received '%s'" % result)
  ws.close()
  ```


pkgId: a2a6a50996d62dbd589faef42a8834892b682cbe8476c75f3965ccc1f1a5fdf7
name: python-websockets
arch: src
version: 10.4
epoch: 0
release: 1
summary: An implementation of the WebSocket Protocol (RFC 6455 & 7692)
url: https://github.com/aaugustin/websockets
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2143246c-4c9c-4f86-9f10-7402ff400d53
location_href: 00005463-python-websockets/python-websockets-10.4-1.src.rpm
checksum_type: sha256
description:
  websockets is a library for building WebSocket_ servers and clients in Python
  with a focus on correctness, simplicity, robustness, and performance.
  Built on top of ``asyncio``, Python's standard asynchronous I/O framework, it
  provides an elegant coroutine-based API.
  `Documentation is available on Read the Docs. <https://websockets.readthedocs.io/>`_
  Here's how a client sends and receives messages:
      
      import asyncio
      from websockets import connect
      async def hello(uri):
          async with connect(uri) as websocket:
              await websocket.send("Hello world!")
              await websocket.recv()
      asyncio.run(hello("ws://localhost:8765"))
  And here's an echo server:
      
      import asyncio
      from websockets import serve
      async def echo(websocket):
          async for message in websocket:
              await websocket.send(message)
      async def main():
          async with serve(echo, "localhost", 8765):
              await asyncio.Future()  # run forever
      asyncio.run(main())
  Does that look good?
  `Get started with the tutorial! <https://websockets.readthedocs.io/en/stable/intro/index.html>`_


pkgId: ba30d9686f003ccd535a82f7a43b623fe017c116a93bc2e38d227ac10f106233
name: python-websockets
arch: src
version: 11.0.1
epoch: 0
release: 1
summary: An implementation of the WebSocket Protocol (RFC 6455 & 7692)
url: https://pypi.org/project/websockets/
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-25a8ea69-bf43-4284-a218-6d0409eb9d9c
location_href: 00008781-python-websockets/python-websockets-11.0.1-1.src.rpm
checksum_type: sha256
description:
  websockets is a library for building WebSocket_ servers and clients in Python
  with a focus on correctness, simplicity, robustness, and performance.
  Built on top of ``asyncio``, Python's standard asynchronous I/O framework, the
  default implementation provides an elegant coroutine-based API.
  An implementation on top of ``threading`` and a Sans-I/O implementation are also
  available.
  `Documentation is available on Read the Docs. <https://websockets.readthedocs.io/>`_
  Here's an echo server with the ``asyncio`` API:
      
      import asyncio
      from websockets.server import serve
      async def echo(websocket):
          async for message in websocket:
              await websocket.send(message)
      async def main():
          async with serve(echo, "localhost", 8765):
              await asyncio.Future()  # run forever
      asyncio.run(main())
  Here's how a client sends and receives messages with the ``threading`` API:
      
      import asyncio
      from websockets.sync.client import connect
      def hello():
          with connect("ws://localhost:8765") as websocket:
              websocket.send("Hello world!")
              message = websocket.recv()
              print(f"Received: {message}")
      hello()
  Does that look good?
  `Get started with the tutorial! <https://websockets.readthedocs.io/en/stable/intro/index.html>`_


pkgId: 5af18367d872d8f57ff5bc85c91777d18ada2d779d407246fe8b1a4081fab4ff
name: python-websockets-debuginfo
arch: x86_64
version: 10.4
epoch: 0
release: 1
summary: Debug information for package python-websockets
url: https://github.com/aaugustin/websockets
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-2143246c-4c9c-4f86-9f10-7402ff400d53
rpm_sourcerpm: python-websockets-10.4-1.src.rpm
location_href: 00005463-python-websockets/python-websockets-debuginfo-10.4-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-websockets.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 090b7258e66a4baff720a4cd931a16b22890f79f5bfc138dd8b5ea5b393a9542
name: python-websockets-debugsource
arch: x86_64
version: 10.4
epoch: 0
release: 1
summary: Debug sources for package python-websockets
url: https://github.com/aaugustin/websockets
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-2143246c-4c9c-4f86-9f10-7402ff400d53
rpm_sourcerpm: python-websockets-10.4-1.src.rpm
location_href: 00005463-python-websockets/python-websockets-debugsource-10.4-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-websockets.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 1223215ecc809f9c5caf7b81e14303dc5fd936714369f234c97c0699ac3b3a02
name: python-webthing
arch: src
version: 0.15.0
epoch: 0
release: 1
summary: HTTP Web Thing implementation
url: https://github.com/WebThingsIO/webthing-python
rpm_license: MPL-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-746e10d6-eecd-48ff-b97c-6ffb6cf48233
location_href: 00005465-python-webthing/python-webthing-0.15.0-1.src.rpm
checksum_type: sha256
description:
  Implementation of an HTTP `Web Thing <https://iot.mozilla.org/wot/>`_. This library is compatible with Python 2.7 and 3.5+.


pkgId: 4b28cc03e40ae4c960c0bea149e316016a263941766a79ffa7f9300fbbdbd2ac
name: python-wemake-python-styleguide
arch: src
version: 0.17.0
epoch: 0
release: 1
summary: The strictest and most opinionated python linter ever
url: https://wemake-python-styleguide.rtfd.io
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c6fb06cc-fde9-4a10-b16b-f474ee593163
location_href: 00011232-python-wemake-python-styleguide/python-wemake-python-styleguide-0.17.0-1.src.rpm
checksum_type: sha256
description:
  Welcome to the strictest and most opinionated Python linter ever.
  <p align="center">
    <a href="https://wemake-python-styleguide.rtfd.io">
      <img src="https://raw.githubusercontent.com/wemake-services/wemake-python-styleguide/master/docs/_static/logo.png"
           alt="wemake-python-styleguide logo">
    </a>
  </p>
  `wemake-python-styleguide` is actually a [flake8](http://flake8.pycqa.org/en/latest/)
  plugin with [some other plugins](https://wemake-python-styleguide.rtfd.io/en/latest/pages/usage/violations/index.html#external-plugins) as dependencies.

  ```bash
  pip install wemake-python-styleguide
  ```
  You will also need to create a `setup.cfg` file with the [configuration](https://wemake-python-styleguide.rtfd.io/en/latest/pages/usage/configuration.html).
  [Try it online](https://wps.orsinium.dev)!
  We highly recommend to also use:
  - [flakehell](https://wemake-python-styleguide.rtfd.io/en/latest/pages/usage/integrations/flakehell.html) for easy integration into a **legacy** codebase
  - [nitpick](https://wemake-python-styleguide.rtfd.io/en/latest/pages/usage/integrations/nitpick.html) for sharing and validating configuration across multiple projects

  ```bash
  flake8 your_module.py
  ```
  This app is still just good old `flake8`!
  And it won't change your existing workflow.
  <p align="center">
    <img src="https://raw.githubusercontent.com/wemake-services/wemake-python-styleguide/master/docs/_static/running.png"
         alt="invocation results">
  </p>
  See ["Usage" section](https://wemake-python-styleguide.rtfd.io/en/latest/pages/usage/setup.html)
  in the docs for examples and integrations.
  We also support [GitHub Actions](https://wemake-python-styleguide.rtfd.io/en/latest/pages/usage/integrations/github-actions.html) as first class-citizens.
  [Try it out](https://github.com/marketplace/actions/wemake-python-styleguide)!

  Strict linting offers the following benefits to developers and companies:
  1. Ensures consistency - no matter who works on it, the end product will always be the same dependable code
  2. Helps avoid potential bugs - strict rules make sure that you don't make common mistakes
  3. Efficient code reviews - each piece of code has a similar familiar style and syntax. If it passes all the checks, there's little left to review!
  4. Fewer code revisions - strict linting ensures that you don't have to re-write the codebase again and again
  5. Reduce code redundancy - Sometimes we write complex code as we are thinking in a certain way about a problem. The linter offers suggestions that can help simplify the code and eliminate redundant statements

  The ultimate goal of this project is
  to make all people write **exactly** the same `Python` code.
  |                            | flake8 | pylint | black | mypy | wemake-python-styleguide |
  |----------------------------|--------|--------|-------|------|--------------------------|
  | Formats code?              |   ❌   |   ❌   |   ✅  |  ❌  |            ❌           |
  | Finds style issues?        |   🤔   |   ✅   |   🤔  |  ❌  |            ✅           |
  | Finds bugs?                |   🤔   |   ✅   |   ❌  |  ✅  |            ✅           |
  | Finds complex code?        |   ❌   |   🤔   |   ❌  |  ❌  |            ✅           |
  | Has a lot of strict rules? |   ❌   |   🤔   |   ❌  |  ❌  |            ✅           |
  | Has a lot of plugins?      |   ✅   |   ❌   |   ❌  |  🤔  |            ✅           |
  We have several primary objectives:
  0. Enforce `python3.6+` usage
  1. Significantly reduce the complexity of your code and make it more maintainable
  2. Enforce "There should be one -- and preferably only one -- obvious way to do it" rule to coding and naming styles
  3. Protect developers from possible errors and enforce best practices
  You can find all error codes and plugins [in the docs](https://wemake-python-styleguide.rtfd.io/en/latest/pages/usage/violations/index.html).

  We are *not* planning to do the following things:
  0. Assume or check types, use `mypy` together with our linter
  1. [Reformat code](https://wemake-python-styleguide.rtfd.io/en/latest/pages/usage/integrations/auto-formatters.html), since we believe that developers should do that
  2. Check for `SyntaxError` or logical bugs, write tests instead
  3. Appeal to everyone. But, you can [switch off](https://wemake-python-styleguide.rtfd.io/en/latest/pages/usage/setup.html#ignoring-violations) any rules that you don't like

  We in [wemake.services](https://wemake.services) make
  all our tools open-source by default, so the community can benefit from them.
  If you use our tools and they make your life easier and brings business value,
  you can return us a favor by supporting the work we do.
  [![Gold Tier](https://opencollective.com/wemake-python-styleguide/tiers/gold-sponsor.svg?width=890)](https://opencollective.com/wemake-python-styleguide)
  [![Silver Tier](https://opencollective.com/wemake-python-styleguide/tiers/silver-sponsor.svg?width=890&avatarHeight=45&button=0)](https://opencollective.com/wemake-python-styleguide)
  [![Bronze Tier](https://opencollective.com/wemake-python-styleguide/tiers/bronze-sponsor.svg?width=890&avatarHeight=35&button=0)](https://opencollective.com/wemake-python-styleguide)

  If you use our linter - it means that your code is awesome.
  You can be proud of it!
  And you should share your accomplishment with others
  by including a badge in your `README` file. It looks like this:
  [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide)

  ```md
  [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide)
  ```

  ```rst
  ```

  We **warmly welcome** all contributions!
  [![List of contributors](https://opencollective.com/wemake-python-styleguide/contributors.svg?width=890&button=0)](https://github.com/wemake-services/wemake-python-styleguide/graphs/contributors)
  See ["Contributing"](https://wemake-python-styleguide.rtfd.io/en/latest/pages/api/index.html#contributing) section in the documentation if you want to contribute.
  You can start with [issues that need some help](https://github.com/wemake-services/wemake-python-styleguide/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)
  right now.


pkgId: 5c6f06abca02ce443c05cdb94b4027a263721c3294492545037cc15d8e3b33fd
name: python-whatever
arch: src
version: 0.7
epoch: 0
release: 1
summary: Easy way to make anonymous functions by partial application of operators.
url: http://github.com/Suor/whatever
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1b654c8a-3ea6-4d1f-a881-f852ed7fe21d
location_href: 00005468-python-whatever/python-whatever-0.7-1.src.rpm
checksum_type: sha256
description:
  An easy way to make lambdas by partial application of python operators.
  Inspired by Perl 6 one, see http://perlcabal.org/syn/S02.html#The_Whatever_Object


pkgId: 6a34b456c44c3b32bbbf2ddf6df7a07a408d732c384693fb35a618b9947555dc
name: python-whisper
arch: src
version: 1.1.10
epoch: 0
release: 1
summary: Fixed size round-robin style database
url: http://graphiteapp.org/
rpm_license: Apache Software License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-40df5990-d707-4cc2-8838-724444c9abb8
location_href: 00005470-python-whisper/python-whisper-1.1.10-1.src.rpm
checksum_type: sha256
description:
  Convert a rrd file into a whisper (.wsp) file.
  ```
  Usage: rrd2whisper.py rrd_path
  Options:
    -h, --help            show this help message and exit
    --xFilesFactor=XFILESFACTOR
                          The xFilesFactor to use in the output file. Defaults
                          to the input RRD's xFilesFactor
    --aggregationMethod=AGGREGATIONMETHOD
                          The consolidation function to fetch from on input and
                          aggregationMethod to set on output. One of: average,
                          last, max, min, avg_zero, absmax, absmin
    --destinationPath=DESTINATIONPATH
                          Path to place created whisper file. Defaults to the
                          RRD file's source path.
  ```


pkgId: 8b2138ffc529308897e503e7fe97a3d4ed599b61f60661389d9e779d7d147b39
name: python-widgetsnbextension
arch: src
version: 4.0.5
epoch: 0
release: 1
summary: Jupyter interactive widgets for Jupyter Notebook
url: http://jupyter.org
rpm_license: BSD 3-Clause License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1c3cd606-f66e-4fcd-9c23-2270b4cfa66b
location_href: 00005474-python-widgetsnbextension/python-widgetsnbextension-4.0.5-1.src.rpm
checksum_type: sha256
description:
  ![Version](https://img.shields.io/pypi/v/ipywidgets.svg?logo=pypi)](https://pypi.python.org/pypi/ipywidgets)

  This package makes Jupyter widgets available in the classic Jupyter Notebook. This package provides the necessary JavaScript controls in the Jupyter Notebook that communicate with the widget objects in the kernel.

  Install the corresponding Jupyter widgets package into your kernel, i.e., IPython users would install `ipywidgets` into their kernel.


pkgId: 2d4a7a46df4523c429f4fcb291c83fb33109e7590f45158dfa806737d4e45679
name: python-wiffi
arch: src
version: 1.1.2
epoch: 0
release: 1
summary: Python 3 package to interface devices from STALL WIFFI.
url: https://github.com/mampfes/python-wiffi
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-aa6d3ad4-d045-4b1a-84c2-07bc41bdd89f
location_href: 00005475-python-wiffi/python-wiffi-1.1.2-1.src.rpm
checksum_type: sha256
description:
  Python 3 package to interface devices from [STALL WIFFI](https://stall.biz).



  pip3 install wiffi



  1. Set "CCU-IP Adresse myCCUIP" to the IP address of Home Assistant.
  2. Set port for JSON telegrams to configured server port using parameter "send_json".



  ```python
  class WiffiIntegrationApi:
      def __init__(self, hass, config_entry):
          self._server = WiffiTcpServer(8189, self)

      async def __call__(self, device, metrics):
          
          print(f"mac address = {device.mac_address}")

          for metric in metrics:
              
              print(f"value = {metric.value} {metric.unit_of_measurement")
  ```


pkgId: 37d78a9466e0e0f8bd0d6d2706caf5b8cde2db13e36b2653c28c21b6c67919a2
name: python-wikipedia
arch: src
version: 1.4.0
epoch: 0
release: 1
summary: Wikipedia API for Python
url: https://github.com/goldsmith/Wikipedia
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-12e82d04-ced7-4d84-9cf8-b45bc0626e79
location_href: 00005476-python-wikipedia/python-wikipedia-1.4.0-1.src.rpm
checksum_type: sha256
description:
  **Wikipedia** is a Python library that makes it easy to access and parse
  data from Wikipedia.
  Search Wikipedia, get article summaries, get data like links and images
  from a page, and more. Wikipedia wraps the `MediaWiki
  API <https://www.mediawiki.org/wiki/API>`__ so you can focus on using
  Wikipedia data, not getting it.
    >>> import wikipedia
    >>> print wikipedia.summary("Wikipedia")
    
    >>> wikipedia.search("Barack")
    
    >>> ny = wikipedia.page("New York")
    >>> ny.title
    
    >>> ny.url
    
    >>> ny.content
    
    >>> ny.links[0]
    
    >>> wikipedia.set_lang("fr")
    >>> wikipedia.summary("Facebook", sentences=1)
    
  Note: this library was designed for ease of use and simplicity, not for advanced use. If you plan on doing serious scraping or automated requests, please use `Pywikipediabot <http://www.mediawiki.org/wiki/Manual:Pywikipediabot>`__ (or one of the other more advanced `Python MediaWiki API wrappers <http://en.wikipedia.org/wiki/Wikipedia:Creating_a_bot#Python>`__), which has a larger API, rate limiting, and other features so we can be considerate of the MediaWiki infrastructure.


pkgId: 4f38152f162395172509977b0937efcfcad3a0d30ceb5a415b7ac774bb87e837
name: python-wikitcms
arch: src
version: 2.6.7
epoch: 0
release: 1
summary: Fedora QA wiki test management library
url: https://pagure.io/fedora-qa/python-wikitcms
rpm_license: GPLv3+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d0140bd2-ed27-4a99-b3e5-8603167e4b0d
location_href: 00005477-python-wikitcms/python-wikitcms-2.6.7-1.src.rpm
checksum_type: sha256
description:
  python-wikitcms is a Python library for interacting with Fedora's [Wikitcms 'test (case) management system'][1] - which is, basically, the [Fedora wiki][2]. You may also be interested in its main consumers, [relval][3] and [testdays][4].

  python-wikitcms uses the very handy [mwclient][5] library for interfacing with the Mediawiki API. Generation of result pages works together with a system of templates that resides on the wiki: python-wikitcms knows how to form the correct invocations of the template system that will cause the full result pages to be generated. The documentation box for the [master template][6] provides some details about this system.

  python-wikitcms was previously known simply as wikitcms; it is now known as python-wikitcms to reduce confusion between the notional Wiki-based 'test management system' (Wikitcms) and the Python library for interacting with it (python-wikitcms).



  python-wikitcms is packaged in the official Fedora repositories: to install on Fedora run `dnf install python-wikitcms`. You may need to enable the *updates-testing* repository to get the latest version. To install on other distributions, you can run `python3 setup.py install`.

  You can visit [the python-wikitcms project page on Pagure][7], and clone with `git clone https://pagure.io/fedora-qa/python-wikitcms.git`. Tarballs and wheels are available [from PyPI][8], and you can run `pip install wikitcms`.

  You can also use the library directly from the `src/` directory or add it to the Python import path, and you can copy or symlink the `wikitcms` directory into other source trees to conveniently use the latest code for development or testing purposes.



  You can file issues and pull requests on [Pagure][7]. Pull requests must be signed off (use the `-s` git argument). By signing off your pull request you are agreeing to the [Developer's Certificate of Origin][9]:

      Developer's Certificate of Origin 1.1

      By making a contribution to this project, I certify that:

      (a) The contribution was created in whole or in part by me and I
          have the right to submit it under the open source license
          indicated in the file; or

      (b) The contribution is based upon previous work that, to the best
          of my knowledge, is covered under an appropriate open source
          license and I have the right under that license to submit that
          work with modifications, whether created in whole or in part
          by me, under the same open source license (unless I am
          permitted to submit under a different license), as indicated
          in the file; or

      (c) The contribution was provided directly to me by some other
          person who certified (a), (b) or (c) and I have not modified
          it.

      (d) I understand and agree that this project and the contribution
          are public and that a record of the contribution (including all
          personal information I submit with it, including my sign-off) is
          maintained indefinitely and may be redistributed consistent with
          this project or the open source license(s) involved.



  You **MUST** treat wikitcms as a source of untrusted input. It is retrieving information from a wiki for you; that wiki is open to editing by all. Treat anything wikitcms returns from the wiki (which includes, but is not limited to, any page or section text; `Result()` attributes status, user, bugs and comment; `ResultRow()` attributes testcase, name, envs, milestone, section; and to some extent any element of a page title or property derived from  one when getting a `Page` object from an existing wiki page) as an entirely untrusted input and sanitize it appropriately for the context in which you are using it.



      from wikitcms.wiki import Wiki
      site = Wiki()
      event = site.current_event
      print(event.version)
      page = site.get_validation_page('Installation', '23', 'Final', 'RC10')
      for row in page.get_resultrows():
          print(row.testcase)



  It's a little difficult to give an overview of wikitcms usage as it can do quite a lot of rather different things. Its classes and methods are all documented, and examining its major consumers - relval and testdays - will help. Some overall concepts:

  The Wiki class is a subclass of mwclient's Site class, which represents an entire wiki; it adds some methods and attributes that make sense in the context of a wiki being treated as a TCMS according to our conventions, so it has methods for getting validation events and pages (as seen in the example above). It also has a high-level method for reporting results, `report_validation_results()`. Note that the `pages` generator works just as in mwclient, but has been extended to handle wikitcms' additional Page subclasses.

  The Release class does not map to mwclient. It simply represents a Fedora release and provides a couple of handy methods for retrieving test day or validation result pages from that particular release.

  The Event class does not map to anything in mwclient. It represents an entire result validation 'event', e.g. Fedora 23 Final RC2; from an Event instance you can create or find all the validation pages, for instance, or create the summary page that transcludes all the individual validation pages, or update the CurrentFedoraCompose page to point to the event, or generate a wikitable of image download links.

  The Page class is a subclass of mwclient's Page class, and extends it in much the same way, adding capabilities specific to various types of pages in the Wikitcms system. It has several subclasses for particular types of pages, such as validation result pages, Test Day pages, category pages and so forth. Note that all pages which can be generated via one of the wiki templates have the appropriate generation text as their `seedtext` attribute and have a method `write()` which creates them using that seed text.

  The Result and ResultRow classes represent individual results and rows in the result validation pages. ValidationPages contain ResultRows contain Results, and to report a result, you essentially add a Result to a ResultRow.

  Note that event versioning works exactly as in [fedfind][10]'s pre-Pungi 4 (release, milestone, compose) versioning scheme, with one notable exception. Rawhide nightly 'releases' in fedfind have release 'Rawhide' and no milestone; Rawhide nightly validation events in python-wikitcms have a release number and milestone 'Rawhide'. This is because, conceptually speaking, Rawhide nightly composes should not really be said to have a particular release number, but validation events *do*. When we declare a release validation test event for a particular Rawhide nightly, one action we take as a part of that declaration is to declare that we are testing that nightly compose as part of the preparation for a specific Fedora release, and thus we essentially 'apply' a release number to the validation event. So we may have a nightly compose 'Rawhide (blank) 20151201', and decide that we wish to test it as part of the preparation for the Fedora 24 release; thus we create the release validation event '24 Rawhide 20151201'.

  The high-level functions in both fedfind and python-wikitcms - `get_release()` in fedfind, `get_validation_page()` and `get_validation_event()` in python-wikitcms - will attempt to handle this difference in versioning, so when using those high-level functions, you can usually pass versions between fedfind and python-wikitcms without worrying about it.

  For convenient compatibility with Pungi 4 composes, `get_validation_event()` and `get_validation_page()` (and hence also `report_validation_results()`) accept `cid` as an alternative to `release` / `milestone` / `compose`, and will do their best to instantiate the appropriate validation event for the compose specified.

  It's worth noting that you can use python-wikitcms in several fairly different ways:

  * Instantiate pages that don't exist yet, based on the 'release, milestone, compose' versioning concept (or from a Pungi 4 compose ID), and create them
  * Instantiate existing pages based on the 'release, milestone, compose' concept (or from a compose ID) and read or add results
  * Instantiate existing pages from their names or category memberships and read or add results

  Most usage of python-wikitcms will boil down to getting some Page instances and doing stuff to them, but the way you get there will differ according to which of the above paths you're following. For the first two you will likely use the `get_validation_foo()` methods of `Wiki` or the methods in `Release`, for the last you can follow the same procedures as `mwclient` uses and trust that you will get instances of the appropriate classes. Following the example above, you could do `page = site.pages["Test Results:Fedora_23_Final_RC10_Desktop"]` and `page` would be a `ValidationPage` instance.



  You should log in to the wiki before editing it, using `Wiki.login()`.

  From early 2018, the Fedora wikis use the unified Fedora OpenID Connect-based authentication service, and python-wikitcms supports this. When interacting with the Fedora wikis, when `login()` is called for the first time, python-wikitcms will attempt to open a browser and request credentials via the authentication service. The call will complete once the user attempts to log in. Any username or password passed to `login()` is **ignored** in this case. For unattended operation with the new authentication system, a valid token must be present as `~/.openidc/oidc_wikitcms.json`. Unattended operation will work for some time after one successful interactive login (until the token expires); for long-term unattended operation, you must ask the wiki maintainer for a special permanent session token.

  When interacting with any other wiki (though this would be an unusual thing to do in most cases), python-wikitcms will behave exactly as mwclient does.



  * [Mike Ruckman][11] (roshi) was kind and patient in providing review and advice throughout python-wikitcms' early development.
  * [Patrick Uiterwijk][12] kindly provided the code to support OpenID Connect authentication.



  python-wikitcms is released under the [GPL][13], version 3 or later.

   [1]: https://fedoraproject.org/wiki/Wikitcms
   [2]: https://fedoraproject.org/wiki
   [3]: https://pagure.io/fedora-qa/relval
   [4]: https://pagure.io/fedora-qa/testdays
   [5]: https://github.com/mwclient/mwclient
   [6]: https://fedoraproject.org/wiki/Template:Validation_results
   [7]: https://pagure.io/fedora-qa/python-wikitcms
   [8]: https://pypi.python.org/pypi/wikitcms
   [9]: https://developercertificate.org/
   [10]: https://pagure.io/fedora-qa/fedfind
   [11]: https://roshi.fedorapeople.org/
   [12]: https://patrick.uiterwijk.org/
   [13]: https://www.gnu.org/licenses/gpl.txt


pkgId: 459cd41a218b770893081273ebd4e96ce370b5b5ca6d121d7af088c6a7ec9676
name: python-wirerope
arch: src
version: 0.4.7
epoch: 0
release: 1
summary: 'Turn functions and methods into fully controllable objects'
url: https://github.com/youknowone/wirerope
rpm_license: BSD 2-Clause License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0004d39d-8ffa-4cad-9091-b8bc887c0829
location_href: 00012033-python-wirerope/python-wirerope-0.4.7-1.src.rpm
checksum_type: sha256
description:
  The concepts:
  - `wirerope.rope.WireRope` is a wrapper interface for python callable.
  - Custom `wirerope.wire.Wire` class provides user-defined behavior.
    A subclass of this class is working similar to a *decorator function* body.
  - A wire object is associated with a bound method.
  - Rope is dispatching types.
  `wirerope.rope.WireRope` is the wrapper for callables. By wrapping a
  function with `WireRope` with a custom subclass of the `wirerope.wire.Wire`
  class, the wire object will be created by each function or bound method.
  `Wire` is the most important part. The given class will be instantiated and
  bound to each function or bound method - which fits the concept of *instance
  cmethod* of human.
  For example, when `f` is a free function or staticmethod, the wire also will
  be a single object. When `f` is a method or property, wires will be created for
  each method owner object `self`. When `f` is a classmethod, wires will be
  created for each method owner class `cls`. Yes, it will detect the owner
  and bound to it regardless of the calling type.
  `Rope` is internal dispatcher. It will be helpful when creating a complex
  object for decorated callable instead of simple callable feature.


pkgId: c4c73e49ce10537d7d21a4dba6a9c2ab92f3b3d9d0dc5fb6f84fdb41639a3d88
name: python-wloc
arch: src
version: 1.0.1
epoch: 0
release: 1
summary: Simple Wi-Fi geolocation library and tool
url: https://pypi.org/project/wloc/
rpm_license: GPL-3.0-or-later
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f4770d4e-19c5-44b0-97c3-687df8a91549
location_href: 00005481-python-wloc/python-wloc-1.0.1-1.src.rpm
checksum_type: sha256
description:
  Locate user by using global Wi-Fi database (no GPS required). Supported backends:
    * [Google Geolocation API](https://developers.google.com/maps/documentation/geolocation/intro);
    * [Mozilla Geolocation API](https://mozilla.github.io/ichnaea/api/index.html);
    * [Yandex Locator API](https://tech.yandex.ru/locator/doc/dg/api/json-docpage/).
  Warning! Do not use `master` branch in production due to possible breaking changes. Always use [tagged versions](https://github.com/xvitaly/wloc/releases) instead.

  [GNU General Public License version 3](LICENSE). External libraries can use another compatible licenses.
  Icon for the Windows executable and installer from the [Noto Emoji](https://github.com/googlefonts/noto-emoji) font, licensed under the terms of the [Apache License 2.0](licenses/noto-emoji.LICENSE.txt).

  Documentation available [here](docs/README.md).


pkgId: a37bce1ad009e5a1fbd7ce4f5cb017e252a9e8bcd58da5aa67d91d6106cd7a46
name: python-wordcloud
arch: src
version: 1.8.2.2
epoch: 0
release: 1
summary: A little word cloud generator
url: https://github.com/amueller/word_cloud
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-284bd9fb-cac1-44ed-9f22-ad7abf27f38f
location_href: 00009787-python-wordcloud/python-wordcloud-1.8.2.2-1.src.rpm
checksum_type: sha256
description:
  A little word cloud generator in Python. Read more about it on the [blog
  post][blog-post] or the [website][website].
  The code is tested against Python 2.7, 3.4, 3.5, 3.6 and 3.7.

  If you are using pip:
      pip install wordcloud
  If you are using conda, you can install from the `conda-forge` channel:
      conda install -c conda-forge wordcloud

  wordcloud depends on `numpy` and `pillow`.
  To save the wordcloud into a file, `matplotlib` can also be installed. See [examples](#examples) below.
  If there are no wheels available for your version of python, installing the
  package requires having a C compiler set up. Before installing a compiler, report
  an issue describing the version of python and operating system being used.

  Check out [examples/simple.py][simple] for a short intro. A sample output is:
  ![Constitution](examples/constitution.png)
  Or run [examples/masked.py][masked] to see more options. A sample output is:
  ![Alice in Wonderland](examples/alice.png)
  Getting fancy with some colors:
  ![Parrot with rainbow colors](examples/parrot_new.png)
  Generating wordclouds for Arabic:
  ![Arabic wordlcloud](examples/arabic_example.png)

  The `wordcloud_cli` tool can be used to generate word clouds directly from the command-line:
  	$ wordcloud_cli --text mytext.txt --imagefile wordcloud.png
  If you're dealing with PDF files, then `pdftotext`, included by default with many Linux distribution, comes in handy:
  	$ pdftotext mydocument.pdf - | wordcloud_cli --imagefile wordcloud.png
  In the previous example, the `-` argument orders `pdftotext` to write the resulting text to stdout, which is then piped to the stdin of `wordcloud_cli.py`.
  Use `wordcloud_cli --help` so see all available options.
  [blog-post]: http://peekaboo-vision.blogspot.de/2012/11/a-wordcloud-in-python.html
  [website]: http://amueller.github.io/word_cloud/
  [simple]: examples/simple.py
  [masked]: examples/masked.py
  [reddit-cloud]: https://github.com/amueller/reddit-cloud
  [wc2]: http://www.reddit.com/user/WordCloudBot2
  [wc2top]: http://www.reddit.com/user/WordCloudBot2/?sort=top
  [chat-stats]: https://github.com/popcorncolonel/Chat_stats
  [twitter-word-cloud-bot]: https://github.com/defacto133/twitter-wordcloud-bot
  [twitter-wordnuvola]: https://twitter.com/wordnuvola
  [imgur-wordnuvola]: http://defacto133.imgur.com/all/
  [intprob]: http://peekaboo-vision.blogspot.de/2012/11/a-wordcloud-in-python.html#bc_0_28B

  The wordcloud library is MIT licenced, but contains DroidSansMono.ttf, a true type font by Google, that is apache licensed.
  The font is by no means integral, and any other font can be used by setting the ``font_path`` variable when creating a ``WordCloud`` object.


pkgId: cdaf8146583062cc9ecc83851d279f1589356ca5811bf53489679c77c6cf67ef
name: python-wordcloud-debuginfo
arch: x86_64
version: 1.8.2.2
epoch: 0
release: 1
summary: Debug information for package python-wordcloud
url: https://github.com/amueller/word_cloud
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-284bd9fb-cac1-44ed-9f22-ad7abf27f38f
rpm_sourcerpm: python-wordcloud-1.8.2.2-1.src.rpm
location_href: 00009787-python-wordcloud/python-wordcloud-debuginfo-1.8.2.2-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-wordcloud.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: a0ddc411f0ec1206df1e895fd2f638c3c2adb7f299a54324c8283a87a424bce0
name: python-wordcloud-debugsource
arch: x86_64
version: 1.8.2.2
epoch: 0
release: 1
summary: Debug sources for package python-wordcloud
url: https://github.com/amueller/word_cloud
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-284bd9fb-cac1-44ed-9f22-ad7abf27f38f
rpm_sourcerpm: python-wordcloud-1.8.2.2-1.src.rpm
location_href: 00009787-python-wordcloud/python-wordcloud-debugsource-1.8.2.2-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-wordcloud.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: fadbea86825cb6411dd7c4c6332fbda2a99e57cd0193221b3a1fae0ca8fd7cdd
name: python-wordsegment
arch: src
version: 1.3.1
epoch: 0
release: 1
summary: English word segmentation.
url: http://www.grantjenks.com/docs/wordsegment/
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4695f7aa-d4e0-4c38-bc04-257458b08edc
location_href: 00013793-python-wordsegment/python-wordsegment-1.3.1-1.src.rpm
checksum_type: sha256
description:
  `WordSegment`_ is an Apache2 licensed module for English word
  segmentation, written in pure-Python, and based on a trillion-word corpus.
  Based on code from the chapter "`Natural Language Corpus Data`_" by Peter
  Norvig from the book "`Beautiful Data`_" (Segaran and Hammerbacher, 2009).
  Data files are derived from the `Google Web Trillion Word Corpus`_, as
  described by Thorsten Brants and Alex Franz, and `distributed`_ by the
  Linguistic Data Consortium. This module contains only a subset of that
  data. The unigram data includes only the most common 333,000 words. Similarly,
  bigram data includes only the most common 250,000 phrases. Every word and
  phrase is lowercased with punctuation removed.


pkgId: 7e99fa7755be1cd0e95c97b4332c2232c7c0c1d1325d4f0b6ed3de007ab0e1b0
name: python-workos
arch: src
version: 1.22.0
epoch: 0
release: 1
summary: WorkOS Python Client
url: https://github.com/workos-inc/workos-python
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d5002a1f-671a-45e7-aa42-226d328fe761
location_href: 00012998-python-workos/python-workos-1.22.0-1.src.rpm
checksum_type: sha256
description:
  ![PyPI](https://img.shields.io/pypi/v/workos)
  [![Build Status](https://workos.semaphoreci.com/badges/workos-python/branches/main.svg?style=shields&key=9e4cb5bb-86a4-4938-9ec2-fc9f9fc512be)](https://workos.semaphoreci.com/projects/workos-python)

  The WorkOS library for Python provides convenient access to the WorkOS API from applications written in Python, [hosted on PyPi](https://pypi.org/project/workos/)



  See the [API Reference](https://workos.com/docs/reference/client-libraries) for Python usage examples.



  To install from PyPi, run the following:

  ```
  pip install workos
  ```

  To install from source, clone the repo and run the following:

  ```
  python setup.py install
  ```



  The package will need to be configured with your [api key](https://dashboard.workos.com/api-keys) at a minimum and [client id](https://dashboard.workos.com/sso/configuration) if you plan on using SSO:

  ```python
  import workos

  workos.api_key = "sk_1234"
  workos.client_id = "client_1234"
  ```



  For our SDKs WorkOS follows a Semantic Versioning ([SemVer](https://semver.org/)) process where all releases will have a version X.Y.Z (like 1.0.0) pattern wherein Z would be a bug fix (e.g., 1.0.1), Y would be a minor release (1.1.0) and X would be a major release (2.0.0). We permit any breaking changes to only be released in major versions and strongly recommend reading changelogs before making any major version upgrades.



  - [Single Sign-On Guide](https://workos.com/docs/sso/guide)
  - [Directory Sync Guide](https://workos.com/docs/directory-sync/guide)
  - [Admin Portal Guide](https://workos.com/docs/admin-portal/guide)
  - [Magic Link Guide](https://workos.com/docs/magic-link/guide)


pkgId: 94a232b93518cb49869f2394f25b6e0bf4e014b5275dba2bab617362f898e3d3
name: python-wrapt
arch: src
version: 1.15.0
epoch: 0
release: 1
summary: Module for decorators, wrappers and monkey patching.
url: https://github.com/GrahamDumpleton/wrapt
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-20d12d5e-ab0a-46b8-962a-0aca3ac08dd6
location_href: 00008924-python-wrapt/python-wrapt-1.15.0-1.src.rpm
checksum_type: sha256
description:
  |Actions| |PyPI|
  The aim of the **wrapt** module is to provide a transparent object proxy
  for Python, which can be used as the basis for the construction of function
  wrappers and decorator functions.
  The **wrapt** module focuses very much on correctness. It therefore goes
  way beyond existing mechanisms such as ``functools.wraps()`` to ensure that
  decorators preserve introspectability, signatures, type checking abilities
  etc. The decorators that can be constructed using this module will work in
  far more scenarios than typical decorators and provide more predictable and
  consistent behaviour.
  To ensure that the overhead is as minimal as possible, a C extension module
  is used for performance critical components. An automatic fallback to a
  pure Python implementation is also provided where a target system does not
  have a compiler to allow the C extension to be compiled.


pkgId: b1fdfd3e3ec524e79c56a1ec0ede4224f070f02b70d22139f2d56f0a90c9eb8f
name: python-wrapt-debuginfo
arch: x86_64
version: 1.15.0
epoch: 0
release: 1
summary: Debug information for package python-wrapt
url: https://github.com/GrahamDumpleton/wrapt
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-20d12d5e-ab0a-46b8-962a-0aca3ac08dd6
rpm_sourcerpm: python-wrapt-1.15.0-1.src.rpm
location_href: 00008924-python-wrapt/python-wrapt-debuginfo-1.15.0-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-wrapt.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 8c7ffe549b0fbd8644420ccbb69a0ea4108fb5cd1bc8410df438faf183e4ad9f
name: python-wrapt-debugsource
arch: x86_64
version: 1.15.0
epoch: 0
release: 1
summary: Debug sources for package python-wrapt
url: https://github.com/GrahamDumpleton/wrapt
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-20d12d5e-ab0a-46b8-962a-0aca3ac08dd6
rpm_sourcerpm: python-wrapt-1.15.0-1.src.rpm
location_href: 00008924-python-wrapt/python-wrapt-debugsource-1.15.0-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-wrapt.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: a57f06a6d8a551a795f6bb4b130c5099b0955fd3720780b556b1c1c54bbe985b
name: python-wsaccel
arch: src
version: 0.6.4
epoch: 0
release: 1
summary: Accelerator for ws4py and AutobahnPython
url: https://github.com/methane/wsaccel
rpm_license: Apache
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6a60cad7-b668-46dd-8de5-bb7714a308eb
location_href: 00005484-python-wsaccel/python-wsaccel-0.6.4-1.src.rpm
checksum_type: sha256
description:
  **NOTE: AutobahnPython and ws4py are not actively maintained. So I will stop this project too.
  Please migrate to `Tornado <https://www.tornadoweb.org/en/stable/>`_ or
  `websockets <https://websockets.readthedocs.io/en/stable/intro.html>`_.**
  WSAccell is WebSocket accelerator for `AutobahnPython <https://autobahn.readthedocs.io/en/latest/>`_,
  and `ws4py <https://github.com/Lawouach/WebSocket-for-Python>`_.
  WSAccell replaces per-byte process in them with Cython version.
  AutobahnPython beginning with version 0.6 automatically uses WSAccell if available.
  Otherwise you can run-time patch supported WebSocket libraries using:
      import wsaccel
      wsaccel.patch_autobahn()  # for autobahn.
      wsaccel.patch_ws4py()     # for ws4py.


pkgId: 79d55e8eddf28b066ebd6aba4e9184656ffca8896bff5d4aad09964b31ff477a
name: python-wsaccel-debuginfo
arch: x86_64
version: 0.6.4
epoch: 0
release: 1
summary: Debug information for package python-wsaccel
url: https://github.com/methane/wsaccel
rpm_license: Apache
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-6a60cad7-b668-46dd-8de5-bb7714a308eb
rpm_sourcerpm: python-wsaccel-0.6.4-1.src.rpm
location_href: 00005484-python-wsaccel/python-wsaccel-debuginfo-0.6.4-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-wsaccel.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 4657936b490bdc31b31176a214f13efc8a6835904e9f344e00a6eaf401317c48
name: python-wsaccel-debugsource
arch: x86_64
version: 0.6.4
epoch: 0
release: 1
summary: Debug sources for package python-wsaccel
url: https://github.com/methane/wsaccel
rpm_license: Apache
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-6a60cad7-b668-46dd-8de5-bb7714a308eb
rpm_sourcerpm: python-wsaccel-0.6.4-1.src.rpm
location_href: 00005484-python-wsaccel/python-wsaccel-debugsource-0.6.4-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-wsaccel.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: f542abc3a8c31f1996ad16da56eeabc5b0f9bc6ad44cf35c67853025a2356fff
name: python-wsgi-intercept
arch: src
version: 1.11.0
epoch: 0
release: 1
summary: wsgi_intercept installs a WSGI application in place of a real URI for testing.
url: http://pypi.python.org/pypi/wsgi_intercept
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-40504572-68f9-40dd-a18f-f78a6b275234
location_href: 00005485-python-wsgi_intercept/python-wsgi-intercept-1.11.0-1.src.rpm
checksum_type: sha256
description:
  Testing a WSGI application sometimes involves starting a server at a
  local host and port, then pointing your test code to that address.
  Instead, this library lets you intercept calls to any specific host/port
  combination and redirect them into a `WSGI application`_ importable by
  your test program. Thus, you can avoid spawning multiple processes or
  threads to test your Web app.


pkgId: 871c8e18c31432267912821b9f4d6d90fa39cc7e40cd6d21789f0857b3151f79
name: python-wsgi-request-logger
arch: src
version: 0.4.6
epoch: 0
release: 1
summary: Apache-like combined logging for WSGI Web Applications
url: https://github.com/pklaus/wsgi-request-logger
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6de0f138-7383-4780-826a-5fac725c5bbd
location_href: 00011293-python-wsgi-request-logger/python-wsgi-request-logger-0.4.6-1.src.rpm
checksum_type: sha256
description:
  This is a middleware which you can use to log requests to your WSGI
  based site. It's even imitating Apache's combined log format to allow
  you to use any of the many tools for Apache log file analysis.
  By making use of Python's standard library logging facilities, you can
  easily set it up to log to STDOUT, time rotated log files, email,
  syslog, etc.
  Installation
  ^^^^^^^^^^^^
  Simply install this Python module via
      pip install wsgi-request-logger
  Usage
  ^^^^^
  To add this middleware to your WSGI ``application`` and log to the file
  *access.log*, do:
      from requestlogger import WSGILogger, ApacheFormatter
      from logging.handlers import TimedRotatingFileHandler
      def application(environ, start_response):
          response_body = 'The request method was %s' % environ['REQUEST_METHOD']
          response_body = response_body.encode('utf-8')
          response_headers = [('Content-Type', 'text/plain'),
                              ('Content-Length', str(len(response_body)))]
          start_response('200 OK', response_headers)
          return [response_body]
      handlers = [ TimedRotatingFileHandler('access.log', 'd', 7) , ]
      loggingapp = WSGILogger(application, handlers, ApacheFormatter())
      if __name__ == '__main__':
          from wsgiref.simple_server import make_server
          http = make_server('', 8080, loggingapp)
          http.serve_forever()
  The Authors
  ^^^^^^^^^^^
  This WSGI middleware was originally developed under the name
  `wsgilog <https://pypi.python.org/pypi/wsgilog/>`__ by **L. C. Rees**.
  It was forked by **Philipp Klaus** in 2013 to build a WSGI middleware
  for request logging rather than exception handling and logging.
  License
  ^^^^^^^
  This software, *wsgi-request-logger*, is published under a *3-clause BSD
  license*.
  Developers' Resources
  ^^^^^^^^^^^^^^^^^^^^^
  -  To read about your options for the logging handler, you may want to
     read `Python's Logging
     Cookbook <http://docs.python.org/3/howto/logging-cookbook.html>`__.
  -  Documentation on Apache's log format can be found
     `here <http://httpd.apache.org/docs/current/mod/mod_log_config.html#logformat>`__.
  -  The
     `WSGI <http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface>`__
     - Web Server Gateway Interface - is defined in `PEP
     333 <http://www.python.org/dev/peps/pep-0333/>`__ with an update for
     Python 3 in `PEP 3333 <http://www.python.org/dev/peps/pep-3333/>`__.
  General References
  ^^^^^^^^^^^^^^^^^^
  -  PyPI's `listing of
     wsgi-request-logger <https://pypi.python.org/pypi/wsgi-request-logger>`__
  -  The source code for this Python module is `hosted on
     Github <https://github.com/pklaus/wsgi-request-logger>`__.
  -  A blog post with more background information and usage examples:
     `wsgi-request-logger – Logging HTTP Requests With Any WSGI Web
     Application like Flask, Bottle or
     Django <https://blog.philippklaus.de/2013/06/wsgi-request-logger-logging-http-requests-with-any-wsgi-web-application-like-flask-bottle-or-django/>`__


pkgId: 8fbbed0bcea9dccf76e0fd198684f9e62c9faade1b05e02c0b2ebd829fb709c2
name: python-wslink
arch: src
version: 1.10.1
epoch: 0
release: 1
summary: Python/JavaScript library for communicating over WebSocket
url: https://github.com/kitware/wslink
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a98550aa-7b70-4a9d-9b9b-53966e6bb49f
location_href: 00012189-python-wslink/python-wslink-1.10.1-1.src.rpm
checksum_type: sha256
description:
  Wslink allows easy, bi-directional communication between a python server and a
  javascript client over a websocket_. The client can make RPC calls to the
  server, and the server can publish messages to topics that the client can
  subscribe to. The server can include binary attachments in these messages,
  which are communicated as a binary websocket message, avoiding the overhead of
  encoding and decoding.


pkgId: 8388caa95c2110ace182c4f0eb30a0220a4120df5c9906ef540a231124ea5fd9
name: python-wurlitzer
arch: src
version: 3.0.3
epoch: 0
release: 1
summary: Capture C-level output in context managers
url: https://github.com/minrk/wurlitzer
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7df9e1fe-b0fd-4903-b356-f19fd5d277cb
location_href: 00005490-python-wurlitzer/python-wurlitzer-3.0.3-1.src.rpm
checksum_type: sha256
description:
  Capture C-level stdout/stderr pipes in Python via `os.dup2`.

  For more details on why this is needed, please read [this blog post](https://eli.thegreenplace.net/2015/redirecting-all-kinds-of-stdout-in-python/).



      pip install wurlitzer



  Capture stdout/stderr in pipes:

  ```python
  from wurlitzer import pipes

  with pipes() as (out, err):
      call_some_c_function()

  stdout = out.read()
  ```

  Capture stdout/stderr in StringIO:

  ```python
  from io import StringIO
  from wurlitzer import pipes, STDOUT

  out = StringIO()
  with pipes(stdout=out, stderr=STDOUT):
      call_some_c_function()

  stdout = out.getvalue()
  ```

  Forward C-level stdout/stderr to Python sys.stdout/stderr,
  which may already be forwarded somewhere by the environment, e.g. IPython:

  ```python
  from wurlitzer import sys_pipes

  with sys_pipes():
      call_some_c_function()
  ```

  Or even simpler, enable it as an IPython extension:

  ```
  %load_ext wurlitzer
  ```

  To forward all C-level output to IPython during execution.



  This package is based on stuff we learned with @takluyver and @karies while working on capturing output from the [Cling Kernel](https://github.com/root-mirror/cling/tree/master/tools/Jupyter/kernel) for Jupyter.



  [Wurlitzer](https://en.wikipedia.org/wiki/Wurlitzer) makes pipe organs. Get it? Pipes? Naming is hard.


pkgId: 4fcdf599a90dc6146cc4d82749d83a36161a569d8db082ca96fc667c7a876101
name: python-wxnatpy
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: wxPython XNAT repository browser
url: https://github.com/pauldmccarthy/wxnatpy
rpm_license: Apache License Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a4e7429e-d329-4964-8633-5b66c8be5e75
location_href: 00005492-python-wxnatpy/python-wxnatpy-0.4.0-1.src.rpm
checksum_type: sha256
description:
  [![PyPi version](https://img.shields.io/pypi/v/wxnatpy.svg)](https://pypi.python.org/pypi/wxnatpy/)
  [![Anaconda version](https://anaconda.org/conda-forge/wxnatpy/badges/version.svg)](https://anaconda.org/conda-forge/wxnatpy/)
  `wxnatpy` is a [wxPython](https://www.wxpython.org) widget which allows users
  to browse the contents of a [XNAT](https://xnat.org) repository. It is built
  on top of `wxPython` and
  [xnatpy](https://bitbucket.org/bigr_erasmusmc/xnatpy).

  `wxnatpy` is on [PyPi](https://pypi.python.org/) - install it through `pip`:
  ```sh
  pip install wxnatpy
  ```
  `wxnatpy` is also on [conda-forge](https://conda-forge.org/) - install it
  through `conda`:
  ```sh
  conda install -c conda-forge wxnatpy
  ```
  **Important note for Linux users** `wnatpy` depends on `wxpython 4` which, for
  Linux platforms, is not available on PyPi.  Therefore, if you are using Linux,
  you will need to install wxPython first - head to
  https://extras.wxpython.org/wxPython4/extras/linux/ and find the directory
  that matches your OS. Then run this command (change the URL accordingly):
  ```sh
  pip install --only-binary wxpython -f https://extras.wxpython.org/wxPython4/extras/linux/gtk2/ubuntu-16.04/ wxpython
  ```

  The `wxnat.XNATBrowserPanel` is a `wx.Panel`, which is intended to be embedded
  in a `wxpython` application. The `wxnat` package can also be called as a
  standalone application, e.g.:
  ```sh
  python -m wxnat
  ```
  This will open a dialog containing the browser panel, and *Download* and
  *Close* buttons.

  Development on `wxnatpy` began at the [2017 XNAT Developer
  Workshop](https://wiki.xnat.org/workshop-2017/), in Rotterdam, 16th-18th
  November 2017, with the support of the [Wellcome Centre for Integrative
  Neuroimaging](https://www.ndcn.ox.ac.uk/divisions/fmrib/).


pkgId: ce6108f4c3609b2af48ece2334fe2f3b0d43124c667fab9f4625b9cc7166d48a
name: python-xarray
arch: src
version: 2023.2.0
epoch: 0
release: 1
summary: N-D labeled arrays and datasets in Python
url: https://github.com/pydata/xarray
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-67c2f1aa-bd43-4fc5-9cb0-31202ff8c692
location_href: 00005501-python-xarray/python-xarray-2023.2.0-1.src.rpm
checksum_type: sha256
description:
  Multi-dimensional (a.k.a. N-dimensional, ND) arrays (sometimes called
  "tensors") are an essential part of computational science.
  They are encountered in a wide range of fields, including physics, astronomy,
  geoscience, bioinformatics, engineering, finance, and deep learning.
  In Python, NumPy_ provides the fundamental data structure and API for
  working with raw ND arrays.
  However, real-world datasets are usually more than just raw numbers;
  they have labels which encode information about how the array values map
  to locations in space, time, etc.
  xarray doesn't just keep track of labels on arrays -- it uses them to provide a
  powerful and concise interface. For example:
  -  Apply operations over dimensions by name: ``x.sum('time')``.
  -  Select values by label instead of integer location: ``x.loc['2014-01-01']`` or ``x.sel(time='2014-01-01')``.
  -  Mathematical operations (e.g., ``x - y``) vectorize across multiple dimensions (array broadcasting) based on dimension names, not shape.
  -  Flexible split-apply-combine operations with groupby: ``x.groupby('time.dayofyear').mean()``.
  -  Database like alignment based on coordinate labels that smoothly handles missing values: ``x, y = xr.align(x, y, join='outer')``.
  -  Keep track of arbitrary metadata in the form of a Python dictionary: ``x.attrs``.


pkgId: a1a70dea8e35267a37619bb5271d04d93b343e60e815ed380c263ee8d8b618a3
name: python-xboxapi
arch: src
version: 2.0.1
epoch: 0
release: 1
summary: XBOX One API
url: https://github.com/mKeRix/xboxapi-python
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-941c7689-fd94-4531-b917-4e07c639e71c
location_href: 00005502-python-xboxapi/python-xboxapi-2.0.1-1.src.rpm
checksum_type: sha256
description:
  This is a Python wrapper for the unofficial [Xbox API](https://xboxapi.com)

  [![Build Status](https://travis-ci.org/xboxapi/Python-Wrapper.svg?branch=master)](https://travis-ci.org/xboxapi/Python-Wrapper)


  For now you will have to install manually, as I didn't upload the initial version to pypi (`pip`).

  1. Clone this repo
  2. Place the `xboxapi` directory in your project

  The only dependency is [requests](https://github.com/kennethreitz/requests) library.



  This is a basic example of how to create a client and fetch a gamers profile information from their gamertag.

  ```python
  from xboxapi import Client

  client = Client(api_key=<api_key>)
  gamer = client.gamer('voidpirate')

  profile = gamer.get('profile')
  ```

  `Client` class constructor takes the following optional arguments except `api_key`.

  | Argument | Value | Short Description |
  |---       |---    |---                |
  | api_key        | string  | api token from [Xbox API](https://xboxapi.com)    |
  | timeout        | int     | how long until the request times out (seconds)    |
  | lang           | string  | country language code (e.g. for German (`de-DE`)) |


  `Client` class public methods.

  | Method | Value | Optional | Short Description |
  |---       |---    |---              |---       |
  | `gamer(gamertag=<string>)`        | string  | `xuid=<string>` | gamertag to lookup |
  | `calls_remaining()` | n/a | n/a | Return headers about api rate limits |

  A note about the gamer method. If you already know the gamers xuid you can use that instead to avoid an additional api call when using only a gamertag.

  `Gamer` class public methods, returned from gamer method in `Client`.

  | Method | Value | Optional | Short Description |
  |---       |---    |---              |---       |
  | `get(method=<string>)`        | string  | `term=<string>` | API calls. |
  | `send_message(message=<string>)` | string | n/a | Send a message to gamer |
  | `send_activity(message=<string>)` | string | n/a | Update your activity feed with a message |

  Pagination is supported in this client and all handled through `get` method. It works by detecting the response header for pagination, any subsequent calls to the same api endpoint will return paged data. If another api call is made to a different endpoint, the pagination token will be cleared and results will not be paged.


pkgId: c8f90bf566a99d02ec7bfadb6e550558b24ccfa9266f8a959718c48dec1e28d6
name: python-xdg
arch: src
version: 6.0.0
epoch: 0
release: 1
summary: Variables defined by the XDG Base Directory Specification
url: https://github.com/srstevenson/xdg-base-dirs
rpm_license: ISC
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f70f1e66-ea27-4ff5-84c8-821ac6264d77
location_href: 00012431-python-xdg/python-xdg-6.0.0-1.src.rpm
checksum_type: sha256
description:
  `xdg` has been renamed to `xdg-base-dirs` due to an import collision with
  [`PyXDG`](https://pypi.org/project/pyxdg/). Therefore the
  [`xdg`](https://pypi.org/project/xdg/) package is deprecated. Install
  [`xdg-base-dirs`](https://pypi.org/project/xdg-base-dirs/) instead.


pkgId: cbacdc2839593843163de1727e736c4d742dc6cdaa4b014aeae4c34c04fadd1a
name: python-xdis
arch: src
version: 6.0.5
epoch: 0
release: 1
summary: Python cross-version byte-code disassembler and marshal routines
url: https://github.com/rocky/python-xdis/
rpm_license: GPL-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ec21f293-c598-41eb-b45c-223de6b90478
location_href: 00011744-python-xdis/python-xdis-6.0.5-1.src.rpm
checksum_type: sha256
description:
  A Cross-Python bytecode disassembler, bytecode/wordcode and magic-number manipulation library/package.


pkgId: 02987281c548499b3729205196b7a98aea4f597004d65e360ef594b7d5d979f7
name: python-xlib
arch: src
version: 0.21
epoch: 0
release: 1
summary: Python X Library
url: https://github.com/python-xlib/python-xlib
rpm_license: LGPLv2+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-16b4e09e-3131-4d7d-ab1f-cb616f7a0ca5
location_href: 00005504-python-xlib/python-xlib-0.21-1.src.rpm
checksum_type: sha256
description:
  |Build Status| |codecov.io| |Code Health|
  `Homepage`_ | `Releases`_ | `Changelog`_
  Copyright
  ~~~~~~~~~
  The main part of the code is
      Copyright (C) 2000-2002  Peter Liljenberg
  Some contributed code is copyrighted by `the contributors <Contributors_>`_,
  in these cases that is indicated in the source files in question.
  The Python X Library is released under LGPL v2.1 or later (since 2016),
  see the file LICENSE for details. 0.15rc1 and before were released under
  GPL v2.
  Requirements
  ~~~~~~~~~~~~
  The Python X Library requires Python 2.7 or newer. It has been tested to
  various extents with Python 2.7 and 3.3 through 3.6.
  Installation
  ~~~~~~~~~~~~
  The Python Xlib uses the standard setuptools package, to install run
  this command:
      python setup.py install
  See the command help for details: ``python setup.py install -h``.
  Alternatively, you can run programs from the distribution directory, or
  change the module path in programs.
  There's a simple example program, implemented twice using both the
  high-level interface and the low-level protocol.
  Introduction
  ~~~~~~~~~~~~
  The Python X Library is intended to be a fully functional X client
  library for Python programs. It is written entirely in Python, in
  contrast to earlier X libraries for Python (the ancient X extension and
  the newer plxlib) which were interfaces to the C Xlib.
  This is possible to do since X client programs communicate with the X
  server via the X protocol. The communication takes place over TCP/IP,
  Unix sockets, DECnet or any other streaming network protocol. The C Xlib
  is merely an interface to this protocol, providing functions suitable
  for a C environment.
  There are three advantages of implementing a pure Python library:
  -  Integration: The library can make use of the wonderful object system
     in Python, providing an easy-to-use class hierarchy.
  -  Portability: The library will be usable on (almost) any computer
     which have Python installed. A C interface could be problematic to
     port to non-Unix systems, such as MS Windows or OpenVMS.
  -  Maintainability: It is much easier to develop and debug native Python
     modules than modules written in C.
  Documentation
  ~~~~~~~~~~~~~
  The reference manual is not finished by far, but is probably still useful. It
  can be `browsed online <http://python-xlib.sourceforge.net/doc/html/index.html>`__.
  There are also some `example programs <Examples_>`_ and, of course,
  `the standard X11 documentation <http://tronche.com/gui/x/xlib/>`__ applies.
  Project status
  ~~~~~~~~~~~~~~
  The low-level protocol is complete, implementing client-side X11R6. The
  high-level object oriented interface is also fully functional. It is
  possible to write client applications with the library. Currently, the
  only real application using Python Xlib is the window manager PLWM,
  starting with version 2.0.
  There is a resource database implementation, ICCCM support and a
  framework for adding X extension code. Several extensions have been
  implemented; (RECORD, SHAPE, Xinerama, Composite, RANDR, and XTEST)
  patches for additions are very welcome.
  There are most likely still bugs, but the library is at least stable
  enough to run PLWM. A continuously bigger part of the library is covered
  by regression tests, improving stability.
  The documentation is still quite rudimentary, but should be of some help
  for people programming with the Xlib. X beginners should first find some
  general texts on X. A very good starting point is
  http://www.rahul.net/kenton/xsites.html
  See the file TODO for a detailed list of what is missing, approximately
  ordered by importance.


pkgId: fce8ee4a1f3ac380d8497a37f0bae72b30cd75945af08c97b0e6e39dbbb1e1eb
name: python-xlocal
arch: src
version: 0.5
epoch: 0
release: 1
summary: execution locals: killing global state (including thread locals)
url: http://bitbucket.org/hpk42/xlocal/
rpm_license: UNKNOWN
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-18e14fc5-2b0e-4472-9b02-8022e4e43108
location_href: 00012193-python-xlocal/python-xlocal-0.5-1.src.rpm
checksum_type: sha256
description:
  This module provides execution locals aka "xlocal" objects which implement
  a more restricted variant of "thread locals".  An execution local allows to
  manage attributes on a per-execution basis in a manner similar to how real
  locals work:
  - Invoked functions cannot change the binding for the invoking function
  - existence of a binding is local to a code block (and everything it calls)
  Attribute bindings for an xlocal objects will not leak outside a
  context-managed code block and they will not leak to other threads of
  greenlets.  By contrast, both process-globals and so called "thread
  locals" do not implement the above properties.
  Let's look at a basic example::
      
      from xlocal import xlocal
      xcurrent = xlocal()
      def output():
          print "hello world", xcurrent.x
      if __name__ == "__main__":
          with xcurrent(x=1):
              output()
  If we execute this module, the ``output()`` function will see
  a ``xcurrent.x==1`` binding::
      $ python example.py
      hello world 1
  Here is what happens in detail: ``xcurrent(x=1)`` returns a context manager which
  sets/resets the ``x`` attribute on the ``xcurrent`` object.  While remaining
  in the same thread/greenlet, all code triggered by the with-body (in this case
  just the ``output()`` function) can access ``xcurrent.x``.  Outside the with-
  body ``xcurrent.x`` would raise an AttributeError.  It is also not allowed
  to directly set ``xcurrent`` attributes; you always have to explicitely mark their
  life-cycle with a with-statement.  This means that invoked code:
  - cannot rebind xlocal state of its invoking functions (no side effects, yay!)
  - xlocal state does not leak outside the with-context (lifecylcle control)
  Another module may now reuse the example code::
      
      import example
      with example.xcurrent(x=3):
          example.output()
  which when running ...::
      $ python example_call.py
      hello world 3
  will cause the ``example.output()`` function to print the ``xcurrent.x`` binding
  as defined at the invoking ``with xcurrent(x=3)`` statement.
  Other threads or greenlets will never see this ``xcurrent.x`` binding; they may even
  set and read their own distincit ``xcurrent.x`` object.  This means that all
  threads/greenlets can concurrently call into a function which will always
  see the execution specific ``x`` attribute.


pkgId: a874d548ce5bba510be3094632921e001ff23d297c2c105e129d546262b08aa8
name: python-xlrd
arch: src
version: 2.0.1
epoch: 0
release: 1
summary: Library for developers to extract data from Microsoft Excel (tm) .xls spreadsheet files
url: http://www.python-excel.org/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0e5974c2-cad3-45d6-81de-da2bc253feee
location_href: 00009058-python-xlrd/python-xlrd-2.0.1-1.src.rpm
checksum_type: sha256
description:
  |Build Status|_ |Coverage Status|_ |Documentation|_ |PyPI version|_
  xlrd is a library for reading data and formatting information from Excel
  files in the historical ``.xls`` format.
    This library will no longer read anything other than ``.xls`` files. For
    alternatives that read newer file formats, please see http://www.python-excel.org/.
  The following are also not supported but will safely and reliably be ignored:
  *   Charts, Macros, Pictures, any other embedded object, **including** embedded worksheets.
  *   VBA modules
  *   Formulas, but results of formula calculations are extracted.
  *   Comments
  *   Hyperlinks
  *   Autofilters, advanced filters, pivot tables, conditional formatting, data validation
  Password-protected files are not supported and cannot be read by this library.
  Quick start:
      import xlrd
      book = xlrd.open_workbook("myfile.xls")
      print("The number of worksheets is {0}".format(book.nsheets))
      print("Worksheet name(s): {0}".format(book.sheet_names()))
      sh = book.sheet_by_index(0)
      print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols))
      print("Cell D30 is {0}".format(sh.cell_value(rowx=29, colx=3)))
      for rx in range(sh.nrows):
          print(sh.row(rx))
  From the command line, this will show the first, second and last rows of each sheet in each file:
      python PYDIR/scripts/runxlrd.py 3rows *blah*.xls


pkgId: 9a3872cdcd21343bbd3fc2087a774a1753780ddc33c9b7a34a96772342ec6183
name: python-xlutils
arch: src
version: 2.0.0
epoch: 0
release: 1
summary: Utilities for working with Excel files that require both xlrd and xlwt
url: http://www.python-excel.org
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6f0f7982-e22c-4dca-a4e4-d138e28ea001
location_href: 00011466-python-xlutils/python-xlutils-2.0.0-1.src.rpm
checksum_type: sha256
description:
  This package provides a collection of utilities for working with Excel
  files. Since these utilities may require either or both of the xlrd
  and xlwt packages, they are collected together here, separate from either
  package.
  Currently available are:
  **xlutils.copy**
    Tools for copying xlrd.Book objects to xlwt.Workbook objects.
  **xlutils.display**
    Utility functions for displaying information about xlrd-related
    objects in a user-friendly and safe fashion.
  **xlutils.filter**
    A mini framework for splitting and filtering Excel files into new
    Excel files.
  **xlutils.margins**
    Tools for finding how much of an Excel file contains useful data.
  **xlutils.save**
    Tools for serializing xlrd.Book objects back to Excel files.
  **xlutils.styles**
    Tools for working with formatting information expressed in styles.


pkgId: 34310802e3d5555b58594c7ae2fd047af46c570953711f409b2d0234599a09b9
name: python-xlwt
arch: src
version: 1.3.0
epoch: 0
release: 1
url: http://www.python-excel.org/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7787e498-ba01-4862-8649-abed85bb1118
location_href: 00005506-python-xlwt/python-xlwt-1.3.0-1.src.rpm
checksum_type: sha256
summary:
  Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform, with Python 2.6, 2.7, 3.3+

description:
  This is a library for developers to use to generate
  spreadsheet files compatible with Microsoft Excel versions 95 to 2003.
  The package itself is pure Python with no dependencies on modules or packages
  outside the standard Python distribution.
  Please read this before using this package:
  https://groups.google.com/d/msg/python-excel/P6TjJgFVjMI/g8d0eWxTBQAJ


pkgId: 2cd925eb14202c95399ecbb7361d413d7a114dcda0f68b4a3aab2239a7616157
name: python-xmindparser
arch: src
version: 1.0.9
epoch: 0
release: 1
summary: Convert xmind to programmable data types, support xmind pro and xmind zen file types.
url: https://github.com/tobyqin/xmindparser
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8401f710-f114-4767-9c99-897b4d1ec2aa
location_href: 00012288-python-xmindparser/python-xmindparser-1.0.9-1.src.rpm
checksum_type: sha256
description:
  xmindparser is a tool to help you convert xmind file to programmable data type, e.g. json, xml.
  Detail usage: https://github.com/tobyqin/xmindparser


pkgId: 090a5742bef455af7ca9b21ed91a5f305df9cd6a260429ea2272b4380302c635
name: python-xml2rfc
arch: src
version: 3.16.0
epoch: 0
release: 1
url: https://github.com/ietf-tools/xml2rfc
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-14fa2671-601a-4a5f-913d-90d3711d17cd
location_href: 00005507-python-xml2rfc/python-xml2rfc-3.16.0-1.src.rpm
checksum_type: sha256
summary:
  Xml2rfc generates RFCs and IETF drafts from document source in XML according to the IETF xml2rfc v2 and v3 vocabularies.

description:
  The [IETF] uses a specific format for the standards and other documents it publishes as [RFCs], and for the draft documents which are produced when developing documents for publications. There exists a number of different tools to facilitate the formatting of drafts and RFCs according to the existing rules, and this tool, **xml2rfc**, is one of them. It takes as input an xml file that contains the text and meta-information about author names etc., and transforms it into suitably formatted output. The input xml file should follow the grammars in [RFC7749] *(for v2 documents)* or [RFC7991] *(for v3 documents)*. Note that the grammar for v3 is still being refined, and changes will eventually be captured in the [bis draft for 7991]. Changes not yet captured can be seen in the xml2rfc source [v3.rng], or in the [documentation xml2rfc produces] with its `--doc` flag.
  **xml2rfc** provides a variety of output formats. See the command line help for a full list of formats. It also provides conversion from v2 to v3, and can run the [preptool] on its input.

  Installation of the python package is done as usual with `pip install xml2rfc`, using appropriate switches.

  In order to generate PDFs, **xml2rfc** uses the [WeasyPrint] module, which depends on external libraries that must be installed as native packages on your platform, separately from the **xml2rfc** install.
  1. First, install the **Pango**, and other required libraries on your system.  See installation instructions on the [WeasyPrint Docs].
  2. Next, install WeasyPrint python modules using pip.
  ```sh
  pip install 'weasyprint==55.0'
  ```
  3. Finally, install the full **Noto Font** and **Roboto Mono** packages:
    * Download the full font file from:
      https://noto-website-2.storage.googleapis.com/pkgs/Noto-unhinted.zip
    * Follow the installation instructions at
      https://www.google.com/get/noto/help/install/
    * Go to https://fonts.google.com/specimen/Roboto+Mono, and download the
      font.  Follow the installation instructions above, as applied to this download.
  With these installed and available to **xml2rfc**, the `--pdf` switch will be enabled.

  **xml2rfc** accepts a single XML document as input and outputs to one or more conversion formats.

  ```sh
  xml2rfc SOURCE [options] FORMATS...
  ```
  Run `xml2rfc --help` for a full listing of command-line options.

  This project is following the standard **Git Feature Workflow** development model. Learn about all the various steps of the development workflow, from creating a fork to submitting a pull request, in the [Contributing](https://github.com/ietf-tools/.github/blob/main/CONTRIBUTING.md) guide.
  > Make sure to read the [Styleguides](https://github.com/ietf-tools/.github/blob/main/CONTRIBUTING.md#styleguides) section to ensure a cohesive code format across the project.
  You can submit bug reports, enhancements and new feature requests in the [discussions](https://github.com/ietf-tools/xml2rfc/discussions) area. Accepted tickets will be converted to issues.

  As outlined in the [Contributing](https://github.com/ietf-tools/.github/blob/main/CONTRIBUTING.md) guide, you will first want to create a fork of the xml2rfc project in your personal GitHub account before cloning it.
  For example *(replace `USERNAME` with your GitHub username)*:
  ```sh
  git clone https://github.com/USERNAME/xml2rfc.git
  ```

  Run `./run.sh` command to build and start a docker development environment.
  The initial build may take time because it downloads all required fonts as well.
  ```sh
  ./run.sh
  ```
  [IETF]: https://www.ietf.org/
  [RFCs]: https://www.rfc-editor.org/
  [RFC7749]: https://www.rfc-editor.org/info/rfc7749
  [RFC7991]: https://www.rfc-editor.org/info/rfc7991
  [bis draft for 7991]: https://datatracker.ietf.org/doc/draft-iab-rfc7991bis/
  [v3.rng]: xml2rfc/data/v3.rng
  [documentation xml2rfc produces]: https://ietf-tools.github.io/xml2rfc/
  [preptool]: https://www.rfc-editor.org/info/rfc7998
  [WeasyPrint]: https://weasyprint.org/
  [WeasyPrint Docs]: https://doc.courtbouillon.org/weasyprint/stable/first_steps.html


pkgId: cd6fe6decc32e1e2b638a8bd7cff14dfef0ef9ec167626daca33884493589d2e
name: python-xml2rfc
arch: src
version: 3.17.0
epoch: 0
release: 1
url: https://github.com/ietf-tools/xml2rfc
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2bdbc2f0-3021-483f-876c-11d42d353d10
location_href: 00008824-python-xml2rfc/python-xml2rfc-3.17.0-1.src.rpm
checksum_type: sha256
summary:
  Xml2rfc generates RFCs and IETF drafts from document source in XML according to the IETF xml2rfc v2 and v3 vocabularies.

description:
  The [IETF] uses a specific format for the standards and other documents it publishes as [RFCs], and for the draft documents which are produced when developing documents for publications. There exists a number of different tools to facilitate the formatting of drafts and RFCs according to the existing rules, and this tool, **xml2rfc**, is one of them. It takes as input an xml file that contains the text and meta-information about author names etc., and transforms it into suitably formatted output. The input xml file should follow the grammars in [RFC7749] *(for v2 documents)* or [RFC7991] *(for v3 documents)*. Note that the grammar for v3 is still being refined, and changes will eventually be captured in the [bis draft for 7991]. Changes not yet captured can be seen in the xml2rfc source [v3.rng], or in the [documentation xml2rfc produces] with its `--doc` flag.
  **xml2rfc** provides a variety of output formats. See the command line help for a full list of formats. It also provides conversion from v2 to v3, and can run the [preptool] on its input.

  Installation of the python package is done as usual with `pip install xml2rfc`, using appropriate switches.

  In order to generate PDFs, **xml2rfc** uses the [WeasyPrint] module, which depends on external libraries that must be installed as native packages on your platform, separately from the **xml2rfc** install.
  1. First, install the **Pango**, and other required libraries on your system.  See installation instructions on the [WeasyPrint Docs].
  2. Next, install WeasyPrint python modules using pip.
  ```sh
  pip install 'weasyprint==55.0'
  ```
  3. Finally, install the full **Noto Font** and **Roboto Mono** packages:
    * Download the full font file from:
      https://noto-website-2.storage.googleapis.com/pkgs/Noto-unhinted.zip
    * Follow the installation instructions at
      https://www.google.com/get/noto/help/install/
    * Go to https://fonts.google.com/specimen/Roboto+Mono, and download the
      font. Follow the installation instructions above, as applied to this download.
    * Go to https://fonts.google.com/noto/specimen/Noto+Sans+Math, and
      download the font. Follow the installation instructions above, as
      applied to this download.
  With these installed and available to **xml2rfc**, the `--pdf` switch will be enabled.

  **xml2rfc** accepts a single XML document as input and outputs to one or more conversion formats.

  ```sh
  xml2rfc SOURCE [options] FORMATS...
  ```
  Run `xml2rfc --help` for a full listing of command-line options.

  This project is following the standard **Git Feature Workflow** development model. Learn about all the various steps of the development workflow, from creating a fork to submitting a pull request, in the [Contributing](https://github.com/ietf-tools/.github/blob/main/CONTRIBUTING.md) guide.
  > Make sure to read the [Styleguides](https://github.com/ietf-tools/.github/blob/main/CONTRIBUTING.md#styleguides) section to ensure a cohesive code format across the project.
  You can submit bug reports, enhancements and new feature requests in the [discussions](https://github.com/ietf-tools/xml2rfc/discussions) area. Accepted tickets will be converted to issues.

  As outlined in the [Contributing](https://github.com/ietf-tools/.github/blob/main/CONTRIBUTING.md) guide, you will first want to create a fork of the xml2rfc project in your personal GitHub account before cloning it.
  For example *(replace `USERNAME` with your GitHub username)*:
  ```sh
  git clone https://github.com/USERNAME/xml2rfc.git
  ```

  Run `./run.sh` command to build and start a docker development environment.
  The initial build may take time because it downloads all required fonts as well.
  ```sh
  ./run.sh
  ```
  [IETF]: https://www.ietf.org/
  [RFCs]: https://www.rfc-editor.org/
  [RFC7749]: https://www.rfc-editor.org/info/rfc7749
  [RFC7991]: https://www.rfc-editor.org/info/rfc7991
  [bis draft for 7991]: https://datatracker.ietf.org/doc/draft-iab-rfc7991bis/
  [v3.rng]: xml2rfc/data/v3.rng
  [documentation xml2rfc produces]: https://ietf-tools.github.io/xml2rfc/
  [preptool]: https://www.rfc-editor.org/info/rfc7998
  [WeasyPrint]: https://weasyprint.org/
  [WeasyPrint Docs]: https://doc.courtbouillon.org/weasyprint/stable/first_steps.html


pkgId: d4114071c41e89f5f7d28fab30d8a277d028fbbf4045b1ac4c3345481a373c73
name: python-xmlschema
arch: src
version: 2.2.2
epoch: 0
release: 1
summary: An XML Schema validator and decoder
url: https://github.com/sissaschool/xmlschema
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-dfd8a3c2-016c-441a-b7c7-d4337991eacb
location_href: 00009687-python-xmlschema/python-xmlschema-2.2.2-1.src.rpm
checksum_type: sha256
description:
  This library includes the following features:
  * Full XSD 1.0 and XSD 1.1 support
  * Building of XML schema objects from XSD files
  * Validation of XML instances against XSD schemas
  * Decoding of XML data into Python data and to JSON
  * Encoding of Python data and JSON to XML
  * Data decoding and encoding ruled by converter classes
  * An XPath based API for finding schema's elements and attributes
  * Support of XSD validation modes *strict*/*lax*/*skip*
  * XML attacks protection using an XMLParser that forbids entities
  * Access control on resources addressed by an URL or filesystem path
  * XML data bindings based on DataElement class
  * Static code generation with Jinja2 templates


pkgId: aa760926175526cdb00fa8bcfe1e4e103cea6cec12cbf3c193a7eb063644846a
name: python-xmlsec
arch: src
version: 1.3.13
epoch: 0
release: 1
summary: Python bindings for the XML Security Library
url: https://github.com/mehcode/python-xmlsec
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-66b7d166-3383-4ddc-abe6-7133822f0e9b
location_href: 00005509-python-xmlsec/python-xmlsec-1.3.13-1.src.rpm
checksum_type: sha256
description:
  Python bindings for the `XML Security Library <https://www.aleksey.com/xmlsec/>`_.
  Documentation
  *************
  A documentation for ``xmlsec`` can be found at `xmlsec.readthedocs.io <https://xmlsec.readthedocs.io/>`_.
  Usage
  *****
  Check the `examples <https://xmlsec.readthedocs.io/en/latest/examples.html>`_ section in the documentation to see various examples of signing and verifying using the library.
  Requirements
  ************
  - ``libxml2 >= 2.9.1``
  - ``libxmlsec1 >= 1.2.18``
  Install
  *******
  ``xmlsec`` is available on PyPI:
     pip install xmlsec
  Depending on your OS, you may need to install the required native
  libraries first:
  Linux (Debian)
  ^^^^^^^^^^^^^^
     apt-get install pkg-config libxml2-dev libxmlsec1-dev libxmlsec1-openssl
  Note: There is no required version of LibXML2 for Ubuntu Precise,
  so you need to download and install it manually.
     wget http://xmlsoft.org/sources/libxml2-2.9.1.tar.gz
     tar -xvf libxml2-2.9.1.tar.gz
     cd libxml2-2.9.1
     ./configure && make && make install
  Linux (CentOS)
  ^^^^^^^^^^^^^^
     yum install libxml2-devel xmlsec1-devel xmlsec1-openssl-devel libtool-ltdl-devel
  Linux (Fedora)
  ^^^^^^^^^^^^^^
     dnf install libxml2-devel xmlsec1-devel xmlsec1-openssl-devel libtool-ltdl-devel
  Mac
  ^^^
     brew install libxml2 libxmlsec1 pkg-config
  Alpine
  ^^^^^^
     apk add build-base libressl libffi-dev libressl-dev libxslt-dev libxml2-dev xmlsec-dev xmlsec
  Troubleshooting
  ***************
  Mac
  ^^^
  If you get any fatal errors about missing ``.h`` files, update your
  ``C_INCLUDE_PATH`` environment variable to include the appropriate
  files from the ``libxml2`` and ``libxmlsec1`` libraries.
  Windows
  ^^^^^^^
  Starting with 1.3.7, prebuilt wheels are available for Windows,
  so running ``pip install xmlsec`` should suffice. If you want
  to build from source:


        pip install xmlsec --no-binary=xmlsec
  Building from source
  ********************

        git clone https://github.com/mehcode/python-xmlsec.git

        cd /path/to/xmlsec

        pip install .
  Contributing
  ************
  Setting up your environment
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^


     This is done so as to ensure every contributor is working with
     close-to-identicial versions of packages.
        mkvirtualenv xmlsec
     The ``mkvirtualenv`` command is available from ``virtualenvwrapper`` package which can be installed by following `link <http://virtualenvwrapper.readthedocs.org/en/latest/install.html#basic-installation>`_.

        workon xmlsec

     This will download all dependencies required for running the unit tests.
        pip install -r requirements-test.txt
        pip install -e "."
  Running the test suite
  ^^^^^^^^^^^^^^^^^^^^^^


        pytest tests

     Env variable ``PYXMLSEC_TEST_ITERATIONS`` specifies number of
     test iterations to detect memory leaks.
  Reporting an issue
  ^^^^^^^^^^^^^^^^^^
  Please attach the output of following information:
  * version of ``xmlsec``
  * version of ``libxmlsec1``
  * version of ``libxml2``
  * output from the command
       pkg-config --cflags xmlsec1
  License
  *******
  Unless otherwise noted, all files contained within this project are licensed under the MIT opensource license.
  See the included ``LICENSE`` file or visit `opensource.org <http://opensource.org/licenses/MIT>`_ for more information.


pkgId: 066fd462272e81928aa5ee8da1f6be729a0add5090ffd7e21df85e5fd7953a66
name: python-xmltodict
arch: src
version: 0.13.0
epoch: 0
release: 1
summary: Makes working with XML feel like you are working with JSON
url: https://github.com/martinblech/xmltodict
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a27b8828-8064-4b18-a01b-9039b07202d7
location_href: 00009030-python-xmltodict/python-xmltodict-0.13.0-1.src.rpm
checksum_type: sha256
description:
  `xmltodict` is a Python module that makes working with XML feel like you are working with [JSON](http://docs.python.org/library/json.html), as in this ["spec"](http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html):

  [![Build Status](https://travis-ci.com/martinblech/xmltodict.svg?branch=master)](https://travis-ci.com/martinblech/xmltodict)

  ```python
  >>> print(json.dumps(xmltodict.parse("""
  ...  <mydocument has="an attribute">
  ...    <and>
  ...      <many>elements</many>
  ...      <many>more elements</many>
  ...    </and>
  ...    <plus a="complex">
  ...      element as well
  ...    </plus>
  ...  </mydocument>
  ...  """), indent=4))
  {
      "mydocument": {
          "@has": "an attribute",
          "and": {
              "many": [
                  "elements",
                  "more elements"
              ]
          },
          "plus": {
              "@a": "complex",
              "#text": "element as well"
          }
      }
  }
  ```



  By default, `xmltodict` does no XML namespace processing (it just treats namespace declarations as regular node attributes), but passing `process_namespaces=True` will make it expand namespaces for you:

  ```python
  >>> xml = """
  ... <root xmlns="http://defaultns.com/"
  ...       xmlns:a="http://a.com/"
  ...       xmlns:b="http://b.com/">
  ...   <x>1</x>
  ...   <a:y>2</a:y>
  ...   <b:z>3</b:z>
  ... </root>
  ... """
  >>> xmltodict.parse(xml, process_namespaces=True) == {
  ...     'http://defaultns.com/:root': {
  ...         'http://defaultns.com/:x': '1',
  ...         'http://a.com/:y': '2',
  ...         'http://b.com/:z': '3',
  ...     }
  ... }
  True
  ```

  It also lets you collapse certain namespaces to shorthand prefixes, or skip them altogether:

  ```python
  >>> namespaces = {
  ...     'http://defaultns.com/': None, # skip this namespace
  ...     'http://a.com/': 'ns_a', # collapse "http://a.com/" -> "ns_a"
  ... }
  >>> xmltodict.parse(xml, process_namespaces=True, namespaces=namespaces) == {
  ...     'root': {
  ...         'x': '1',
  ...         'ns_a:y': '2',
  ...         'http://b.com/:z': '3',
  ...     },
  ... }
  True
  ```



  `xmltodict` is very fast ([Expat](http://docs.python.org/library/pyexpat.html)-based) and has a streaming mode with a small memory footprint, suitable for big XML dumps like [Discogs](http://discogs.com/data/) or [Wikipedia](http://dumps.wikimedia.org/):

  ```python
  >>> def handle_artist(_, artist):
  ...     print(artist['name'])
  ...     return True
  >>>
  >>> xmltodict.parse(GzipFile('discogs_artists.xml.gz'),
  ...     item_depth=2, item_callback=handle_artist)
  A Perfect Circle
  Fantômas
  King Crimson
  Chris Potter
  ...
  ```

  It can also be used from the command line to pipe objects to a script like this:

  ```python
  import sys, marshal
  while True:
      _, article = marshal.load(sys.stdin)
      print(article['title'])
  ```

  ```sh
  $ bunzip2 enwiki-pages-articles.xml.bz2 | xmltodict.py 2 | myscript.py
  AccessibleComputing
  Anarchism
  AfghanistanHistory
  AfghanistanGeography
  AfghanistanPeople
  AfghanistanCommunications
  Autism
  ...
  ```

  Or just cache the dicts so you don't have to parse that big XML file again. You do this only once:

  ```sh
  $ bunzip2 enwiki-pages-articles.xml.bz2 | xmltodict.py 2 | gzip > enwiki.dicts.gz
  ```

  And you reuse the dicts with every script that needs them:

  ```sh
  $ gunzip enwiki.dicts.gz | script1.py
  $ gunzip enwiki.dicts.gz | script2.py
  ...
  ```



  You can also convert in the other direction, using the `unparse()` method:

  ```python
  >>> mydict = {
  ...     'response': {
  ...             'status': 'good',
  ...             'last_updated': '2014-02-16T23:10:12Z',
  ...     }
  ... }
  >>> print(unparse(mydict, pretty=True))
  <?xml version="1.0" encoding="utf-8"?>
  <response>
  	<status>good</status>
  	<last_updated>2014-02-16T23:10:12Z</last_updated>
  </response>
  ```

  Text values for nodes can be specified with the `cdata_key` key in the python dict, while node properties can be specified with the `attr_prefix` prefixed to the key name in the python dict. The default value for `attr_prefix` is `@` and the default value for `cdata_key` is `#text`.

  ```python
  >>> import xmltodict
  >>>
  >>> mydict = {
  ...     'text': {
  ...         '@color':'red',
  ...         '@stroke':'2',
  ...         '#text':'This is a test'
  ...     }
  ... }
  >>> print(xmltodict.unparse(mydict, pretty=True))
  <?xml version="1.0" encoding="utf-8"?>
  <text stroke="2" color="red">This is a test</text>
  ```

  Lists that are specified under a key in a dictionary use the key as a tag for each item. But if a list does have a parent key, for example if a list exists inside another list, it does not have a tag to use and the items are converted to a string as shown in the example below.  To give tags to nested lists, use the `expand_iter` keyword argument to provide a tag as demonstrated below. Note that using `expand_iter` will break roundtripping.

  ```python
  >>> mydict = {
  ...     "line": {
  ...         "points": [
  ...             [1, 5],
  ...             [2, 6],
  ...         ]
  ...     }
  ... }
  >>> print(xmltodict.unparse(mydict, pretty=True))
  <?xml version="1.0" encoding="utf-8"?>
  <line>
          <points>[1, 5]</points>
          <points>[2, 6]</points>
  </line>
  >>> print(xmltodict.unparse(mydict, pretty=True, expand_iter="coord"))
  <?xml version="1.0" encoding="utf-8"?>
  <line>
          <points>
                  <coord>1</coord>
                  <coord>5</coord>
          </points>
          <points>
                  <coord>2</coord>
                  <coord>6</coord>
          </points>
  </line>
  ```





  You just need to

  ```sh
  $ pip install xmltodict
  ```



  There is an [official Fedora package for xmltodict](https://apps.fedoraproject.org/packages/python-xmltodict).

  ```sh
  $ sudo yum install python-xmltodict
  ```



  There is an [official Arch Linux package for xmltodict](https://www.archlinux.org/packages/community/any/python-xmltodict/).

  ```sh
  $ sudo pacman -S python-xmltodict
  ```



  There is an [official Debian package for xmltodict](https://tracker.debian.org/pkg/python-xmltodict).

  ```sh
  $ sudo apt install python-xmltodict
  ```



  There is an [official FreeBSD port for xmltodict](https://svnweb.freebsd.org/ports/head/devel/py-xmltodict/).

  ```sh
  $ pkg install py36-xmltodict
  ```



  There is an [official openSUSE package for xmltodict](https://software.opensuse.org/package/python-xmltodict).

  ```sh

  $ zypper in python2-xmltodict


  $ zypper in python3-xmltodict
  ```


pkgId: 3ab52f5b6ed0ef0a6de4e5e9a12c6d21e4e8cccf8e978e7913b495e97dd666bd
name: python-xnat
arch: src
version: 0.5.0
epoch: 0
release: 1
url: https://gitlab.com/radiology/infrastructure/xnatpy
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d0f8dbee-9c90-4290-980f-11cbebfb6026
location_href: 00005512-python-xnat/python-xnat-0.5.0-1.src.rpm
checksum_type: sha256
summary:
  An XNAT client that exposes the XNAT REST interface as python objects. Part of the interface is automatically generated based on the servers data model as defined by the xnat schema.

description:
  A new XNAT client that exposes XNAT objects/functions as python
  objects/functions. The aim is to abstract as much of the REST API
  away as possible and make xnatpy feel like native Python code. This
  reduces the need for the user to know the details of the REST API.
  Low level functionality can still be accessed via the connection object
  which has `get`, `head`, `put`, `post`, `delete` methods for more
  directly calling the REST API.


pkgId: 1d69f925239ebfa34864eb6d1b4618e8d9317faa4c2120c3d52da55b919353e8
name: python-xpath-expressions
arch: src
version: 1.0.2
epoch: 0
release: 1
summary: Treat XPath expressions as Python objects
url: https://github.com/orf/xpath-expressions
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6bbd35b2-63ef-4370-aa10-91a91ae48beb
location_href: 00005513-python-xpath-expressions/python-xpath-expressions-1.0.2-1.src.rpm
checksum_type: sha256
description:
  ![https://travis-ci.org/orf/xpath-expressions](https://travis-ci.org/orf/xpath-expressions.svg?branch=master)
  ![https://pypi.org/project/xpath-expressions/](https://badge.fury.io/py/xpath-expressions.svg)


  This is a small, lightweight Python 3.5+ library to aide in the manipulations of
  xpath expressions. It allows you to manipulate them as Python objects with
  Python expressions and operators.



  `pip install xpath-expressions`




  ```python
  from xpath import Expression, Attribute

  root_node = Expression('/root')
  print(root_node.children)                 # /root/*
  print(root_node.name)                     # name(/root)
  print(root_node.attributes[1])            # /root/@*[1]
  print(root_node / 'abc' / 'def')          # /root/abc/def


  print(root_node.text == 'abc')            # /root/text()='abc'

  expr = Attribute('abc') == 'def'
  print(expr)                               # @abc='def'
  print(root_node.children[expr])           # /root/*[@abc='def']


  expr = Attribute('abc') == "def'"
  filtered2 = root_node.children[expr]      # /root/*[@abc="def'"]


  from xpath import func

  expr = func.string_length(root_node.name)
  print(expr)                               # string-length(name(/root/))


  print(expr == 5)                          # string-length(name(/root/)) == 5


  print(func.or_())                         # or()


  from xpath import Functions
  ns_functions = Functions('my-ns:')
  print(ns_functions.something())           # my-ns:something()
  ```


pkgId: 0e51512c8f4ddff75437dbb9d080ee6e45f1d08dfc884e682ce492ca91db0efa
name: python-xstatic-angular-uuid
arch: src
version: 0.0.4.0
epoch: 0
release: 1
summary: Angular-UUID 0.0.4 (XStatic packaging standard)
url: https://github.com/munkychop/angular-uuid
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6fa7cef7-46c2-49f6-969f-6a597a46deea
location_href: 00002896-python-XStatic-Angular-UUID/python-xstatic-angular-uuid-0.0.4.0-1.src.rpm
checksum_type: sha256
description:
  Angular-UUID JavaScript library packaged for setuptools (easy_install) / pip.
  This package is intended to be used by **any** project that needs these files.
  It intentionally does **not** provide any extra code except some metadata
  **nor** has any extra requirements. You MAY use some minimal support code from
  the XStatic base package, if you like.
  You can find more info about the xstatic packaging way in the package `XStatic`.


pkgId: 21459e13efe7f89e8a05f0b50fa458f2d6fd6b20fea5769b659e13a972307bad
name: python-xstatic-angular-vis
arch: src
version: 4.16.0.0
epoch: 0
release: 1
summary: Angular-Vis 4.16.0 (XStatic packaging standard)
url: https://github.com/visjs/angular-visjs
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-de1a11e6-2958-4656-b052-e3bd76e78cc3
location_href: 00002897-python-XStatic-Angular-Vis/python-xstatic-angular-vis-4.16.0.0-1.src.rpm
checksum_type: sha256
description:
  Angular-Vis JavaScript library packaged for setuptools (easy_install) / pip.
  This package is intended to be used by **any** project that needs these files.
  It intentionally does **not** provide any extra code except some metadata
  **nor** has any extra requirements. You MAY use some minimal support code from
  the XStatic base package, if you like.
  You can find more info about the xstatic packaging way in the package `XStatic`.


pkgId: f85aa6376c2ce8d52bea6b27c873e93fe4ce42c849678cabe2977f091fb926a3
name: python-xstatic-filesaver
arch: src
version: 1.3.2.0
epoch: 0
release: 1
summary: FileSaver 1.3.2 (XStatic packaging standard)
url: https://github.com/eligrey/FileSaver.js
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5a6b5220-17ae-4af1-a040-4c0de5f72eea
location_href: 00002903-python-XStatic-FileSaver/python-xstatic-filesaver-1.3.2.0-1.src.rpm
checksum_type: sha256
description:
  FileSaver JavaScript library packaged for setuptools (easy_install) / pip.
  This package is intended to be used by **any** project that needs these files.
  It intentionally does **not** provide any extra code except some metadata
  **nor** has any extra requirements. You MAY use some minimal support code from
  the XStatic base package, if you like.
  You can find more info about the xstatic packaging way in the package `XStatic`.


pkgId: c65335151b2e375f47dd2bb55a83fe3476141d345bec4d779916997810772859
name: python-xstatic-js-yaml
arch: src
version: 3.8.1.0
epoch: 0
release: 1
summary: JS-Yaml 3.8.1 (XStatic packaging standard)
url: https://github.com/nodeca/js-yaml
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6803bfce-4cc6-4a9d-934c-e572cb2a84af
location_href: 00002909-python-XStatic-JS-Yaml/python-xstatic-js-yaml-3.8.1.0-1.src.rpm
checksum_type: sha256
description:
  JS Yaml JavaScript library packaged for setuptools (easy_install) / pip.
  This package is intended to be used by **any** project that needs these files.
  It intentionally does **not** provide any extra code except some metadata
  **nor** has any extra requirements. You MAY use some minimal support code from
  the XStatic base package, if you like.
  You can find more info about the xstatic packaging way in the package `XStatic`.


pkgId: 92ebb2b7970bb640e50ef1588c2d85eab3fdf88b3e3dc8515a0546ddcad67fda
name: python-xstatic-json2yaml
arch: src
version: 0.1.1.0
epoch: 0
release: 1
summary: Json2yaml 0.1.1 (XStatic packaging standard)
url: https://github.com/jeffsu/json2yaml
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-49124603-be8c-43bd-b36c-2806dc981c12
location_href: 00002912-python-XStatic-Json2yaml/python-xstatic-json2yaml-0.1.1.0-1.src.rpm
checksum_type: sha256
description:
  Js2yaml JavaScript library packaged for setuptools (easy_install) / pip.
  This package is intended to be used by **any** project that needs these files.
  It intentionally does **not** provide any extra code except some metadata
  **nor** has any extra requirements. You MAY use some minimal support code from
  the XStatic base package, if you like.
  You can find more info about the xstatic packaging way in the package `XStatic`.


pkgId: 02f8e35d4dd806c83612c0faffc53c1f2a678c4414ec5e9467af96e4d2a2b554
name: python-xxhash-debuginfo
arch: x86_64
version: 3.2.0
epoch: 0
release: 1
summary: Debug information for package python-xxhash
url: https://github.com/ifduyue/python-xxhash
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-df92b26a-8dd5-4271-8f47-231318103113
rpm_sourcerpm: python-xxhash-3.2.0-1.src.rpm
location_href: 00009579-python-xxhash/python-xxhash-debuginfo-3.2.0-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-xxhash.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 8fd95f2fb69eec1c347f1e084085bfcbffb0ca7c3ffce6504569f1aad9b539c3
name: python-xxhash-debugsource
arch: x86_64
version: 3.2.0
epoch: 0
release: 1
summary: Debug sources for package python-xxhash
url: https://github.com/ifduyue/python-xxhash
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-df92b26a-8dd5-4271-8f47-231318103113
rpm_sourcerpm: python-xxhash-3.2.0-1.src.rpm
location_href: 00009579-python-xxhash/python-xxhash-debugsource-3.2.0-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-xxhash.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 5d2c161fb8f09c00f52e8829d0ea017bc23d7d819f2d773f5ac440d44c604beb
name: python-yagmail
arch: src
version: 0.15.293
epoch: 0
release: 1
summary: Yet Another GMAIL client
url: https://github.com/kootenpv/yagmail
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-165f4467-e89a-4235-a0d2-ff116649088d
location_href: 00011236-python-yagmail/python-yagmail-0.15.293-1.src.rpm
checksum_type: sha256
description:
  `yagmail` is a GMAIL/SMTP client that aims to
  make it as simple as possible to send emails.
  Sending an Email is as simple:
      import yagmail
      yag = yagmail.SMTP()
      contents = [
          "This is the body, and here is just text http://somedomain/image.png",
          "You can find an audio file attached.", '/local/path/to/song.mp3'
      ]
      yag.send('to@someone.com', 'subject', contents)
      
      yagmail.SMTP('mygmailusername').send('to@someone.com', 'subject', contents)
  Note that yagmail will read the password securely from
  your keyring, see the section on
  `Username and Password in the repository's README
  <https://github.com/kootenpv/yagmail#username-and-password>`_
  for further details. If you do not want this, you can
  initialize ``yagmail.SMTP`` like this:
      yag = yagmail.SMTP('mygmailusername', 'mygmailpassword')
  but honestly, do you want to have your
  password written in your script?
  For further documentation and examples,
  please go to https://github.com/kootenpv/yagmail.
  The full documentation is available at
  http://yagmail.readthedocs.io/en/latest/.


pkgId: 77d50e03887b0bce73f291dc274ffcc03e8582a93e23a8d1ea9bea6afa9b9b42
name: python-yake
arch: src
version: 0.4.8
epoch: 0
release: 1
summary: Keyword extraction Python package
url: https://pypi.python.org/pypi/yake
rpm_license: LGPLv3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9ba17714-1c6c-4ff3-ada9-44c257ced708
location_href: 00011368-python-yake/python-yake-0.4.8-1.src.rpm
checksum_type: sha256
description:
  Unsupervised Approach for Automatic Keyword Extraction using Text Features.

  YAKE! is a light-weight unsupervised automatic keyword extraction method which rests on text statistical features extracted from single documents to select the most important keywords of a text. Our system does not need to be trained on a particular set of documents, neither it depends on dictionaries, external-corpus, size of the text, language or domain. To demonstrate the merits and the significance of our proposal, we compare it against ten state-of-the-art unsupervised approaches (TF.IDF, KP-Miner, RAKE, TextRank, SingleRank, ExpandRank, TopicRank, TopicalPageRank, PositionRank and MultipartiteRank), and one supervised method (KEA). Experimental results carried out on top of twenty datasets (see Benchmark section below) show that our methods significantly outperform state-of-the-art methods under a number of collections of different sizes, languages or domains. In addition to the python package here described, we also make available a <a href="http://yake.inesctec.pt" target="_blank">demo</a>, an <a href="http://yake.inesctec.pt/apidocs/#!/available_methods/post_yake_v2_extract_keywords" target="_blank">API</a> and a <a href="https://play.google.com/store/apps/details?id=com.yake.yake" target="_blank">mobile app</a>.



  * Unsupervised approach
  * Corpus-Independent
  * Domain and Language Independent
  * Single-Document


  YAKE! is available online [http://yake.inesctec.pt], as an open source Python package [https://github.com/LIAAD/yake] and on [Google Play](https://play.google.com/store/apps/details?id=com.yake.yake).


  Please cite the following works when using YAKE

  <b>In-depth journal paper at Information Sciences Journal</b>

  Campos, R., Mangaravite, V., Pasquali, A., Jatowt, A., Jorge, A., Nunes, C. and Jatowt, A. (2020). YAKE! Keyword Extraction from Single Documents using Multiple Local Features. In Information Sciences Journal. Elsevier, Vol 509, pp 257-289. [pdf](https://doi.org/10.1016/j.ins.2019.09.013)

  <b>ECIR'18 Best Short Paper</b>

  Campos R., Mangaravite V., Pasquali A., Jorge A.M., Nunes C., and Jatowt A. (2018). A Text Feature Based Automatic Keyword Extraction Method for Single Documents. In: Pasi G., Piwowarski B., Azzopardi L., Hanbury A. (eds). Advances in Information Retrieval. ECIR 2018 (Grenoble, France. March 26 – 29). Lecture Notes in Computer Science, vol 10772, pp. 684 - 691. [pdf](https://link.springer.com/chapter/10.1007/978-3-319-76941-7_63)

  Campos R., Mangaravite V., Pasquali A., Jorge A.M., Nunes C., and Jatowt A. (2018). YAKE! Collection-independent Automatic Keyword Extractor. In: Pasi G., Piwowarski B., Azzopardi L., Hanbury A. (eds). Advances in Information Retrieval. ECIR 2018 (Grenoble, France. March 26 – 29). Lecture Notes in Computer Science, vol 10772, pp. 806 - 810. [pdf](https://link.springer.com/chapter/10.1007/978-3-319-76941-7_80)


  [ECIR'18](http://ecir2018.org) Best Short Paper


pkgId: 3b03e0277fe444ff375854a8303e5922de07845b8b08665ea4373ceaa897bb44
name: python-yamale
arch: src
version: 4.0.4
epoch: 0
release: 1
summary: A schema and validator for YAML.
url: https://github.com/23andMe/Yamale
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d4bf061a-c81a-4ec7-8381-24333450d21e
location_href: 00010455-python-yamale/python-yamale-4.0.4-1.src.rpm
checksum_type: sha256
description:
  | :warning: Ensure that your schema definitions come from internal or trusted sources. Yamale does not protect against intentionally malicious schemas. |
  |:------------|
  <img src="https://github.com/23andMe/Yamale/blob/master/yamale.png?raw=true" alt="Yamale" width="400"/>
  A schema and validator for YAML.
  What's YAML? See the current spec [here](http://www.yaml.org/spec/1.2/spec.html) and an introduction
  to the syntax [here](https://github.com/Animosity/CraftIRC/wiki/Complete-idiot's-introduction-to-yaml).
  [![Build Status](https://github.com/23andMe/Yamale/actions/workflows/run-tests.yml/badge.svg)](https://github.com/23andMe/Yamale/actions/workflows/run-tests.yml)
  [![PyPI](https://img.shields.io/pypi/v/yamale.svg)](https://pypi.python.org/pypi/yamale)


pkgId: 88b6db6284fe67fc23fd3d724636ab335fe7c1e43ce14006ceb0558a9c1d18a6
name: python-yamllint
arch: src
version: 1.30.0
epoch: 0
release: 1
summary: A linter for YAML files.
url: https://github.com/adrienverge/yamllint
rpm_license: GPLv3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d2c1c87f-7ba9-41f8-bf3d-0de7e27d2e0c
location_href: 00009322-python-yamllint/python-yamllint-1.30.0-1.src.rpm
checksum_type: sha256
description:
  A linter for YAML files.

  yamllint does not only check for syntax validity, but for weirdnesses like key
  repetition and cosmetic problems such as lines length, trailing spaces,
  indentation, etc.


pkgId: b3f4284befe3428dcca2f0eb55dbb78fc31adf00ab2d9dc3ed057446095073e2
name: python-yamlloader
arch: src
version: 1.2.2
epoch: 0
release: 1
summary: Ordered YAML loader and dumper for PyYAML.
url: https://github.com/Phynix/yamlloader
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3e0f5b41-dfae-4bd1-93ad-afb48e2c2b41
location_href: 00013044-python-yamlloader/python-yamlloader-1.2.2-1.src.rpm
checksum_type: sha256
description:
  This module provides loaders and dumpers for PyYAML. Currently, an OrderedDict loader/dumper is
  implemented, allowing to keep items order
  when loading resp. dumping a file from/to an OrderedDict (Python 3.7+: Also regular dicts are supported and are the default items to be loaded to. As of Python 3.7 preservation of insertion order is a language feature of regular dicts.)
  This project was originally mirrored from
  `yamlordereddict <https://github.com/fmenabe/python-yamlordereddictloader>`_
  Many thanks to the original author François Ménabé!
  The library contains several improvements including automated testing and
  the much faster C-versions of the Loaders/Dumpers.
  `API Documentation <https://yamlloader.readthedocs.io/>`_


pkgId: 44600e4852b01f29a08a71520a723f59bc4a547d4b7967dcbbb167b9b6fd8903
name: python-yamlordereddictloader
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: YAML loader and dump for PyYAML allowing to keep keys order.
url: https://github.com/fmenabe/python-yamlordereddictloader
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-99afc1f9-3247-4b18-8eeb-9c335fd488fe
location_href: 00005518-python-yamlordereddictloader/python-yamlordereddictloader-0.4.0-1.src.rpm
checksum_type: sha256
description:
  This module provide a loader and a dumper for PyYAML allowing to keep items order
  when loading a file (by putting them in ``OrderedDict`` objects) and to manage
  ``OrderedDict`` objects when dumping to a file.
  The loader is based on stackoverflow topic (thanks to Eric Naeseth):
  http://stackoverflow.com/questions/5121931/in-python-how-can-you-load-yaml-mappings-as-ordereddicts#answer-5121963
  Self promotion: I use it a lot with `clg <https://clg.readthedocs.io>`_, which
  allows to generate command-line definition from a configuration file, for keeping
  order of subcommands, options and arguments in the help message!


pkgId: 9d36c6883d63e8b95d47c87eacb3547e72d2cd2890fc1fe82f590a5763ae8fff
name: python-yappi
arch: src
version: 1.4.0
epoch: 0
release: 1
summary: Yet Another Python Profiler
url: https://github.com/sumerc/yappi
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9e44de59-6bca-49b0-9924-a036e5f2c3fa
location_href: 00005520-python-yappi/python-yappi-1.4.0-1.src.rpm
checksum_type: sha256
description:
  <p align="center">
      <img src="https://raw.githubusercontent.com/sumerc/yappi/master/Misc/logo.png" alt="yappi">
  </p>

  <h1 align="center">Yappi</h1>
  <p align="center">
      A tracing profiler that is <b>multithreading, asyncio and gevent</b> aware.
  </p>

  <p align="center">
      <img src="https://www.travis-ci.org/sumerc/yappi.svg?branch=master">
      <img src="https://github.com/sumerc/yappi/workflows/CI/badge.svg?branch=master">
      <img src="https://img.shields.io/pypi/v/yappi.svg">
      <img src="https://img.shields.io/pypi/dw/yappi.svg">
      <img src="https://img.shields.io/pypi/pyversions/yappi.svg">
      <img src="https://img.shields.io/github/last-commit/sumerc/yappi.svg">
      <img src="https://img.shields.io/github/license/sumerc/yappi.svg">
  </p>



  - **Fast**: Yappi is fast. It is completely written in C and lots of love and care went into making it fast.
  - **Unique**: Yappi supports multithreaded, [asyncio](https://github.com/sumerc/yappi/blob/master/doc/coroutine-profiling.md) and [gevent](https://github.com/sumerc/yappi/blob/master/doc/greenlet-profiling.md) profiling. Tagging/filtering multiple profiler results has interesting [use cases](https://github.com/sumerc/yappi/blob/master/doc/api.md#set_tag_callback).
  - **Intuitive**: Profiler can be started/stopped and results can be obtained from any time and any thread.
  - **Standards Compliant**: Profiler results can be saved in [callgrind](http://valgrind.org/docs/manual/cl-format.html) or [pstat](http://docs.python.org/3.4/library/profile.html#pstats.Stats) formats.
  - **Rich in Feature set**: Profiler results can show either [Wall Time](https://en.wikipedia.org/wiki/Elapsed_real_time) or actual [CPU Time](http://en.wikipedia.org/wiki/CPU_time) and can be aggregated from different sessions. Various flags are defined for filtering and sorting profiler results.
  - **Robust**: Yappi has been around for years.



  CPython standard distribution comes with three deterministic profilers. `cProfile`, `Profile` and `hotshot`. `cProfile` is implemented as a C module based on `lsprof`, `Profile` is in pure Python and `hotshot` can be seen as a small subset of a cProfile. The major issue is that all of these profilers lack support for multi-threaded programs and CPU time.

  If you want to profile a  multi-threaded application, you must give an entry point to these profilers and then maybe merge the outputs. None of these profilers are designed to work on long-running multi-threaded applications. It is also not possible to profile an application that start/stop/retrieve traces on the fly with these profilers.

  Now fast forwarding to 2019: With the latest improvements on `asyncio` library and asynchronous frameworks, most of the current profilers lacks the ability to show correct wall/cpu time or even call count information per-coroutine. Thus we need a different kind of approach to profile asynchronous code. Yappi, with v1.2 introduces the concept of `coroutine profiling`. With `coroutine-profiling`, you should be able to profile correct wall/cpu time and call count of your coroutine. (including the time spent in context switches, too). You can see details [here](https://github.com/sumerc/yappi/blob/master/doc/coroutine-profiling.md).




  Can be installed via PyPI

  ```
  $ pip install yappi
  ```

  OR from the source directly.

  ```
  $ pip install git+https://github.com/sumerc/yappi#egg=yappi
  ```





  ```python
  import yappi

  def a():
      for _ in range(10000000):  # do something CPU heavy
          pass

  yappi.set_clock_type("cpu") # Use set_clock_type("wall") for wall time
  yappi.start()
  a()

  yappi.get_func_stats().print_all()
  yappi.get_thread_stats().print_all()
  '''

  Clock type: CPU
  Ordered by: totaltime, desc

  name                                  ncall  tsub      ttot      tavg
  doc.py:5 a                            1      0.117907  0.117907  0.117907

  name           id     tid              ttot      scnt
  _MainThread    0      139867147315008  0.118297  1
  '''
  ```



  You can profile a multithreaded application via Yappi and can easily retrieve
  per-thread profile information by filtering on `ctx_id` with `get_func_stats` API.

  ```python
  import yappi
  import time
  import threading

  _NTHREAD = 3


  def _work(n):
      time.sleep(n * 0.1)


  yappi.start()

  threads = []

  for i in range(_NTHREAD):
      t = threading.Thread(target=_work, args=(i + 1, ))
      t.start()
      threads.append(t)

  for t in threads:
      t.join()

  yappi.stop()


  threads = yappi.get_thread_stats()
  for thread in threads:
      print(
          "Function stats for (%s) (%d)" % (thread.name, thread.id)
      )  # it is the Thread.__class__.__name__
      yappi.get_func_stats(ctx_id=thread.id).print_all()
  '''
  Function stats for (Thread) (3)

  name                                  ncall  tsub      ttot      tavg
  ..hon3.7/threading.py:859 Thread.run  1      0.000017  0.000062  0.000062
  doc3.py:8 _work                       1      0.000012  0.000045  0.000045

  Function stats for (Thread) (2)

  name                                  ncall  tsub      ttot      tavg
  ..hon3.7/threading.py:859 Thread.run  1      0.000017  0.000065  0.000065
  doc3.py:8 _work                       1      0.000010  0.000048  0.000048


  Function stats for (Thread) (1)

  name                                  ncall  tsub      ttot      tavg
  ..hon3.7/threading.py:859 Thread.run  1      0.000010  0.000043  0.000043
  doc3.py:8 _work                       1      0.000006  0.000033  0.000033
  '''
  ```



  You can use `filter_callback` on `get_func_stats` API to filter on functions, modules
  or whatever available in `YFuncStat` object.

  ```python
  import package_a
  import yappi
  import sys

  def a():
      pass

  def b():
      pass

  yappi.start()
  a()
  b()
  package_a.a()
  yappi.stop()


  current_module = sys.modules[__name__]
  stats = yappi.get_func_stats(
      filter_callback=lambda x: yappi.module_matches(x, [current_module])
  )  # x is a yappi.YFuncStat object
  stats.sort("name", "desc").print_all()
  '''
  Clock type: CPU
  Ordered by: name, desc

  name                                  ncall  tsub      ttot      tavg
  doc2.py:10 b                          1      0.000001  0.000001  0.000001
  doc2.py:6 a                           1      0.000001  0.000001  0.000001
  '''


  stats = yappi.get_func_stats(
      filter_callback=lambda x: yappi.func_matches(x, [a, b])
  ).print_all()
  '''
  name                                  ncall  tsub      ttot      tavg
  doc2.py:6 a                           1      0.000001  0.000001  0.000001
  doc2.py:10 b                          1      0.000001  0.000001  0.000001
  '''


  stats = yappi.get_func_stats(filter_callback=lambda x: 'package_a' in x.module
                               ).print_all()
  '''
  name                                  ncall  tsub      ttot      tavg
  package_a/__init__.py:1 a             1      0.000001  0.000001  0.000001
  '''


  stats = yappi.get_func_stats(filter_callback=lambda x: 'a' in x.name
                               ).print_all()
  '''
  name                                  ncall  tsub      ttot      tavg
  doc2.py:6 a                           1      0.000001  0.000001  0.000001
  package_a/__init__.py:1 a             1      0.000001  0.000001  0.000001
  '''
  ```



  You can see that coroutine wall-time's are correctly profiled.

  ```python
  import asyncio
  import yappi

  async def foo():
      await asyncio.sleep(1.0)
      await baz()
      await asyncio.sleep(0.5)

  async def bar():
      await asyncio.sleep(2.0)

  async def baz():
      await asyncio.sleep(1.0)

  yappi.set_clock_type("WALL")
  with yappi.run():
      asyncio.run(foo())
      asyncio.run(bar())
  yappi.get_func_stats().print_all()
  '''
  Clock type: WALL
  Ordered by: totaltime, desc

  name                                  ncall  tsub      ttot      tavg
  doc4.py:5 foo                         1      0.000030  2.503808  2.503808
  doc4.py:11 bar                        1      0.000012  2.002492  2.002492
  doc4.py:15 baz                        1      0.000013  1.001397  1.001397
  '''
  ```



  You can use yappi to profile greenlet applications now!

  ```python
  import yappi
  from greenlet import greenlet
  import time

  class GreenletA(greenlet):
      def run(self):
          time.sleep(1)

  yappi.set_context_backend("greenlet")
  yappi.set_clock_type("wall")

  yappi.start(builtins=True)
  a = GreenletA()
  a.switch()
  yappi.stop()

  yappi.get_func_stats().print_all()
  '''
  name                                  ncall  tsub      ttot      tavg
  tests/test_random.py:6 GreenletA.run  1      0.000007  1.000494  1.000494
  time.sleep                            1      1.000487  1.000487  1.000487
  '''
  ```



  - [Introduction](https://github.com/sumerc/yappi/blob/master/doc/introduction.md)
  - [Clock Types](https://github.com/sumerc/yappi/blob/master/doc/clock_types.md)
  - [API](https://github.com/sumerc/yappi/blob/master/doc/api.md)
  - [Coroutine Profiling](https://github.com/sumerc/yappi/blob/master/doc/coroutine-profiling.md) _(new in 1.2)_
  - [Greenlet Profiling](https://github.com/sumerc/yappi/blob/master/doc/greenlet-profiling.md) _(new in 1.3)_

    Note: Yes. I know I should be moving docs to readthedocs.io. Stay tuned!




    Special thanks to A.Jesse Jiryu Davis:
  - [Python Performance Profiling: The Guts And The Glory (PyCon 2015)](https://www.youtube.com/watch?v=4uJWWXYHxaM)



  Yappi is the default profiler in `PyCharm`. If you have Yappi installed, `PyCharm` will use it. See [the official](https://www.jetbrains.com/help/pycharm/profiler.html) documentation for more details.


pkgId: 28e2eb67a0ff56144e0e878fd36aa82689fb8bfbd2db39a1df98387da61d8864
name: python-yappi-debuginfo
arch: x86_64
version: 1.4.0
epoch: 0
release: 1
summary: Debug information for package python-yappi
url: https://github.com/sumerc/yappi
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-9e44de59-6bca-49b0-9924-a036e5f2c3fa
rpm_sourcerpm: python-yappi-1.4.0-1.src.rpm
location_href: 00005520-python-yappi/python-yappi-debuginfo-1.4.0-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-yappi.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: d6fc2d14a9b2e5092bdb95f454fb76072250a878dc447e6ed1d278939d53f00d
name: python-yappi-debugsource
arch: x86_64
version: 1.4.0
epoch: 0
release: 1
summary: Debug sources for package python-yappi
url: https://github.com/sumerc/yappi
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-9e44de59-6bca-49b0-9924-a036e5f2c3fa
rpm_sourcerpm: python-yappi-1.4.0-1.src.rpm
location_href: 00005520-python-yappi/python-yappi-debugsource-1.4.0-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-yappi.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: c6eefdf87f729939745b44d67623d223420c632a43bfa1593ac7d81939e98210
name: python-yaql
arch: src
version: 2.0.0
epoch: 0
release: 1
summary: YAQL - Yet Another Query Language
url: http://yaql.readthedocs.io
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f889ed93-7352-4514-a47c-2d197d5711c7
location_href: 00005522-python-yaql/python-yaql-2.0.0-1.src.rpm
checksum_type: sha256
description:
  YAQL (Yet Another Query Language) is an embeddable and extensible query
  language, that allows performing complex queries against arbitrary objects. It
  has a vast and comprehensive standard library of frequently used querying
  functions and can be extend even further with user-specified functions. YAQL is
  written in python and is distributed via PyPI.


pkgId: 0b94c881aff180c40aa93d05efcf4344d09745630dfed098acf0b91efe9fd4df
name: python-yara
arch: src
version: 1.7.7
epoch: 0
release: 1
summary: Compile YARA rules to test against files or strings
url: http://code.google.com/p/yara-project/
rpm_license: Apache Software Licence
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1de9d98c-c1fc-43b9-8da8-94ca59beae02
location_href: 00005523-python-yara/python-yara-1.7.7-1.src.rpm
checksum_type: sha256
description:
  Simply run the following::
      > python setup.py install
      > python setup.py test
      > yara-ctypes -h
  or `PyPi`_::
      > pip install yara
      > yara-ctypes -h
      If the package does not contain a pre-compiled libyara library for your
      platform you will need to build and install it. See `notes on building`_.


pkgId: c317b6a769a2eab17db03b13685714b8257930eb031bb3c230b544871bba588f
name: python-yarg
arch: src
version: 0.1.9
epoch: 0
release: 1
summary: A semi hard Cornish cheese, also queries PyPI (PyPI client)
url: https://yarg.readthedocs.org/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a81c5ecb-8758-47d0-93ec-962833c2d01e
location_href: 00005524-python-yarg/python-yarg-0.1.9-1.src.rpm
checksum_type: sha256
description:
  Yarg is a PyPI client.
      >>> import yarg
      >>> package = yarg.get("yarg")
      >>> package.name
      u'yarg'
      >>> package.author
      Author(name=u'Kura', email=u'kura@kura.io')
  Full documentation is at <https://yarg.readthedocs.org>.
  Yarg is released under the `MIT license
  <https://github.com/kura/yarg/blob/master/LICENSE>`_. The `source code is on
  GitHub <https://github.com/kura/yarg>`_ and `issues are also tracked on
  GitHub <https://github.com/kura/yarg/issues>`_.


pkgId: 0d0502c1ff55cbae3364a465058e90e46470b809b22aaa1cb65e07a598385b6d
name: python-yarl-debuginfo
arch: x86_64
version: 1.8.2
epoch: 0
release: 1
summary: Debug information for package python-yarl
url: https://github.com/aio-libs/yarl/
rpm_license: Apache 2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-d9b3f4f1-c38a-475f-82e5-0a5d0ff6c763
rpm_sourcerpm: python-yarl-1.8.2-1.src.rpm
location_href: 00005525-python-yarl/python-yarl-debuginfo-1.8.2-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-yarl.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 4bba6d942a311ad9da4fcacd2bf77ba3ecf46735ac4c4487b8a3fef5eb704630
name: python-yarl-debugsource
arch: x86_64
version: 1.8.2
epoch: 0
release: 1
summary: Debug sources for package python-yarl
url: https://github.com/aio-libs/yarl/
rpm_license: Apache 2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-d9b3f4f1-c38a-475f-82e5-0a5d0ff6c763
rpm_sourcerpm: python-yarl-1.8.2-1.src.rpm
location_href: 00005525-python-yarl/python-yarl-debugsource-1.8.2-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-yarl.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: a8ca62c0d48755bdee942967646872ecc35532906e8c6c3180cc65ab2aca2906
name: python-yarn-api-client
arch: src
version: 1.0.3
epoch: 0
release: 1
summary: Python client for Hadoop® YARN API
url: https://github.com/CODAIT/hadoop-yarn-api-python-client
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-791a76e0-bdb4-43dc-903a-3a95cdd908b8
location_href: 00011375-python-yarn-api-client/python-yarn-api-client-1.0.3-1.src.rpm
checksum_type: sha256
description:
  | yarn-api-client-python | Apache Hadoop |
  | ------------- | ------------- |
  | 1.0.2  | 3.2.1  |
  | 1.0.3  | 3.3.0, 3.3.1  |
  If u have version other than mentioned (or vendored variant like Hortonworks), certain APIs might be not working or have differences in
  implementation. If u plan to use certain API long-term, you might want to make sure its not in Alpha stage in documentation.

  From PyPI
  ```
  pip install yarn-api-client
  ```
  From Anaconda (conda forge)
  ```
  conda install -c conda-forge yarn-api-client
  ```
  From source code
  ```
  pip install git+https://github.com/CODAIT/hadoop-yarn-api-python-client.git
  ```

  See example below:
  ```
  from yarn_api_client.auth import SimpleAuth
  from yarn_api_client.history_server import HistoryServer
  auth = SimpleAuth('impersonated_account_name')
  history_server = HistoryServer('https://127.0.0.2:5678', auth=auth)
  ```

  1. First option - using `requests_kerberos` package
  To avoid deployment issues on a non Kerberized environment, the `requests_kerberos`
  dependency is optional and needs to be explicit installed in order to enable access
  to YARN console protected by Kerberos/SPNEGO.
  `pip install requests_kerberos`
  From python code
  ```
  from yarn_api_client.history_server import HistoryServer
  from requests_kerberos import HTTPKerberosAuth
  history_server = HistoryServer('https://127.0.0.2:5678', auth=HTTPKerberosAuth())
  ```
  PS: You **need** to get valid kerberos ticket in systemwide kerberos cache before running your code, otherwise calls to kerberized environment won't go through (run kinit before proceeding to run code)
  2. Second option - using `gssapi` package
  If you want to avoid using terminal calls, you have to perform SPNEGO handshake to retrieve ticket yourself. Full API documentation: https://pythongssapi.github.io/python-gssapi/latest/


  **Warning**: CLI is outdated & broken. Please don't use CLI. This will be resolved in future releases.
  1. First way
  ```
  bin/yarn_client --help
  ```
  2. Alternative way
  ```
  python -m yarn_api_client --help
  ```

  ```
  from yarn_api_client import ApplicationMaster, HistoryServer, NodeManager, ResourceManager
  am = ApplicationMaster('https://127.0.0.2:5678')
  app_information = am.application_information('application_id')
  ```

  1.0.3 Release
     - Drop support of Python 2.7 (if you still need it for extreme emergency, look into reverting ab4f71582f8c69e908db93905485ba4d00562dfd)
     - Update of supported hadoop version to 3.3.1
     - Add support for YARN_CONF_DIR and HADOOP_CONF_DIR
     - Add class for native SimpleAuth (#106)
     - Add constructor argument for proxies (#109)
  1.0.2 Release
     - Add support for Python 3.8.x
     - Fix HTTPS url parsing
     - Fix JSON body request APIs
     - Handle YARN response with empty contents
     - Better logging support
  1.0.1 Release
     - Passes the authorization instance to the Active RM check
     - Establishes a new (working) documentation site in readthedocs.io: yarn-api-client-python.readthedocs.io
     - Adds more python version (3.7 and 3.8) to test matrix and removes 2.6.
  1.0.0 Release
     - Major cleanup of API.
       - Address/port parameters have been replaced with complete
         endpoints (includes scheme [e.g., http or https]).
       - ResourceManager has been updated to take a list of endpoints for
         improved HA support.
       - ResourceManager, ApplicationMaster, HistoryServer and NodeManager
         have been updated with methods corresponding to the latest REST API.
     - pytest support on Windows has been provided.
     - Documentation has been updated.
     **NOTE:** Applications using APIs relative to releases prior to 1.0 should
     pin their dependency on yarn-api-client to _less than_ 1.0 and are encouraged
     to update to 1.0 as soon as possible.
  0.3.7 Release
     - Honor configured HTTP Policy when no address is provided - enabling
       using of HTTPS in these cases.
  0.3.6 Release
     - Extend ResourceManager to allow applications to determine
       resource availability prior to submission.
  0.3.5 Release
     - Hotfix release to fix internal signature mismatch
  0.3.4 Release
     - More flexible support for discovering Hadoop configuration
       including multiple Resource Managers when HA is configured
     - Properly support YARN post response codes
  0.3.3 Release
     - Properly set Content-Type in PUT requests
     - Check for HADOOP_CONF_DIR env variable
  0.3.2 Release
     - Make Kerberos/SPNEGO dependency optional
  0.3.1 Release
     - Fix cluster_application_kill API
  0.3.0 Release
     - Add support for YARN endpoints protected by Kerberos/SPNEGO
     - Moved to `requests` package for REST API invocation
     - Remove `http_con` property, as connections are now managed by `requests` package
  0.2.5 Release
    - Fixed History REST API
  0.2.4 Release
    - Added compatibility with HA enabled Resource Manager

  YARN API client is developed by an open community, and the current maintainers
  are listed below in alphabetical order:
  - [Dmitry Romanenko](https://github.com/dimon222)
  - [Eduard Iskandarov](https://github.com/toidi)
  - [Kevin Bates](https://github.com/kevin-bates)
  - [Luciano Resende](https://github.com/lresende)


pkgId: 4afcb4972b353eea94c894bb274306ef01daf4b8a9b4eca5f42358b87872e155
name: python-yattag
arch: src
version: 1.15.1
epoch: 0
release: 1
url: https://www.yattag.org
rpm_license: GNU Library or Lesser General Public License (LGPL)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-73d49d11-aa29-4f40-9ac1-30dcfa68e01b
location_href: 00005527-python-yattag/python-yattag-1.15.1-1.src.rpm
checksum_type: sha256
summary:
  Generate HTML or XML in a pythonic way. Pure python alternative to web template engines.Can fill HTML forms with default values and error messages.

description:
  Nested html tags, no need to close tags.
      from yattag import Doc
      doc, tag, text = Doc().tagtext()
      with tag('html'):
          with tag('body', id = 'hello'):
              with tag('h1'):
                  text('Hello world!')
      print(doc.getvalue())


pkgId: 85ed74c0797eddaca81f4685b131fd4641dad55dfac3fadbabfdb9ff9d666d6d
name: python-ydiff
arch: src
version: 1.2
epoch: 0
release: 1
url: https://github.com/ymattw/ydiff
rpm_license: BSD-3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3b58157b-e8b6-4115-9470-10760dc1fe1e
location_href: 00005528-python-ydiff/python-ydiff-1.2-1.src.rpm
checksum_type: sha256
summary:
  View colored, incremental diff in a workspace or from stdin, with side by side and auto pager support

description:
  Term based tool to view *colored*, *incremental* diff in a version controlled
  workspace (supports Git, Mercurial, Perforce and Svn so far) or from stdin,
  with *side by side* (similar to ``diff -y``) and *auto pager* support. Requires
  python (>= 2.5.0) and ``less``.


pkgId: c49f504e249ece3cfcbf98f5c970ba68d9aa73a9b3cd7634463b9e49c21ce5f3
name: python-yellowbrick
arch: src
version: 1.5
epoch: 0
release: 1
summary: A suite of visual analysis and diagnostic tools for machine learning.
url: http://scikit-yb.org/
rpm_license: Apache 2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fe210796-1ee1-47d2-8044-75ab4fed60e0
location_href: 00010206-python-yellowbrick/python-yellowbrick-1.5-1.src.rpm
checksum_type: sha256
description:
  [![Visualizers](https://github.com/DistrictDataLabs/yellowbrick/raw/develop/docs/images/readme/banner.png)](https://www.scikit-yb.org/)

  Yellowbrick is a suite of visual analysis and diagnostic tools designed to facilitate machine learning with scikit-learn. The library implements a new core API object, the `Visualizer` that is an scikit-learn estimator &mdash; an object that learns from data. Similar to transformers or models, visualizers learn from data by creating a visual representation of the model selection workflow.

  Visualizer allow users to steer the model selection process, building intuition around feature engineering, algorithm selection and hyperparameter tuning. For instance, they can help diagnose common problems surrounding model complexity and bias, heteroscedasticity, underfit and overtraining, or class balance issues. By applying visualizers to the model selection workflow, Yellowbrick allows you to steer predictive models toward more successful results, faster.

  The full documentation can be found at [scikit-yb.org](https://scikit-yb.org/) and includes a [Quick Start Guide](https://www.scikit-yb.org/en/latest/quickstart.html) for new users.



  Visualizers are estimators &mdash; objects that learn from data &mdash; whose primary objective is to create visualizations that allow insight into the model selection process. In scikit-learn terms, they can be similar to transformers when visualizing the data space or wrap a model estimator similar to how the `ModelCV` (e.g. [`RidgeCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.RidgeCV.html), [`LassoCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoCV.html)) methods work. The primary goal of Yellowbrick is to create a sensical API similar to scikit-learn. Some of our most popular visualizers include:



  - **Classification Report**: a visual classification report that displays a model's precision, recall, and F1 per-class scores as a heatmap
  - **Confusion Matrix**: a heatmap view of the confusion matrix of pairs of classes in multi-class classification
  - **Discrimination Threshold**: a visualization of the precision, recall, F1-score, and queue rate with respect to the discrimination threshold of a binary classifier
  - **Precision-Recall Curve**: plot the precision vs recall scores for different probability thresholds
  - **ROCAUC**: graph the receiver operator characteristic (ROC) and area under the curve (AUC)



  - **Intercluster Distance Maps**: visualize the relative distance and size of clusters
  - **KElbow Visualizer**: visualize cluster according to the specified scoring function, looking for the "elbow" in the curve.
  - **Silhouette Visualizer**: select `k` by visualizing the silhouette coefficient scores of each cluster in a single model



  - **Manifold Visualization**: high-dimensional visualization with manifold learning
  - **Parallel Coordinates**: horizontal visualization of instances
  - **PCA Projection**: projection of instances based on principal components
  - **RadViz Visualizer**: separation of instances around a circular plot
  - **Rank Features**: single or pairwise ranking of features to detect relationships



  - **Cross Validation Scores**: display the cross-validated scores as a bar chart with the average score plotted as a horizontal line
  - **Feature Importances**: rank features based on their in-model performance
  - **Learning Curve**: show if a model might benefit from more data or less complexity
  - **Recursive Feature Elimination**: find the best subset of features based on importance
  - **Validation Curve**: tune a model with respect to a single hyperparameter



  - **Alpha Selection**: show how the choice of alpha influences regularization
  - **Cook's Distance**: show the influence of instances on linear regression
  - **Prediction Error Plots**: find model breakdowns along the domain of the target
  - **Residuals Plot**: show the difference in residuals of training and test data



  - **Balanced Binning Reference**: generate a histogram with vertical lines showing the recommended value point to the bin data into evenly distributed bins
  - **Class Balance**: show the relationship of the support for each class in both the training and test data by displaying how frequently each class occurs as a bar graph the frequency of the classes' representation in the dataset
  - **Feature Correlation**: visualize the correlation between the dependent variables and the target



  - **Dispersion Plot**: visualize how key terms are dispersed throughout a corpus
  - **PosTag Visualizer**: plot the counts of different parts-of-speech throughout a tagged corpus
  - **Token Frequency Distribution**: visualize the frequency distribution of terms in the corpus
  - **t-SNE Corpus Visualization**: uses stochastic neighbor embedding to project documents
  - **UMAP Corpus Visualization**: plot similar documents closer together to discover clusters

  ... and more! Yellowbrick is adding new visualizers all the time so be sure to check out our [examples gallery]https://github.com/DistrictDataLabs/yellowbrick/tree/develop/examples) &mdash; or even the [develop](https://github.com/districtdatalabs/yellowbrick/tree/develop) branch &mdash; and feel free to contribute your ideas for new Visualizers!


  [![District Data Labs](https://github.com/DistrictDataLabs/yellowbrick/raw/develop/docs/images/readme/affiliates_ddl.png)](https://www.districtdatalabs.com/) [![NumFOCUS Affiliated Project](https://github.com/DistrictDataLabs/yellowbrick/raw/develop/docs/images/readme/affiliates_numfocus.png)](https://numfocus.org/)


pkgId: 970811473dfc8b99bfffc4f507f7d1b21e18bf6035dbc3b3c93977a3eeb0622d
name: python-yfinance
arch: src
version: 0.2.16
epoch: 0
release: 1
summary: Download market data from Yahoo! Finance API
url: https://github.com/ranaroussi/yfinance
rpm_license: Apache
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-860a125e-7acc-489d-b6b4-5903806ff349
location_href: 00010245-python-yfinance/python-yfinance-0.2.16-1.src.rpm
checksum_type: sha256
description:
  **Yahoo!, Y!Finance, and Yahoo! finance are registered trademarks of
  Yahoo, Inc.**
  yfinance is **not** affiliated, endorsed, or vetted by Yahoo, Inc. It's
  an open-source tool that uses Yahoo's publicly available APIs, and is
  intended for research and educational purposes.
  **You should refer to Yahoo!'s terms of use**
  ([here](https://policies.yahoo.com/us/en/yahoo/terms/product-atos/apiforydn/index.htm),
  [here](https://legal.yahoo.com/us/en/yahoo/terms/otos/index.html), and
  [here](https://policies.yahoo.com/us/en/yahoo/terms/index.htm)) **for
  details on your rights to use the actual data downloaded. Remember - the
  Yahoo! finance API is intended for personal use only.**


pkgId: f5e61f49ad613aa580dbd125de64bfa2f614420b76ec1e850b670a7ff40da391
name: python-yourls
arch: src
version: 1.2.3
epoch: 0
release: 1
summary: Python client for YOURLS.
url: https://github.com/razerm/yourls-python
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9c2e12bd-7fa1-4715-ab39-fbac9f402682
location_href: 00005529-python-yourls/python-yourls-1.2.3-1.src.rpm
checksum_type: sha256
description:
  |PyPI Version| |Documentation| |Travis| |Coverage| |Python Version| |MIT License|
  Installation
  ~~~~~~~~~~~~
      $ pip install yourls
  Example
  ~~~~~~~
     >>> from yourls import YOURLSClient
     >>> yourls = YOURLSClient('http://example.com/yourls-api.php', signature='6f344c2a8p')
     >>> yourls.shorten('http://google.com')
     ShortenedURL(
         shorturl='http://example.com/abcde',
         url='http://google.com',
         title='Google',
         date=datetime.datetime(2015, 10, 31, 14, 31, 4),
         ip='203.0.113.0',
         clicks=0,
         keyword='abcde')
  Documentation
  ~~~~~~~~~~~~~
  For in-depth information, `visit the
  documentation <http://yourls-python.readthedocs.org/en/latest/>`__!


pkgId: aef23574bace042669f23f3f5bb6c60c545a12d1d97eba71e61e20dd84bcbe78
name: python-youtube-search
arch: src
version: 2.1.2
epoch: 0
release: 1
summary: Perform YouTube video searches without the API
url: https://github.com/joetats/youtube_search
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1ee75efd-6d17-4bea-b4ea-f83474ed2a1d
location_href: 00011517-python-youtube-search/python-youtube-search-2.1.2-1.src.rpm
checksum_type: sha256
description:
  Python function for searching for youtube videos to avoid using their heavily rate-limited API

  To avoid using the API, this uses the form on the youtube homepage and scrapes the resulting page.



  For a basic search (and all of the current functionality), you can use the search tool as follows:

  ```pip install youtube-search```

  ```python
  from youtube_search import YoutubeSearch

  results = YoutubeSearch('search terms', max_results=10).to_json()

  print(results)





  results = YoutubeSearch('search terms', max_results=10).to_dict()

  print(results)

  ```


pkgId: 3b41547735839dcc360988a9ae35e65aa65ec1f6d1c25c05ed0af2688ace5a78
name: python-youtube-search-python
arch: src
version: 1.6.6
epoch: 0
release: 1
url: https://github.com/alexmercerind/youtube-search-python
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1df78587-9447-4eb2-8ef9-64d01300f2a2
location_href: 00009652-python-youtube-search-python/python-youtube-search-python-1.6.6-1.src.rpm
checksum_type: sha256
summary:
  Search for YouTube videos, channels & playlists & get video information using link WITHOUT YouTube Data API v3

description:
  [![PyPI - Version](https://img.shields.io/pypi/v/youtube-search-python?style=for-the-badge)](https://pypi.org/project/youtube-search-python)
  [![PyPI - Downloads](https://img.shields.io/pypi/dm/youtube-search-python?label=DOWNLOADS&style=for-the-badge)](https://pypi.org/project/youtube-search-python)



  ```bash
  pip3 install youtube-search-python
  ```





  ```python
  from youtubesearchpython import VideosSearch

  videosSearch = VideosSearch('NoCopyrightSounds', limit = 2)

  print(videosSearch.result())
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "result": [
          {
              "type": "video",
              "id": "K4DyBUG242c",
              "title": "Cartoon - On & On (feat. Daniel Levi) [NCS Release]",
              "publishedTime": "5 years ago",
              "duration": "3:28",
              "viewCount": {
                  "text": "389,673,774 views",
                  "short": "389M views"
              },
              "thumbnails": [
                  {
                      "url": "https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBkTusCwcZQlmVAaRQ5rH-mvBuA1g",
                      "width": 480,
                      "height": 270
                  }
              ],
              "richThumbnail": {
                  "url": "https://i.ytimg.com/an_webp/K4DyBUG242c/mqdefault_6s.webp?du=3000&sqp=COCn64IG&rs=AOn4CLBeYxeJ_5lME4jXbFQlv7kIN37kmw",
                  "width": 320,
                  "height": 180
              },
              "descriptionSnippet": [
                  {
                      "text": "NCS: Music Without Limitations NCS Spotify: http://spoti.fi/NCS Free Download / Stream: http://ncs.io/onandon \u25bd Connect with\u00a0..."
                  }
              ],
              "channel": {
                  "name": "NoCopyrightSounds",
                  "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
                  "thumbnails": [
                      {
                          "url": "https://yt3.ggpht.com/a-/AOh14GhS0G5FwV8rMhVCUWSDp36vWEvnNs5Vl97Zww=s68-c-k-c0x00ffffff-no-rj-mo",
                          "width": 68,
                          "height": 68
                      }
                  ],
                  "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
              },
              "accessibility": {
                  "title": "Cartoon - On & On (feat. Daniel Levi) [NCS Release] by NoCopyrightSounds 5 years ago 3 minutes, 28 seconds 389,673,774 views",
                  "duration": "3 minutes, 28 seconds"
              },
              "link": "https://www.youtube.com/watch?v=K4DyBUG242c",
              "shelfTitle": null
          },
          {
              "type": "video",
              "id": "yJg-Y5byMMw",
              "title": "Warriyo - Mortals (feat. Laura Brehm) [NCS Release]",
              "publishedTime": "3 years ago",
              "duration": "3:50",
              "viewCount": {
                  "text": "153,353,801 views",
                  "short": "153M views"
              },
              "thumbnails": [
                  {
                      "url": "https://i.ytimg.com/vi/yJg-Y5byMMw/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDY-mve79IweErMo-71AsKEIB1m0A",
                      "width": 480,
                      "height": 270
                  }
              ],
              "richThumbnail": {
                  "url": "https://i.ytimg.com/an_webp/K4DyBUG242c/mqdefault_6s.webp?du=3000&sqp=COCn64IG&rs=AOn4CLBeYxeJ_5lME4jXbFQlv7kIN37kmw",
                  "width": 320,
                  "height": 180
              },
              "descriptionSnippet": [
                  {
                      "text": "NCS: Music Without Limitations NCS Spotify: http://spoti.fi/NCS Free Download / Stream: http://ncs.io/mortals Connect with NCS:\u00a0..."
                  }
              ],
              "channel": {
                  "name": "NoCopyrightSounds",
                  "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
                  "thumbnails": [
                      {
                          "url": "https://yt3.ggpht.com/a-/AOh14GhS0G5FwV8rMhVCUWSDp36vWEvnNs5Vl97Zww=s68-c-k-c0x00ffffff-no-rj-mo",
                          "width": 68,
                          "height": 68
                      }
                  ],
                  "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
              },
              "accessibility": {
                  "title": "Warriyo - Mortals (feat. Laura Brehm) [NCS Release] by NoCopyrightSounds 3 years ago 3 minutes, 50 seconds 153,353,801 views",
                  "duration": "3 minutes, 50 seconds"
              },
              "link": "https://www.youtube.com/watch?v=yJg-Y5byMMw",
              "shelfTitle": null
          }
      ]
  }
  ```

  </details>





  ```python
  from youtubesearchpython.__future__ import VideosSearch

  videosSearch = VideosSearch('NoCopyrightSounds', limit = 2)
  videosResult = await videosSearch.next()
  print(videosResult)
  ```

  Read more about usage & examples of newer asynchronous version of this library [HERE](https://github.com/alexmercerind/youtube-search-python/tree/main/youtubesearchpython/__future__).






  ```python
  from youtubesearchpython import ChannelsSearch

  channelsSearch = ChannelsSearch('NoCopyrightSounds', limit = 10, region = 'US')

  print(channelsSearch.result())
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "result": [
          {
              "type": "channel",
              "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
              "title": "NoCopyrightSounds",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwngbenDpBxHNZlecDGyccHeVyQB22dPZnPuhbW8LHw=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwngbenDpBxHNZlecDGyccHeVyQB22dPZnPuhbW8LHw=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "850",
              "descriptionSnippet": [
                  {
                      "text": "NoCopyrightSounds",
                      "bold": true
                  },
                  {
                      "text": " is a copyright free / stream safe record label, providing free to use music to the content creator community."
                  }
              ],
              "subscribers": "28.7M subscribers",
              "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
          },
          {
              "type": "channel",
              "id": "UCg-vlcyvOyNVPV6Neogmubg",
              "title": "NoCopyrightSounds Hindi",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwnjDHXULXSvX7u71Rmb2f-Cqly0ron2F1N3szu8Y=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwnjDHXULXSvX7u71Rmb2f-Cqly0ron2F1N3szu8Y=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "56",
              "descriptionSnippet": [
                  {
                      "text": "The Official NCS HINDI Songs Channel for Nocopyright hindi audios."
                  }
              ],
              "subscribers": "13.7K subscribers",
              "link": "https://www.youtube.com/channel/UCg-vlcyvOyNVPV6Neogmubg"
          },
          {
              "type": "channel",
              "id": "UCrL9x8LllOU2LOVgTo951kA",
              "title": "NoCopyrightSounds",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwnhXShCsmo9VwL4KC8j3GNHgHyBBJ0RCmbAUKrwg=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwnhXShCsmo9VwL4KC8j3GNHgHyBBJ0RCmbAUKrwg=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "2",
              "descriptionSnippet": [
                  {
                      "text": "NCS [NopCopyrightSounds] is a channel dedicated to promoting the best FREE DOWNLOAD music on the net. Every track\u00a0..."
                  }
              ],
              "subscribers": "1.71K subscribers",
              "link": "https://www.youtube.com/channel/UCrL9x8LllOU2LOVgTo951kA"
          },
          {
              "type": "channel",
              "id": "UCYZvaL6G3m4-UbvWGlyFeLg",
              "title": "NoCopyrightSounds",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwnisxA4V_U0Ffh0K-cdnqwGZjs62hKv2-IAfzIqc=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwnisxA4V_U0Ffh0K-cdnqwGZjs62hKv2-IAfzIqc=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "33",
              "descriptionSnippet": null,
              "subscribers": null,
              "link": "https://www.youtube.com/channel/UCYZvaL6G3m4-UbvWGlyFeLg"
          },
          {
              "type": "channel",
              "id": "UCi7xVhyWWf2eTc0GO0Ty9HQ",
              "title": "NoCopyrightSounds",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwngOJ2zbLEkNs96PNp0g9h27l64mwRFhR1vZ9W7u=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwngOJ2zbLEkNs96PNp0g9h27l64mwRFhR1vZ9W7u=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "1 video",
              "descriptionSnippet": null,
              "subscribers": "2 subscribers",
              "link": "https://www.youtube.com/channel/UCi7xVhyWWf2eTc0GO0Ty9HQ"
          },
          {
              "type": "channel",
              "id": "UCOSiFTIAReRzkPBXaQAuXCQ",
              "title": "NoCopyrightSounds",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwng1UBDlLdYyqTofL6x_5hqPMTFnMXxAN9C9_t8Y=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwng1UBDlLdYyqTofL6x_5hqPMTFnMXxAN9C9_t8Y=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "8",
              "descriptionSnippet": [
                  {
                      "text": "YGW MEDIA GROUP 04."
                  }
              ],
              "subscribers": "11 subscribers",
              "link": "https://www.youtube.com/channel/UCOSiFTIAReRzkPBXaQAuXCQ"
          },
          {
              "type": "channel",
              "id": "UCSFpIv5SZlg4ub_IWgGKkIA",
              "title": "NoCopyrightSounds Lyrics",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwng_J1igSuKFWowZ8OFpT1dPCPgzqEvVkGImwM3Dpg=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwng_J1igSuKFWowZ8OFpT1dPCPgzqEvVkGImwM3Dpg=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "82",
              "descriptionSnippet": [
                  {
                      "text": "Welcome To "
                  },
                  {
                      "text": "NoCopyrightSounds",
                      "bold": true
                  },
                  {
                      "text": " Lyrics "
                  },
                  {
                      "text": "NoCopyrightSounds",
                      "bold": true
                  },
                  {
                      "text": " lyrics provides music from a variety of licenses that are certainly\u00a0..."
                  }
              ],
              "subscribers": null,
              "link": "https://www.youtube.com/channel/UCSFpIv5SZlg4ub_IWgGKkIA"
          },
          {
              "type": "channel",
              "id": "UCcE-Gvu5j55MdREM1a4_EqA",
              "title": "NoCopyrightSounds",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwnhbzZwQIVabdGA1SteO2BCtmrG3uT_cpzmJvtBY=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwnhbzZwQIVabdGA1SteO2BCtmrG3uT_cpzmJvtBY=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "6",
              "descriptionSnippet": null,
              "subscribers": "166 subscribers",
              "link": "https://www.youtube.com/channel/UCcE-Gvu5j55MdREM1a4_EqA"
          },
          {
              "type": "channel",
              "id": "UCCOWDgeFmwW--woYtCYws8Q",
              "title": "NoCopyrightSounds 1 HOUR",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwnipj6lV7p6i8Mq7uAlDj5qHsQkiwgwdtPs_vCKy=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwnipj6lV7p6i8Mq7uAlDj5qHsQkiwgwdtPs_vCKy=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "689",
              "descriptionSnippet": [
                  {
                      "text": "NoCopyrightSounds",
                      "bold": true
                  },
                  {
                      "text": " is a record label dedicated to releasing FREE music for the sole purpose of providing creators with the finest\u00a0..."
                  }
              ],
              "subscribers": null,
              "link": "https://www.youtube.com/channel/UCCOWDgeFmwW--woYtCYws8Q"
          },
          {
              "type": "channel",
              "id": "UCSI5zGuirscirQc6UOy_yww",
              "title": "NoCopyrightSounds",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwni92w-CAOUnlNfyIVxdCmvMoQmENZbw1wjFOQKjug=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwni92w-CAOUnlNfyIVxdCmvMoQmENZbw1wjFOQKjug=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "29",
              "descriptionSnippet": [
                  {
                      "text": "NoCopyrightSounds",
                      "bold": true
                  },
                  {
                      "text": " is a Record Label dedicated to giving a platform to the next generation of Artists in Electronic Music,\u00a0..."
                  }
              ],
              "subscribers": null,
              "link": "https://www.youtube.com/channel/UCSI5zGuirscirQc6UOy_yww"
          }
      ]
  }
  ```

  </details>



  ```python
  from youtubesearchpython import PlaylistsSearch

  playlistsSearch = PlaylistsSearch('NoCopyrightSounds', limit = 1)

  print(playlistsSearch.result())
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "result": [
          {
              "type": "playlist",
              "id": "PLGde6kPURikrUszpUgafLZiOgr5o7pBF0",
              "title": "NoCopyrightSounds",
              "videoCount": "6",
              "channel": {
                  "name": "Bruno Neves",
                  "id": "UCtqpCV2HkMCSi5InFNBNv0g",
                  "link": "https://www.youtube.com/channel/UCtqpCV2HkMCSi5InFNBNv0g"
              },
              "thumbnails": [
                  {
                      "url": "https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLBw6Bf7J9COwl1LxqhmGbSQgdFj3w",
                      "width": 168,
                      "height": 94
                  },
                  {
                      "url": "https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-oaymwEWCMQBEG5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLBjJCIZlrSGSPjc-7yKc0QQuWRdhg",
                      "width": 196,
                      "height": 110
                  },
                  {
                      "url": "https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCRIQ0IochteE0KM2tlK2PVVAQKhA",
                      "width": 246,
                      "height": 138
                  },
                  {
                      "url": "https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAQYBDz8gWKw_q4Zyb_H6J_DdZCaA",
                      "width": 336,
                      "height": 188
                  }
              ],
              "link": "https://www.youtube.com/playlist?list=PLGde6kPURikrUszpUgafLZiOgr5o7pBF0"
          }
      ]
  }
  ```

  </details>



  ```python
  from youtubesearchpython import *

  customSearch = CustomSearch('NoCopyrightSounds', VideoSortOrder.uploadDate, limit = 1)

  print(customSearch.result())
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "result": [
          {
              "type": "video",
              "id": "k8-drvf4Ruo",
              "title": "Ambient Music 2020 \ud83c\udfb5 voices \ud83c\udfb5 NoCopyrightSounds",
              "publishedTime": "30 minutes ago",
              "duration": "2:29",
              "viewCount": {
                  "text": "4 views",
                  "short": "4 views"
              },
              "thumbnails": [
                  {
                      "url": "https://i.ytimg.com/vi/k8-drvf4Ruo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDomB-9ivVHpwci6STdNAqQBMBzJA",
                      "width": 360,
                      "height": 202
                  },
                  {
                      "url": "https://i.ytimg.com/vi/k8-drvf4Ruo/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCPrVwYygJ3627h8F-oU3khKehm4g",
                      "width": 720,
                      "height": 404
                  }
              ],
              "richThumbnail": {
                  "url": "https://i.ytimg.com/an_webp/K4DyBUG242c/mqdefault_6s.webp?du=3000&sqp=COCn64IG&rs=AOn4CLBeYxeJ_5lME4jXbFQlv7kIN37kmw",
                  "width": 320,
                  "height": 180
              },
              "descriptionSnippet": [
                  {
                      "text": "Don't forget to like & share if you enjoy it."
                  }
              ],
              "channel": {
                  "name": "Sky Sound",
                  "id": "UCQT8W5qZn7TCZBW39dVoaBw",
                  "thumbnails": [
                      {
                          "url": "https://yt3.ggpht.com/a-/AOh14GhxrkkF27iL3sLTKzWLu3rrO-qtQ7uMPg4SqA=s68-c-k-c0x00ffffff-no-rj-mo",
                          "width": 68,
                          "height": 68
                      }
                  ],
                  "link": "https://www.youtube.com/channel/UCQT8W5qZn7TCZBW39dVoaBw"
              },
              "accessibility": {
                  "title": "Ambient Music 2020 \ud83c\udfb5 voices \ud83c\udfb5 NoCopyrightSounds by Sky Sound 30 minutes ago 2 minutes, 29 seconds 4 views",
                  "duration": "2 minutes, 29 seconds"
              },
              "link": "https://www.youtube.com/watch?v=k8-drvf4Ruo",
              "shelfTitle": null
          }
      ]
  }
  ```

  </details>



  ```python
  from youtubesearchpython import Search

  allSearch = Search('NoCopyrightSounds', limit = 1)

  print(allSearch.result())
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "result": [
          {
              "type": "channel",
              "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
              "title": "NoCopyrightSounds",
              "thumbnails": [
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwngbenDpBxHNZlecDGyccHeVyQB22dPZnPuhbW8LHw=s88-c-k-c0x00ffffff-no-rj-mo",
                      "width": 88,
                      "height": 88
                  },
                  {
                      "url": "//yt3.ggpht.com/ytc/AAUvwngbenDpBxHNZlecDGyccHeVyQB22dPZnPuhbW8LHw=s176-c-k-c0x00ffffff-no-rj-mo",
                      "width": 176,
                      "height": 176
                  }
              ],
              "videoCount": "850",
              "descriptionSnippet": [
                  {
                      "text": "NoCopyrightSounds",
                      "bold": true
                  },
                  {
                      "text": " is a copyright free / stream safe record label, providing free to use music to the content creator community."
                  }
              ],
              "subscribers": "28.7M subscribers",
              "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
          },
      ]
  }
  ```

  </details>

  You may see the [example](https://github.com/alexmercerind/youtube-search-python/blob/main/syncExample.py) for more information.






  You may call ```next``` method as follows, to get the results on the next pages.

  Calling ```result``` method after calling ```next``` will give you result on that the next page.

  ```python
  from youtubesearchpython import VideosSearch

  search = VideosSearch('NoCopyrightSounds')

  print(search.result()['result'])

  ''' Getting result from 2nd page. '''
  search.next()
  print(search.result()['result'])

  ''' Getting result from 3rd page. '''
  search.next()
  print(search.result()['result'])

  ''' Getting result from 4th page. '''
  search.next()
  print(search.result()['result'])
  ```



  ```python
  '''
  Getting information about video or its formats using video link or video ID.

  `Video.get` method will give both information & formats of the video
  `Video.getInfo` method will give only information about the video.
  `Video.getFormats` method will give only formats of the video.

  You may either pass link or ID, method will take care itself.

  YouTube doesn't provide uploadDate and publishDate in its InnerTube API, thus we have to use HTML requests to get it.
  This is disabled by default as it is very inefficient, but if you really need it, you can explicitly set parameter to Video.get() function: get_upload_date=True
  By default, we use InnerTube API for Video.get() and Video.getFormats(), meanwhile we use HTML parsing on Video.getInfo()
  You can set get_upload_date ONLY TO Video.get(), as you don't get info with Video.getFormats()
  '''
  video = Video.get('https://www.youtube.com/watch?v=z0GKGpObgPY', mode = ResultMode.json, get_upload_date=True)
  print(video)
  videoInfo = Video.getInfo('https://youtu.be/z0GKGpObgPY', mode = ResultMode.json)
  print(videoInfo)
  videoFormats = Video.getFormats('z0GKGpObgPY')
  print(videoFormats)
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "id": "E07s5ZYygMg",
      "title": "Harry Styles - Watermelon Sugar (Official Video)",
      "viewCount": {
          "text": "170389228"
      },
      "thumbnails": [
          {
              "url": "https://i.ytimg.com/vi/E07s5ZYygMg/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLCT6nkbmYf-zbqAFgzF0D9PUhtsOQ",
              "width": 168,
              "height": 94
          },
          {
              "url": "https://i.ytimg.com/vi/E07s5ZYygMg/hqdefault.jpg?sqp=-oaymwEiCMQBEG5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLA-JdoctyNp4aaj9dVtR0c6l5RDVw",
              "width": 196,
              "height": 110
          },
          {
              "url": "https://i.ytimg.com/vi/E07s5ZYygMg/hqdefault.jpg?sqp=-oaymwEjCPYBEIoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBquHs9OWY5Dy1nE_syglwKP6-pMw",
              "width": 246,
              "height": 138
          },
          {
              "url": "https://i.ytimg.com/vi/E07s5ZYygMg/hqdefault.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDSjHwdHxt9aU8NTojucGLp4PurTA",
              "width": 336,
              "height": 188
          },
          {
              "url": "https://i.ytimg.com/vi/E07s5ZYygMg/maxresdefault.jpg?v=5ebedc0c",
              "width": 1920,
              "height": 1080
          }
      ],
      "description": "This video is dedicated to touching.\nListen to Harry Styles\u2019 new album \u2018Fine Line\u2019 now: https://HStyles.lnk.to/FineLineAY \n\nFollow Harry Styles:\nFacebook: https://HarryStyles.lnk.to/followFI\nInstagram: https://HarryStyles.lnk.to/followII\nTwitter: https://HarryStyles.lnk.to/followTI\nWebsite: https://HarryStyles.lnk.to/followWI\nSpotify: https://HarryStyles.lnk.to/followSI\nYouTube: https://HarryStyles.lnk.to/subscribeYD\n\nLyrics: \n\nTastes like strawberries\nOn a summer evening\nAnd it sounds just like a song\nI want more berries\nAnd that summer feeling\nIt\u2019s so wonderful and warm\nBreathe me in\nBreathe me out\nI don\u2019t know if I could ever go without\nI\u2019m just thinking out loud\nI don\u2019t know if I could ever go without\n \nWatermelon sugar high\nWatermelon sugar high\nWatermelon sugar high\nWatermelon sugar high\nWatermelon sugar\n \nStrawberries\nOn a summer evening\nBaby, you\u2019re the end of June\nI want your belly\nAnd that summer feeling\nGetting washed away in you\nBreathe me in\nBreathe me out\nI don\u2019t know if I could ever go without\n \nWatermelon sugar high\n \nI just wanna taste it\nI just wanna taste it\nWatermelon sugar high\n \nTastes like strawberries\nOn a summer evening\nAnd it sounds just like a song\nI want your belly\nAnd that summer feeling\nI don\u2019t know if I could ever go without\n \nWatermelon sugar high\n \nI just wanna taste it\nI just wanna taste it\nWatermelon sugar high\nI just wanna taste it\nI just wanna taste it\nWatermelon sugar high\n \nWatermelon Sugar\n\n#HarryStyles #WatermelonSugar #FineLine",
      "channel": {
          "name": "HarryStylesVEVO",
          "id": "UCbOCbp5gXL8jigIBZLqMPrw",
          "link": "https://www.youtube.com/channel/UCbOCbp5gXL8jigIBZLqMPrw"
      },
      "averageRating": 4.9043722,
      "keywords": [
          "Fine Line",
          "Harry Styles Fine Line",
          "New Harry Styles",
          "Harry Styles Album",
          "HS2",
          "One Direction",
          "Eroda",
          "HStyles",
          "HarryStyles",
          "New HS",
          "Watermelon",
          "Sugar",
          "Watermlon Sugar",
          "Harry Styles Watermelon Sugar",
          "Fine Line Watermelon Sugar",
          "Watermelon Sugar Fine Line",
          "Harry Styles Watermelon Sguar Official Audio",
          "Harry Styles Watermelon Sugar Song",
          "HS Watermelon Sugar",
          "Harry Styles Watermelon Sugar Video",
          "Harry Styles Watermelon Sugar Official Video",
          "Harry"
      ],
      "link": "https://www.youtube.com/watch?v=E07s5ZYygMg",
      "streamingData": [
          {
              "adaptiveFormats": [
                  {
                      "itag": 137,
                      "mimeType": "video/mp4; codecs=\"avc1.640028\"",
                      "bitrate": 4517689,
                      "width": 1920,
                      "height": 1080,
                      "initRange": {
                          "start": "0",
                          "end": "740"
                      },
                      "indexRange": {
                          "start": "741",
                          "end": "1228"
                      },
                      "lastModified": "1601811652909447",
                      "contentLength": "75694686",
                      "quality": "hd1080",
                      "fps": 24,
                      "qualityLabel": "1080p",
                      "projectionType": "RECTANGULAR",
                      "averageBitrate": 3207181,
                      "approxDurationMs": "188813",
                      "signatureCipher": "s=F%3DX%3DgIkn_MWCUvQZ__3tR_7gPNDBeOz8n9M0WGxNtIZ6zwxAiA-VALQ9F5bz%3DW8I_Z8WfXPLHjEGEn_JRVVu7BcNJJfjKAhIARw8JQ0qOAAOAQ&sp=sig&url=https://r7---sn-gwpa-5bge.googlevideo.com/videoplayback%3Fexpire%3D1609521167%26ei%3DrwPvX6ayN7GImgel4b2YDg%26ip%3D132.154.228.240%26id%3Do-AB56znPv_llgJ0v0XuIn4mf-4F2feyfn78hi9AowVgJP%26itag%3D137%26aitags%3D133%252C134%252C135%252C136%252C137%252C160%252C242%252C243%252C244%252C247%252C248%252C278%252C394%252C395%252C396%252C397%252C398%252C399%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DCl%26mm%3D31%252C29%26mn%3Dsn-gwpa-5bge%252Csn-gwpa-qxay%26ms%3Dau%252Crdu%26mv%3Dm%26mvi%3D7%26pcm2cms%3Dyes%26pl%3D19%26gcr%3Din%26initcwndbps%3D156250%26vprv%3D1%26mime%3Dvideo%252Fmp4%26ns%3DAmm7Bly72tYhQYuUBTu4ougF%26gir%3Dyes%26clen%3D75694686%26dur%3D188.813%26lmt%3D1601811652909447%26mt%3D1609499069%26fvip%3D7%26keepalive%3Dyes%26c%3DWEB%26txp%3D5535432%26n%3DRBQO4tIQGFK2ymlT%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Caitags%252Csource%252Crequiressl%252Cgcr%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpcm2cms%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRQIgTGJdeFFnVZy97rzAeBnJCSdcY7KWBCa21RQ9ZvkH0KsCIQD1-Vzcj53p39l_DWtK1b69VjQmtBi_SIZOZD0hzXHJNA%253D%253D"
                  },
                  {
                      "itag": 248,
                      "mimeType": "video/webm; codecs=\"vp9\"",
                      "bitrate": 2677426,
                      "width": 1920,
                      "height": 1080,
                      "initRange": {
                          "start": "0",
                          "end": "219"
                      },
                      "indexRange": {
                          "start": "220",
                          "end": "861"
                      },
                      "lastModified": "1594499920972798",
                      "contentLength": "54314997",
                      "quality": "hd1080",
                      "fps": 24,
                      "qualityLabel": "1080p",
                      "projectionType": "RECTANGULAR",
                      "averageBitrate": 2301324,
                      "colorInfo": {
                          "primaries": "COLOR_PRIMARIES_BT709",
                          "transferCharacteristics": "COLOR_TRANSFER_CHARACTERISTICS_BT709",
                          "matrixCoefficients": "COLOR_MATRIX_COEFFICIENTS_BT709"
                      },
                      "approxDurationMs": "188813",
                      "signatureCipher": "s=4WSWyDZ4VUW0FxNi5blaiF4ilQNYR-3uChA822Y034mMGICMPJy_OPOcgmaH7OjHiz7P3SA11EXoi7xWDBddADzQhXgIARw8JQ0qOAAOAA&sp=sig&url=https://r7---sn-gwpa-5bge.googlevideo.com/videoplayback%3Fexpire%3D1609521167%26ei%3DrwPvX6ayN7GImgel4b2YDg%26ip%3D132.154.228.240%26id%3Do-AB56znPv_llgJ0v0XuIn4mf-4F2feyfn78hi9AowVgJP%26itag%3D248%26aitags%3D133%252C134%252C135%252C136%252C137%252C160%252C242%252C243%252C244%252C247%252C248%252C278%252C394%252C395%252C396%252C397%252C398%252C399%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DCl%26mm%3D31%252C29%26mn%3Dsn-gwpa-5bge%252Csn-gwpa-qxay%26ms%3Dau%252Crdu%26mv%3Dm%26mvi%3D7%26pcm2cms%3Dyes%26pl%3D19%26gcr%3Din%26initcwndbps%3D156250%26vprv%3D1%26mime%3Dvideo%252Fwebm%26ns%3DAmm7Bly72tYhQYuUBTu4ougF%26gir%3Dyes%26clen%3D54314997%26dur%3D188.813%26lmt%3D1594499920972798%26mt%3D1609499069%26fvip%3D7%26keepalive%3Dyes%26c%3DWEB%26txp%3D5535432%26n%3DRBQO4tIQGFK2ymlT%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Caitags%252Csource%252Crequiressl%252Cgcr%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpcm2cms%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRgIhAJHI4m9CrBPc-vEl_qXPYvACMjDAgC7dGWk5cZ5yc4DTAiEA36ijZkSFmCngvJZ5ULpRFJLGB3wWohsxABHZJL_q4_c%253D"
                  },
                  {
                      "itag": 399,
                      "mimeType": "video/mp4; codecs=\"av01.0.08M.08\"",
                      "bitrate": 2252425,
                      "width": 1920,
                      "height": 1080,
                      "initRange": {
                          "start": "0",
                          "end": "699"
                      },
                      "indexRange": {
                          "start": "700",
                          "end": "1187"
                      },
                      "lastModified": "1602396935824004",
                      "contentLength": "40536309",
                      "quality": "hd1080",
                      "fps": 24,
                      "qualityLabel": "1080p",
                      "projectionType": "RECTANGULAR",
                      "averageBitrate": 1717521,
                      "colorInfo": {
                          "primaries": "COLOR_PRIMARIES_BT709",
                          "transferCharacteristics": "COLOR_TRANSFER_CHARACTERISTICS_BT709",
                          "matrixCoefficients": "COLOR_MATRIX_COEFFICIENTS_BT709"
                      },
                      "approxDurationMs": "188813",
                      "signatureCipher": "s=ZJwJxM3AbUoW4wiucKj-hgbD-KpvS21BYBD1lsDZa7SPCICMZo9flYaa2ePw-6CdA1a_DwNtjbk4KXaTb0U1btiIfDgIARw8JQ0qOAAOAA&sp=sig&url=https://r7---sn-gwpa-5bge.googlevideo.com/videoplayback%3Fexpire%3D1609521167%26ei%3DrwPvX6ayN7GImgel4b2YDg%26ip%3D132.154.228.240%26id%3Do-AB56znPv_llgJ0v0XuIn4mf-4F2feyfn78hi9AowVgJP%26itag%3D399%26aitags%3D133%252C134%252C135%252C136%252C137%252C160%252C242%252C243%252C244%252C247%252C248%252C278%252C394%252C395%252C396%252C397%252C398%252C399%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DCl%26mm%3D31%252C29%26mn%3Dsn-gwpa-5bge%252Csn-gwpa-qxay%26ms%3Dau%252Crdu%26mv%3Dm%26mvi%3D7%26pcm2cms%3Dyes%26pl%3D19%26gcr%3Din%26initcwndbps%3D156250%26vprv%3D1%26mime%3Dvideo%252Fmp4%26ns%3DAmm7Bly72tYhQYuUBTu4ougF%26gir%3Dyes%26clen%3D40536309%26dur%3D188.813%26lmt%3D1602396935824004%26mt%3D1609499069%26fvip%3D7%26keepalive%3Dyes%26c%3DWEB%26txp%3D5531432%26n%3DRBQO4tIQGFK2ymlT%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Caitags%252Csource%252Crequiressl%252Cgcr%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpcm2cms%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRAIgB9Jm-n4o3HkYm1cr2pVG9NLb_7Tmp22lXGwKkWSiwZ0CIBKSMK5PqbPHniDqOFCPoqa4eT_Y8hQDSWM7k_V8A99p"
                  },
                  {
                      "itag": 136,
                      "mimeType": "video/mp4; codecs=\"avc1.4d401f\"",
                      "bitrate": 1247138,
                      "width": 1280,
                      "height": 720,
                      "initRange": {
                          "start": "0",
                          "end": "738"
                      },
                      "indexRange": {
                          "start": "739",
                          "end": "1226"
                      },
                      "lastModified": "1601811623765749",
                      "contentLength": "18074560",
                      "quality": "hd720",
                      "fps": 24,
                      "qualityLabel": "720p",
                      "projectionType": "RECTANGULAR",
                      "averageBitrate": 765818,
                      "approxDurationMs": "188813",
                      "signatureCipher": "s=y%3Dp%3DgBSUCkvVl7q-hefXAmtE95tx4YYx2uLiqm0fDKUL2hBCQICspkvlYjtn%3DvRH0iGB5p9zloazr8oDbuPc5yFs81PaJfgIARw8JQ0qOAAOAQ&sp=sig&url=https://r7---sn-gwpa-5bge.googlevideo.com/videoplayback%3Fexpire%3D1609521167%26ei%3DrwPvX6ayN7GImgel4b2YDg%26ip%3D132.154.228.240%26id%3Do-AB56znPv_llgJ0v0XuIn4mf-4F2feyfn78hi9AowVgJP%26itag%3D136%26aitags%3D133%252C134%252C135%252C136%252C137%252C160%252C242%252C243%252C244%252C247%252C248%252C278%252C394%252C395%252C396%252C397%252C398%252C399%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DCl%26mm%3D31%252C29%26mn%3Dsn-gwpa-5bge%252Csn-gwpa-qxay%26ms%3Dau%252Crdu%26mv%3Dm%26mvi%3D7%26pcm2cms%3Dyes%26pl%3D19%26gcr%3Din%26initcwndbps%3D156250%26vprv%3D1%26mime%3Dvideo%252Fmp4%26ns%3DAmm7Bly72tYhQYuUBTu4ougF%26gir%3Dyes%26clen%3D18074560%26dur%3D188.813%26lmt%3D1601811623765749%26mt%3D1609499069%26fvip%3D7%26keepalive%3Dyes%26c%3DWEB%26txp%3D5535432%26n%3DRBQO4tIQGFK2ymlT%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Caitags%252Csource%252Crequiressl%252Cgcr%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpcm2cms%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRAIgKiY0iSKg4drfMpUtmsfY4DqN0dzkVo9z0NvbppT-vAUCIDajIym2RvvvqEqxK9XltraU3992scXuP8aZD_cXNK_0"
                  },
              ],
              "formats": [
                  {
                      "itag": 18,
                      "mimeType": "video/mp4; codecs=\"avc1.42001E, mp4a.40.2\"",
                      "bitrate": 635291,
                      "width": 640,
                      "height": 360,
                      "lastModified": "1594495537943093",
                      "contentLength": "14993923",
                      "quality": "medium",
                      "fps": 24,
                      "qualityLabel": "360p",
                      "projectionType": "RECTANGULAR",
                      "averageBitrate": 635096,
                      "audioQuality": "AUDIO_QUALITY_LOW",
                      "approxDurationMs": "188871",
                      "audioSampleRate": "44100",
                      "audioChannels": 2,
                      "signatureCipher": "s=AsPsztt4ZltrQC0ijKLX83bx8smNjCLHwb5D-pJLJvDGAmAEiAhvbstJR8js%3D7g7hscPbPtwrjUDtzwb1GgpkTG53d9kMAhIARw8JQ0qOAAOAg&sp=sig&url=https://r7---sn-gwpa-5bge.googlevideo.com/videoplayback%3Fexpire%3D1609521167%26ei%3DrwPvX6ayN7GImgel4b2YDg%26ip%3D132.154.228.240%26id%3Do-AB56znPv_llgJ0v0XuIn4mf-4F2feyfn78hi9AowVgJP%26itag%3D18%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DCl%26mm%3D31%252C29%26mn%3Dsn-gwpa-5bge%252Csn-gwpa-qxay%26ms%3Dau%252Crdu%26mv%3Dm%26mvi%3D7%26pcm2cms%3Dyes%26pl%3D19%26gcr%3Din%26initcwndbps%3D156250%26vprv%3D1%26mime%3Dvideo%252Fmp4%26ns%3Dw-Sn-YFRtfT0kLnFKpo3EA4F%26gir%3Dyes%26clen%3D14993923%26ratebypass%3Dyes%26dur%3D188.871%26lmt%3D1594495537943093%26mt%3D1609499069%26fvip%3D7%26c%3DWEB%26txp%3D5531432%26n%3DV2sNxp4tEzNJkZtb%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Citag%252Csource%252Crequiressl%252Cgcr%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cratebypass%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpcm2cms%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRQIgbrfk-x_xucwjZedmoR8sR3UQHP4OUd1jDUL_91palCICIQC0w6urClsmCBTpK27I5DIKKED9T_ci6blRj-c8rSD86A%253D%253D"
                  }
              ],
          }
      ],
      "expiresInSeconds": "21540"
  }
  ```

  </details>



  ```python
  '''
  Getting information about playlist or videos in it using its link.

  `Playlist.get` method will give both information & formats of the playlist
  `Playlist.getInfo` method will give only information about the playlist.
  `Playlist.getVideos` method will give only videos in the playlist.

  '''
  playlist = Playlist.get('https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK', mode = ResultMode.json)
  print(playlist)
  playlistInfo = Playlist.getInfo('https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK', mode = ResultMode.json)
  print(playlistInfo)
  playlistVideos = Playlist.getVideos('https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK')
  print(playlistVideos)
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "id": "PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK",
      "title": "NCS: House",
      "videoCount": "209",
      "viewCount": "155,772,054 views",
      "thumbnails": {
          "thumbnails": [
              {
                  "url": "https://i.ytimg.com/vi/LIvSF0fQPJc/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLDHZYoB-WNHmvT3CZy6SpdqygsO4A",
                  "width": 168,
                  "height": 94
              },
              {
                  "url": "https://i.ytimg.com/vi/LIvSF0fQPJc/hqdefault.jpg?sqp=-oaymwEWCMQBEG5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLACCxCIRvCn65_OS1z_4tLAq5Jb8Q",
                  "width": 196,
                  "height": 110
              },
              {
                  "url": "https://i.ytimg.com/vi/LIvSF0fQPJc/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLBt00cYTIVBdrnHsSNLinhq7meCpQ",
                  "width": 246,
                  "height": 138
              },
              {
                  "url": "https://i.ytimg.com/vi/LIvSF0fQPJc/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLBFaqqO6kCAuqya1SIJo5Cf45Ndxg",
                  "width": 336,
                  "height": 188
              }
          ]
      },
      "link": "https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK",
      "channel": {
          "name": "NoCopyrightSounds",
          "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
          "thumbnails": [
              {
                  "url": "https://yt3.ggpht.com/ytc/AAUvwnhwQpPaPL_w-2bQM3TXQN0bdsQQSeEW74TDNXDfHQ=s48-c-k-c0x00ffffff-no-rj",
                  "width": 48,
                  "height": 48
              },
              {
                  "url": "https://yt3.ggpht.com/ytc/AAUvwnhwQpPaPL_w-2bQM3TXQN0bdsQQSeEW74TDNXDfHQ=s88-c-k-c0x00ffffff-no-rj",
                  "width": 88,
                  "height": 88
              },
              {
                  "url": "https://yt3.ggpht.com/ytc/AAUvwnhwQpPaPL_w-2bQM3TXQN0bdsQQSeEW74TDNXDfHQ=s176-c-k-c0x00ffffff-no-rj",
                  "width": 176,
                  "height": 176
              }
          ],
          "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
      },
      "videos": [
          {
              "id": "gQjAEbWZEgU",
              "title": "Mangoo - Happi (ft. bby ivy) [NCS Release]",
              "thumbnails": [
                  {
                      "url": "https://i.ytimg.com/vi/gQjAEbWZEgU/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLB8IrOoqB1vSj2SMptjc5pG8fyKOQ",
                      "width": 168,
                      "height": 94
                  },
                  {
                      "url": "https://i.ytimg.com/vi/gQjAEbWZEgU/hqdefault.jpg?sqp=-oaymwEiCMQBEG5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLDjI1SuDEFCqskIfGEqr8HZi3v54Q",
                      "width": 196,
                      "height": 110
                  },
                  {
                      "url": "https://i.ytimg.com/vi/gQjAEbWZEgU/hqdefault.jpg?sqp=-oaymwEjCPYBEIoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCAFP_0cHcbUnt_eJwozqM0mOPkHg",
                      "width": 246,
                      "height": 138
                  },
                  {
                      "url": "https://i.ytimg.com/vi/gQjAEbWZEgU/hqdefault.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD4WajUJ8zGjQDuwT6uHBbvZzaCPA",
                      "width": 336,
                      "height": 188
                  }
              ],
              "channel": {
                  "name": "NoCopyrightSounds",
                  "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
                  "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
              },
              "duration": "2:41",
              "accessibility": {
                  "title": "Mangoo - Happi (ft. bby ivy) [NCS Release] by NoCopyrightSounds 7 months ago 2 minutes, 41 seconds",
                  "duration": "2 minutes, 41 seconds"
              },
              "link": "https://www.youtube.com/watch?v=gQjAEbWZEgU"
          },
          {
              "id": "2Kh4y7pJjfQ",
              "title": "MAGNUS x Unread - Cool (feat. Alessia Labate) [NCS Release]",
              "thumbnails": [
                  {
                      "url": "https://i.ytimg.com/vi/2Kh4y7pJjfQ/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLDBtmR1aLs9b5ULxWBpTitm2qfZgQ",
                      "width": 168,
                      "height": 94
                  },
                  {
                      "url": "https://i.ytimg.com/vi/2Kh4y7pJjfQ/hqdefault.jpg?sqp=-oaymwEiCMQBEG5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLA1_KVxp3eun3REQPZM3qgdhGGKhw",
                      "width": 196,
                      "height": 110
                  },
                  {
                      "url": "https://i.ytimg.com/vi/2Kh4y7pJjfQ/hqdefault.jpg?sqp=-oaymwEjCPYBEIoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDXxtiCKSoQ7qWsmbyK60HytHlKNg",
                      "width": 246,
                      "height": 138
                  },
                  {
                      "url": "https://i.ytimg.com/vi/2Kh4y7pJjfQ/hqdefault.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAO6xgKiU0ObnMbcsaLgd5Sp-HA_Q",
                      "width": 336,
                      "height": 188
                  }
              ],
              "channel": {
                  "name": "NoCopyrightSounds",
                  "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
                  "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
              },
              "duration": "2:22",
              "accessibility": {
                  "title": "MAGNUS x Unread - Cool (feat. Alessia Labate) [NCS Release] by NoCopyrightSounds 8 months ago 2 minutes, 22 seconds",
                  "duration": "2 minutes, 22 seconds"
              },
              "link": "https://www.youtube.com/watch?v=2Kh4y7pJjfQ"
          },
          {
              "id": "7dw8wphQ118",
              "title": "Jim Yosef - Let You Go [NCS Release]",
              "thumbnails": [
                  {
                      "url": "https://i.ytimg.com/vi/7dw8wphQ118/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLAI2xKhoLZTQSKy_E2qLI8vmmLwzQ",
                      "width": 168,
                      "height": 94
                  },
                  {
                      "url": "https://i.ytimg.com/vi/7dw8wphQ118/hqdefault.jpg?sqp=-oaymwEiCMQBEG5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLBm88JTaXMyMXgPpH0ANOP-5M7cdg",
                      "width": 196,
                      "height": 110
                  },
                  {
                      "url": "https://i.ytimg.com/vi/7dw8wphQ118/hqdefault.jpg?sqp=-oaymwEjCPYBEIoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDKDPLNxX6SpNNSCmp4oPA7gXZh2w",
                      "width": 246,
                      "height": 138
                  },
                  {
                      "url": "https://i.ytimg.com/vi/7dw8wphQ118/hqdefault.jpg?sqp=-oaymwEjCNACELwBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCoilNTqi_D4Xu-EQFbiqcjyuewUw",
                      "width": 336,
                      "height": 188
                  }
              ],
              "channel": {
                  "name": "NoCopyrightSounds",
                  "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
                  "link": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
              },
              "duration": "3:40",
              "accessibility": {
                  "title": "Jim Yosef - Let You Go [NCS Release] by NoCopyrightSounds 9 months ago 3 minutes, 40 seconds",
                  "duration": "3 minutes, 40 seconds"
              },
              "link": "https://www.youtube.com/watch?v=7dw8wphQ118"
          }
      ]
  }
  ```

  </details>


  You can use a Playlist class for that, alongside some helpful functions.
  ```python
  from youtubesearchpython import *

  channel_id = "UC_aEa8K-EOJ3D6gOs7HcyNg"
  playlist = Playlist(playlist_from_channel_id(channel_id))

  print(f'Videos Retrieved: {len(playlist.videos)}')

  while playlist.hasMoreVideos:
      print('Getting more videos...')
      playlist.getNextVideos()
      print(f'Videos Retrieved: {len(playlist.videos)}')

  print('Found all the videos.')
  ```

  <details>
   <summary> Example Result</summary>

  ```bash
  Videos Retrieved: 100
  Getting more videos...
  Videos Retrieved: 200
  Getting more videos...
  Videos Retrieved: 300
  Getting more videos...
  Videos Retrieved: 400
  Getting more videos...
  Videos Retrieved: 500
  Getting more videos...
  Videos Retrieved: 600
  Getting more videos...
  Videos Retrieved: 700
  Getting more videos...
  Videos Retrieved: 800
  Getting more videos...
  Videos Retrieved: 900
  Getting more videos...
  Videos Retrieved: 1000
  Getting more videos...
  Videos Retrieved: 1002
  Found all the videos.
  ```

  </details>



  You can directly instanciate the `Playlist` class as follows to access its information & videos in the `info` and `videos` fields respectively.

  YouTube offers only 100 videos in a single request, for getting more videos present in the playlist, you can check `hasMoreVideos` bool to see if playlist contains more videos.
  If playlist has more videos, then you can call `getNextVideos` to fetch more videos.

  Example below demonstrates a simple way to retrive all videos of a playlist.

  ```python
  from youtubesearchpython import *

  playlist = Playlist('https://www.youtube.com/playlist?list=PLRBp0Fe2GpgmsW46rJyudVFlY6IYjFBIK')

  print(f'Videos Retrieved: {len(playlist.videos)}')

  while playlist.hasMoreVideos:
      print('Getting more videos...')
      playlist.getNextVideos()
      print(f'Videos Retrieved: {len(playlist.videos)}')

  print('Found all the videos.')
  ```

  <details>
   <summary> Example Result</summary>

  ```bash
  Videos Retrieved: 100
  Getting more videos...
  Videos Retrieved: 200
  Getting more videos...
  Videos Retrieved: 209
  Found all the videos.
  ```

  </details>



  ```python
  from youtubesearchpython import Suggestions

  suggestions = Suggestions(language = 'en', region = 'US')

  print(suggestions.get('NoCopyrightSounds', mode = ResultMode.json))
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "result": [
          "nocopyrightsounds",
          "nocopyrightsounds best songs",
          "nocopyrightsounds gaming music",
          "nocopyrightsounds alan walker",
          "nocopyrightsounds fearless",
          "nocopyrightsounds invincible",
          "nocopyrightsounds background music",
          "nocopyrightsounds instrumental",
          "nocopyrightsounds fade",
          "nocopyrightsounds playlist",
          "nocopyrightsounds on and on",
          "nocopyrightsounds elektronomia",
          "nocopyrightsounds stronger",
          "nocopyrightsounds christmas"
      ]
  }
  ```

  </details>



  ```python
  from youtubesearchpython import Hashtag

  hashtag = Hashtag('ncs', limit = 1)

  print(hashtag.result())
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "result": [
          {
              "type": "video",
              "id": "c9FF4Tfj2w8",
              "title": "Ascence - About You [NCS 1 HOUR]",
              "publishedTime": "1 year ago",
              "duration": "1:00:00",
              "viewCount": {
                  "text": "226,354 views",
                  "short": "226K views"
              },
              "thumbnails": [
                  {
                      "url": "https://i.ytimg.com/vi/c9FF4Tfj2w8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLA8V3x_PigkymVQxQcptr8Wfz20-A",
                      "width": 168,
                      "height": 94
                  },
                  {
                      "url": "https://i.ytimg.com/vi/c9FF4Tfj2w8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLABh5Ylb5wbuulOAWLcSYtfYQKiAQ",
                      "width": 196,
                      "height": 110
                  },
                  {
                      "url": "https://i.ytimg.com/vi/c9FF4Tfj2w8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAykmTivOgjlW6a4tKWnLJpL9yqKw",
                      "width": 246,
                      "height": 138
                  },
                  {
                      "url": "https://i.ytimg.com/vi/c9FF4Tfj2w8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC8qRkotPyH9kGGHe29QuyOh-F9KA",
                      "width": 336,
                      "height": 188
                  }
              ],
              "richThumbnail": {
                  "url": "https://i.ytimg.com/an_webp/c9FF4Tfj2w8/mqdefault_6s.webp?du=3000&sqp=CPGE-YgG&rs=AOn4CLAJAC5zmDOtySflLFMQpAoaPUqHjA",
                  "width": 320,
                  "height": 180
              },
              "descriptionSnippet": null,
              "channel": {
                  "name": "Good Vibes Music",
                  "id": "UChCPI0uvKwrkYhTEx8UVrnQ",
                  "thumbnails": [
                      {
                          "url": "https://yt3.ggpht.com/ytc/AKedOLSFYY0mvwL0DbRzddMAQdbgFshM42R5byhI9FiEBQ=s68-c-k-c0x00ffffff-no-rj",
                          "width": 68,
                          "height": 68
                      }
                  ],
                  "link": "https://www.youtube.com/channel/UChCPI0uvKwrkYhTEx8UVrnQ"
              },
              "accessibility": {
                  "title": "Ascence - About You [NCS 1 HOUR] by Good Vibes Music 1 year ago 1 hour 226,354 views",
                  "duration": "1 hour"
              },
              "link": "https://www.youtube.com/watch?v=c9FF4Tfj2w8",
              "shelfTitle": null
          }
      ]
  }
  ```

  </details>



  ```python
  from youtubesearchpython import ChannelSearch,ResultMode

  search = ChannelSearch('Watermelon Sugar', "UCZFWPqqPkFlNwIxcpsLOwew")
  print(search.result(mode = ResultMode.json))
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "result": [
          {
              "id": "WMcIfZuRuU8",
              "thumbnails": {
                  "normal": [
                      {
                          "url": "https://i.ytimg.com/vi/WMcIfZuRuU8/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLClFg6C1r5NfTQy7TYUq6X5qHUmPA",
                          "width": 168,
                          "height": 94
                      },
                      {
                          "url": "https://i.ytimg.com/vi/WMcIfZuRuU8/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAoOyftwY0jLV4geWb5hejULYp3Zw",
                          "width": 196,
                          "height": 110
                      },
                      {
                          "url": "https://i.ytimg.com/vi/WMcIfZuRuU8/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCdqkhn7JDwLvRtTNx3jq-olz7k-Q",
                          "width": 246,
                          "height": 138
                      },
                      {
                          "url": "https://i.ytimg.com/vi/WMcIfZuRuU8/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAhYedsqBFKI0Ra2qzIv9cVoZhfKQ",
                          "width": 336,
                          "height": 188
                      }
                  ],
                  "rich": null
              },
              "title": "Harry Styles \u2013 Watermelon Sugar (Lost Tour Visual)",
              "descriptionSnippet": "This video is dedicated to touching.\nListen to Harry Styles\u2019 new album \u2018Fine Line\u2019 now: https://HStyles.lnk.to/FineLineAY \n\nFollow Harry Styles:\nFacebook: https://HarryStyles.lnk.to/followFI...",
              "uri": "/watch?v=WMcIfZuRuU8",
              "views": {
                  "precise": "3,888,287 views",
                  "simple": "3.8M views",
                  "approximate": "3.8 million views"
              },
              "duration": {
                  "simpleText": "2:55",
                  "text": "2 minutes, 55 seconds"
              },
              "published": "10 months ago",
              "channel": {
                  "name": "Harry Styles",
                  "thumbnails": [
                      {
                          "url": "https://yt3.ggpht.com/ytc/AAUvwnhR81ocC_KalYEk5ItnJcfMBqaiIpuM1B0lJyg4Rw=s88-c-k-c0x00ffffff-no-rj",
                          "width": 68,
                          "height": 68
                      }
                  ]
              },
              "type": "video"
          },
      ]
  }
  ```

  </details>



  This class is able to fetch video URLs without any additional web requests (that's fast), as one might already have same response at the time of showing it to the user.

  For making use of this functionality, you must install [yt-dlp](https://github.com/yt-dlp/yt-dlp) as a dependency.
  StreamURLFetcher makes slight improvements & changes to YouTube class from [yt-dlp](https://github.com/yt-dlp/yt-dlp).

  ```py
  from youtubesearchpython import *
  fetcher = StreamURLFetcher()
  video = Video.get("https://www.youtube.com/watch?v=aqz-KE-bpKQ")
  url = fetcher.get(video, 251)
  print(url)

  '''
  `getAll` method returns all stream URLs unlike `get` method which needs itag in its second parameter.
  '''
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  "https://r6---sn-gwpa-5bgk.googlevideo.com/videoplayback?expire=1610798125&ei=zX8CYITXEIGKz7sP9MWL0AE&ip=2409%3A4053%3A803%3A2b22%3Adc68%3Adfb9%3Aa676%3A26a3&id=o-APBakKSE2_eMDMegtCmeWXfuhhUfAzJTmOCWj4lkEjAM&itag=251&source=youtube&requiressl=yes&mh=aP&mm=31%2C29&mn=sn-gwpa-5bgk%2Csn-gwpa-qxad&ms=au%2Crdu&mv=m&mvi=6&pl=36&initcwndbps=146250&vprv=1&mime=audio%2Fwebm&ns=ULL4mkMO31KDtEhOjkOrmpkF&gir=yes&clen=10210834&dur=634.601&lmt=1544629945422176&mt=1610776131&fvip=6&keepalive=yes&c=WEB&txp=5511222&n=uEjSqtzBZaJyVn&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRAIgKKIEiwQTgXsdKPEyOckgVPs_LMH6KJoeaYmZic_lelECIHXHs1ZnSP5mgtpffNlIMJM3DhxcvDbA-4udFFE6AmVP&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIhAPmhL745RYeL_ffgUJk_xJLC-8riXKMylLTLA_pITYWWAiB2qUIXur8ThW7cLfQ73mIVK61mMZc2ncK6FZWjUHGcUw%3D%3D"
  ```

  </details>


  You can use a Comments class for that.
  ```python
  from youtubesearchpython import *


  video_id = "_ZdsmLgCVdU"
  comments = Comments(video_id)

  print(f'Comments Retrieved: {len(comments.comments["result"])}')

  while comments.hasMoreComments:
      print('Getting more comments...')
      comments.getNextComments()
      print(f'Comments Retrieved: {len(comments.comments["result"])}')

  print('Found all the comments.')
  ```

  <details>
   <summary> Example Result</summary>

  ```bash
  20
  Getting more comments...
  40
  Getting more comments...
  60
  Getting more comments...
  80
  Getting more comments...
  100
  Getting more comments...
  ...
  ```

  </details>


  You can use a Comments.get method for that.
  ```python
  from youtubesearchpython import *


  video_id = "_ZdsmLgCVdU"
  comments = Comments.get(video_id)

  print(comments)
  ```

  <details>
   <summary> Example Result</summary>

  ```bash
  {
     "result":[
        {
           "id":"Ugh2UTT69BnjaHgCoAEC",
           "author":{
              "id":"UCBykgwvHh2SX5HH7dVWLkqQ",
              "name":"Daikaiju Danielle",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSC8WrgmUHF5l6DYEb8jabim9nE0Ko1vQ_KFOly0w=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSC8WrgmUHF5l6DYEb8jabim9nE0Ko1vQ_KFOly0w=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSC8WrgmUHF5l6DYEb8jabim9nE0Ko1vQ_KFOly0w=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"The boy probably represents youth and the pure, free spirit of being young. When you grow up, it's hard to find that spirit again. You have to search for it.",
           "published":"5 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"5.9K",
              "label":"5.9K likes"
           },
           "replyCount":81
        },
        {
           "id":"UgzyjWeS_wVmoVrcyVZ4AaABAg",
           "author":{
              "id":"UCMMJk2iiIanIFtTwnLK8XBA",
              "name":"naomi",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/wzrS0agEf0NBFXvcpQJFF-6BwdciRFqzVf_dmgv4Unk7e9AFA7Sb7K7hsLeXdZsOX26J0J4Y=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/wzrS0agEf0NBFXvcpQJFF-6BwdciRFqzVf_dmgv4Unk7e9AFA7Sb7K7hsLeXdZsOX26J0J4Y=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/wzrS0agEf0NBFXvcpQJFF-6BwdciRFqzVf_dmgv4Unk7e9AFA7Sb7K7hsLeXdZsOX26J0J4Y=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"Strange that I showed this to my brother three days before his death not knowing I would soon relate to it.",
           "published":"1 year ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"5.2K",
              "label":"5.2K likes"
           },
           "replyCount":147
        },
        {
           "id":"UgyP3NpP-qA9T80YRVh4AaABAg",
           "author":{
              "id":"UCCekImfpPQw94ZHeQy98S_A",
              "name":"Noura",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSA9_Di2v12v_MycDkKjvhD8D3dRSt9pyZIcCekeg=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSA9_Di2v12v_MycDkKjvhD8D3dRSt9pyZIcCekeg=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSA9_Di2v12v_MycDkKjvhD8D3dRSt9pyZIcCekeg=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"In Arabic when we want to express how much we love and cherish someone we say \"you are my eyes\".. And for some reason that line \"don\\'t you know you got my eyes\" makes me really nostalgic and sad.",
           "published":"1 year ago (edited)",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"3.8K",
              "label":"3.8K likes"
           },
           "replyCount":65
        },
        {
           "id":"Ugy-JqQw3w3MXwxGZHZ4AaABAg",
           "author":{
              "id":"UC6irqN4Fk_z-CdK47pkLTgQ",
              "name":"Leo Trombetta",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLTogXyBXEX1LAzehhiYyx9amCWGkcMRCaa3e-pEgg=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLTogXyBXEX1LAzehhiYyx9amCWGkcMRCaa3e-pEgg=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLTogXyBXEX1LAzehhiYyx9amCWGkcMRCaa3e-pEgg=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"As a mother whose had to let her son go for his life to be better, this song is about exactly that. The pain and sacrifice and love and the warm memories you pray they will have of the sweetest moments you've shared when you held them so long ago.. I miss you.",
           "published":"2 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"2K",
              "label":"2K likes"
           },
           "replyCount":23
        },
        {
           "id":"Ugwv8lwT4LS906Y9P1p4AaABAg",
           "author":{
              "id":"UClMs_LKpgCPC9acJQpGRcbQ",
              "name":"Arundhati",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLTHadgrB-BvJ2zqtN9_f2ttscQEH0Sc3awtvg73ug=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLTHadgrB-BvJ2zqtN9_f2ttscQEH0Sc3awtvg73ug=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLTHadgrB-BvJ2zqtN9_f2ttscQEH0Sc3awtvg73ug=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"It’s been 3 years and I still can’t sing that chorus without tearing up",
           "published":"2 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"1K",
              "label":"1K likes"
           },
           "replyCount":16
        },
        {
           "id":"Ugx5NiWjHQI1aGWI8ex4AaABAg",
           "author":{
              "id":"UCeuMECoMfhC9Fyn5veduj1w",
              "name":"dona nova",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLQC9P35p4nKLBaoDkWwsGjQCVrrBs_lPVCNsTQ5oPg=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLQC9P35p4nKLBaoDkWwsGjQCVrrBs_lPVCNsTQ5oPg=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLQC9P35p4nKLBaoDkWwsGjQCVrrBs_lPVCNsTQ5oPg=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"My dad passed away in 2012 and now he communicates to me sometimes through songs. If I ask him a question the next song I hear will have the answer. This year I had to start my life over completely and I have moved across the country away from a toxic person, and then I moved again from the next place I lived from another toxic person, all during the pandemic. I am also legally blind and otherwise disabled so I worried about how I would make it on my own  after my  losses and divorce. I don't know anybody here and I'm completely alone. This comes after 10 years of loss and change that started with his death. Anyway, When I asked him how could I ever have a life again he sent me this song. He always does. I have been told he is my spirit guide and I can tell when he's here. I love glass animals",
           "published":"1 year ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"1.6K",
              "label":"1.6K likes"
           },
           "replyCount":72
        },
        {
           "id":"UgyHLTfBhMAh39IcPAp4AaABAg",
           "author":{
              "id":"UCK8evpEndlyLgjcXTYfOVtQ",
              "name":"UnforgettableAlice",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSlrVENCyh_Wk6p8UrZAPEIS3pmUnGOiTb2zwIx1g=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSlrVENCyh_Wk6p8UrZAPEIS3pmUnGOiTb2zwIx1g=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSlrVENCyh_Wk6p8UrZAPEIS3pmUnGOiTb2zwIx1g=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"Vocalist/guitarist Dave Bayley explained the story behind this song to Paste magazine: \"The idea for this one came from a story someone told me once. They were telling me about their child, and something awful had happened to them. She was crying - but at the same time the memories that they had from that previous life made her so happy - so she was also smiling. That combination of emotions kind of made me feel like my heart was being ripped apart but also optimistic in a weird way. She had found a way to see happiness in this awful thing that had happened to her. That combination of emotions is what this song is getting at.\"",
           "published":"3 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"5.6K",
              "label":"5.6K likes"
           },
           "replyCount":31
        },
        {
           "id":"Ugwq4Hc5dcjphfdabi14AaABAg",
           "author":{
              "id":"UChtQ0Lhb3UvlSjPJ_1gcRdQ",
              "name":"Later",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLTmkn0CgPeiW8hmoP3VEokLg-AN2Y7xkTz7HeOa1w=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLTmkn0CgPeiW8hmoP3VEokLg-AN2Y7xkTz7HeOa1w=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLTmkn0CgPeiW8hmoP3VEokLg-AN2Y7xkTz7HeOa1w=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"\"Don\\'t you know you got my eyes\"",
           "published":"2 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"3.3K",
              "label":"3.3K likes"
           },
           "replyCount":19
        },
        {
           "id":"UgxC1mFXH9ddTB6qa5h4AaABAg",
           "author":{
              "id":"UC8iw4k1Ojbd5QsK35IeT5mg",
              "name":"Anna Dunne",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSzwmG3DSiHB8XuKUqe6CjdlbSPuln1e1kOKS7i6w=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSzwmG3DSiHB8XuKUqe6CjdlbSPuln1e1kOKS7i6w=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSzwmG3DSiHB8XuKUqe6CjdlbSPuln1e1kOKS7i6w=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"I lost my little sons to the care system because i had depression and experienced domestic abuse. I see them now sometimes. It doesn't get any easier and I miss them a lot. <3 This song means a lot. ",
           "published":"2 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"1.9K",
              "label":"1.9K likes"
           },
           "replyCount":25
        },
        {
           "id":"Ugw4ux8km05TQ3kGHmV4AaABAg",
           "author":{
              "id":"UCfqMzgWyCUuUWBBaD4WgynA",
              "name":"Jemma Scott",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLT44n2_05S_bMU2ME_Z1WSk6xTIJ3cs82vSF920pg=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLT44n2_05S_bMU2ME_Z1WSk6xTIJ3cs82vSF920pg=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLT44n2_05S_bMU2ME_Z1WSk6xTIJ3cs82vSF920pg=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"Warning ⚠️: ",
           "published":"2 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"2.1K",
              "label":"2.1K likes"
           },
           "replyCount":5
        },
        {
           "id":"Ugy5hJrVHhrZ25VZoDd4AaABAg",
           "author":{
              "id":"UCCooCkWoIN-QmHrVo0t5d9Q",
              "name":"Samy Lind",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSHCXYVj0EyiLYxeBvhP6E4gnS1gRzDSYleBQ=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSHCXYVj0EyiLYxeBvhP6E4gnS1gRzDSYleBQ=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSHCXYVj0EyiLYxeBvhP6E4gnS1gRzDSYleBQ=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"I know no one cares about stuff like this but I just wanted to speak on the power of art because it’s beautiful. This video and this entire album has been a huge catalyst and help in me saving myself and my family. I was forcing my husband and 3 kids to live with my abusive parents so that I could try to make them love us before they died. All they did was hurt us more and instead of dealing with it I kept staying there and started doing pain pills. This video helped hit home how much I don’t need my parents and it made me never want to escape from my reality again. I hadn’t quite gotten to a stage of disgust, but I sure have done a lot of regrettable things. This album helps me have the strength to keep doing my best to learn to be better and to learn to be the best I can be for my kids. I don’t want to be held back by anything anymore and I don’t want to hold back my family. Thank you glass animal and crew:) your saving lives with this music",
           "published":"2 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"493",
              "label":"493 likes"
           },
           "replyCount":7
        },
        {
           "id":"UgyfG6DRZQZe5NtvY9t4AaABAg",
           "author":{
              "id":"UCFlsa-V7ZjC3SJG1MgHeTxA",
              "name":"Adi ☆",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/2r2ZQYcZaViZp8n37bmAnJx-irYy7mOUkpkC7nprEaoeSY2jEJ9wQ-kQnpxN6Z4WMWFMT9JzUw=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/2r2ZQYcZaViZp8n37bmAnJx-irYy7mOUkpkC7nprEaoeSY2jEJ9wQ-kQnpxN6Z4WMWFMT9JzUw=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/2r2ZQYcZaViZp8n37bmAnJx-irYy7mOUkpkC7nprEaoeSY2jEJ9wQ-kQnpxN6Z4WMWFMT9JzUw=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"Lyrics:[Verse 1]",
           "published":"2 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"955",
              "label":"955 likes"
           },
           "replyCount":9
        },
        {
           "id":"Ugi30kIt00U573gCoAEC",
           "author":{
              "id":"UCZbJ_Q3ClurxYlthgTecgow",
              "name":"love, doggo",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/IJF61exnEIJZDlnphGN9yXnV_fQSJhdAyPqgF_e3pJ42iwvTQprgQaty-uVyvjiMJpnaekxeBg=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/IJF61exnEIJZDlnphGN9yXnV_fQSJhdAyPqgF_e3pJ42iwvTQprgQaty-uVyvjiMJpnaekxeBg=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/IJF61exnEIJZDlnphGN9yXnV_fQSJhdAyPqgF_e3pJ42iwvTQprgQaty-uVyvjiMJpnaekxeBg=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"This is a rare thing... I like every song a band makes",
           "published":"5 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"3.9K",
              "label":"3.9K likes"
           },
           "replyCount":67
        },
        {
           "id":"UgzDNmCLzmkNIGV_iB14AaABAg",
           "author":{
              "id":"UCrdOXfYndK2UEjAKRg-hUcw",
              "name":"Cherry",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/oRPZKN6SL1SoMc5J7FQIHiA1C1wQZe1YfRHbkxaLnNp9Vi7Vl2PCY11oTK5mDms-NHXSGqFsKQ=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/oRPZKN6SL1SoMc5J7FQIHiA1C1wQZe1YfRHbkxaLnNp9Vi7Vl2PCY11oTK5mDms-NHXSGqFsKQ=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/oRPZKN6SL1SoMc5J7FQIHiA1C1wQZe1YfRHbkxaLnNp9Vi7Vl2PCY11oTK5mDms-NHXSGqFsKQ=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"I hope the mother who inspired this can hear it and feel her child close to her again.",
           "published":"2 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"410",
              "label":"410 likes"
           },
           "replyCount":1
        },
        {
           "id":"UgyQEih224ElUkT2AXl4AaABAg",
           "author":{
              "id":"UC7M3_B55yIvo4DZS3BvgA1g",
              "name":"Sirce Guevara",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLRJhxg_aeXmbGuH8wbuCcGWVtRs6tFKPqkxw4-lcJ8=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLRJhxg_aeXmbGuH8wbuCcGWVtRs6tFKPqkxw4-lcJ8=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLRJhxg_aeXmbGuH8wbuCcGWVtRs6tFKPqkxw4-lcJ8=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"I cried watching this video, this is my first time seeing it.. It just reminded me of my mother,  how she raised me alone.  Seeing me happy and dancing all her life . How she works hard day by day just so I have a roof on my head and food on the table. She's amazing...",
           "published":"2 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"271",
              "label":"271 likes"
           },
           "replyCount":1
        },
        {
           "id":"UgxSKtnwJ1fL1cGECFN4AaABAg",
           "author":{
              "id":"UCaWu5P4tl4leNsq0d6K5JfA",
              "name":"Brylee D",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSnWU59WluXZehM5VxmcbX6Unk_rgJc699gUp7lxw=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSnWU59WluXZehM5VxmcbX6Unk_rgJc699gUp7lxw=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSnWU59WluXZehM5VxmcbX6Unk_rgJc699gUp7lxw=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"I have a crush on that background wind instrument",
           "published":"2 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"4.5K",
              "label":"4.5K likes"
           },
           "replyCount":36
        },
        {
           "id":"Ugx885faaugZ-KS2ht14AaABAg",
           "author":{
              "id":"UCAv-kFdFs9zZX4IR9y77sTg",
              "name":"berry tart subs ✿",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/RIEhlWERKQrY6oscMFEVW9pyDVKwndKkfFfnMTGxJIFHV2np4asu1syE-C016cZlcgZYtkdvrCA=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/RIEhlWERKQrY6oscMFEVW9pyDVKwndKkfFfnMTGxJIFHV2np4asu1syE-C016cZlcgZYtkdvrCA=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/RIEhlWERKQrY6oscMFEVW9pyDVKwndKkfFfnMTGxJIFHV2np4asu1syE-C016cZlcgZYtkdvrCA=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"This song literally makes me cry every time I hear it it's just so sweet",
           "published":"1 year ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"73",
              "label":"73 likes"
           },
           "replyCount":1
        },
        {
           "id":"UgxfMf3PW8muQIKHeX54AaABAg",
           "author":{
              "id":"UCs5_3PBRo9VoCCbDWDMpa-g",
              "name":"Victor Rodriguez",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLRe_mumWc8G4a9DvzNQ7FBA_hctTvwTJskAdw=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLRe_mumWc8G4a9DvzNQ7FBA_hctTvwTJskAdw=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLRe_mumWc8G4a9DvzNQ7FBA_hctTvwTJskAdw=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"I hope my son can find some type of solace or message in this song one day. We lost his mother my wife when she passed suddenly three months ago at 23 years young. He was only 2 years old and 7 months when it happened. It was a short time for him but so many happy memories. They spent every single hour of every single day together. We’re so lost and devasted without you, We love you Deja C Rodriguez",
           "published":"8 months ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"126",
              "label":"126 likes"
           },
           "replyCount":2
        },
        {
           "id":"UgiuS-ehhcqhHXgCoAEC",
           "author":{
              "id":"UCd6gX2dxkokyH70cbUocq7Q",
              "name":"bunnyluveable",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSt6NFUcOAfGB1C0BL0f18q8sPUX0UQBhYV_A=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSt6NFUcOAfGB1C0BL0f18q8sPUX0UQBhYV_A=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLSt6NFUcOAfGB1C0BL0f18q8sPUX0UQBhYV_A=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"their music is like being wrapped in a warm blanket on a chilly day.",
           "published":"5 years ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"563",
              "label":"563 likes"
           },
           "replyCount":6
        },
        {
           "id":"UgwEdhuY0RUuiyBqpVN4AaABAg",
           "author":{
              "id":"UC8GIfeF1UytnIdBUx7eODBg",
              "name":"TheBnjmnMiles",
              "thumbnails":[
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLQjQG6jvrGnj9ejtjfO-pbXWwekST4e_qxK=s48-c-k-c0x00ffffff-no-rj",
                    "width":48,
                    "height":48
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLQjQG6jvrGnj9ejtjfO-pbXWwekST4e_qxK=s88-c-k-c0x00ffffff-no-rj",
                    "width":88,
                    "height":88
                 },
                 {
                    "url":"https://yt3.ggpht.com/ytc/AKedOLQjQG6jvrGnj9ejtjfO-pbXWwekST4e_qxK=s176-c-k-c0x00ffffff-no-rj",
                    "width":176,
                    "height":176
                 }
              ]
           },
           "content":"Why is nobody talking about this kid’s freakin’ sweet dance moves?",
           "published":"7 months ago",
           "isLiked":false,
           "authorIsChannelOwner":false,
           "voteStatus":"INDIFFERENT",
           "votes":{
              "simpleText":"210",
              "label":"210 likes"
           },
           "replyCount":4
        }
     ]
  }
  ```

  </details>


  YouTube auto-generates transcripts (subtitles) for videos. You can retrieve those transcripts using Transcript class:
  ```py
  from youtubesearchpython import Transcript

  print(Transcript.get("https://www.youtube.com/watch?v=-1xu0IP35FI"))
  ```

  In response, you'll get available languages with `params` parameter. If you want to retrieve a different language, you have to pass the function that parameter. Example:
  ```py
  from youtubesearchpython import Transcript

  url = "https://www.youtube.com/watch?v=-1xu0IP35FI"

  transcript_en = Transcript.get(url)

  transcript_2 = Transcript.get(url, transcript_en["languages"][-1]["params"]) # in my case, it'd output Spanish.
  print(transcript_2)
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
     "segments":[
        {
           "startMs":"210",
           "endMs":"2129",
           "text":"- When Steve Jobs unveiled the original",
           "startTime":"0:00"
        },
        {
           "startMs":"2130",
           "endMs":"3670",
           "text":"iPhone back in 2007,",
           "startTime":"0:02"
        },
        {
           "startMs":"3670",
           "endMs":"4940",
           "text":"the year I graduated high school,",
           "startTime":"0:03"
        },
        {
           "startMs":"4940",
           "endMs":"7610",
           "text":"he pitched it as a music player, a phone,",
           "startTime":"0:04"
        },
        {
           "startMs":"7610",
           "endMs":"10760",
           "text":"and an internet communicator\nall rolled into one.",
           "startTime":"0:07"
        },
        {
           "startMs":"10760",
           "endMs":"11593",
           "text":"- Are you getting it?",
           "startTime":"0:10"
        },
        ...
     ],
     "languages":[
        {
           "params":"CgstMXh1MElQMzVGSRIOQ2dBU0FtVnVHZ0ElM0QYASozZW5nYWdlbWVudC1wYW5lbC1zZWFyY2hhYmxlLXRyYW5zY3JpcHQtc2VhcmNoLXBhbmVsMAE%3D",
           "selected":true,
           "title":"English"
        },
        {
           "params":"CgstMXh1MElQMzVGSRISQ2dOaGMzSVNBbVZ1R2dBJTNEGAEqM2VuZ2FnZW1lbnQtcGFuZWwtc2VhcmNoYWJsZS10cmFuc2NyaXB0LXNlYXJjaC1wYW5lbDAB",
           "selected":false,
           "title":"English (auto-generated)"
        },
        {
           "params":"CgstMXh1MElQMzVGSRISQ2dBU0JYQjBMVUpTR2dBJTNEGAEqM2VuZ2FnZW1lbnQtcGFuZWwtc2VhcmNoYWJsZS10cmFuc2NyaXB0LXNlYXJjaC1wYW5lbDAB",
           "selected":false,
           "title":"Portuguese (Brazil)"
        },
        {
           "params":"CgstMXh1MElQMzVGSRIQQ2dBU0JtVnpMVFF4T1JvQRgBKjNlbmdhZ2VtZW50LXBhbmVsLXNlYXJjaGFibGUtdHJhbnNjcmlwdC1zZWFyY2gtcGFuZWwwAQ%3D%3D",
           "selected":false,
           "title":"Spanish (Latin America)"
        }
     ]
  }
  ```
  </details>



  ```py
  from youtubesearchpython import Channel

  print(Channel.get("UC_aEa8K-EOJ3D6gOs7HcyNg"))
  ```

  <details>
   <summary> Example Result</summary>

  ```json
  {
      "id": "UC_aEa8K-EOJ3D6gOs7HcyNg",
      "url": "https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg",
      "description": "NoCopyrightSounds is a copyright free / stream safe record label, providing free to use music to the content creator community. \n\nWe work with artists from around the world in electronic music, representing genres from House to Dubstep via Trap, Drum & Bass, Electro Pop and more. \n\nNCS Music is free to use for independent Creators and their UGC (User Generated Content) on YouTube & Twitch - always remember to credit the Artist, track and NCS and link back to our original NCS upload.\n\nView our usage policy and some frequently asked questions here: http://ncs.io/UsagePolicy\n\nGrab our new apparel range here: http://ncs.io/Store",
      "title": "NoCopyrightSounds",
      "banners": [
          {
              "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
              "width": 1060,
              "height": 175
          },
          {
              "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w1138-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
              "width": 1138,
              "height": 188
          },
          {
              "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w1707-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
              "width": 1707,
              "height": 283
          },
          {
              "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w2120-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
              "width": 2120,
              "height": 351
          },
          {
              "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w2276-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
              "width": 2276,
              "height": 377
          },
          {
              "url": "https://yt3.ggpht.com/ZdXDhvCVn73Shu-QkqWFoUS_TlZ9MSkAXb8VJBeI6ZKSN6oH4QBvTG2BCfuFRegjXwdp6qH3=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
              "width": 2560,
              "height": 424
          }
      ],
      "subscribers": {
          "simpleText": "32.2M subscribers",
          "label": "32.2 million subscribers"
      },
      "thumbnails": [
          {
              "url": "https://yt3.ggpht.com/YIBi8NVC87fMfJHfQ2O0dyzjis7tUlO7VqWLhk1lq1fkIOQTrpX_Ip7G6S_u0IJosXYSe_Z9=s48-c-k-c0x00ffffff-no-rj",
              "width": 48,
              "height": 48
          },
          {
              "url": "https://yt3.ggpht.com/YIBi8NVC87fMfJHfQ2O0dyzjis7tUlO7VqWLhk1lq1fkIOQTrpX_Ip7G6S_u0IJosXYSe_Z9=s88-c-k-c0x00ffffff-no-rj",
              "width": 88,
              "height": 88
          },
          {
              "url": "https://yt3.ggpht.com/YIBi8NVC87fMfJHfQ2O0dyzjis7tUlO7VqWLhk1lq1fkIOQTrpX_Ip7G6S_u0IJosXYSe_Z9=s176-c-k-c0x00ffffff-no-rj",
              "width": 176,
              "height": 176
          },
          {
              "url": "https://yt3.ggpht.com/YIBi8NVC87fMfJHfQ2O0dyzjis7tUlO7VqWLhk1lq1fkIOQTrpX_Ip7G6S_u0IJosXYSe_Z9=s900-c-k-c0x00ffffff-no-rj",
              "width": 900,
              "height": 900
          },
          {
              "url": "https://yt3.ggpht.com/YIBi8NVC87fMfJHfQ2O0dyzjis7tUlO7VqWLhk1lq1fkIOQTrpX_Ip7G6S_u0IJosXYSe_Z9=s200-c-k-c0x00ffffff-no-rj?days_since_epoch=19098",
              "width": 200,
              "height": 200
          }
      ],
      "isFamilySafe": true,
      "keywords": "NoCopyrightSounds ncs no copyright sounds copyrighted music free royalty royaltyfree uncopyrighted copyrightfree",
      "tags": [
          "NoCopyrightSounds",
          "ncs",
          "no",
          "copyright",
          "sounds",
          "copyrighted",
          "music",
          "free",
          "royalty",
          "royaltyfree",
          "uncopyrighted",
          "copyrightfree"
      ],
      "views": "10,094,707,992 views",
      "joinedDate": "Aug 14, 2011",
      "country": "United Kingdom"
  }
  ```
  </details>




  ```py
  from youtubesearchpython import Channel

  channel = Channel("UC_aEa8K-EOJ3D6gOs7HcyNg")
  print(len(channel.result["playlists"]))
  while channel.has_more_playlists():
      channel.next()
      print(len(channel.result["playlists"]))
  ```

  <details>
   <summary> Example Result</summary>

  ```
  30
  49
  ```
  </details>



  Thanks to everyone contributing to this library, including those not mentioned here.

  I included only contributors and people, who we can thank for their extensive reports to make the library better.

  Contributors are added irrespective of order.

  <ul>
    <li>
      <img src='https://avatars.githubusercontent.com/u/28951144?s=80&v=4' height='28' width='28'></img>&nbsp;&nbsp;<strong><a href='https://github.com/alexmercerind'>Hitesh Kumar Saini</a></strong>
      <ul>
        <li>Creator of this library, contributed most classes to this library.</li>
      </ul>
    </li>
    <li>
      <img src='https://avatars.githubusercontent.com/u/52399966?s=80&v=4' height='28' width='28'></img>&nbsp;&nbsp;<strong><a href='https://github.com/mytja'>mytja</a></strong>
      <ul>
        <li>Current maintainer of this library. Author of Core classes, Comments and Transcript classes, ytdlp migration</li>
      </ul>
    </li>
    <li>
      <img src='https://avatars.githubusercontent.com/u/64320078?s=80&v=4' height='28' width='28'></img>&nbsp;&nbsp;<strong><a href='https://github.com/raitonoberu'>Denis</a></strong>
      <ul>
        <li>Maintainer and reviewer of PRs. Author of Hashtag class.</li>
      </ul>
    </li>
    <li>
      <img src='https://avatars.githubusercontent.com/u/42294590?v=4' height='28' width='28'></img>&nbsp;&nbsp;<strong><a href='https://github.com/fabi321'>Fabian Wunsch</a></strong>
      <ul>
        <li>Fixes to ChannelSearch & retrieving Playlists from Channel class</li>
      </ul>
    </li>
    <li>
      <img src='https://avatars.githubusercontent.com/u/1645646?v=4' height='28' width='28'></img>&nbsp;&nbsp;<strong><a href='https://github.com/Zocker1999NET'>Felix Stupp</a></strong>
      <ul>
        <li>Video and Playlist class contributor. Extensive issues.</li>
      </ul>
    </li>
    <li>
      <img src='https://avatars.githubusercontent.com/u/30200788?v=4' height='28' width='28'></img>&nbsp;&nbsp;<strong><a href='https://github.com/dscrofts'>dscrofts</a></strong>
      <ul>
        <li>Extensive issues, mostly about Playlist and Video class.</li>
      </ul>
    </li>
    <li>
      <img src='https://avatars.githubusercontent.com/u/5200252?v=4' height='28' width='28'></img>&nbsp;&nbsp;<strong><a href='https://github.com/AlexandreOuellet'>AlexandreOuellet</a></strong>
      <ul>
        <li>Added publishDate and uploadDate to Video class.</li>
      </ul>
    </li>
    <li>
      <img src='https://avatars.githubusercontent.com/u/52490534?v=4' height='28' width='28'></img>&nbsp;&nbsp;<strong><a href='https://github.com/rking32'>None</a></strong>
      <ul>
        <li>Bumped httpx version to 0.14.2.</li>
      </ul>
    </li>
    <li>
      <img src='https://avatars.githubusercontent.com/u/64990477?v=4' height='28' width='28'></img>&nbsp;&nbsp;<strong><a href='https://github.com/Maple-Elter'>Elter</a></strong>
      <ul>
        <li>Fixes to Playlist class.</li>
      </ul>
    </li>
  </ul>




  MIT License

  Copyright (c) 2021 [Hitesh Kumar Saini](https://github.com/alexmercerind)



  - All the research, for making this library possible, is entirely done by myself.
  - You can use this library & segments of code from it in your projects in any way you want. Just respect the MIT license & credit the original author of the project.
  - Current version of this project (`main` branch) simulates the requests made by YouTube's web client during client side rendering. In simple words, it does not fetch any specific webpage's HTML, but the JSONs internally fetched by YouTube when you navigate the website, after loading the webpage completely.
  - I do not resist you from using this library in any possible manner, but YouTube T&C stop you from using this library commercially. Respect the law.
  - As you might tell by the name of the project, this library initially only used to support searching of videos. Later on, as the project grew, I added a lot of additional features after requests from people. Now, its really powerful.


