# packages

pkgId: c5a51d3929585c8fb8c18ec88fa3d886f24df076b0ecd7f3b2240b0bc90a9103
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-54288015-d4ad-472b-91f8-89d72a5422b1
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: 5bc0da86ae2ae3b93ce80fa430464a384ab05ac43a1d43cbeee1f472b3698152
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-271879e0-52c6-47df-8eb1-cdcc4bb257a4
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: e35d1679f4f7e71152bc6ec965d5a90236968f216fc433fadd0b2ba0b88affa9
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-1a200a31-9d24-43ee-a1c7-11d286cb1ee6
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: a322eb9203789ca2f305944bf5565ca84ac6d128511127d0ad2b40ead02feb2b
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-badb976c-c5be-4a04-bae6-7b941be4c6fa
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: bfa154dcf8bfe741d244dd8e8c23cdaec04032fa7a5112c428fe4f10295862ee
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-077ef314-2462-40df-abad-e803d34ac126
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: c6cf3891b9929137b9ea5e4bbdb46b09b68c6b2ac2e404cd0ae652043911588e
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-3a2f054f-6bc7-42e3-9480-4e7bd468b42d
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: 23cd9b03046396164d436816c29775bedaebe114e3dbae6304e1729142e872d3
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-a25ea01d-7679-4f6b-ac1d-1ec750b1e03c
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: 0a2cec4bdc8497df2657256866dadd2b271a3784db06680f91a90f3a7711b4b4
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-998442a1-1268-4712-87ac-a1388670ee57
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: b115bbaeddffe1acc3d157ac649991a407fb360b6c56418ea06b76be94528f74
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-04d460aa-d8af-45f4-8b33-85c01120c0e5
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: 7634a343dcc39174c79fcd1307c3a7d0054ef8bf04a08a4a559933e8026ff794
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-17a5b1a7-b3d8-403c-a738-ca45213a772e
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: 6f4c29993ebb6d29cb0b5cbefe33be00fd7d39933912058623c693c25346461b
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-3d10a947-1d6e-4f59-ad8e-754772c31112
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: 187a3b202b9630e6ea02c890b90fa772480049306c99b91d5a837beec2b2f500
name: python-webrtcvad-wheels-debuginfo
arch: aarch64
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-3d10a947-1d6e-4f59-ad8e-754772c31112
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.aarch64.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: 236e6f9bf94ab22e8c2fecd480ded63de0eab4900385b42ff963489e1de15c63
name: python-webrtcvad-wheels-debugsource
arch: aarch64
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-3d10a947-1d6e-4f59-ad8e-754772c31112
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.aarch64.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: 005bd5a63ff6bbad8aeb31e9d331c0b3f537011d82871f08ff97d6edeb05f237
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-30600004-98f7-4f17-b13e-76b1642d34c0
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: 6579d27a8adb9d3d555026beda3f9f107e2f262142b782083d95eaffc67eaee2
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-9c41182c-165a-4c6c-8a58-7e1c98d331ac
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: 2bbfad1a2e83c1d1c501f9b6c164e9444e42b4f0d90d6d2a7b8680fde4d9ec71
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-4bde5a63-ec8c-40d1-a213-5883b6bc5296
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: 1bae33a38ce694f00b19ca9c2a9588c565514d062f0e812f27f99d2211a05682
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-7d20385d-2063-41ac-ad00-c6a5a3a806d6
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: 36c39b8f4ec7d2021c5d81f5940e3b45330af5897171b38e623af23813b9fb99
name: python-websockets-debuginfo
arch: aarch64
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-4bde5a63-ec8c-40d1-a213-5883b6bc5296
rpm_sourcerpm: python-websockets-10.4-1.src.rpm
location_href: 00005463-python-websockets/python-websockets-debuginfo-10.4-1.aarch64.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: a3c19104415d3c6dd2afb1cf9b4531b27657f4ac5cea9cfea34e81de8330f176
name: python-websockets-debugsource
arch: aarch64
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-4bde5a63-ec8c-40d1-a213-5883b6bc5296
rpm_sourcerpm: python-websockets-10.4-1.src.rpm
location_href: 00005463-python-websockets/python-websockets-debugsource-10.4-1.aarch64.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: 0d0b9fa587c9ed1f5abc82d365d41aaf96f897098deb1ca11d3537198a21e145
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-ff62be5d-12ee-4d7a-ab73-09311aa87663
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: 060360b1ec181e94243029d5d626d19997d08f2cc13d512d4d3e8cca72ad91bf
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-5a822754-2dbe-4d57-90bd-018627f99b53
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: e85913b9902fce2aef0ea9d33afb4631a771f894ad202041aec7131a2b3c40c2
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-cadc3737-1198-4391-b52e-2cd23bce0042
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: 97278151181cf682f669d8f33f2e58f1e652a73424ad575e7af3bfed3dfbf711
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-3f93b95a-9d93-4bb8-a31d-8d7eaf798870
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: 26f13b8f3ba755ed46b86a1279519e96208ebd9201865aedc2349feca348e0d9
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-b3072947-9e5a-48ea-bbbc-b1ec45a3a73a
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: 171c0aa9ad3eb7d8940ece789d498f86ed999d1ae278844a20267b48c24d6516
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-fca159e9-f8d6-461c-8f64-c8d687663dca
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: 635cd79bd2546d03d709a92945c5c989f3a08a76fac20ea66869b57000a2a540
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-3e8f4517-5990-4e42-a75c-3d8f9df47a44
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: a1ccb794cabdc0413ef0176fd8f6c4cde8da27cbb9296b9c69b3ee09d6de59dd
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-da149bfe-e2d0-4d13-b692-6b9db43a2fa3
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: 17a65020db92dbe3ca4ad1ebab3fc86aaaff651c9fc88e6a53e22e85de6fa283
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-6c2604b3-c51b-408e-8e24-e4ecb7d89464
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: 8c3b8d19af4ce226da62689a29181e76b4cec118f06eb323cb5489f6b31d3fe8
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-9a146ecb-ec6c-408f-8290-ccab16dbb8c6
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: 4352c6271a77354563ae482efbfff040e1f69022877fbe232d10b620ebe11b0e
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-466659a7-eb10-4b02-a73c-c55df87d15f5
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: 5ca094472f33003b9e6b6850376e7ba08f91ebafcfb2a8ef1e7f521a8725ed47
name: python-workdays
arch: src
version: 1.4
epoch: 0
release: 1
summary: Workday date utility functions to extend python's datetime
url: http://github.com/ogt/workdays
rpm_license: UNKNOWN
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-01c8d035-1ead-4a52-8d02-21e6b7a4a2bb
location_href: 00013650-python-workdays/python-workdays-1.4-1.src.rpm
checksum_type: sha256
description:
  Extend python datetime with excel-like workday addition/subtraction
      functionality:

      NETWORKDAYS(start_date,end_date,holidays)

      Returns the number of whole working days between start_date and
      end_date (inclusive of both start_date and end_date). Working days
      exclude weekends and any dates identified in holidays. Use NETWORKDAYS
      to calculate employee benefits that accrue based on the number of
      days worked during a specific term.

      WORKDAY(start_date,days,[holidays])

      Returns a number that represents a date that is the indicated number
      of working days before or after a date (the starting date). Working
      days exclude weekends and any dates identified as holidays. Use
      WORKDAY to exclude weekends or holidays when you calculate invoice
      due dates, expected delivery times, or the number of days of work
      performed.

      This module has similarities with the BusinessHours module - you may
      want to check it out as well to see which one better fits your needs.


pkgId: 41f9bcefcd09f1eb80a7724954d950e91202c3025f40f1391b3e1f26941e4864
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-012c2013-cd25-4e77-915b-94ec352b6ecb
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: daa73b3222c7c948d5261dd4675cb629ebe52ba914f8b0845e687dffdba2535f
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-5eca8218-a557-4202-87d3-4274a162db50
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: fb6965bb6097b2a2c32fd7034f2e6375739ad59dbf31513e6e4628718533af40
name: python-wrapt-debuginfo
arch: aarch64
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-5eca8218-a557-4202-87d3-4274a162db50
rpm_sourcerpm: python-wrapt-1.15.0-1.src.rpm
location_href: 00008924-python-wrapt/python-wrapt-debuginfo-1.15.0-1.aarch64.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: d145ec7144a7dfd5def769916ae52b77ba5ca5b5e51fe444274bf996510fdc51
name: python-wrapt-debugsource
arch: aarch64
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-5eca8218-a557-4202-87d3-4274a162db50
rpm_sourcerpm: python-wrapt-1.15.0-1.src.rpm
location_href: 00008924-python-wrapt/python-wrapt-debugsource-1.15.0-1.aarch64.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: 4b304d2a7eb646a5f1409dbfd811d9f097cbb89f9bac4fbe688443562f214f1b
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-cfbe30eb-3fd1-4dd4-9a2c-ff66bc966798
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: 4c926b60dbbe0dbc4569544258b9b0c0deb038480bd2f9c66738a26266d45159
name: python-wsaccel-debuginfo
arch: aarch64
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-cfbe30eb-3fd1-4dd4-9a2c-ff66bc966798
rpm_sourcerpm: python-wsaccel-0.6.4-1.src.rpm
location_href: 00005484-python-wsaccel/python-wsaccel-debuginfo-0.6.4-1.aarch64.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: fc68702db3d16d9fa111b7c89bd3c2eba8e02ec9cdbfbd81531a0dbe9ccd34b3
name: python-wsaccel-debugsource
arch: aarch64
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-cfbe30eb-3fd1-4dd4-9a2c-ff66bc966798
rpm_sourcerpm: python-wsaccel-0.6.4-1.src.rpm
location_href: 00005484-python-wsaccel/python-wsaccel-debugsource-0.6.4-1.aarch64.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: 8c6caf4a80122ab3ff2ab1b3a32d438b78fa3bebf3142a41f65ec3f8452595f2
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-46783fb7-cf28-481e-826b-ad57ac4007ff
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: 01b56e90386bcf654b80b7945685ee8d736ea2f714c44d30d80fa53be3d3f2cc
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-96e12272-1b5f-4a61-be8e-0a4b67899905
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: 3a015bebf133de84b1d9acdef86819a835204a73093c853cc8bbdec5576f2adb
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-b8d5edb7-67f8-4098-8ad6-9a1e961a6fbd
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: bbb64b0c8faf5d6340deaa799663b85edf0f66072db7b3cf9b8a392008135f72
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-fb4e29a1-83ad-406f-bb7a-3ce3fa1f1e23
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: de87d4c9c60e97cdd256ba0eb8f05a11721ab65aad2524e8d33d867628e4febe
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-4522ccde-5e79-4abb-bbf0-c61c44f88fbc
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: a71786664ff16ef05ae0b6b8ac9581ecfafa132f4e7a3149568e9f628635bbd2
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-fa895777-cb2d-4834-8c30-20cf6fa49504
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: 8f46421afdd700cf9a99025a48a852d20cd4de01d65e022cabb5ef522da90344
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-981885fc-92df-4f89-8510-1bd8b33f545b
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: 173d269e7593163d6e0bbcc6fe701db57eb9bee78a3d4469253b3cffe9cf29f4
name: python-xdoctest
arch: src
version: 1.1.1
epoch: 0
release: 1
summary: A rewrite of the builtin doctest module
url: https://github.com/Erotemic/xdoctest
rpm_license: Apache 2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0bd1dc89-1118-4ae6-b399-01c07cf44d46
location_href: 00011585-python-xdoctest/python-xdoctest-1.1.1-1.src.rpm
checksum_type: sha256
description:
  Installation: from pypi
  ^^^^^^^^^^^^^^^^^^^^^^^
  Xdoctest is distributed on pypi as a universal wheel and can be pip installed on
  Python 3.6+ (Python 2.7 and 3.4 / 3.5 support was removed in Version 1.1.0).
  Installations are tested on CPython and PyPy implementations.
      pip install xdoctest
  Distributions on pypi are signed with a GPG public key: ``D297D757``. If you
  care enough to check the gpg signature (hopefully pip will just do this in the
  future), you should also verify this agrees with the contents of
  ``dev/public_gpg_key``.
  Usage: run your doctests
  ^^^^^^^^^^^^^^^^^^^^^^^^
  After installing, the fastest way to run all doctests in your project
  is:
      python -m xdoctest /path/to/your/pkg-or-module.py
  or if your module has been pip-installed / is in the PYTHONPATH run
      python -m xdoctest yourmodname


pkgId: 761f697b4c40763ef260161c6ba93ef5dc44e8fb74b292036d88c2fff001a762
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-848e57d6-98eb-4afd-b05b-6bbe1880a99e
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: 6e11a7baa05df655accd59213348953899288e0f2c92dbfc8521c68ac25c5d37
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-5a72ff7d-cfa1-4a1c-8b73-43c3cbd4f276
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: b76fd5a79f7346de48484d11bc986185c5a2278bde66e8b442950cd5c74996b9
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-f712d291-8d18-436d-94d1-e1cc08d20ce1
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: b9956fc280d25340320e7f0a1089f98d79f580bbf9d36c106312c64354d2da0b
name: python-xlrd3
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: Library for developers to extract data from Microsoft Excel (tm) spreadsheet files
url: https://github.com/Dragon2fly/xlrd3
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5dcb5787-b4e4-4f87-9264-186b83b92672
location_href: 00012303-python-xlrd3/python-xlrd3-1.1.0-1.src.rpm
checksum_type: sha256
description:
  A fork of original archived [xlrd](https://github.com/python-excel/xlrd) project.
  This fork aims to fix bugs that existing in `xlrd` and improve it features.
  As the name of this fork implies, python2 support is dropped.
  At version 1.0.0, xlrd3 on pair with xlrd version 1.2.0 with following bugs fixed:
  * MemoryError: `on_demand` with `mmap` still causes some `xls` to be read the whole file into memory.
  * `on_demand` not supported for `xlsx`
  * Parsing comments failed for `xlsx` on Windows platform.

  If you just need to **read** and deal with both `xlsx` and `xls`, use `xlrd3`.
  Then if you want to export your data to other excel files, use [OpenPyXL](https://openpyxl.readthedocs.io/en/stable/) or [xlsxWriter](https://github.com/jmcnamara/XlsxWriter).
  If you need to **edit** `xlsx` (read and write) and are sure that `xls` never appear in your workflow, you are advised to use [OpenPyXL](https://openpyxl.readthedocs.io/en/stable/) instead.
  **Purpose**: Provide a library for developers to use to extract data from Microsoft Excel (tm) spreadsheet files. It is not an end-user tool.
  **Original Author**: John Machin
  **Licence**: BSD-style (see licences.py)
  **Versions of Python supported**: 3.6+.
  **Outside scope**: xlrd3 will safely and reliably ignore any of these if present in the file:
  *   Charts, Macros, Pictures, any other embedded object. WARNING: currently this includes embedded worksheets.
  *   VBA modules
  *   Formulas (results of formula calculations are extracted, of course).
  *   Comments
  *   Hyperlinks
  *   Autofilters, advanced filters, pivot tables, conditional formatting, data validation
  *   Handling password-protected (encrypted) files.
  **Installation**:`$pip install xlrd3`
  **Quick start**:
  ```python
  import xlrd3 as 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))
  ```
  **Another quick start**: This will show the first, second and last rows of each sheet in each file:
      python PYDIR/scripts/runxlrd.py 3rows *blah*.xls
  **Acknowledgements**:
  *   This package started life as a translation from C into Python of parts of a utility called "xlreader" developed by David Giffin. "This product includes software developed by David Giffin <david@giffin.org>."
  *   OpenOffice.org has truly excellent documentation of the Microsoft Excel file formats and Compound Document file format, authored by Daniel Rentz. See http://sc.openoffice.org
  *   U+5F20 U+654F: over a decade of inspiration, support, and interesting decoding opportunities.
  *   Ksenia Marasanova: sample Macintosh and non-Latin1 files, alpha testing
  *   Backporting to Python 2.1 was partially funded by Journyx - provider of timesheet and project accounting solutions (http://journyx.com/).
  *   Provision of formatting information in version 0.6.1 was funded by Simplistix Ltd (http://www.simplistix.co.uk/)


pkgId: 8b9cd5281625dcaefeb6d3535b8990e81194a93c3d177b85096c08e4eddbef0e
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-177e3eab-30d9-4b27-9b2f-8bc1b00552d0
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: b02ba6b25d7bb75376e20c258be2afce686b9c9f86bd968d40df01f2c0a63810
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-80c6089a-af0b-46c1-85fe-f774dbd614bd
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: ec3c92030c1087dd1b210c9c49fa144caac47566bfe1cd97b6aa4aae39de0878
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-5da43c16-842a-4bff-8104-9913ffa1ba0b
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: 94406813e94f07133e6f80f0dbe378891d73c09012f9b7b3f84b22440e7655dd
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-f29652e6-2b45-41a1-bc29-ac12d6bc7342
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: 4d4622eee71ceb3ff902262cc8297bd9e644d90a44787dad5a54f0d82521b24a
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-b62e2cfe-f796-4972-a3d5-255cd2c3a519
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: e7eb6c65c9883cfd37f720d235abd0563a0a8e3142ca93340e5adecbe351c59d
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-7b5bb982-77e3-46e2-af6f-8dd5e624624c
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: 0a6749b2972551f55cbbece068ae37ea6b1e4f1f51df795f71e224e4f1e822d0
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-61e0ed2c-e7d0-45fb-a648-9d5dc2939774
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: 6e2fc66c93b41dbcf38ce9bca5c93ef68b08391346452014a36cac9903c3822a
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-27888999-4083-43b5-b23e-b4555cc4cb30
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: 09a42a47ce5d014f5561584b0ada031537161fd0251363ea923c20e741694cb4
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-58595e87-68b2-49ba-961a-e106afe27a3d
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: 5a2adce244bbc8550135e9c09d1d835908c1d7004e913a45feddf492c51dc883
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-c031cb06-7637-4b26-90f6-25a19441060a
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: 65a3ec02d65717194bbc65d4deb2e0122ea8f9e8bf73e603b132b647002a9d60
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-893ba77f-88f8-4d62-b0b9-afcf3d2e7242
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: 1f20c9f72ddc227d48f1de42b72917a57e16efe01e7c6fcb5f22d5bf0c01b9a1
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-6744fae4-dbcb-48e2-aa94-a66b1bad6b90
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: c687c28b3af6f8d9516ed795004c3fdc638b67b7be33568697c793e398e50830
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-63e1f60f-d845-4013-9dce-970a7dcbfbb8
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: 1599f16af279e11cc43c2c0314d2540d16d9cd31ace9edb616f557af830bed07
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-0ebbee55-724b-41a3-a474-d25278731174
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: 5084304084c87ff07a2dfbc57bcbf1830f91022ea3619e18e52b28da1436dde6
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-5faa35ee-581f-43a5-b5c6-bb730ba61cd4
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: 226c7a3f4bba28fa26d9621727243be13da9ee3087b6a1f324e075ff5c8a5ece
name: python-xxhash-debuginfo
arch: aarch64
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-157aa624-314a-47f0-9aac-c79ecd52ea36
rpm_sourcerpm: python-xxhash-3.2.0-1.src.rpm
location_href: 00009579-python-xxhash/python-xxhash-debuginfo-3.2.0-1.aarch64.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: 56de946af88e2aa25f30e83c4e033999496b468eee0b7c246b3776b515db28e3
name: python-xxhash-debugsource
arch: aarch64
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-157aa624-314a-47f0-9aac-c79ecd52ea36
rpm_sourcerpm: python-xxhash-3.2.0-1.src.rpm
location_href: 00009579-python-xxhash/python-xxhash-debugsource-3.2.0-1.aarch64.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: a87bd1df14535a7064565aa352ce9d1d2c4c7cd721ceb67c8b3b8f72bdaeb91b
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-1a00c859-96be-4115-97b1-5d18f69a8b0a
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: 3dfb9f9376b5944e20c4de651d4c1e374ae8b3dbc1330a50639f088405de65f6
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-b55b2d0b-4ade-4920-903d-37cdcf898acd
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: 232c0d96183c8760c92b19276dde4beb63b8d03d5f5c3872e246c8da972d3f4d
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-b6d5ccf4-458b-443f-b7fc-264da8744d0e
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: 8fed5ca013263cc4808dd30881c8f4307527f56e1c438712fff245ab0c9e0e69
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-53123dc1-e163-43ab-a016-9840c700a5b4
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: 8d4e96f771a4faa1d5fa6819d1bc3935584df6b947bbd93e9db238db8bea74c0
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-b1399529-32d0-431f-b240-fbbaf7ae06a0
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: 4248fa61973411598d81402c1697d09b49982b397fae67bc337affdc2644e7ac
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-9fce83f2-a5df-4862-946f-7e91e79df388
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: 5f81b9ac59851ea662682f875fa1936ca38b6512751722a747926c4729affa22
name: python-yappi-debuginfo
arch: aarch64
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-9fce83f2-a5df-4862-946f-7e91e79df388
rpm_sourcerpm: python-yappi-1.4.0-1.src.rpm
location_href: 00005520-python-yappi/python-yappi-debuginfo-1.4.0-1.aarch64.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: 413acfc9fce8837e180a81c77fae5a8a674970b1202f67090cd168e068186451
name: python-yappi-debugsource
arch: aarch64
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-9fce83f2-a5df-4862-946f-7e91e79df388
rpm_sourcerpm: python-yappi-1.4.0-1.src.rpm
location_href: 00005520-python-yappi/python-yappi-debugsource-1.4.0-1.aarch64.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: fc59db78fb3bb341e84c54ae150eea0ae1026e870e4f1967de9d77873d63783c
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-06719ea7-05d6-4706-ae3b-12781d32471e
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: 3e7495e1bbd7ea8549c602a4be64d4fb76ac94bc94d901c65dd787aecfe9be22
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-1faba081-cc96-4d70-a28d-00bac2097c98
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: 9953e0519164398970d0b9e431b898000317a540a66a52de174ed432648feeab
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-e9eb4880-db10-401c-9c4b-2d9d1c3e90bd
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: 4375b1d4a84034017d3fdc12d3ae86efb1e2891da5a4df903f8465f169c24d44
name: python-yarl-debuginfo
arch: aarch64
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-22402164-ceb6-4ee7-ae08-d1b3dab529af
rpm_sourcerpm: python-yarl-1.8.2-1.src.rpm
location_href: 00005525-python-yarl/python-yarl-debuginfo-1.8.2-1.aarch64.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: 0ab356f65759b3318b4b9c5b62e0006d92f9cb2f8a11df0c6348749968ba767e
name: python-yarl-debugsource
arch: aarch64
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-22402164-ceb6-4ee7-ae08-d1b3dab529af
rpm_sourcerpm: python-yarl-1.8.2-1.src.rpm
location_href: 00005525-python-yarl/python-yarl-debugsource-1.8.2-1.aarch64.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: 4d1561f22d36d64a214fe460a0ad501eaa2fe816d8a1c19d23aa8959634104a5
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-ccc26376-7a93-4aa5-b69d-e2c5bf3d6eb6
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: b134a3adc0133409aa68f10fa173b7e948b906e77e35b3e62d9c2928f72e579e
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-eb97a593-019f-4cfe-bb1f-f39c1fb8a7da
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: 3710747456b3133bae49186f85c29c0442e094cc17264266af3cbd0b74b6c6dc
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-c49cb5c5-5ce3-487f-bc89-150f23167ef2
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: cddcf83ac3a4d73b3771d41f2f8d9c6b049dfd4c57d312be1b7c37652839f83e
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-b9b555e1-66bf-4a7b-94de-48f3b16b89bc
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: 616989128e5a5e8e04bc8810ca6bc9cea0f16bda6eed2978eaef69a653e50665
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-973b405f-30ca-4bb0-89d1-f61fb9f7ccf3
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: bc057100a4e3f21dead1a43936cd100ede0c162615404637a66a509bc16e1eb8
name: python-you-get
arch: src
version: 0.4.1650
epoch: 0
release: 1
summary: Dumb downloader that scrapes the web
url: https://you-get.org/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1bbe25fd-8bcf-4856-9022-fa0116e88234
location_href: 00013720-python-you-get/python-you-get-0.4.1650-1.src.rpm
checksum_type: sha256
description:
  |PyPI version| |Build Status| |Gitter|
  `You-Get <https://you-get.org/>`__ is a tiny command-line utility to
  download media contents (videos, audios, images) from the Web, in case
  there is no other handy way to do it.
  Here's how you use ``you-get`` to download a video from `this web
  page <http://www.fsf.org/blogs/rms/20140407-geneva-tedx-talk-free-software-free-society>`__:
      $ you-get http://www.fsf.org/blogs/rms/20140407-geneva-tedx-talk-free-software-free-society
      Site:       fsf.org
      Title:      TEDxGE2014_Stallman05_LQ
      Type:       WebM video (video/webm)
      Size:       27.12 MiB (28435804 Bytes)
      Downloading TEDxGE2014_Stallman05_LQ.webm ...
      100.0% ( 27.1/27.1 MB) ├████████████████████████████████████████┤[1/1]   12 MB/s
  And here's why you might want to use it:
  -  You enjoyed something on the Internet, and just want to download them
     for your own pleasure.
  -  You watch your favorite videos online from your computer, but you are
     prohibited from saving them. You feel that you have no control over
     your own computer. (And it's not how an open Web is supposed to
     work.)
  -  You want to get rid of any closed-source technology or proprietary
     JavaScript code, and disallow things like Flash running on your
     computer.
  -  You are an adherent of hacker culture and free software.
  What ``you-get`` can do for you:
  -  Download videos / audios from popular websites such as YouTube,
     Youku, Niconico, and a bunch more. (See the `full list of supported
     sites <#supported-sites>`__)
  -  Stream an online video in your media player. No web browser, no more
     ads.
  -  Download images (of interest) by scraping a web page.
  -  Download arbitrary non-HTML contents, i.e., binary files.
  Interested? `Install it <#installation>`__ now and `get started by
  examples <#getting-started>`__.
  Are you a Python programmer? Then check out `the
  source <https://github.com/soimort/you-get>`__ and fork it!


pkgId: b05560f1c73b3e889e396d84c74664fa4d0fee1f18ea3d8cdec2848c03d20b38
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-bdef4368-ef38-4275-8309-01b29a4f6479
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: 2a0077e8a989f82948826b26e108df46f1939fae7f50d2cfcb2d0a8ab5de4b82
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-d5ce27c2-f417-45f8-afd7-d6e06a9e36ad
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: e4c1f224e1d56963cb0293b3f2a23fa6b4684aeae69b885eabf9c7f9b627c49a
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-05dea14b-ab94-4878-9712-bc94952c9161
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.


pkgId: cb01d0f559582e8087869747b152c0e9c6088dc0ba8b25e6836bfa43cd6641f8
name: python-yoyo-migrations
arch: src
version: 8.2.0
epoch: 0
release: 1
summary: Database migrations with SQL
url: https://ollycope.com/software/yoyo/latest/
rpm_license: Apache
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e9f36d41-2611-4b81-a5e5-8cc0e72783cc
location_href: 00011958-python-yoyo-migrations/python-yoyo-migrations-8.2.0-1.src.rpm
checksum_type: sha256
description:
  Yoyo-migrations is a database schema migration tool.
  Database migrations can be written as SQL files or Python scripts.


pkgId: cfce399483ab95b046176a5e6a179c0e99987d893887f4d036f1a32423885081
name: python-yui
arch: src
version: 1.0.8
epoch: 0
release: 1
summary: Yui: git based personal task manager
url: https://yuistaskmanager.github.io/
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-28dd986c-9066-4902-9d55-5693bcba6cbc
location_href: 00005531-python-yui/python-yui-1.0.8-1.src.rpm
checksum_type: sha256
description:
   7  | personal | yui        | show creation date column in task list                                 | new
   15 | personal | yui        | sanitize slashes in task filename                                      | new
  ```
  First column is *taskId* you will need it to manipulate the task

  Pick all tasks you are planning to work with today.
  ```
  yui pick %taskId%
  ```
  Will pick the task
  ```
  yui list cur
  ```
  Will display tasks for current day.
  If you made a mistake, you can return the task back to heap
  ```
  yui reset %taskId%
  ```

  ```
  yui open %taskId%
  ```

  Adjust yaml header, simple replace `status: new` with `status: work`.
  You can use any custom statuses, but buildin - *new*, *work*, *done* will be highlighted in `yui list` output.

  As for it's just .md file, you can make any notes behind yaml header.

  That's just plain text files, after all.

  In yaml header, replace `status: work` with `status: done`.

  ```
  yui list cur
  ```
  Will get more green lines while you complete the tasks.

  ```
  yui reset all
  ```
  Will return unfinished tasks back to the heap
  ```
  yui archive today
  ```
  Will move only *done* tasks to archive folder with current day. You can also use "yesterday" or specify date as "YYYY-MM-DD", or anything else recognized by php `strtotime()` function.
  To view archived tasks use:
  ```
  yui list YYYY-MM-DD
  ```

  All git commands are mapped with `yui git`.
  Most used:
      - `yui git log` history of changes in tasks
      - `yui git remote add origin %link%` link your task list with remote repository
      - `yui git push` save local changes to remote repository
      - `yui git pull` load fresh changes from remote repository

  Defaut:
   - Linux: `~/.yui`
   - Windows: `c:\Users\%username%\AppData\Local\yui`
  Can be overwriten with `YUI_HOME` environment variable, like `YUI_HOME=mypath yui list heap`

  > Location: %application-working-folder%/config.yaml
  Example:


pkgId: 4b14a873304b3ab9041907965b26e703449e23afc8cad8ff436ea4f4c5d58129
name: python-zabbix-api
arch: src
version: 0.5.5
epoch: 0
release: 1
summary: Zabbix API
url: https://github.com/gescheit/scripts
rpm_license: GNU LGPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e45f93f8-3dd3-4e73-9081-75e1c59be218
location_href: 00013746-python-zabbix-api/python-zabbix-api-0.5.5-1.src.rpm
checksum_type: sha256
description:
  This is an implementation of the Zabbix API in Python.
  Please note that the Zabbix API is still in a draft state,
  and subject to change.

  Implementations of the Zabbix API in other languages may
  be found on the wiki.

  Zabbix 1.8, 2.0, 2.2, 2.4, 3.0 and 3.2 are supported.
  Python 2 and 3 are supported.

  Future versions must be supported too, if there is no deep changes.

  Installation:
  ```sh

  ```

  Short example:

  ```python
  >>> from zabbix_api import ZabbixAPI
  >>> zapi = ZabbixAPI(server="https://server/")
  >>> zapi.login("login", "password")
  >>> zapi.trigger.get({"expandExpression": "extend", "triggerids": range(0, 100)})
  ```

  See also:
  * http://www.zabbix.com/wiki/doc/api
  * https://www.zabbix.com/documentation/2.4/manual/api
  * http://www.zabbix.com/forum/showthread.php?t=15218


pkgId: 002d69b0beb9b2eff40e42008ec874601811da0ead2e12b9ae77289566f0cb34
name: python-zake
arch: src
version: 0.2.2
epoch: 0
release: 1
summary: A python package that works to provide a nice set of testing utilities for the kazoo library.
url: https://github.com/yahoo/Zake
rpm_license: ASL 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-786408ad-7e1d-4c38-bdd3-8dfc7dfe76fd
location_href: 00005534-python-zake/python-zake-0.2.2-1.src.rpm
checksum_type: sha256
description:
  A python package that works to provide a nice set of testing utilities for the `kazoo`_ library.
  It includes the following functionality:
  * Storage access (for viewing what was saved/created).
  * Kazoo *mostly* compatible client API.
  * Sync/transaction/create/get/delete... commands.
  * Listener support.
  * And more...
  It simplifies testing by providing a client that has a similar API as the kazoo
  client so that your tests (or applications/libraries that use kazoo) do not
  require a real zookeeper server to be  tested with (since this is not available
  in all testing environments).


pkgId: 13b791805e13491a91ba9f8c4a2a5ef456779f0f57e524fd8020710399d5cc86
name: python-zanata2fedmsg
arch: src
version: 0.2
epoch: 0
release: 1
summary: zanata2fedmsg bridges zanata to fedmsg
url: https://github.com/fedora-infra/zanata2fedmsg
rpm_license: GPLv3+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d87fb11d-df6c-4d54-bbe8-2d43c7c6ba7a
location_href: 00005536-python-zanata2fedmsg/python-zanata2fedmsg-0.2-1.src.rpm
checksum_type: sha256
description:
  Run the server::
      $ ZANATA2FEDMSG_CONFIG=./dev.ini python zanata2fedmsg.py
  Generate example urls for zanata::
      $ ZANATA2FEDMSG_CONFIG=$(pwd)/dev.ini python utility/zanata2fedmsg-webhook-generator.py asknot-ng
      URL for asknot-ng is
      https://apps.fedoraproject.org/zanata2fedmsg/webhook/5c605f0f4dd27a5cd81b053bedd06ec153f2272f82c8a49b0842eab7f3c73141


pkgId: 828d357860f2a22cf8d4244cbbdbee13e3fa7ac7b9b6a5c10429ff7164183970
name: python-zarr
arch: src
version: 2.14.2
epoch: 0
release: 1
summary: An implementation of chunked, compressed, N-dimensional arrays for Python
url: https://github.com/zarr-developers/zarr-python
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3bcc4ed3-47cd-4a7e-9af5-1498b9977c11
location_href: 00005538-python-zarr/python-zarr-2.14.2-1.src.rpm
checksum_type: sha256
description:
  <div align="center">
    <img src="https://raw.githubusercontent.com/zarr-developers/community/main/logos/logo2.png"><br>
  </div>



  <table>
  <tr>
    <td>Latest Release</td>
    <td>
      <a href="https://pypi.org/project/zarr/">
      <img src="https://badge.fury.io/py/zarr.svg" alt="latest release" />
      </a>
    </td>
  </tr>
    <td></td>
    <td>
      <a href="https://anaconda.org/anaconda/zarr/">
      <img src="https://anaconda.org/conda-forge/zarr/badges/version.svg" alt="latest release" />
      </a>
  </td>
  </tr>
  <tr>
    <td>Package Status</td>
    <td>
  		<a href="https://pypi.org/project/zarr/">
  		<img src="https://img.shields.io/pypi/status/zarr.svg" alt="status" />
  		</a>
    </td>
  </tr>
  <tr>
    <td>License</td>
    <td>
      <a href="https://github.com/zarr-developers/zarr-python/blob/main/LICENSE.txt">
      <img src="https://img.shields.io/pypi/l/zarr.svg" alt="license" />
      </a>
  </td>
  </tr>
  <tr>
    <td>Build Status</td>
    <td>
      <a href="https://github.com/zarr-developers/zarr-python/blob/main/.github/workflows/python-package.yml">
      <img src="https://github.com/zarr-developers/zarr-python/actions/workflows/python-package.yml/badge.svg" alt="build status" />
      </a>
    </td>
  </tr>
  <tr>
    <td>Pre-commit Status</td>
    <td>
      <a href=""https://github.com/zarr-developers/zarr-python/blob/main/.pre-commit-config.yaml">
      <img src="https://results.pre-commit.ci/badge/github/zarr-developers/zarr-python/main.svg" alt="pre-commit status" />
      </a>
    </td>
  </tr>

  <tr>
    <td>Coverage</td>
    <td>
      <a href="https://codecov.io/gh/zarr-developers/zarr-python">
      <img src="https://codecov.io/gh/zarr-developers/zarr-python/branch/main/graph/badge.svg"/ alt="coverage">
      </a>
    </td>
  </tr>
  <tr>
    <td>Downloads</td>
    <td>
      <a href="https://zarr.readthedocs.io">
      <img src="https://pepy.tech/badge/zarr" alt="pypi downloads" />
      </a>
    </td>
  </tr>
  <tr>
  	<td>Gitter</td>
  	<td>
  		<a href="https://gitter.im/zarr-developers/community">
  		<img src="https://badges.gitter.im/zarr-developers/community.svg" />
  		</a>
  	</td>
  </tr>
  <tr>
  	<td>Citation</td>
  	<td>
  		<a href="https://doi.org/10.5281/zenodo.3773450">
  			<img src="https://zenodo.org/badge/DOI/10.5281/zenodo.3773450.svg" alt="DOI">
  		</a>
  	</td>
  </tr>

  </table>



  Zarr is a Python package providing an implementation of compressed, chunked, N-dimensional arrays, designed for use in parallel computing. See the [documentation](https://zarr.readthedocs.io) for more information.



  - [**Create**](https://zarr.readthedocs.io/en/stable/tutorial.html#creating-an-array) N-dimensional arrays with any NumPy `dtype`.
  - [**Chunk arrays**](https://zarr.readthedocs.io/en/stable/tutorial.html#chunk-optimizations) along any dimension.
  - [**Compress**](https://zarr.readthedocs.io/en/stable/tutorial.html#compressors) and/or filter chunks using any NumCodecs codec.
  - [**Store arrays**](https://zarr.readthedocs.io/en/stable/tutorial.html#tutorial-storage) in memory, on disk, inside a zip file, on S3, etc...
  - [**Read**](https://zarr.readthedocs.io/en/stable/tutorial.html#reading-and-writing-data) an array [**concurrently**](https://zarr.readthedocs.io/en/stable/tutorial.html#parallel-computing-and-synchronization) from multiple threads or processes.
  - Write to an array concurrently from multiple threads or processes.
  - Organize arrays into hierarchies via [**groups**](https://zarr.readthedocs.io/en/stable/tutorial.html#groups).



  Zarr can be installed from PyPI using `pip`:

  ```bash
  pip install zarr
  ```

  or via `conda`:

  ```bash
  conda install -c conda-forge zarr
  ```

  For more details, including how to install from source, see the [installation documentation](https://zarr.readthedocs.io/en/stable/index.html#installation).


pkgId: f4abdf706c8d8b6393a159ce79f4f6714a4d426b16d180ebfd712a94f8cc719d
name: python-zeroconf
arch: src
version: 0.47.3
epoch: 0
release: 1
summary: A pure python implementation of multicast DNS service discovery
url: https://github.com/python-zeroconf/python-zeroconf
rpm_license: LGPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-cecaf262-0c07-427a-a6ab-bebe5598f9d2
location_href: 00005543-python-zeroconf/python-zeroconf-0.47.3-1.src.rpm
checksum_type: sha256
description:
  `Documentation <https://python-zeroconf.readthedocs.io/en/latest/>`_.
  This is fork of pyzeroconf, Multicast DNS Service Discovery for Python,
  originally by Paul Scott-Murphy (https://github.com/paulsm/pyzeroconf),
  modified by William McBrine (https://github.com/wmcbrine/pyzeroconf).
  The original William McBrine's fork note::
      This fork is used in all of my TiVo-related projects: HME for Python
      (and therefore HME/VLC), Network Remote, Remote Proxy, and pyTivo.
      Before this, I was tracking the changes for zeroconf.py in three
      separate repos. I figured I should have an authoritative source.
      Although I make changes based on my experience with TiVos, I expect that
      they're generally applicable. This version also includes patches found
      on the now-defunct (?) Launchpad repo of pyzeroconf, and elsewhere
      around the net -- not always well-documented, sorry.
  Compatible with:
  * Bonjour
  * Avahi
  Compared to some other Zeroconf/Bonjour/Avahi Python packages, python-zeroconf:
  * isn't tied to Bonjour or Avahi
  * doesn't use D-Bus
  * doesn't force you to use particular event loop or Twisted (asyncio is used under the hood but not required)
  * is pip-installable
  * has PyPI distribution
  * has an optional cython extension for performance (pure python is supported as well)


pkgId: df00483158070db697a1454b5b63b94b7e2e95bf2c4a733579fcb01549f43f7a
name: python-zerorpc
arch: src
version: 0.6.3
epoch: 0
release: 1
summary: zerorpc is a flexible RPC based on zeromq.
url: https://github.com/0rpc/zerorpc-python
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-03b600eb-ca90-4d7b-8e32-74e7dd3d7ad1
location_href: 00013194-python-zerorpc/python-zerorpc-0.6.3-1.src.rpm
checksum_type: sha256
description:
  Mailing list: zerorpc@googlegroups.com (https://groups.google.com/d/forum/zerorpc)
  zerorpc is a flexible RPC implementation based on zeromq and messagepack.
  Service APIs exposed with zerorpc are called "zeroservices".
  zerorpc can be used programmatically or from the command-line. It comes
  with a convenient script, "zerorpc", allowing to:
  * expose Python modules without modifying a single line of code,
  * call those modules remotely through the command line.


pkgId: de675423fbcc0e1e0db7a208ecf916e9745311a7bb510d8b09e6397bfedc8096
name: python-zict
arch: src
version: 2.2.0
epoch: 0
release: 1
summary: Mutable mapping tools
url: http://zict.readthedocs.io/en/latest/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c38f8465-c70b-49ba-999b-12f6c5877244
location_href: 00005544-python-zict/python-zict-2.2.0-1.src.rpm
checksum_type: sha256
description:
  Mutable Mapping tools. See `documentation`_.

  .. _documentation: http://zict.readthedocs.io/en/latest/


pkgId: 709812918bc969d139b96b9b4c686d8956adde2b7601230184bc13096e700f3a
name: python-zipcodes
arch: src
version: 1.2.0
epoch: 0
release: 1
summary: Query U.S. state zipcodes without SQLite.
url: https://github.com/seanpianka/zipcodes
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-dc1f9576-b2bf-4663-a509-dccf3f9d0a30
location_href: 00011732-python-zipcodes/python-zipcodes-1.2.0-1.src.rpm
checksum_type: sha256
description:
  Zipcodes is a simple library for querying U.S. zipcodes.

  The Python `sqlite3` module is not required in order to use this package.

  ```python
  >>> import zipcodes
  >>> assert zipcodes.is_real('77429')
  >>> assert len(zipcodes.similar_to('7742')) != 0
  >>> exact_zip = zipcodes.matching('77429')[0]
  >>> filtered_zips = zipcodes.filter_by(city="Cypress", state="TX")
  >>> assert exact_zip in filtered_zips
  >>> pprint.pprint(exact_zip)
  {'acceptable_cities': [],
    'active': True,
    'area_codes': ['281', '832'],
    'city': 'Cypress',
    'country': 'US',
    'county': 'Harris County',
    'lat': '29.9857',
    'long': '-95.6548',
    'state': 'TX',
    'timezone': 'America/Chicago',
    'unacceptable_cities': [],
    'world_region': 'NA',
    'zip_code': '77429',
    'zip_code_type': 'STANDARD'}[
  ```

  ⚠️ The zipcode data was last updated on: **Oct. 3, 2021** ⚠️

  [![Downloads](https://pepy.tech/badge/zipcodes/month)](https://pepy.tech/project/zipcodes/month)
  [![Supported Versions](https://img.shields.io/pypi/pyversions/zipcodes.svg)](https://pypi.org/project/zipcodes)
  [![Contributors](https://img.shields.io/github/contributors/seanpianka/zipcodes.svg)](https://github.com/seanpianka/zipcodes/graphs/contributors)




  Zipcodes is available on PyPI:

  ```console
  $ python -m pip install zipcodes
  ```

  Zipcodes supports Python 2.6+ and Python 3.2+.



  Add a data file to your PyInstaller bundle with the [`--add-data`](https://pyinstaller.readthedocs.io/en/stable/spec-files.html#adding-data-files) flag.



  `--add-data "<path-to-package-install>/zipcodes/zips.json.bz2:zipcodes"`


  `--add-data "<path-to-package-install>\zipcodes\zips.json.bz2;zipcodes"`



  The build script for the zipcode data outputs a JSON file containing all the zipcode data and zipped using bzip2. The data sources are stored under `build/app/data`.

  Build the zipcode data for distribution:

  ```shell script
  $ build/app/__init__.py # outputs `zipcodes/zips.json.bz2`
  ```




  The tests are defined in a declarative, table-based format that generates test
  cases.

  Run the tests directly:

  ```shell script
  $ python tests/__init__.py
  ```



  ```python
  >>> from pprint import pprint
  >>> import zipcodes

  >>> # Simple zip-code matching.
  >>> pprint(zipcodes.matching('77429'))
  [{'acceptable_cities': [],
    'active': True,
    'area_codes': ['281', '832'],
    'city': 'Cypress',
    'country': 'US',
    'county': 'Harris County',
    'lat': '29.9857',
    'long': '-95.6548',
    'state': 'TX',
    'timezone': 'America/Chicago',
    'unacceptable_cities': [],
    'world_region': 'NA',
    'zip_code': '77429',
    'zip_code_type': 'STANDARD'}]


  >>> # Handles of Zip+4 zip-codes nicely. :)
  >>> pprint(zipcodes.matching('77429-1145'))
  [{'acceptable_cities': [],
    'active': True,
    'area_codes': ['281', '832'],
    'city': 'Cypress',
    'country': 'US',
    'county': 'Harris County',
    'lat': '29.9857',
    'long': '-95.6548',
    'state': 'TX',
    'timezone': 'America/Chicago',
    'unacceptable_cities': [],
    'world_region': 'NA',
    'zip_code': '77429',
    'zip_code_type': 'STANDARD'}]

  >>> # Will try to handle invalid zip-codes gracefully...
  >>> print(zipcodes.matching('06463'))
  []

  >>> # Until it cannot.
  >>> zipcodes.matching('0646a')
  Traceback (most recent call last):
    ...
  TypeError: Invalid characters, zipcode may only contain digits and "-".

  >>> zipcodes.matching('064690')
  Traceback (most recent call last):
    ...
  TypeError: Invalid format, zipcode must be of the format: "#####" or "#####-####"

  >>> zipcodes.matching(None)
  Traceback (most recent call last):
    ...
  TypeError: Invalid type, zipcode must be a string.

  >>> # Whether the zip-code exists within the database.
  >>> print(zipcodes.is_real('06463'))
  False

  >>> # How handy!
  >>> print(zipcodes.is_real('06469'))
  True

  >>> # Search for zipcodes that begin with a pattern.
  >>> pprint(zipcodes.similar_to('1018'))
  [{'acceptable_cities': [],
    'active': False,
    'area_codes': ['212'],
    'city': 'New York',
    'country': 'US',
    'county': 'New York County',
    'lat': '40.71',
    'long': '-74',
    'state': 'NY',
    'timezone': 'America/New_York',
    'unacceptable_cities': ['J C Penney'],
    'world_region': 'NA',
    'zip_code': '10184',
    'zip_code_type': 'UNIQUE'},
   {'acceptable_cities': [],
    'active': True,
    'area_codes': ['212'],
    'city': 'New York',
    'country': 'US',
    'county': 'New York County',
    'lat': '40.7143',
    'long': '-74.0067',
    'state': 'NY',
    'timezone': 'America/New_York',
    'unacceptable_cities': [],
    'world_region': 'NA',
    'zip_code': '10185',
    'zip_code_type': 'PO BOX'}]

  >>> # Use filter_by to filter a list of zip-codes by specific attribute->value pairs.
  >>> pprint(zipcodes.filter_by(city="Old Saybrook"))
  [{'acceptable_cities': [],
    'active': True,
    'area_codes': ['860'],
    'city': 'Old Saybrook',
    'country': 'US',
    'county': 'Middlesex County',
    'lat': '41.3015',
    'long': '-72.3879',
    'state': 'CT',
    'timezone': 'America/New_York',
    'unacceptable_cities': ['Fenwick'],
    'world_region': 'NA',
    'zip_code': '06475',
    'zip_code_type': 'STANDARD'}]

  >>> # Arbitrary nesting of similar_to and filter_by calls, allowing for great precision while filtering.
  >>> pprint(zipcodes.similar_to('2', zips=zipcodes.filter_by(active=True, city='Windsor')))
  [{'acceptable_cities': [],
    'active': True,
    'area_codes': ['757'],
    'city': 'Windsor',
    'country': 'US',
    'county': 'Isle of Wight County',
    'lat': '36.8628',
    'long': '-76.7143',
    'state': 'VA',
    'timezone': 'America/New_York',
    'unacceptable_cities': [],
    'world_region': 'NA',
    'zip_code': '23487',
    'zip_code_type': 'STANDARD'},
   {'acceptable_cities': ['Askewville'],
    'active': True,
    'area_codes': ['252'],
    'city': 'Windsor',
    'country': 'US',
    'county': 'Bertie County',
    'lat': '35.9942',
    'long': '-76.9422',
    'state': 'NC',
    'timezone': 'America/New_York',
    'unacceptable_cities': [],
    'world_region': 'NA',
    'zip_code': '27983',
    'zip_code_type': 'STANDARD'},
   {'acceptable_cities': [],
    'active': True,
    'area_codes': ['803'],
    'city': 'Windsor',
    'country': 'US',
    'county': 'Aiken County',
    'lat': '33.4730',
    'long': '-81.5132',
    'state': 'SC',
    'timezone': 'America/New_York',
    'unacceptable_cities': [],
    'world_region': 'NA',
    'zip_code': '29856',
    'zip_code_type': 'STANDARD'}]

  >>> # Have any other ideas? Make a pull request and start contributing today!
  >>> # Made with love by Sean Pianka
  ```


pkgId: 8d7e09cfca5a62f1952629bd5520f035e16f152f46af16661f0092623d2a24f9
name: python-zipfile38
arch: src
version: 0.0.3
epoch: 0
release: 1
summary: Read and write ZIP files - backport of the zipfile module from Python 3.8
url: https://github.com/lorencarvalho/zipfile38
rpm_license: Python Software Foundation License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f32480e1-0837-4e8e-973e-81d5e099693f
location_href: 00010113-python-zipfile38/python-zipfile38-0.0.3-1.src.rpm
checksum_type: sha256
description:
  shout out to `Thomas Kluyver's backport for 3.6 <https://gitlab.com/takluyver/zipfile36>`_ and `Markus Scheidgen's backport for 3.7 <https://github.com/markus1978/zipfile37>`_.


pkgId: bc7c8db55f3c65171e2938e219e3ea635ac45e6da3545a0666746643944468eb
name: python-zipstream-new
arch: src
version: 1.1.8
epoch: 0
release: 1
summary: Zipfile generator that takes input files as well as streams
url: https://github.com/arjan-s/python-zipstream
rpm_license: GNU General Public License v3 (GPLv3)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6a5635ca-e2f2-45f0-b70b-3705edccb2e3
location_href: 00012473-python-zipstream-new/python-zipstream-new-1.1.8-1.src.rpm
checksum_type: sha256
description:
  zipstream.py is a zip archive generator based on python 3.3's zipfile.py. It was created to
  generate a zip file generator for streaming (ie web apps). This is beneficial for when you
  want to provide a downloadable archive of a large collection of regular files, which would be infeasible to
  generate the archive prior to downloading or of a very large file that you do not want to store entirely on disk or on memory.

  The archive is generated as an iterator of strings, which, when joined, form
  the zip archive. For example, the following code snippet would write a zip
  archive containing files from 'path' to a normal file:

  ```python
  import zipstream

  z = zipstream.ZipFile()
  z.write('path/to/files')

  with open('zipfile.zip', 'wb') as f:
      for data in z:
          f.write(data)
  ```

  zipstream also allows to take as input a byte string iterable and to generate
  the archive as an iterator.
  This avoids storing large files on disk or in memory.
  To do so you could use something like this snippet:

  ```python
  def iterable():
      for _ in xrange(10):
          yield b'this is a byte string\x01\n'

  z = zipstream.ZipFile()
  z.write_iter('my_archive_iter', iterable())

  with open('zipfile.zip', 'wb') as f:
      for data in z:
          f.write(data)
  ```

  Of course both approach can be combined:

  ```python
  def iterable():
      for _ in xrange(10):
          yield b'this is a byte string\x01\n'

  z = zipstream.ZipFile()
  z.write('path/to/files', 'my_archive_files')
  z.write_iter('my_archive_iter', iterable())

  with open('zipfile.zip', 'wb') as f:
      for data in z:
          f.write(data)
  ```

  Since recent versions of web.py support returning iterators of strings to be
  sent to the browser, to download a dynamically generated archive, you could
  use something like this snippet:

  ```python
  def GET(self):
      path = '/path/to/dir/of/files'
      zip_filename = 'files.zip'
      web.header('Content-type' , 'application/zip')
      web.header('Content-Disposition', 'attachment; filename="%s"' % (
          zip_filename,))
      return zipstream.ZipFile(path)
  ```

  If the zlib module is available, zipstream.ZipFile can generate compressed zip
  archives.



  ```
  pip install zipstream-new
  ```



    * Python 2.6+, 3.2+, pypy





  ```python
  from flask import Response

  @app.route('/package.zip', methods=['GET'], endpoint='zipball')
  def zipball():
      def generator():
          z = zipstream.ZipFile(mode='w', compression=zipstream.ZIP_DEFLATED)

          z.write('/path/to/file')

          for chunk in z:
              yield chunk

      response = Response(generator(), mimetype='application/zip')
      response.headers['Content-Disposition'] = 'attachment; filename={}'.format('files.zip')
      return response



  @app.route('/package.zip', methods=['GET'], endpoint='zipball')
  def zipball():
      z = zipstream.ZipFile(mode='w', compression=zipstream.ZIP_DEFLATED)
      z.write('/path/to/file')

      response = Response(z, mimetype='application/zip')
      response.headers['Content-Disposition'] = 'attachment; filename={}'.format('files.zip')
      return response



  @app.route('/package.zip', methods=['GET'], endpoint='zipball')
  def zipball():
      def generate_zip_with_manifest():
          z = zipstream.ZipFile(mode='w', compression=zipstream.ZIP_DEFLATED)

          manifest = []
          for filename in os.listdir('/path/to/files'):
              z.write(os.path.join('/path/to/files', filename), arcname=filename)
              yield from z.flush()
              manifest.append(filename)

          z.write_str('manifest.json', json.dumps(manifest).encode())

          yield from z

      response = Response(z, mimetype='application/zip')
      response.headers['Content-Disposition'] = 'attachment; filename={}'.format('files.zip')
      return response
  ```



  ```python
  from django.http import StreamingHttpResponse

  def zipball(request):
      z = zipstream.ZipFile(mode='w', compression=zipstream.ZIP_DEFLATED)
      z.write('/path/to/file')

      response = StreamingHttpResponse(z, content_type='application/zip')
      response['Content-Disposition'] = 'attachment; filename={}'.format('files.zip')
      return response
  ```



  ```python
  def GET(self):
      path = '/path/to/dir/of/files'
      zip_filename = 'files.zip'
      web.header('Content-type' , 'application/zip')
      web.header('Content-Disposition', 'attachment; filename="%s"' % (
          zip_filename,))
      return zipstream.ZipFile(path)
  ```



  With python version > 2.6, just run the following command: `python -m unittest discover`

  Alternatively, you can use `nose`.

  If you want to run the tests on all supported Python versions, run `tox`.


pkgId: 191f82e136a17d3d40a5997a3e3956c511544d181401b223470ab0ae1b2a4f94
name: python-zodbpickle
arch: src
version: 2.6
epoch: 0
release: 1
summary: Fork of Python 2 and 3 pickle module.
url: https://github.com/zopefoundation/zodbpickle
rpm_license: PSFL 2 and ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1d878dfe-a213-4cb2-96a3-9086385b1cdc
location_href: 00003247-python-zodbpickle/python-zodbpickle-2.6-1.src.rpm
checksum_type: sha256
description:
  This package presents a uniform pickling interface for ZODB:
  - Under Python2, this package forks both Python 2.7's ``pickle`` and
    ``cPickle`` modules, adding support for the ``protocol 3`` opcodes.
    It also provides a new subclass of ``bytes``, ``zodbpickle.binary``,
    which Python2 applications can use to pickle binary values such that
    they will be unpickled as ``bytes`` under Py3k.
  - Under Py3k, this package forks the ``pickle`` module (and the supporting
    C extension) from both Python 3.2 and Python 3.3.  The fork add support
    for the ``noload`` operations used by ZODB.


pkgId: c9b6b46fe3165aa7dd5918574161c7f27b69dc232fa175b441ee055c6cf70789
name: python-zodbpickle-debuginfo
arch: aarch64
version: 3.0.1
epoch: 0
release: 1
summary: Debug information for package python-zodbpickle
url: https://github.com/zopefoundation/zodbpickle
rpm_license: PSFL 2 and ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-32531a12-a2b1-47f3-adcb-9297451ff47b
rpm_sourcerpm: python-zodbpickle-3.0.1-1.src.rpm
location_href: 00008866-python-zodbpickle/python-zodbpickle-debuginfo-3.0.1-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-zodbpickle.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 34d342968607480611e056d86b7224c0a277c4fa63500bdf949e24dd145edfd1
name: python-zodbpickle-debugsource
arch: aarch64
version: 3.0.1
epoch: 0
release: 1
summary: Debug sources for package python-zodbpickle
url: https://github.com/zopefoundation/zodbpickle
rpm_license: PSFL 2 and ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-32531a12-a2b1-47f3-adcb-9297451ff47b
rpm_sourcerpm: python-zodbpickle-3.0.1-1.src.rpm
location_href: 00008866-python-zodbpickle/python-zodbpickle-debugsource-3.0.1-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-zodbpickle.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 381d92d768592c5819ec1c6c86087bf32cc3b4094f8561314c2ddb80dea9470d
name: python-zope.container-debuginfo
arch: aarch64
version: 5.0
epoch: 0
release: 1
summary: Debug information for package python-zope.container
url: https://github.com/zopefoundation/zope.container
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-abdb20c2-f21c-444f-930e-597b172868f5
rpm_sourcerpm: python-zope.container-5.0-1.src.rpm
location_href: 00012456-python-zope-container/python-zope.container-debuginfo-5.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-zope.container.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: e24f9e54a15ac10fecdaa4930db61ef82438627af8a0fe9767577986a35e8256
name: python-zope.container-debugsource
arch: aarch64
version: 5.0
epoch: 0
release: 1
summary: Debug sources for package python-zope.container
url: https://github.com/zopefoundation/zope.container
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-abdb20c2-f21c-444f-930e-597b172868f5
rpm_sourcerpm: python-zope.container-5.0-1.src.rpm
location_href: 00012456-python-zope-container/python-zope.container-debugsource-5.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-zope.container.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 7c4e9c6ee7b127ac48869724bc77dffa98a96c29017cb87ae2ce4cfa1df08b96
name: python-zope.fixers
arch: src
version: 1.1.2
epoch: 0
release: 1
summary: 2to3 fixers for Zope
url: http://svn.zope.org/zope.fixers/
rpm_license: ZPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9b4c04e7-b778-45c2-b3b1-d4dabc40b2ee
location_href: 00005551-python-zope-fixers/python-zope.fixers-1.1.2-1.src.rpm
checksum_type: sha256
description:
  Fixers for Zope Component Architecture and the frameworks built with it.
  Currently, there is only one fixer, fix_implements. This fixer will change
  all uses of implements(IFoo) in a class body to the class decorator
  @implementer(IFoo), which is the most likely Python 3 syntax for
  zope.interfaces implements statements.


pkgId: 36961646ebec9647fe3a084de70f3e8bd5d69d9ab55a6a7293c97910dab0c506
name: python-zope.hookable-debuginfo
arch: aarch64
version: 5.4
epoch: 0
release: 1
summary: Debug information for package python-zope.hookable
url: http://github.com/zopefoundation/zope.hookable
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-805b7c3a-08a3-47a9-b206-707d721abe4e
rpm_sourcerpm: python-zope.hookable-5.4-1.src.rpm
location_href: 00010468-python-zope-hookable/python-zope.hookable-debuginfo-5.4-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-zope.hookable.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 4f51329a8409573639d5159ccbc2b0424bf3c96a5da7c6544e2c2ff1fc39f5bb
name: python-zope.hookable-debugsource
arch: aarch64
version: 5.4
epoch: 0
release: 1
summary: Debug sources for package python-zope.hookable
url: http://github.com/zopefoundation/zope.hookable
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-805b7c3a-08a3-47a9-b206-707d721abe4e
rpm_sourcerpm: python-zope.hookable-5.4-1.src.rpm
location_href: 00010468-python-zope-hookable/python-zope.hookable-debugsource-5.4-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-zope.hookable.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 952f15237289cadf357eecb283e7d7b5fa19d8061fd570dbd6b123d719dcdda6
name: python-zope.i18nmessageid
arch: src
version: 5.1.1
epoch: 0
release: 1
summary: Message Identifiers for internationalization
url: https://github.com/zopefoundation/zope.i18nmessageid
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-655d75d0-3bd0-44b0-a031-c76aef91a671
location_href: 00005552-python-zope-i18nmessageid/python-zope.i18nmessageid-5.1.1-1.src.rpm
checksum_type: sha256
description:
  To translate any text, we must be able to discover the source domain
  of the text.  A source domain is an identifier that identifies a
  project that produces program source strings.  Source strings occur as
  literals in python programs, text in templates, and some text in XML
  data.  The project implies a source language and an application
  context.
  We can think of a source domain as a collection of messages and
  associated translation strings.
  We often need to create unicode strings that will be displayed by
  separate views.  The view cannot translate the string without knowing
  its source domain.  A string or unicode literal carries no domain
  information, therefore we use messages.  Messages are unicode strings
  which carry a translation source domain and possibly a default
  translation.  They are created by a message factory. The message
  factory is created by calling ``MessageFactory`` with the source
  domain.
  This package provides facilities for *declaring* such messages within
  program source text;  translation of the messages is the responsiblitiy
  of the 'zope.i18n' package.


pkgId: c67321922163bd685d8883ffa415d1b3101decd39d88fcdb6c6082d033668d0c
name: python-zope.i18nmessageid-debuginfo
arch: aarch64
version: 5.1.1
epoch: 0
release: 1
summary: Debug information for package python-zope.i18nmessageid
url: https://github.com/zopefoundation/zope.i18nmessageid
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-655d75d0-3bd0-44b0-a031-c76aef91a671
rpm_sourcerpm: python-zope.i18nmessageid-5.1.1-1.src.rpm
location_href: 00005552-python-zope-i18nmessageid/python-zope.i18nmessageid-debuginfo-5.1.1-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-zope.i18nmessageid.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: c8b3b8fbde054f717b5b82160d3081cd91ca1f35db8f4d5f96ea68c2fcab1ac8
name: python-zope.i18nmessageid-debugsource
arch: aarch64
version: 5.1.1
epoch: 0
release: 1
summary: Debug sources for package python-zope.i18nmessageid
url: https://github.com/zopefoundation/zope.i18nmessageid
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-655d75d0-3bd0-44b0-a031-c76aef91a671
rpm_sourcerpm: python-zope.i18nmessageid-5.1.1-1.src.rpm
location_href: 00005552-python-zope-i18nmessageid/python-zope.i18nmessageid-debugsource-5.1.1-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-zope.i18nmessageid.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: c96c12e440c74ae6c8796d1972cf3d8ebcae0e7dee0159cf731dd3ece3510980
name: python-zope.index-debuginfo
arch: aarch64
version: 6.0
epoch: 0
release: 1
summary: Debug information for package python-zope.index
url: https://github.com/zopefoundation/zope.index
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-085e769a-9c4a-43d7-a8c5-1e4a3009b6cf
rpm_sourcerpm: python-zope.index-6.0-1.src.rpm
location_href: 00010963-python-zope-index/python-zope.index-debuginfo-6.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-zope.index.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 94c16be801b60677ae4eb8fa7a96e5358bba0c75e7d4e31616769ae4444e3bef
name: python-zope.index-debugsource
arch: aarch64
version: 6.0
epoch: 0
release: 1
summary: Debug sources for package python-zope.index
url: https://github.com/zopefoundation/zope.index
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-085e769a-9c4a-43d7-a8c5-1e4a3009b6cf
rpm_sourcerpm: python-zope.index-6.0-1.src.rpm
location_href: 00010963-python-zope-index/python-zope.index-debugsource-6.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-zope.index.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: fe9a1414f9fe8269867c156f14cc5c98778601dce48ea6a19edb1023e315aebc
name: python-zope.interface-debuginfo
arch: aarch64
version: 6.0
epoch: 0
release: 1
summary: Debug information for package python-zope.interface
url: https://github.com/zopefoundation/zope.interface
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-c688b7ab-1ccb-4de1-b7d6-8e829ab8429f
rpm_sourcerpm: python-zope.interface-6.0-1.src.rpm
location_href: 00009065-python-zope-interface/python-zope.interface-debuginfo-6.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-zope.interface.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 9739f7381f7b4b12dc087af66595d7951c97ee2f38f182fc34035522bb36202f
name: python-zope.interface-debugsource
arch: aarch64
version: 6.0
epoch: 0
release: 1
summary: Debug sources for package python-zope.interface
url: https://github.com/zopefoundation/zope.interface
rpm_license: ZPL 2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-c688b7ab-1ccb-4de1-b7d6-8e829ab8429f
rpm_sourcerpm: python-zope.interface-6.0-1.src.rpm
location_href: 00009065-python-zope-interface/python-zope.interface-debugsource-6.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-zope.interface.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: a43567dadefe5e2cc66ebd79e41ff67102eb010a7bcd7d4c6db6b7bfbba60e34
name: python-zopfli
arch: src
version: 0.2.2
epoch: 0
release: 1
summary: Zopfli module for python
url: https://github.com/fonttools/py-zopfli
rpm_license: ASL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8496463d-a9ef-409f-915f-a264aaa9e30b
location_href: 00010971-python-zopfli/python-zopfli-0.2.2-1.src.rpm
checksum_type: sha256
description:
  cPython bindings for
  `zopfli <http://googledevelopers.blogspot.com/2013/02/compress-data-more-densely-with-zopfli.html>`__.
  It requires Python 3.7 or greater.


pkgId: 119528d864fa2967e69043ca5e6df4bb8760ea5ad941448ce89fb49b610e0937
name: python-zopfli-debuginfo
arch: aarch64
version: 0.2.2
epoch: 0
release: 1
summary: Debug information for package python-zopfli
url: https://github.com/fonttools/py-zopfli
rpm_license: ASL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-8496463d-a9ef-409f-915f-a264aaa9e30b
rpm_sourcerpm: python-zopfli-0.2.2-1.src.rpm
location_href: 00010971-python-zopfli/python-zopfli-debuginfo-0.2.2-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-zopfli.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 2678da1f45217070cdb44b233686460665cb35af7a71379d0830e973d428a5a6
name: python-zopfli-debugsource
arch: aarch64
version: 0.2.2
epoch: 0
release: 1
summary: Debug sources for package python-zopfli
url: https://github.com/fonttools/py-zopfli
rpm_license: ASL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-8496463d-a9ef-409f-915f-a264aaa9e30b
rpm_sourcerpm: python-zopfli-0.2.2-1.src.rpm
location_href: 00010971-python-zopfli/python-zopfli-debugsource-0.2.2-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-zopfli.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 4882cec6d1b848f9364755b0f2108d570fae1bf23f6148cdfb9a9923c570a24e
name: python-zstandard-debuginfo
arch: aarch64
version: 0.20.0
epoch: 0
release: 1
summary: Debug information for package python-zstandard
url: https://github.com/indygreg/python-zstandard
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-be8bc1d1-b1e9-40a1-9d59-d6810030ec9b
rpm_sourcerpm: python-zstandard-0.20.0-1.src.rpm
location_href: 00005556-python-zstandard/python-zstandard-debuginfo-0.20.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-zstandard.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 0dea1b4dbbfeb6f90bbb788c36fc11357aeb704de2ab656bde6399f8a5cdbfdc
name: python-zstandard-debugsource
arch: aarch64
version: 0.20.0
epoch: 0
release: 1
summary: Debug sources for package python-zstandard
url: https://github.com/indygreg/python-zstandard
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-be8bc1d1-b1e9-40a1-9d59-d6810030ec9b
rpm_sourcerpm: python-zstandard-0.20.0-1.src.rpm
location_href: 00005556-python-zstandard/python-zstandard-debugsource-0.20.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-zstandard.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 09af008115b000dc9b3a29e94001f9bf1e1cfe98b650149242bdac28b35f0e7b
name: python-zstd-debuginfo
arch: aarch64
version: 1.5.5.1
epoch: 0
release: 1
summary: Debug information for package python-zstd
url: https://github.com/sergey-dryabzhinsky/python-zstd
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-46175182-a14f-4ff2-9796-58335a0dde44
rpm_sourcerpm: python-zstd-1.5.5.1-1.src.rpm
location_href: 00010910-python-zstd/python-zstd-debuginfo-1.5.5.1-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-zstd.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: a292b4a0ab3a1f2fb3df4cb2ca872bfb1fef2e6b255df4596125997a68d8c2a5
name: python-zstd-debugsource
arch: aarch64
version: 1.5.5.1
epoch: 0
release: 1
summary: Debug sources for package python-zstd
url: https://github.com/sergey-dryabzhinsky/python-zstd
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-46175182-a14f-4ff2-9796-58335a0dde44
rpm_sourcerpm: python-zstd-1.5.5.1-1.src.rpm
location_href: 00010910-python-zstd/python-zstd-debugsource-1.5.5.1-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-zstd.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 6f44f1846b6ec31a5709c811e5a3572bbd63846469518dcb883c3cdd29fa2cfe
name: python-zthreading
arch: src
version: 0.1.19
epoch: 0
release: 1
description: Please see the github repo and help @ https://github.com/LamaAni/zthreading.py
url: https://github.com/LamaAni/zthreading.py
rpm_license: LICENSE
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a9279985-1971-48f7-a4f1-e42f9ffb57a6
location_href: 00009465-python-zthreading/python-zthreading-0.1.19-1.src.rpm
checksum_type: sha256
summary:
  A collection of wrapper classes for event broadcast and task management for python (Python Threads or Asyncio).


pkgId: 0160c6e947bcb93ae89fd35b308640c71ffd104180efe2c5053679ea79a5a987
name: python-zuul-client
arch: src
version: 0.1.0
epoch: 0
release: 1
summary: A client for the Zuul Gating System
url: https://zuul-ci.org/
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-06ee2c21-091a-4561-a98c-30010021cc30
location_href: 00005557-python-zuul-client/python-zuul-client-0.1.0-1.src.rpm
checksum_type: sha256
description:
  Zuul-client is a CLI tool that can be used to interact with Zuul, the project
  gating system.
  The latest documentation for Zuul and Zuul Client can be found at:
  https://zuul-ci.org/docs/


pkgId: b1071fc2c90d77a12aaf0fc3b2201c16740871508ac46bf5975a544c67a9ef79
name: python-zuul-sphinx
arch: src
version: 0.6.0
epoch: 0
release: 1
summary: A Sphinx extension for documenting Zuul jobs
url: https://docs.openstack.org/infra/zuul-sphinx/
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5af4d2c9-f659-4576-8ef6-4ac6b2eb3f50
location_href: 00005558-python-zuul-sphinx/python-zuul-sphinx-0.6.0-1.src.rpm
checksum_type: sha256
description:
  A `Sphinx <https://www.sphinx-doc.org>`__ extension for documenting
  `Zuul <https://zuul-ci.org>`__ jobs and configuration.


pkgId: ff932ec79cdbfa7b44d50ac810265d0a09c4633df274993668bdfcc3caf13fbc
name: python-zxcvbn
arch: src
version: 4.4.28
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/dwolfhub/zxcvbn-python
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-258830b0-a522-48bc-a83a-96d263e314e1
location_href: 00011567-python-zxcvbn/python-zxcvbn-4.4.28-1.src.rpm
checksum_type: sha256
description:
  A realistic password strength estimator.
  This is a Python implementation of the library created by the team at Dropbox.
  The original library, written for JavaScript, can be found
  `here <https://github.com/dropbox/zxcvbn>`__.
  While there may be other Python ports available, this one is the most up
  to date and is recommended by the original developers of zxcvbn at this
  time.


pkgId: c0fa9b44312dcee365739d345422593ffe4464b840a08a93da8f30ec6768a098
name: python-zxcvbn-python
arch: src
version: 4.4.24
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/dwolfhub/zxcvbn-python
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f7bbe5d9-1dfe-4a65-ade7-f417ef07e141
location_href: 00013076-python-zxcvbn-python/python-zxcvbn-python-4.4.24-1.src.rpm
checksum_type: sha256
description:
  This package has been moved! Please install using `pip install zxcvbn`.
  https://pypi.python.org/pypi/zxcvbn
  |Build Status|


pkgId: 2c0e00b58fa5d74eb7b5b96891f694a662efac11d471746cbc0c9d916cbaa704
name: python3-Office365-REST-Python-Client
arch: noarch
version: 2.4.0
epoch: 0
release: 1
summary: Microsoft 365 & Microsoft Graph Library for Python
url: https://github.com/vgrem/Office365-REST-Python-Client
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-bb159d62-1113-4ad5-91e6-5acfc3aa2bc2
rpm_sourcerpm: python-Office365-REST-Python-Client-2.4.0-1.src.rpm
checksum_type: sha256
description:
  Office 365 & Microsoft Graph library for Python



  1. [Installation](#Installation)
  2. [Working with SharePoint API](#Working-with-SharePoint-API)
  3. [Working with Outlook API](#Working-with-Outlook-API)
  4. [Working with OneDrive API](#Working-with-OneDrive-API)
  5. [Working with Teams API](#Working-with-Microsoft-Teams-API)
  6. [Working with OneNote API](#Working-with-Microsoft-OneNote-API)
  7. [Working with Planner API](#Working-with-Microsoft-Planner-API)


  [![Downloads](https://pepy.tech/badge/office365-rest-python-client/month)](https://pepy.tech/project/office365-rest-python-client)
  [![PyPI](https://img.shields.io/pypi/v/Office365-REST-Python-Client.svg)](https://pypi.python.org/pypi/Office365-REST-Python-Client)
  [![PyPI pyversions](https://img.shields.io/pypi/pyversions/Office365-REST-Python-Client.svg)](https://pypi.python.org/pypi/Office365-REST-Python-Client/)
  [![Build Status](https://travis-ci.com/vgrem/Office365-REST-Python-Client.svg?branch=master)](https://travis-ci.com/vgrem/Office365-REST-Python-Client)



  Use pip:

  ```
  pip install Office365-REST-Python-Client
  ```


  >

  >Alternatively the _latest_ version could be directly installed via GitHub:
  >```
  >pip install git+https://github.com/vgrem/Office365-REST-Python-Client.git
  >```


  For the following examples, relevant credentials can be found in the Azure Portal.

  Steps to access:
  1. Login to the home page of the Azure Portal
  2. Navigate to "Azure Active Directory" using the three bars in the top right corner of the portal
  3. Select "App registrations" in the navigation panel on the left
  4. Search for and select your relevant application
  5. In the application's "Overview" page, the client id can be found under "Application (client) id"
  6. In the application's "Certificates & Secrets" page, the client secret can be found under the "Value" of the "Client Secrets." If there is no client secret yet, create one here.



  The list of supported API versions:
  -   [SharePoint 2013 REST API](https://msdn.microsoft.com/en-us/library/office/jj860569.aspx) and above
  -   SharePoint Online & OneDrive for Business REST API



  The following auth flows are supported:

  - app principals flow:
    `ClientContext.with_credentials(client_credentials)`

    Usage:
    ```
    client_credentials = ClientCredential('{client_id}','{client_secret}')
    ctx = ClientContext('{url}').with_credentials(client_credentials)
    ```
    Documentation: refer [Granting access using SharePoint App-Only](https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs) for a details

    Example: [connect_with_app_principal.py](examples/sharepoint/connect_with_app_only_principal.py)

  - user credentials flow: `ClientContext.with_credentials(user_credentials)`

    Usage:
    ```
    user_credentials = UserCredential('{username}','{password}')
    ctx = ClientContext('{url}').with_credentials(user_credentials)
    ```
    Example: [connect_with_user_credential.py](examples/sharepoint/connect_with_user_credential.py)

  - certificate credentials flow: `ClientContext.with_certificate(tenant, client_id, thumbprint, cert_path)`

    Documentation: [Granting access via Azure AD App-Only](https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread)

    Example: [connect_with_client_certificate.py](examples/sharepoint/connect_with_client_certificate.py)



  There are **two approaches** available to perform API queries:

  1. `ClientContext class` - where you target SharePoint resources such as `Web`, `ListItem` and etc (recommended)

  ```python
  from office365.runtime.auth.user_credential import UserCredential
  from office365.sharepoint.client_context import ClientContext
  site_url = "https://{your-tenant-prefix}.sharepoint.com"
  ctx = ClientContext(site_url).with_credentials(UserCredential("{username}", "{password}"))
  web = ctx.web
  ctx.load(web)
  ctx.execute_query()
  print("Web title: {0}".format(web.properties['Title']))
  ```
  or alternatively via method chaining (a.k.a Fluent Interface):

  ```python
  from office365.runtime.auth.user_credential import UserCredential
  from office365.sharepoint.client_context import ClientContext
  site_url = "https://{your-tenant-prefix}.sharepoint.com"
  ctx = ClientContext(site_url).with_credentials(UserCredential("{username}", "{password}"))
  web = ctx.web.get().execute_query()
  print("Web title: {0}".format(web.properties['Title']))
  ```


  2. `RequestOptions class` - where you construct REST queries (and no model is involved)

     The example demonstrates how to read `Web` properties:

  ```python
  import json
  from office365.runtime.auth.user_credential import UserCredential
  from office365.runtime.http.request_options import RequestOptions
  from office365.sharepoint.client_context import ClientContext
  site_url = "https://{your-tenant-prefix}.sharepoint.com"
  ctx = ClientContext(site_url).with_credentials(UserCredential("{username}", "{password}"))
  request = RequestOptions("{0}/_api/web/".format(site_url))
  response = ctx.pending_request().execute_request_direct(request)
  json = json.loads(response.content)
  web_title = json['d']['Title']
  print("Web title: {0}".format(web_title))
  ```


  The list of examples:

  - Working with files
    - [download a file](examples/sharepoint/files/download_file.py)
    - [upload a file](examples/sharepoint/files/upload_file.py)

  - Working with lists and list items
    -  [create a list item](examples/sharepoint/lists/data_generator.py)
    -  [read a list item](examples/sharepoint/lists/read_large_list.py)
    -  [update a list item](examples/sharepoint/listitems/update_items_batch.py)
    -  [delete a list item](examples/sharepoint/listitems/delete_list_item.py)

  Refer [examples section](examples/sharepoint) for another scenarios



  The list of supported APIs:
  -   [Outlook Contacts REST API](https://msdn.microsoft.com/en-us/office/office365/api/contacts-rest-operations)
  -   [Outlook Calendar REST API](https://msdn.microsoft.com/en-us/office/office365/api/calendar-rest-operations)
  -   [Outlook Mail REST API](https://msdn.microsoft.com/en-us/office/office365/api/mail-rest-operations)


  Since Outlook REST APIs are available in both Microsoft Graph and the Outlook API endpoint,
  the following clients are available:

  - `GraphClient` which targets Outlook API `v2.0` version (*preferable* nowadays, refer [transition to Microsoft Graph-based Outlook REST API](https://docs.microsoft.com/en-us/outlook/rest/compare-graph-outlook) for a details)
  ~~- `OutlookClient` which targets Outlook API `v1.0` version (not recommended for usage since `v1.0` version is being deprecated.)~~




  [The Microsoft Authentication Library (MSAL) for Python](https://pypi.org/project/msal/) which comes as a dependency
  is used as a default library to obtain tokens to call Microsoft Graph API.

  Using [Microsoft Authentication Library (MSAL) for Python](https://pypi.org/project/msal/)

  > Note: access token is getting acquired via [Client Credential flow](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow)
  > in the provided examples. Other forms of token aquisition can be found here: https://msal-python.readthedocs.io/en/latest/

  ```python
  import msal
  from office365.graph_client import GraphClient

  def acquire_token():
      """
      Acquire token via MSAL
      """
      authority_url = 'https://login.microsoftonline.com/{tenant_id_or_name}'
      app = msal.ConfidentialClientApplication(
          authority=authority_url,
          client_id='{client_id}',
          client_credential='{client_secret}'
      )
      token = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])
      return token


  client = GraphClient(acquire_token)

  ```

  But in terms of Microsoft Graph API authentication, another OAuth spec compliant libraries
  such as [adal](https://github.com/AzureAD/azure-activedirectory-library-for-python)
  are supported as well.

  Using [ADAL Python](https://adal-python.readthedocs.io/en/latest/#)

  Usage

  ```python
  import adal
  from office365.graph_client import GraphClient

  def acquire_token_func():
      authority_url = 'https://login.microsoftonline.com/{tenant_id_or_name}'
      auth_ctx = adal.AuthenticationContext(authority_url)
      token = auth_ctx.acquire_token_with_client_credentials(
          "https://graph.microsoft.com",
          "{client_id}",
          "{client_secret}")
      return token

  client = GraphClient(acquire_token_func)

  ```



  The example demonstrates how to send an email via [Microsoft Graph endpoint](https://docs.microsoft.com/en-us/graph/api/user-sendmail?view=graph-rest-1.0&tabs=http).

  > Note: access token is getting acquired  via [Client Credential flow](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow)

  ```python
  from office365.graph_client import GraphClient

  client = GraphClient(acquire_token_func)

  client.me.send_mail(
      subject="Meet for lunch?",
      body="The new cafeteria is open.",
      to_recipients=["fannyd@contoso.onmicrosoft.com"]
  ).execute_query()

  ```

  > How to enable sending emails on behalf of another user in your organization: https://learn.microsoft.com/en-us/microsoft-365/solutions/allow-members-to-send-as-or-send-on-behalf-of-group?view=o365-worldwide&viewFallbackFrom=o365-worldwide%3FWT.mc_id%3D365AdminCSH_globalsearch

  Additional examples:

  -  [download a message](examples/outlook/download_messages.py)
  -  [list messages](examples/outlook/list_message.py)
  -  [move messages to a different folder](examples/outlook/move_message.py)
  -  [search messages](examples/outlook/search_message.py)
  -  [send messages](examples/outlook/send_message.py)
  -  [send messages with attachments](examples/outlook/send_message_with_attachment.py)

  Refer to [examples section](examples/outlook) for other scenarios






  [OneDrive Graph API reference](https://docs.microsoft.com/en-us/graph/api/resources/onedrive?view=graph-rest-1.0)



  [The Microsoft Authentication Library (MSAL) for Python](https://pypi.org/project/msal/) which comes as a dependency
  is used to obtain token

  ```python
  import msal

  def acquire_token_func():
      """
      Acquire token via MSAL
      """
      authority_url = 'https://login.microsoftonline.com/{tenant_id_or_name}'
      app = msal.ConfidentialClientApplication(
          authority=authority_url,
          client_id='{client_id}',
          client_credential='{client_secret}'
      )
      token = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])
      return token
  ```






  The example demonstrates how to enumerate and print drive's url
  which corresponds to [`list available drives` endpoint](https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/drive_list?view=odsp-graph-online)

  > Note: access token is getting acquired  via [Client Credential flow](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow)

  ```python
  from office365.graph_client import GraphClient

  tenant_name = "contoso.onmicrosoft.com"
  client = GraphClient(acquire_token_func)
  drives = client.drives.get().execute_query()
  for drive in drives:
      print("Drive url: {0}".format(drive.web_url))
  ```




  ```python
  from office365.graph_client import GraphClient
  client = GraphClient(acquire_token_func)

  drive = client.users["{user_id_or_principal_name}"].drive.get().execute_query()

  with tempfile.TemporaryDirectory() as path:
      download_files(drive.root, path)
  ```

  where

  ```python
  def download_files(remote_folder, local_path):
      drive_items = remote_folder.children.get().execute_query()
      for drive_item in drive_items:
          if drive_item.file is not None:  # is file?
              
              with open(os.path.join(local_path, drive_item.name), 'wb') as local_file:
                  drive_item.download(local_file).execute_query()
  ```

  Additional examples:

  -  [create list column](examples/onedrive/create_list_column.py)
  -  [download file](examples/onedrive/download_file_default.py)
  -  [export files](examples/onedrive/export_files.py)
  -  [import files](examples/onedrive/import_files.py)
  -  [list drives](examples/onedrive/list_drives.py)
  -  [list files](examples/onedrive/list_files.py)

  Refer to [OneDrive examples section](examples/onedrive) for more examples.






  [The Microsoft Authentication Library (MSAL) for Python](https://pypi.org/project/msal/) which comes as a dependency
  is used to obtain token





  The example demonstrates how create a new team under a group
  which corresponds to [`Create team` endpoint](https://docs.microsoft.com/en-us/graph/api/team-put-teams?view=graph-rest-1.0&tabs=http)

  ```python
  from office365.graph_client import GraphClient
  client = GraphClient(acquire_token_func)
  new_team = client.groups["{group_id}"].add_team().execute_query_retry()
  ```

  Additional examples:

  -  [create a team](examples/teams/create_team.py)
  -  [create team from group](examples/teams/create_team_from_group.py)
  -  [list all teams](examples/teams/list_all_teams.py)
  -  [list my teams](examples/teams/list_my_teams.py)
  -  [send messages](examples/teams/send_message.py)

  Refer to [examples section](examples/teams) for other scenarios



  The library supports OneNote API in terms of calls to a user's OneNote notebooks, sections, and pages in a personal or organization account

  Example: Create a new page

  ```python
  from office365.graph_client import GraphClient
  client = GraphClient(acquire_token_func)

  files = {}
  with open("./MyPage.html", 'rb') as f, \
      open("./MyImage.png", 'rb') as img_f, \
      open("./MyDoc.pdf", 'rb') as pdf_f:
      files["imageBlock1"] = img_f
      files["fileBlock1"] = pdf_f
      page = client.me.onenote.pages.add(presentation_file=f, attachment_files=files).execute_query()
  ```



  The example demonstrates how to create a new planner task
  which corresponds to [`Create plannerTask` endpoint](https://docs.microsoft.com/en-us/graph/api/planner-post-tasks?view=graph-rest-1.0):

  ```python
  from office365.graph_client import GraphClient

  client = GraphClient(acquire_token_func)
  task = client.planner.tasks.add(title="New task", planId="--plan id goes here--").execute_query()
  ```


  The following libraries will be installed when you install the client library:
  * [requests](https://github.com/kennethreitz/requests)
  * [Microsoft Authentication Library (MSAL) for Python](https://pypi.org/project/msal/)

location_href:
  00009995-python-office365-rest-python-client/python3-Office365-REST-Python-Client-2.4.0-1.noarch.rpm


pkgId: 0c1b46af18661d982930569e473de8660634bdaec23eee64b577b2efd4254cbe
name: python3-XStatic-Angular-lrdragndrop
arch: noarch
version: 1.0.2.4
epoch: 0
release: 1
summary: Angular-lrdragndrop 1.0.2 (XStatic packaging standard)
url: https://github.com/lorenzofox3/lrDragNDrop
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-48a089ed-8672-4c1e-b1f6-f66b5eaf6301
rpm_sourcerpm: python-XStatic-Angular-lrdragndrop-1.0.2.4-1.src.rpm
checksum_type: sha256
description:
[cell repeats an earlier one in this file: 428 characters]

location_href:
  00002898-python-XStatic-Angular-lrdragndrop/python3-XStatic-Angular-lrdragndrop-1.0.2.4-1.noarch.rpm


pkgId: e1fe16470f1614823d40bab09762aff7308bb50aae7ca194856199853cb31469
name: python3-XStatic-Angular-lrdragndrop
arch: noarch
version: 1.0.2.4
epoch: 0
release: 1
summary: Angular-lrdragndrop 1.0.2 (XStatic packaging standard)
url: https://github.com/lorenzofox3/lrDragNDrop
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-72f0e7e5-697b-42e6-9fd0-afc1d3ba96e0
rpm_sourcerpm: python-XStatic-Angular-lrdragndrop-1.0.2.4-1.src.rpm
checksum_type: sha256
description:
[cell repeats an earlier one in this file: 428 characters]

location_href:
  00006278-python-XStatic-Angular-lrdragndrop/python3-XStatic-Angular-lrdragndrop-1.0.2.4-1.noarch.rpm


pkgId: 6e1890a3a80d9fc4c141a8c34108932751c64e18ad62d1c0e1a86e392f125cd5
name: python3-XStatic-Bootstrap-Datepicker
arch: noarch
version: 1.4.0.0
epoch: 0
release: 1
summary: Bootstrap-Datepicker 1.4.0 (XStatic packaging standard)
url: https://github.com/eternicode/bootstrap-datepicker/
rpm_license: (same as Bootstrap-Datepicker)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-94075c1c-7e3e-4c18-a86d-7758bae80b47
rpm_sourcerpm: python-XStatic-Bootstrap-Datepicker-1.4.0.0-1.src.rpm
checksum_type: sha256
description:
[cell repeats an earlier one in this file: 437 characters]

location_href:
  00002899-python-XStatic-Bootstrap-Datepicker/python3-XStatic-Bootstrap-Datepicker-1.4.0.0-1.noarch.rpm


pkgId: 6f7b5149d4f6d85cc0a30d05e11577895cb63ba9cbfe5f43f1a1fa630d10d2ca
name: python3-XStatic-Bootstrap-Datepicker
arch: noarch
version: 1.4.0.0
epoch: 0
release: 1
summary: Bootstrap-Datepicker 1.4.0 (XStatic packaging standard)
url: https://github.com/eternicode/bootstrap-datepicker/
rpm_license: (same as Bootstrap-Datepicker)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6443ed12-2fa1-44c0-b4b2-aab02496a0fa
rpm_sourcerpm: python-XStatic-Bootstrap-Datepicker-1.4.0.0-1.src.rpm
checksum_type: sha256
description:
[cell repeats an earlier one in this file: 437 characters]

location_href:
  00006279-python-XStatic-Bootstrap-Datepicker/python3-XStatic-Bootstrap-Datepicker-1.4.0.0-1.noarch.rpm


pkgId: 191fa0a12c661bcef0ca512d763e499b97d3fba5ea21eebe50a27c2ac7f3326d
name: python3-XStatic-Patternfly-Bootstrap-Treeview
arch: noarch
version: 2.1.3.2
epoch: 0
release: 1
summary: Patternfly-Bootstrap-Treeview 2.1.3 (XStatic packaging standard)
url: https://www.patternfly.org/
rpm_license: Apache v2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-de7e7142-a030-40a6-b8e8-627f521d22d1
rpm_sourcerpm: python-XStatic-Patternfly-Bootstrap-Treeview-2.1.3.2-1.src.rpm
checksum_type: sha256
description:
[cell repeats an earlier one in this file: 435 characters]

location_href:
  00002915-python-XStatic-Patternfly-Bootstrap-Treeview/python3-XStatic-Patternfly-Bootstrap-Treeview-2.1.3.2-1.noarch.rpm


pkgId: 10da33d8a454defb042aa9a515d717078fc34a8ab0417e79ed20cd52e8efc648
name: python3-XStatic-Patternfly-Bootstrap-Treeview
arch: noarch
version: 2.1.3.2
epoch: 0
release: 1
summary: Patternfly-Bootstrap-Treeview 2.1.3 (XStatic packaging standard)
url: https://www.patternfly.org/
rpm_license: Apache v2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7ef7fab2-7541-4eee-bb13-1da1a900f0c5
rpm_sourcerpm: python-XStatic-Patternfly-Bootstrap-Treeview-2.1.3.2-1.src.rpm
checksum_type: sha256
description:
[cell repeats an earlier one in this file: 435 characters]

location_href:
  00006295-python-XStatic-Patternfly-Bootstrap-Treeview/python3-XStatic-Patternfly-Bootstrap-Treeview-2.1.3.2-1.noarch.rpm


pkgId: 2a1ea0de6ce92a8e4ed6fcbb194781048c7dcbd4bf46a9ce6057dfb37764f7f0
name: python3-a-pytube-fork-for-spotdl-users
arch: noarch
version: 9.6.4
epoch: 0
release: 1
summary: Python 3 library for downloading YouTube Videos.
url: https://github.com/nficano/pytube
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9351e33c-8f13-4841-80a1-7cfc43ac1505
rpm_sourcerpm: python-a-pytube-fork-for-spotdl-users-9.6.4-1.src.rpm
checksum_type: sha256
description:
  Ping @ronncc if you would like to help out

  <div align="center">
    <p>
    <img src="https://github.com/nficano/pytube/blob/master/images/pytube.png?raw=true" width="350" height="328" alt="pytube logo" />
    </p>
    <p align="center">
  	  <img src="https://img.shields.io/pypi/v/pytube.svg" alt="pypi">
  	  <a href="https://travis-ci.org/nficano/pytube"><img src="https://travis-ci.org/nficano/pytube.svg?branch=master" /></a>
  	  <a href="http://python-pytube.readthedocs.io/en/latest/?badge=latest"><img src="https://readthedocs.org/projects/python-pytube/badge/?version=latest" /></a>
  	  <a href="https://coveralls.io/github/nficano/pytube?branch=master"><img src="https://coveralls.io/repos/github/nficano/pytube/badge.svg?branch=master#23e6f7ac56dd3bde" /></a>
        <a href="https://pypi.org/project/pytube/"><img src="https://img.shields.io/pypi/dm/pytube.svg" alt="pypi"></a>
  	  <a href="https://pypi.python.org/pypi/pytube/"><img src="https://img.shields.io/pypi/pyversions/pytube.svg" /></a>
      <p>
    </p>
  </div>


  *pytube* is a very serious, lightweight, dependency-free Python library (and command-line utility) for downloading YouTube Videos.


  YouTube is the most popular video-sharing platform in the world and as a hacker you may encounter a situation where you want to script something to download videos.  For this I present to you *pytube*.

  *pytube* is a lightweight library written in Python. It has no third party dependencies and aims to be highly reliable.

  *pytube* also makes pipelining easy, allowing you to specify callback functions for different download events, such as  ``on progress`` or ``on complete``.

  Finally *pytube* also includes a command-line utility, allowing you to quickly download videos right from terminal.



  ```python
   >>> YouTube('https://youtu.be/9bZkp7q19f0').streams.first().download()
   >>> yt = YouTube('http://youtube.com/watch?v=9bZkp7q19f0')
   >>> yt.streams
    ... .filter(progressive=True, file_extension='mp4')
    ... .order_by('resolution')
    ... .desc()
    ... .first()
    ... .download()
  ```


  - Support for Both Progressive & DASH Streams
  - Support for downloading complete playlist
  - Easily Register ``on_download_progress`` & ``on_download_complete`` callbacks
  - Command-line Interfaced Included
  - Caption Track Support
  - Outputs Caption Tracks to .srt format (SubRip Subtitle)
  - Ability to Capture Thumbnail URL.
  - Extensively Documented Source Code
  - No Third-Party Dependencies



  Download using pip via pypi.

  ```bash
  $ pip install pytube
  ```



  Let's begin with showing how easy it is to download a video with pytube:

  ```python
  >>> from pytube import YouTube
  >>> YouTube('http://youtube.com/watch?v=9bZkp7q19f0').streams.first().download()
  ```
  This example will download the highest quality progressive download stream available.

  Next, let's explore how we would view what video streams are available:

  ```python
  >>> yt = YouTube('http://youtube.com/watch?v=9bZkp7q19f0')
  >>> yt.streams.all()
   [<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">,
   <Stream: itag="43" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp8.0" acodec="vorbis">,
   <Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2">,
   <Stream: itag="36" mime_type="video/3gpp" res="240p" fps="30fps" vcodec="mp4v.20.3" acodec="mp4a.40.2">,
   <Stream: itag="17" mime_type="video/3gpp" res="144p" fps="30fps" vcodec="mp4v.20.3" acodec="mp4a.40.2">,
   <Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028">,
   <Stream: itag="248" mime_type="video/webm" res="1080p" fps="30fps" vcodec="vp9">,
   <Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f">,
   <Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9">,
   <Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401e">,
   <Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9">,
   <Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e">,
   <Stream: itag="243" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp9">,
   <Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015">,
   <Stream: itag="242" mime_type="video/webm" res="240p" fps="30fps" vcodec="vp9">,
   <Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c">,
   <Stream: itag="278" mime_type="video/webm" res="144p" fps="30fps" vcodec="vp9">,
   <Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2">,
   <Stream: itag="171" mime_type="audio/webm" abr="128kbps" acodec="vorbis">,
   <Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus">,
   <Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus">,
   <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus">]
  ```
  You may notice that some streams listed have both a video codec and audio codec, while others have just video or just audio, this is a result of YouTube supporting a streaming technique called Dynamic Adaptive Streaming over HTTP (DASH).

  In the context of pytube, the implications are for the highest quality streams; you now need to download both the audio and video tracks and then post-process them with software like FFmpeg to merge them.

  The legacy streams that contain the audio and video in a single file (referred to as "progressive download") are still available, but only for resolutions 720p and below.

  To only view these progressive download streams:

  ```python
   >>> yt.streams.filter(progressive=True).all()
    [<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">,
    <Stream: itag="43" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp8.0" acodec="vorbis">,
    <Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2">,
    <Stream: itag="36" mime_type="video/3gpp" res="240p" fps="30fps" vcodec="mp4v.20.3" acodec="mp4a.40.2">,
    <Stream: itag="17" mime_type="video/3gpp" res="144p" fps="30fps" vcodec="mp4v.20.3" acodec="mp4a.40.2">]
  ```

  Conversely, if you only want to see the DASH streams (also referred to as "adaptive") you can do:

  ```python
  >>> yt.streams.filter(adaptive=True).all()
   [<Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028">,
    <Stream: itag="248" mime_type="video/webm" res="1080p" fps="30fps" vcodec="vp9">,
    <Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f">,
    <Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9">,
    <Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401e">,
    <Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9">,
    <Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e">,
    <Stream: itag="243" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp9">,
    <Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015">,
    <Stream: itag="242" mime_type="video/webm" res="240p" fps="30fps" vcodec="vp9">,
    <Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c">,
    <Stream: itag="278" mime_type="video/webm" res="144p" fps="30fps" vcodec="vp9">,
    <Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2">,
    <Stream: itag="171" mime_type="audio/webm" abr="128kbps" acodec="vorbis">,
    <Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus">,
    <Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus">,
    <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus">]
  ```

  You can also download a complete Youtube playlist:

  ```python
  >>> from pytube import Playlist
  >>> pl = Playlist("https://www.youtube.com/watch?v=Edpy1szoG80&list=PL153hDY-y1E00uQtCVCVC8xJ25TYX8yPU")
  >>> pl.download_all()
  >>> # or if you want to download in a specific directory
  >>> pl.download_all('/path/to/directory/')
  ```
  This will download the highest progressive stream available (generally 720p) from the given playlist. Later more options would be given for user's flexibility
  to choose video resolution.

  Pytube allows you to filter on every property available (see the documentation for the complete list), let's take a look at some of the most useful ones.

  To list the audio only streams:

  ```python
  >>> yt.streams.filter(only_audio=True).all()
    [<Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2">,
    <Stream: itag="171" mime_type="audio/webm" abr="128kbps" acodec="vorbis">,
    <Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus">,
    <Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus">,
    <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus">]
  ```

  To list only ``mp4`` streams:

  ```python
  >>> yt.streams.filter(subtype='mp4').all()
   [<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">,
    <Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2">,
    <Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028">,
    <Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f">,
    <Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401e">,
    <Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e">,
    <Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015">,
    <Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c">,
    <Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2">]
  ```

  Multiple filters can also be specified:

  ```python
  >>> yt.streams.filter(subtype='mp4', progressive=True).all()
  >>> # this can also be expressed as:
  >>> yt.streams.filter(subtype='mp4').filter(progressive=True).all()
    [<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">,
    <Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2">]
  ```
  You also have an interface to select streams by their itag, without needing to filter:

  ```python
  >>> yt.streams.get_by_itag(22)
    <Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">
  ```

  If you need to optimize for a specific feature, such as the "highest resolution" or "lowest average bitrate":

  ```python
  >>> yt.streams.filter(progressive=True).order_by('resolution').desc().all()
  ```
  Note that ``order_by`` cannot be used if your attribute is undefined in any of the Stream instances, so be sure to apply a filter to remove those before calling it.

  If your application requires post-processing logic, pytube allows you to specify an "on download complete" callback function:

  ```python
   >>> def convert_to_aac(stream, file_handle):
           return  # do work

   >>> yt.register_on_complete_callback(convert_to_aac)
  ```

  Similarly, if your application requires on-download progress logic, pytube exposes a callback for this as well:

  ```python
   >>> def show_progress_bar(stream, chunk, file_handle, bytes_remaining):
           return  # do work

   >>> yt.register_on_progress_callback(show_progress_bar)
  ```



  pytube also ships with a tiny cli interface for downloading and probing videos.

  Let's start with downloading:

  ```bash
  $ pytube http://youtube.com/watch?v=9bZkp7q19f0 --itag=22
  ```
  To view available streams:

  ```bash
  $ pytube http://youtube.com/watch?v=9bZkp7q19f0 --list
  ```

  Finally, if you're filing a bug report, the cli contains a switch called ``--build-playback-report``, which bundles up the state, allowing others to easily replay your issue.

location_href:
  00011372-python-a-pytube-fork-for-spotdl-users/python3-a-pytube-fork-for-spotdl-users-9.6.4-1.noarch.rpm


pkgId: 175ec8305a64a0b05719d04b02f2abfb486b160c3be019b47b6fc814ba093090
name: python3-apache-airflow-backport-providers-cncf-kubernetes
arch: noarch
version: 2021.3.3
epoch: 0
release: 1
summary: Backport provider package apache-airflow-backport-providers-cncf-kubernetes for Apache Airflow
url: https://airflow.apache.org/
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f7dba483-b26c-4e5e-a38d-c5a78c212086
rpm_sourcerpm: python-apache-airflow-backport-providers-cncf-kubernetes-2021.3.3-1.src.rpm
checksum_type: sha256
description:
  <!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you 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.
   -->




  Release: 2021.3.3

  **Table of contents**

  - [Backport package](#backport-package)
  - [Installation](#installation)
  - [PIP requirements](#pip-requirements)
  - [Provider class summary](#provider-classes-summary)
      - [Operators](#operators)
          - [New operators](#new-operators)
          - [Moved operators](#moved-operators)
      - [Sensors](#sensors)
          - [New sensors](#new-sensors)
      - [Hooks](#hooks)
          - [New hooks](#new-hooks)
  - [Releases](#releases)
      - [Release 2021.3.3](#release-202133)
      - [Release 2021.2.5](#release-202125)
      - [Release 2020.11.23](#release-20201123)
      - [Release 2020.10.29](#release-20201029)
      - [Release 2020.10.5](#release-2020105)



  This is a backport providers package for `cncf.kubernetes` provider. All classes for this provider package
  are in `airflow.providers.cncf.kubernetes` python package.

  **Only Python 3.6+ is supported for this backport package.**

  While Airflow 1.10.* continues to support Python 2.7+ - you need to upgrade python to 3.6+ if you
  want to use this backport package.






  * Allow pod name override in KubernetesPodOperator if pod_template is used. (#14186)
  * Allow users of the KPO to *actually* template environment variables (#14083)



    * `Pass image_pull_policy in KubernetesPodOperator correctly (#13289)`






  This provider is only usable with Apache Airflow &gt;= 1.10.12 version due to refactorings implemented in
  Apache Airflow 1.10.11 and fixes implemented in 1.10.11. The package has appropriate requirements
  set so you should not be able to install it with Apache Airflow &lt; 1.10.12.




  You can install this package on top of an existing airflow 1.10.* installation via
  `pip install apache-airflow-backport-providers-cncf-kubernetes`



  | PIP package    | Version required   |
  |:---------------|:-------------------|
  | `cryptography` | `>=2.0.0`          |
  | `kubernetes`   | `>=3.0.0, <12.0.0` |



  In Airflow 2.0, all operators, transfers, hooks, sensors, secrets for the `cncf.kubernetes` provider
  are in the `airflow.providers.cncf.kubernetes` package. You can read more about the naming conventions used
  in [Naming conventions for provider packages](https://github.com/apache/airflow/blob/master/CONTRIBUTING.rst#naming-conventions-for-provider-packages)







  | New Airflow 2.0 operators: `airflow.providers.cncf.kubernetes` package                                                                                              |
  |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  | [operators.spark_kubernetes.SparkKubernetesOperator](https://github.com/apache/airflow/blob/master/airflow/providers/cncf/kubernetes/operators/spark_kubernetes.py) |




  | Airflow 2.0 operators: `airflow.providers.cncf.kubernetes` package                                                                                            | Airflow 1.10.* previous location (usually `airflow.contrib`)                                                                                                                |
  |:--------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  | [operators.kubernetes_pod.KubernetesPodOperator](https://github.com/apache/airflow/blob/master/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py) | [contrib.operators.kubernetes_pod_operator.KubernetesPodOperator](https://github.com/apache/airflow/blob/v1-10-stable/airflow/contrib/operators/kubernetes_pod_operator.py) |







  | New Airflow 2.0 sensors: `airflow.providers.cncf.kubernetes` package                                                                                          |
  |:--------------------------------------------------------------------------------------------------------------------------------------------------------------|
  | [sensors.spark_kubernetes.SparkKubernetesSensor](https://github.com/apache/airflow/blob/master/airflow/providers/cncf/kubernetes/sensors/spark_kubernetes.py) |








  | New Airflow 2.0 hooks: `airflow.providers.cncf.kubernetes` package                                                                     |
  |:---------------------------------------------------------------------------------------------------------------------------------------|
  | [hooks.kubernetes.KubernetesHook](https://github.com/apache/airflow/blob/master/airflow/providers/cncf/kubernetes/hooks/kubernetes.py) |








  | Commit                                                                                         | Committed   | Subject                                                                    |
  |:-----------------------------------------------------------------------------------------------|:------------|:---------------------------------------------------------------------------|
  | [809b4f9b1](https://github.com/apache/airflow/commit/809b4f9b18c7040682e17879248d714f2664273d) | 2021-02-23  | `Unique pod name (#14186)`                                                 |
  | [649335c04](https://github.com/apache/airflow/commit/649335c043a9312ef272fa77f2bb830d52cde056) | 2021-02-07  | `Template k8s.V1EnvVar without adding custom attributes to dict. (#14123)` |
  | [d4c4db8a1](https://github.com/apache/airflow/commit/d4c4db8a1833d07b1c03e4c062acea49c79bf5d6) | 2021-02-05  | `Allow users of the KPO to template environment variables (#14083)`        |
  | [10343ec29](https://github.com/apache/airflow/commit/10343ec29f8f0abc5b932ba26faf49bc63c6bcda) | 2021-02-05  | `Corrections in docs and tools after releasing provider RCs (#14082)`      |




  | Commit                                                                                         | Committed   | Subject                                                                                  |
  |:-----------------------------------------------------------------------------------------------|:------------|:-----------------------------------------------------------------------------------------|
  | [88bdcfa0d](https://github.com/apache/airflow/commit/88bdcfa0df5bcb4c489486e05826544b428c8f43) | 2021-02-04  | `Prepare to release a new wave of providers. (#14013)`                                   |
  | [ac2f72c98](https://github.com/apache/airflow/commit/ac2f72c98dc0821b33721054588adbf2bb53bb0b) | 2021-02-01  | `Implement provider versioning tools (#13767)`                                           |
  | [a9ac2b040](https://github.com/apache/airflow/commit/a9ac2b040b64de1aa5d9c2b9def33334e36a8d22) | 2021-01-23  | `Switch to f-strings using flynt. (#13732)`                                              |
  | [1b9e3d1c2](https://github.com/apache/airflow/commit/1b9e3d1c285cb381f2f964c0c923711cd5e1e3d0) | 2021-01-22  | `Revert &#34;Fix error with quick-failing tasks in KubernetesPodOperator (#13621)&#34; (#13835)` |
  | [94d3ed61d](https://github.com/apache/airflow/commit/94d3ed61d60b134d649a4e9785b2d9c2a88cff05) | 2021-01-21  | `Fix error with quick-failing tasks in KubernetesPodOperator (#13621)`                   |
  | [3fd5ef355](https://github.com/apache/airflow/commit/3fd5ef355556cf0ad7896bb570bbe4b2eabbf46e) | 2021-01-21  | `Add missing logos for integrations (#13717)`                                            |
  | [295d66f91](https://github.com/apache/airflow/commit/295d66f91446a69610576d040ba687b38f1c5d0a) | 2020-12-30  | `Fix Grammar in PIP warning (#13380)`                                                    |
  | [7a560ab6d](https://github.com/apache/airflow/commit/7a560ab6de7243e736b66599842b241ae60d1cda) | 2020-12-24  | `Pass image_pull_policy in KubernetesPodOperator correctly (#13289)`                     |
  | [6cf76d7ac](https://github.com/apache/airflow/commit/6cf76d7ac01270930de7f105fb26428763ee1d4e) | 2020-12-18  | `Fix typo in pip upgrade command :( (#13148)`                                            |
  | [32971a1a2](https://github.com/apache/airflow/commit/32971a1a2de1db0b4f7442ed26facdf8d3b7a36f) | 2020-12-09  | `Updates providers versions to 1.0.0 (#12955)`                                           |
  | [b40dffa08](https://github.com/apache/airflow/commit/b40dffa08547b610162f8cacfa75847f3c4ca364) | 2020-12-08  | `Rename remaing modules to match AIP-21 (#12917)`                                        |
  | [9b39f2478](https://github.com/apache/airflow/commit/9b39f24780e85f859236672e9060b2fbeee81b36) | 2020-12-08  | `Add support for dynamic connection form fields per provider (#12558)`                   |
  | [bd90136aa](https://github.com/apache/airflow/commit/bd90136aaf5035e3234fe545b79a3e4aad21efe2) | 2020-11-30  | `Move operator guides to provider documentation packages (#12681)`                       |
  | [2037303ee](https://github.com/apache/airflow/commit/2037303eef93fd36ab13746b045d1c1fee6aa143) | 2020-11-29  | `Adds support for Connection/Hook discovery from providers (#12466)`                     |
  | [de3b1e687](https://github.com/apache/airflow/commit/de3b1e687b26c524c6909b7b4dfbb60d25019751) | 2020-11-28  | `Move connection guides to provider documentation packages (#12653)`                     |
  | [c02a3f59e](https://github.com/apache/airflow/commit/c02a3f59e45d3cdd0e4c1c3bda2c62b951bcbea3) | 2020-11-23  | `Spark-on-k8s sensor logs - properly pass defined namespace to pod log call (#11199)`    |
  | [c34ef853c](https://github.com/apache/airflow/commit/c34ef853c890e08f5468183c03dc8f3f3ce84af2) | 2020-11-20  | `Separate out documentation building per provider  (#12444)`                             |
  | [9e089ab89](https://github.com/apache/airflow/commit/9e089ab89567b0a52b232f22ed3e708a05137924) | 2020-11-19  | `Fix Kube tests (#12479)`                                                                |
  | [d32fe78c0](https://github.com/apache/airflow/commit/d32fe78c0d9d14f016df70a462dc3972f28abe9d) | 2020-11-18  | `Update readmes for cncf.kube provider fixes (#12457)`                                   |
  | [d84a52dc8](https://github.com/apache/airflow/commit/d84a52dc8fc597d89c5bb4941df67f5f35b70a29) | 2020-11-18  | `Fix broken example_kubernetes DAG (#12455)`                                             |
  | [7c8b71d20](https://github.com/apache/airflow/commit/7c8b71d2012d56888f21b24c4844a6838dc3e4b1) | 2020-11-18  | `Fix backwards compatibility further (#12451)`                                           |
  | [008035450](https://github.com/apache/airflow/commit/00803545023b096b8db4fbd6eb473843096d7ce4) | 2020-11-18  | `Update provider READMEs for 1.0.0b2 batch release (#12449)`                             |
  | [7ca0b6f12](https://github.com/apache/airflow/commit/7ca0b6f121c9cec6e25de130f86a56d7c7fbe38c) | 2020-11-18  | `Enable Markdownlint rule MD003/heading-style/header-style (#12427) (#12438)`            |




  | Commit                                                                                         | Committed   | Subject                                                                        |
  |:-----------------------------------------------------------------------------------------------|:------------|:-------------------------------------------------------------------------------|
  | [4873d9759](https://github.com/apache/airflow/commit/4873d9759dfdec1dd3663074f9e64ad69fa881cc) | 2020-11-18  | Enable Markdownlint rule MD003/heading-style/header-style (#12427)             |
  | [763b40d22](https://github.com/apache/airflow/commit/763b40d223e5e5512494a97f8335e16960e6adc3) | 2020-11-18  | Raise correct Warning in kubernetes/backcompat/volume_mount.py (#12432)        |
  | [bc4bb3058](https://github.com/apache/airflow/commit/bc4bb30588607b10b069ab63ddf2ba7b7ee673ed) | 2020-11-18  | Fix docstrings for Kubernetes Backcompat module (#12422)                       |
  | [cab86d80d](https://github.com/apache/airflow/commit/cab86d80d48227849906319917126f6d558b2e00) | 2020-11-17  | Make K8sPodOperator backwards compatible (#12384)                              |
  | [ae7cb4a1e](https://github.com/apache/airflow/commit/ae7cb4a1e2a96351f1976cf5832615e24863e05d) | 2020-11-17  | Update wrong commit hash in backport provider changes (#12390)                 |
  | [6889a333c](https://github.com/apache/airflow/commit/6889a333cff001727eb0a66e375544a28c9a5f03) | 2020-11-15  | Improvements for operators and hooks ref docs (#12366)                         |
  | [221f809c1](https://github.com/apache/airflow/commit/221f809c1b4e4b78d5a437d012aa7daffd8410a4) | 2020-11-14  | Fix full_pod_spec for k8spodoperator (#12354)                                  |
  | [7825e8f59](https://github.com/apache/airflow/commit/7825e8f59034645ab3247229be83a3aa90baece1) | 2020-11-13  | Docs installation improvements (#12304)                                        |
  | [85a18e13d](https://github.com/apache/airflow/commit/85a18e13d9dec84275283ff69e34704b60d54a75) | 2020-11-09  | Point at pypi project pages for cross-dependency of provider packages (#12212) |
  | [59eb5de78](https://github.com/apache/airflow/commit/59eb5de78c70ee9c7ae6e4cba5c7a2babb8103ca) | 2020-11-09  | Update provider READMEs for up-coming 1.0.0beta1 releases (#12206)             |
  | [3f59e75cd](https://github.com/apache/airflow/commit/3f59e75cdf4a95829ac60b151135e03267e63a12) | 2020-11-09  | KubernetesPodOperator: use randomized name to get the failure status (#12171)  |
  | [b2a28d159](https://github.com/apache/airflow/commit/b2a28d1590410630d66966aa1f2b2a049a8c3b32) | 2020-11-09  | Moves provider packages scripts to dev (#12082)                                |
  | [7825be50d](https://github.com/apache/airflow/commit/7825be50d80d04da0db8fcee55df5e1339864c88) | 2020-11-05  | Randomize pod name (#12117)                                                    |
  | [91a64db50](https://github.com/apache/airflow/commit/91a64db505e50712cd53928b4f2b84aece3cc1c0) | 2020-11-04  | Format all files (without excepions) by black (#12091)                         |
  | [4e8f9cc8d](https://github.com/apache/airflow/commit/4e8f9cc8d02b29c325b8a5a76b4837671bdf5f68) | 2020-11-03  | Enable Black - Python Auto Formmatter (#9550)                                  |
  | [8c42cf1b0](https://github.com/apache/airflow/commit/8c42cf1b00c90f0d7f11b8a3a455381de8e003c5) | 2020-11-03  | Use PyUpgrade to use Python 3.6 features (#11447)                              |
  | [5a439e84e](https://github.com/apache/airflow/commit/5a439e84eb6c0544dc6c3d6a9f4ceeb2172cd5d0) | 2020-10-26  | Prepare providers release 0.0.2a1 (#11855)                                     |




  | Commit                                                                                         | Committed   | Subject                                                                |
  |:-----------------------------------------------------------------------------------------------|:------------|:-----------------------------------------------------------------------|
  | [b680bbc0b](https://github.com/apache/airflow/commit/872b1566a11cb73297e657ff325161721b296574) | 2020-10-24  | Generated backport providers readmes/setup for 2020.10.29              |
  | [53e606210](https://github.com/apache/airflow/commit/53e6062105be0ae1761a354e2055eb0779d12e73) | 2020-10-21  | Enforce strict rules for yamllint (#11709)                             |
  | [349b0811c](https://github.com/apache/airflow/commit/349b0811c3022605426ba57d30936240a7c2848a) | 2020-10-20  | Add D200 pydocstyle check (#11688)                                     |
  | [eee4e30f2](https://github.com/apache/airflow/commit/eee4e30f2caf02e16088ff5d1af1ea380a73e982) | 2020-10-15  | Add better debug logging to K8sexec and K8sPodOp (#11502)              |
  | [16e712971](https://github.com/apache/airflow/commit/16e7129719f1c0940aef2a93bed81368e997a746) | 2020-10-13  | Added support for provider packages for Airflow 2.0 (#11487)           |
  | [8640fb6c1](https://github.com/apache/airflow/commit/8640fb6c100a2c6aa231798559ba194331576975) | 2020-10-09  | fix tests (#11368)                                                     |
  | [298052fce](https://github.com/apache/airflow/commit/298052fcee9d30b1f60b8dc1c9006398cd16645e) | 2020-10-10  | [airflow/providers/cncf/kubernetes] correct hook methods name (#11008) |
  | [49aad025b](https://github.com/apache/airflow/commit/49aad025b53211a5815b10aa35f7d7b489cb5316) | 2020-10-09  | Users can specify sub-secrets and paths k8spodop (#11369)              |
  | [b93b6c5be](https://github.com/apache/airflow/commit/b93b6c5be3ab60960f650d0d4ee6c91271ac7909) | 2020-10-05  | Allow labels in KubernetesPodOperator to be templated (#10796)         |
  | [0a0e1af80](https://github.com/apache/airflow/commit/0a0e1af80038ef89974c3c8444461fe867945daa) | 2020-10-03  | Fix Broken Markdown links in Providers README TOC (#11249)             |




  | Commit                                                                                         | Committed   | Subject                                                                                      |
  |:-----------------------------------------------------------------------------------------------|:------------|:---------------------------------------------------------------------------------------------|
  | [ca4238eb4](https://github.com/apache/airflow/commit/ca4238eb4d9a2aef70eb641343f59ee706d27d13) | 2020-10-02  | Fixed month in backport packages to October (#11242)                                         |
  | [5220e4c38](https://github.com/apache/airflow/commit/5220e4c3848a2d2c81c266ef939709df9ce581c5) | 2020-10-02  | Prepare Backport release 2020.09.07 (#11238)                                                 |
  | [a888198c2](https://github.com/apache/airflow/commit/a888198c27bcdbc4538c02360c308ffcaca182fa) | 2020-09-27  | Allow overrides for pod_template_file (#11162)                                               |
  | [0161b5ea2](https://github.com/apache/airflow/commit/0161b5ea2b805d62a0317e5cab6f797b92c8abf1) | 2020-09-26  | Increasing type coverage for multiple provider (#11159)                                      |
  | [e3f96ce7a](https://github.com/apache/airflow/commit/e3f96ce7a8ac098aeef5e9930e6de6c428274d57) | 2020-09-24  | Fix incorrect Usage of Optional[bool] (#11138)                                               |
  | [f3e87c503](https://github.com/apache/airflow/commit/f3e87c503081a3085dff6c7352640d7f08beb5bc) | 2020-09-22  | Add D202 pydocstyle check (#11032)                                                           |
  | [b61225a88](https://github.com/apache/airflow/commit/b61225a8850b20be17842c2428b91d873584c4da) | 2020-09-21  | Add D204 pydocstyle check (#11031)                                                           |
  | [cba51d49e](https://github.com/apache/airflow/commit/cba51d49eea6a0563044191c8111978836d697ef) | 2020-09-17  | Simplify the K8sExecutor and K8sPodOperator (#10393)                                         |
  | [1294e15d4](https://github.com/apache/airflow/commit/1294e15d44c08498e7f1022fdd6f0bc5e50e533f) | 2020-09-16  | KubernetesPodOperator template fix (#10963)                                                  |
  | [5d6d5a2f7](https://github.com/apache/airflow/commit/5d6d5a2f7d330c83297e1dc35728a0ba803aa866) | 2020-09-14  | Allow to specify path to kubeconfig in KubernetesHook (#10453)                               |
  | [7edfac957](https://github.com/apache/airflow/commit/7edfac957bc17c9abcdcfe8d524772bd2783ac5a) | 2020-09-09  | Add connection caching to KubernetesHook (#10447)                                            |
  | [9549274d1](https://github.com/apache/airflow/commit/9549274d110f689a0bd709db829a4d69e274eed9) | 2020-09-09  | Upgrade black to 20.8b1 (#10818)                                                             |
  | [90c150568](https://github.com/apache/airflow/commit/90c1505686b063332dba87c0c948a8b29d8fd1d4) | 2020-09-04  | Make grace_period_seconds option on K8sPodOperator (#10727)                                  |
  | [338b412c0](https://github.com/apache/airflow/commit/338b412c04abc3fef8126f9724b448d1a9fd0bbc) | 2020-09-02  | Add on_kill support for the KubernetesPodOperator (#10666)                                   |
  | [596bc1337](https://github.com/apache/airflow/commit/596bc1337988f9377571295ddb748ef8703c19c0) | 2020-08-31  | Adds &#39;cncf.kubernetes&#39; package back to backport provider packages. (#10659)                  |
  | [1e5aa4465](https://github.com/apache/airflow/commit/1e5aa4465c5ef8f05745bda64da62fe542f2fe28) | 2020-08-26  | Spark-on-K8S sensor - add driver logs (#10023)                                               |
  | [fdd9b6f65](https://github.com/apache/airflow/commit/fdd9b6f65b608c516b8a062b058972d9a45ec9e3) | 2020-08-25  | Enable Black on Providers Packages (#10543)                                                  |
  | [2f2d8dbfa](https://github.com/apache/airflow/commit/2f2d8dbfafefb4be3dd80f22f31c649c8498f148) | 2020-08-25  | Remove all &#34;noinspection&#34; comments native to IntelliJ (#10525)                               |
  | [7c206a82a](https://github.com/apache/airflow/commit/7c206a82a6f074abcc4898a005ecd2c84a920054) | 2020-08-22  | Replace assigment with Augmented assignment (#10468)                                         |
  | [8cd2be9e1](https://github.com/apache/airflow/commit/8cd2be9e161635480581a0dc723b69ed24166f8d) | 2020-08-11  | Fix KubernetesPodOperator reattachment (#10230)                                              |
  | [cdec30125](https://github.com/apache/airflow/commit/cdec3012542b45d23a05f62d69110944ba542e2a) | 2020-08-07  | Add correct signature to all operators and sensors (#10205)                                  |
  | [24c8e4c2d](https://github.com/apache/airflow/commit/24c8e4c2d6e359ecc2c7d6275dccc68de4a82832) | 2020-08-06  | Changes to all the constructors to remove the args argument (#10163)                         |
  | [aeea71274](https://github.com/apache/airflow/commit/aeea71274d4527ff2351102e94aa38bda6099e7f) | 2020-08-02  | Remove `args` parameter from provider operator constructors (#10097)                         |
  | [f1fd3e2c4](https://github.com/apache/airflow/commit/f1fd3e2c453ddce3e87ce63787598fea0707ffcf) | 2020-07-31  | Fix typo on reattach property of kubernetespodoperator (#10056)                              |
  | [03c435174](https://github.com/apache/airflow/commit/03c43517445019081c55b4ac5fad3b0debdee336) | 2020-07-31  | Allow `image` in `KubernetesPodOperator` to be templated (#10068)                            |
  | [88c160306](https://github.com/apache/airflow/commit/88c1603060fd484d4145bc253c0dc0e6797e13dd) | 2020-07-31  | Improve docstring note about GKEStartPodOperator on KubernetesPodOperator (#10049)           |
  | [7d24b088c](https://github.com/apache/airflow/commit/7d24b088cd736cfa18f9214e4c9d6ce2d5865f3d) | 2020-07-25  | Stop using start_date in default_args in example_dags (2) (#9985)                            |
  | [33f0cd265](https://github.com/apache/airflow/commit/33f0cd2657b2e77ea3477e0c93f13f1474be628e) | 2020-07-22  | apply_default keeps the function signature for mypy (#9784)                                  |
  | [c2db0dfeb](https://github.com/apache/airflow/commit/c2db0dfeb13ee679bf4d7b57874f0fcb39c0f0ed) | 2020-07-22  | More strict rules in mypy (#9705) (#9906)                                                    |
  | [719ae2bf6](https://github.com/apache/airflow/commit/719ae2bf6227894c3e926f717eb4dc669549d615) | 2020-07-22  | Dump Pod as YAML in logs for KubernetesPodOperator (#9895)                                   |
  | [840799d55](https://github.com/apache/airflow/commit/840799d5597f0d005e1deec154f6c95bad6dce61) | 2020-07-20  | Improve KubernetesPodOperator guide (#9079)                                                  |
  | [44d4ae809](https://github.com/apache/airflow/commit/44d4ae809c1e3784ff95b6a5e95113c3412e56b3) | 2020-07-06  | Upgrade to latest pre-commit checks (#9686)                                                  |
  | [8bd15ef63](https://github.com/apache/airflow/commit/8bd15ef634cca40f3cf6ca3442262f3e05144512) | 2020-07-01  | Switches to Helm Chart for Kubernetes tests (#9468)                                          |
  | [40bf8f28f](https://github.com/apache/airflow/commit/40bf8f28f97f17f40d993d207ea740eba54593ee) | 2020-06-18  | Detect automatically the lack of reference to the guide in the operator descriptions (#9290) |
  | [1d36b0303](https://github.com/apache/airflow/commit/1d36b0303b8632fce6de78ca4e782ae26ee06fea) | 2020-05-23  | Fix references in docs (#8984)                                                               |
  | [e742ef7c7](https://github.com/apache/airflow/commit/e742ef7c704c18bf69b7a7235adb7f75e742f902) | 2020-05-23  | Fix typo in test_project_structure (#8978)                                                   |
  | [375d1ca22](https://github.com/apache/airflow/commit/375d1ca229464617780623c61c6e8a1bf570c87f) | 2020-05-19  | Release candidate 2 for backport packages 2020.05.20 (#8898)                                 |
  | [12c5e5d8a](https://github.com/apache/airflow/commit/12c5e5d8ae25fa633efe63ccf4db389e2b796d79) | 2020-05-17  | Prepare release candidate for backport packages (#8891)                                      |
  | [8985df0bf](https://github.com/apache/airflow/commit/8985df0bfcb5f2b2cd69a21b9814021f9f8ce953) | 2020-05-16  | Monitor pods by labels instead of names (#6377)                                              |
  | [f3521fb0e](https://github.com/apache/airflow/commit/f3521fb0e36733d8bd356123e56a453fd37a6dca) | 2020-05-16  | Regenerate readme files for backport package release (#8886)                                 |
  | [92585ca4c](https://github.com/apache/airflow/commit/92585ca4cb375ac879f4ab331b3a063106eb7b92) | 2020-05-15  | Added automated release notes generation for backport operators (#8807)                      |
  | [f82ad452b](https://github.com/apache/airflow/commit/f82ad452b0f4ebd1428bc9669641a632dc87bb8c) | 2020-05-15  | Fix KubernetesPodOperator pod name length validation (#8829)                                 |
  | [1ccafc617](https://github.com/apache/airflow/commit/1ccafc617c4cb9622e3460ad7c190f3ee67c3b32) | 2020-04-02  | Add spark_kubernetes system test (#7875)                                                     |
  | [cd546b664](https://github.com/apache/airflow/commit/cd546b664fa35a2bf85acd77af578c909a327d92) | 2020-03-23  | Add missing call to Super class in &#39;cncf&#39; &amp; &#39;docker&#39; providers (#7825)                       |
  | [6c39a3bf9](https://github.com/apache/airflow/commit/6c39a3bf97414ba2438669894db65c36ccbeb61a) | 2020-03-10  | [AIRFLOW-6542] Add spark-on-k8s operator/hook/sensor (#7163)                                 |
  | [42eef3821](https://github.com/apache/airflow/commit/42eef38217e709bc7a7f71bf0286e9e61293a43e) | 2020-03-07  | [AIRFLOW-6877] Add cross-provider dependencies as extras (#7506)                             |
  | [3320e432a](https://github.com/apache/airflow/commit/3320e432a129476dbc1c55be3b3faa3326a635bc) | 2020-02-24  | [AIRFLOW-6817] Lazy-load `airflow.DAG` to keep user-facing API untouched (#7517)             |
  | [0ec277412](https://github.com/apache/airflow/commit/0ec2774120d43fa667a371b384e6006e1d1c7821) | 2020-02-24  | [AIRFLOW-5629] Implement Kubernetes priorityClassName in KubernetesPodOperator (#7395)       |
  | [9cbd7de6d](https://github.com/apache/airflow/commit/9cbd7de6d115795aba8bfb8addb060bfdfbdf87b) | 2020-02-18  | [AIRFLOW-6792] Remove _operator/_hook/_sensor in providers package and add tests (#7412)     |
  | [967930c0c](https://github.com/apache/airflow/commit/967930c0cb6e2293f2a49e5c9add5aa1917f3527) | 2020-02-11  | [AIRFLOW-5413] Allow K8S worker pod to be configured from JSON/YAML file (#6230)             |
  | [96f834389](https://github.com/apache/airflow/commit/96f834389e03884025534fabd862155061f53fd0) | 2020-02-03  | [AIRFLOW-6678] Pull event logs from Kubernetes (#7292)                                       |
  | [97a429f9d](https://github.com/apache/airflow/commit/97a429f9d0cf740c5698060ad55f11e93cb57b55) | 2020-02-02  | [AIRFLOW-6714] Remove magic comments about UTF-8 (#7338)                                     |
  | [cf141506a](https://github.com/apache/airflow/commit/cf141506a25dbba279b85500d781f7e056540721) | 2020-02-02  | [AIRFLOW-6708] Set unique logger names (#7330)                                               |
  | [373c6aa4a](https://github.com/apache/airflow/commit/373c6aa4a208284b5ff72987e4bd8f4e2ada1a1b) | 2020-01-30  | [AIRFLOW-6682] Move GCP classes to providers package (#7295)                                 |
  | [83c037873](https://github.com/apache/airflow/commit/83c037873ff694eed67ba8b30f2d9c88b2c7c6f2) | 2020-01-30  | [AIRFLOW-6674] Move example_dags in accordance with AIP-21 (#7287)                           |
  | [059eda05f](https://github.com/apache/airflow/commit/059eda05f82fefce4410f44f761f945a27d83daf) | 2020-01-21  | [AIRFLOW-6610] Move software classes to providers package (#7231)                            |

location_href:
  00011574-python-apache-airflow-backport-providers-cncf-kubernetes/python3-apache-airflow-backport-providers-cncf-kubernetes-2021.3.3-1.noarch.rpm


