# packages

pkgId: 4b6232ed12b109047f6f6d11938de281314ce2e0e1046122c10ac5d264b208f8
name: python-embeddings
arch: src
version: 0.0.8
epoch: 0
release: 1
summary: Pretrained word embeddings in Python.
url: https://github.com/vzhong/embeddings
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d07bf27a-5889-49ed-85f1-c93315385ce2
location_href: 00009622-python-embeddings/python-embeddings-0.0.8-1.src.rpm
checksum_type: sha256
description:
  Embeddings is a python package that provides pretrained word embeddings for natural language processing and machine learning.
  Instead of loading a large file to query for embeddings, ``embeddings`` is backed by a database and fast to load and query:
      >>> %timeit GloveEmbedding('common_crawl_840', d_emb=300)
      100 loops, best of 3: 12.7 ms per loop
      >>> %timeit GloveEmbedding('common_crawl_840', d_emb=300).emb('canada')
      100 loops, best of 3: 12.9 ms per loop
      >>> g = GloveEmbedding('common_crawl_840', d_emb=300)
      >>> %timeit -n1 g.emb('canada')
      1 loop, best of 3: 38.2 µs per loop


pkgId: d9c81e1f911c2df8c497b91bbabd9741ad01b32e0bc7c3da0455d9dc8c52cfad
name: python-emcee
arch: src
version: 3.1.4
epoch: 0
release: 1
summary: The Python ensemble sampling toolkit for MCMC
url: https://emcee.readthedocs.io
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3e16819b-5949-484e-9b94-9773a9711614
location_href: 00003566-python-emcee/python-emcee-3.1.4-1.src.rpm
checksum_type: sha256
description:
  **The Python ensemble sampling toolkit for affine-invariant MCMC**
  emcee is a stable, well tested Python implementation of the affine-invariant
  ensemble sampler for Markov chain Monte Carlo (MCMC)
  proposed by
  `Goodman & Weare (2010) <http://cims.nyu.edu/~weare/papers/d13.pdf>`_.
  The code is open source and has
  already been used in several published projects in the Astrophysics
  literature.


pkgId: 9bb622c2791c7a37259b6118caf5f87e581e391d995292708477108779287306
name: python-emoji-country-flag
arch: src
version: 1.3.2
epoch: 0
release: 1
summary: En/Decode unicode country flags emoji
url: https://pypi.org/project/emoji-country-flag/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-97bf77fd-4324-410e-8b0f-21893ac14aa5
location_href: 00012447-python-emoji-country-flag/python-emoji-country-flag-1.3.2-1.src.rpm
checksum_type: sha256
description:
  [![foodemoji on PyPI](https://img.shields.io/pypi/v/emoji-country-flag.svg)](https://pypi.python.org/pypi/emoji-country-flag)
  [![Python Versions](https://img.shields.io/pypi/pyversions/emoji-country-flag.svg)](https://pypi.python.org/pypi/emoji-country-flag)
  [![Coverage Status](https://coveralls.io/repos/github/cvzi/flag/badge.svg?branch=master)](https://coveralls.io/github/cvzi/flag?branch=master)
  [![Build Status](https://travis-ci.com/cvzi/flag.svg?branch=master)](https://travis-ci.com/cvzi/flag)
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/e897c2f701ee44f5aa36457d0ab1a84a)](https://app.codacy.com/app/cvzi/flag?utm_source=github.com&utm_medium=referral&utm_content=cvzi/flag&utm_campaign=Badge_Grade_Dashboard)
  [![Maintainability](https://api.codeclimate.com/v1/badges/cf1f88720896db4d1b0a/maintainability)](https://codeclimate.com/github/cvzi/flag/maintainability)
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=cvzi_flag&metric=alert_status)](https://sonarcloud.io/dashboard?id=cvzi_flag)
  Flag emoji for Python.
  Converts flag emoji to ASCII and other way round.
  This is based on [http://schinckel.net/2015/10/29/unicode-flags-in-python/](http://web.archive.org/web/20180425063617/https://schinckel.net/2015/10/29/unicode-flags-in-python/) by [schinckel](https://github.com/schinckel/)


pkgId: 619f104abb15b21fd2e4f22c85327394e0126801be8191475883cc162631a7fe
name: python-enrich
arch: src
version: 1.2.7
epoch: 0
release: 1
summary: enrich
url: https://github.com/pycontribs/enrich
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-98e0188a-cef0-4196-aec8-58f974ffef99
location_href: 00010355-python-enrich/python-enrich-1.2.7-1.src.rpm
checksum_type: sha256
description:
  Enriched extends [rich](https://pypi.org/project/rich/) library functionality
  with a set of changes that were not accepted to rich itself.



  Our Console class adds one additional option to rich.Console in order to
  redirect `sys.stdout` and `sys.stderr` streams using a FileProxy.

  ```python
  from enrich.console import Console
  import sys

  console = Console(
      redirect=True,  # <-- not supported by rich.cosole.Console
      record=True)
  sys.write("foo")


  assert console.export_text() == "foo"
  ```



  If you want to produce fluid terminal output, one where the client terminal
  decides where to wrap the text instead of the application, you can now
  tell the Console constructor the soft_wrap preference.

  ```python
  from enrich.console import Console
  import sys

  console = Console(soft_wrap=True)
  console.print(...)  # no longer need to pass soft_wrap to each print
  ```



  Extends Rich Console to detect if original text already had ANSI escapes and
  decodes it before processing it. This solves the case where printing
  output captured from other processes that contained ANSI escapes would brake.
  [upstream-404](https://github.com/willmcgugan/rich/discussions/404)



  Rich logger assumes that you always have a fixed width console and it does
  wrap logged output according to it. Our alternative logger does exactly the
  opposite: it ignores the columns of the current console and prints output
  using a Console with soft wrapping enabled.

  The result are logged lines that can be displayed on any terminal or web
  page as they will allow the client to decide when to perform the wrapping.

  ```python
  import logging
  from enrich.logging import RichHandler

  FORMAT = "s"
  logging.basicConfig(
      level="NOTSET", format=FORMAT, datefmt="[%X]", handlers=[RichHandler()]
  )

  log = logging.getLogger("rich")
  log.info("Text that we do not want pre-wrapped by logger: %s", 100 * "x")
  ```


pkgId: 02d6fe4d2d8689626eeb402645b25d28136357104a44a5e832924f55997bc567
name: python-enthought-sphinx-theme
arch: src
version: 0.7.2
epoch: 0
release: 1
summary: Sphinx theme for Enthought products
url: https://github.com/enthought/enthought-sphinx-theme
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3818e6c4-4f94-42db-945e-8cdf15813771
location_href: 00003572-python-enthought-sphinx-theme/python-enthought-sphinx-theme-0.7.2-1.src.rpm
checksum_type: sha256
description:
  `Sphinx <http://sphinx-doc.org>`_ theme for `Enthought projects
  <http://www.enthought.com>`_, derived from the `Scipy theme
  <https://github.com/scipy/scipy-sphinx-theme>`_.


pkgId: 468a4c8fa9572d89eb851648561ab0b581f87e9671e0cc0899039be358a51319
name: python-entrypoint2
arch: src
version: 1.1
epoch: 0
release: 1
summary: easy to use command-line interface for python modules
url: https://github.com/ponty/entrypoint2
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6ad869ec-e379-4e7a-b249-d08a09fd0864
location_href: 00011031-python-entrypoint2/python-entrypoint2-1.1-1.src.rpm
checksum_type: sha256
description:
  easy to use command-line interface for Python modules

  home: https://github.com/ponty/entrypoint2/tree/1.1


pkgId: c5bf62f6ef66cf547db69f30902a44ab789b793298234ca24d72bb93935c1dde
name: python-enturclient
arch: src
version: 0.2.4
epoch: 0
release: 1
summary: An API client for public transport data from Entur.
url: https://github.com/hfurubotten/enturclient
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d69b32b5-074f-448f-a2b0-151318130e59
location_href: 00003573-python-enturclient/python-enturclient-0.2.4-1.src.rpm
checksum_type: sha256
description:
  Python client for fetching estimated departures from stop places in Norway from [`entur.org`](https://developer.entur.org) API. Information about stop places, platforms and real-time departures.

  [![PyPI version fury.io][pypi-version-badge]][pypi-enturclient]
  [![PyPI pyversions][py-versions-badge]][pypi-enturclient]

  [![Buy me a coffee][buymeacoffee-shield]][buymeacoffee]



  ```python
  import aiohttp
  import asyncio
  from enturclient import EnturPublicTransportData

  API_CLIENT_ID = 'awesome_company - my_application'

  async def print_bergen_train_delay():
      async with aiohttp.ClientSession() as client:
          stops = ['NSR:StopPlace:548']
          quays = ['NSR:Quay:48550']

          data = EnturPublicTransportData(
              client_name=API_CLIENT_ID, # Required
              stops=stops,
              quays=quays,
              omit_non_boarding=True,
              number_of_departures=5,
              web_session=client) # recommended argument

          await data.update()

          bergen_train = data.get_stop_info('NSR:StopPlace:548')
          bergen_train_delay = bergen_train.estimated_calls[0].delay_in_min

          print(bergen_train_delay)

  asyncio.run(print_bergen_train_delay())
  ```



  [Entur's travel planer](https://en-tur.no) has a map of all stops used in Norway. Use the map to find the stops you're interested in. When you have found one of your stops, click on it, and hit "Se alle avganger".

  Now the web browser should contain an URL with the id in it. Such as this:
  `https://en-tur.no/nearby-stop-place-detail?id=NSR:StopPlace:32376`

  The stop id is the content after `id=` parameter in the url. Copy paste this into the configuration.

  It's also possible to use the [National Stop Register (NSR)](https://stoppested.entur.org).
  Find your stop in the map, click on it and then again at the name. You have to zoom quite a bit in before the stops shows in the map. Information about the stop place, including the stop and quay ids will pop up on the side.

  [buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/guidelines/download-assets-sm-2.svg
  [buymeacoffee]: https://www.buymeacoffee.com/heine
  [pypi-enturclient]: https://pypi.org/project/enturclient/
  [pypi-version-badge]: https://badge.fury.io/py/enturclient.svg
  [py-versions-badge]: https://img.shields.io/pypi/pyversions/enturclient.svg


pkgId: 0422216715eb49a2816f683c711dea4038457509fdd396db4535f544e059e849
name: python-enum-compat
arch: src
version: 0.0.3
epoch: 0
release: 1
summary: enum/enum34 compatibility package
url: https://github.com/jstasiak/enum-compat
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1fb54f1f-38dc-42e0-8c7f-9357f7d5e088
location_href: 00009992-python-enum-compat/python-enum-compat-0.0.3-1.src.rpm
checksum_type: sha256
description:
  This is a virtual package, its whole purpose is to install enum34 on
  Python older than 3.4. On Python 3.4+ it's a no-op.


pkgId: f52e434266a43798cfb5233a83a25f066319dfbcb1c1e0720f9ced5ac7e78beb
name: python-environs
arch: src
version: 9.5.0
epoch: 0
release: 1
summary: simplified environment variable parsing
url: https://github.com/sloria/environs
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d65dfbf1-82f8-4773-b74a-efc415712485
location_href: 00010070-python-environs/python-environs-9.5.0-1.src.rpm
checksum_type: sha256
description:
  [![Latest version](https://badgen.net/pypi/v/environs)](https://pypi.org/project/environs/)
  [![Build Status](https://dev.azure.com/sloria/sloria/_apis/build/status/sloria.environs?branchName=master)](https://dev.azure.com/sloria/sloria/_build/latest?definitionId=12&branchName=master)
  [![marshmallow 3 compatible](https://badgen.net/badge/marshmallow/3)](https://marshmallow.readthedocs.io/en/latest/upgrading.html)
  [![Black code style](https://badgen.net/badge/code%20style/black/000)](https://github.com/ambv/black)

  **environs** is a Python library for parsing environment variables.
  It allows you to store configuration separate from your code, as per
  [The Twelve-Factor App](https://12factor.net/config) methodology.



  - [Features](#features)
  - [Install](#install)
  - [Basic usage](#basic-usage)
  - [Supported types](#supported-types)
  - [Reading .env files](#reading-env-files)
    - [Reading a specific file](#reading-a-specific-file)
  - [Handling prefixes](#handling-prefixes)
  - [Variable expansion](#variable-expansion)
  - [Validation](#validation)
  - [Deferred validation](#deferred-validation)
  - [Serialization](#serialization)
  - [Defining custom parser behavior](#defining-custom-parser-behavior)
  - [Usage with Flask](#usage-with-flask)
  - [Usage with Django](#usage-with-django)
  - [Why...?](#why)
    - [Why envvars?](#why-envvars)
    - [Why not os.environ?](#why-not-osenviron)
    - [Why another library?](#why-another-library)
  - [License](#license)



  - Type-casting
  - Read `.env` files into `os.environ` (useful for local development)
  - Validation
  - Define custom parser behavior
  - Framework-agnostic, but integrates well with [Flask](#usage-with-flask) and [Django](#usage-with-django)



      pip install environs



  With some environment variables set...

  ```bash
  export GITHUB_USER=sloria
  export MAX_CONNECTIONS=100
  export SHIP_DATE='1984-06-25'
  export TTL=42
  export ENABLE_LOGIN=true
  export GITHUB_REPOS=webargs,konch,ped
  export GITHUB_REPO_PRIORITY="webargs=2,konch=3"
  export COORDINATES=23.3,50.0
  export LOG_LEVEL=DEBUG
  ```

  Parse them with environs...

  ```python
  from environs import Env

  env = Env()
  env.read_env()  # read .env file, if it exists

  gh_user = env("GITHUB_USER")  # => 'sloria'
  secret = env("SECRET")  # => raises error if not set


  max_connections = env.int("MAX_CONNECTIONS")  # => 100
  ship_date = env.date("SHIP_DATE")  # => datetime.date(1984, 6, 25)
  ttl = env.timedelta("TTL")  # => datetime.timedelta(0, 42)
  log_level = env.log_level("LOG_LEVEL")  # => logging.DEBUG


  enable_login = env.bool("ENABLE_LOGIN", False)  # => True
  enable_feature_x = env.bool("ENABLE_FEATURE_X", False)  # => False


  gh_repos = env.list("GITHUB_REPOS")  # => ['webargs', 'konch', 'ped']
  coords = env.list("COORDINATES", subcast=float)  # => [23.3, 50.0]


  gh_repos_priorities = env.dict(
      "GITHUB_REPO_PRIORITY", subcast_values=int
  )  # => {'webargs': 2, 'konch': 3}
  ```



  The following are all type-casting methods of `Env`:

  - `env.str`
  - `env.bool`
  - `env.int`
  - `env.float`
  - `env.decimal`
  - `env.list` (accepts optional `subcast` and `delimiter` keyword arguments)
  - `env.dict` (accepts optional `subcast_keys` and `subcast_values` keyword arguments)
  - `env.json`
  - `env.datetime`
  - `env.date`
  - `env.time`
  - `env.timedelta` (assumes value is an integer in seconds)
  - `env.url`
  - `env.uuid`
  - `env.log_level`
  - `env.path` (casts to a [`pathlib.Path`](https://docs.python.org/3/library/pathlib.html))
  - `env.enum` (casts to any given enum type specified in `type` keyword argument, accepts optional `ignore_case` keyword argument)



  ```bash

  DEBUG=true
  PORT=4567
  ```

  Call `Env.read_env` before parsing variables.

  ```python
  from environs import Env

  env = Env()

  env.read_env()

  env.bool("DEBUG")  # => True
  env.int("PORT")  # => 4567
  ```



  By default, `Env.read_env` will look for a `.env` file in current
  directory and (if no .env exists in the CWD) recurse
  upwards until a `.env` file is found.

  You can also read a specific file:

  ```python
  from environs import Env

  with open(".env.test", "w") as fobj:
      fobj.write("A=foo\n")
      fobj.write("B=123\n")

  env = Env()
  env.read_env(".env.test", recurse=False)

  assert env("A") == "foo"
  assert env.int("B") == 123
  ```



  ```python



  with env.prefixed("MYAPP_"):
      host = env("HOST", "localhost")  # => 'lolcathost'
      port = env.int("PORT", 5000)  # => 3000






  with env.prefixed("MYAPP_"):
      with env.prefixed("DB_"):
          db_host = env("HOST", "lolcathost")
          db_port = env.int("PORT", 10101)
  ```



  ```python




  from environs import Env

  env = Env(expand_vars=True)

  connection_url = env("CONNECTION_URL")  # =>'https://sloria:secret@localhost'
  year = env.int("YEAR")  # =>2020
  ```



  ```python




  from environs import Env
  from marshmallow.validate import OneOf, Length, Email

  env = Env()


  env.int("TTL", validate=lambda n: n > 0)




  env.str(
      "NODE_ENV",
      validate=OneOf(
          ["production", "development"], error="NODE_ENV must be one of: {choices}"
      ),
  )



  env.str("EMAIL", validate=[Length(min=4), Email()])

  ```



  By default, a validation error is raised immediately upon calling a parser method for an invalid environment variable.
  To defer validation and raise an exception with the combined error messages for all invalid variables, pass `eager=False` to `Env`.
  Call `env.seal()` after all variables have been parsed.

  ```python




  from environs import Env
  from marshmallow.validate import OneOf, Email, Length, Range

  env = Env(eager=False)

  TTL = env.int("TTL", validate=Range(min=0, max=100))
  NODE_ENV = env.str(
      "NODE_ENV",
      validate=OneOf(
          ["production", "development"], error="NODE_ENV must be one of: {choices}"
      ),
  )
  EMAIL = env.str("EMAIL", validate=[Length(min=4), Email()])

  env.seal()

  ```

  `env.seal()` validates all parsed variables and prevents further parsing (calling a parser method will raise an error).



  ```python

  env.dump()










  ```



  ```python



  from furl import furl


  @env.parser_for("furl")
  def furl_parser(value):
      return furl(value)


  domain = env.furl("DOMAIN")  # => furl('https://myapp.com')



  @env.parser_for("choice")
  def choice_parser(value, choices):
      if value not in choices:
          raise environs.EnvError("Invalid!")
      return value


  color = env.choice("COLOR", choices=["black"])  # => raises EnvError
  ```



  ```python


  from environs import Env

  env = Env()
  env.read_env()


  DEBUG = env.bool("FLASK_DEBUG", default=False)

  SECRET_KEY = env.str("SECRET_KEY")
  ```

  Load the configuration after you initialize your app.

  ```python


  from flask import Flask

  app = Flask(__name__)
  app.config.from_object("myapp.settings")
  ```

  For local development, use a `.env` file to override the default
  configuration.

  ```bash

  DEBUG=true
  SECRET_KEY="not so secret"
  ```

  Note: Because environs depends on [python-dotenv](https://github.com/theskumar/python-dotenv),
  the `flask` CLI will automatically read .env and .flaskenv files.



  environs includes a number of helpers for parsing connection URLs. To
  install environs with django support:

      pip install environs[django]

  Use `env.dj_db_url`, `env.dj_cache_url` and `env.dj_email_url` to parse the `DATABASE_URL`, `CACHE_URL`
  and `EMAIL_URL` environment variables, respectively.

  For more details on URL patterns, see the following projects that environs is using for converting URLs.

  - [dj-database-url](https://github.com/jacobian/dj-database-url)
  - [django-cache-url](https://github.com/epicserve/django-cache-url)
  - [dj-email-url](https://github.com/migonzalvar/dj-email-url)

  Basic example:

  ```python

  from environs import Env

  env = Env()
  env.read_env()


  DEBUG = env.bool("DEBUG", default=False)

  SECRET_KEY = env.str("SECRET_KEY")


  DATABASES = {"default": env.dj_db_url("DATABASE_URL")}


  email = env.dj_email_url("EMAIL_URL", default="smtp://")
  EMAIL_HOST = email["EMAIL_HOST"]
  EMAIL_PORT = email["EMAIL_PORT"]
  EMAIL_HOST_PASSWORD = email["EMAIL_HOST_PASSWORD"]
  EMAIL_HOST_USER = email["EMAIL_HOST_USER"]
  EMAIL_USE_TLS = email["EMAIL_USE_TLS"]


  CACHES = {"default": env.dj_cache_url("CACHE_URL")}
  ```

  For local development, use a `.env` file to override the default
  configuration.

  ```bash

  DEBUG=true
  SECRET_KEY="not so secret"
  ```

  For a more complete example, see
  [django_example.py](https://github.com/sloria/environs/blob/master/examples/django_example.py)
  in the `examples/` directory.





  See [The 12-factor App](http://12factor.net/config) section on
  [configuration](http://12factor.net/config).



  While `os.environ` is enough for simple use cases, a typical application
  will need a way to manipulate and validate raw environment variables.
  environs abstracts common tasks for handling environment variables.

  environs will help you

  - cast envvars to the correct type
  - specify required envvars
  - define default values
  - validate envvars
  - parse list and dict values
  - parse dates, datetimes, and timedeltas
  - parse expanded variables
  - serialize your configuration to JSON, YAML, etc.



  There are many great Python libraries for parsing environment variables.
  In fact, most of the credit for environs\' public API goes to the
  authors of [envparse](https://github.com/rconradharris/envparse) and
  [django-environ](https://github.com/joke2k/django-environ).

  environs aims to meet three additional goals:

  1.  Make it easy to extend parsing behavior and develop plugins.
  2.  Leverage the deserialization and validation functionality provided
      by a separate library (marshmallow).
  3.  Clean up redundant API.

  See [this GitHub
  issue](https://github.com/rconradharris/envparse/issues/12#issue-151036722)
  which details specific differences with envparse.



  MIT licensed. See the
  [LICENSE](https://github.com/sloria/environs/blob/master/LICENSE) file
  for more details.


pkgId: ddc9def82c17128bfca8f6ccde68d395168240dae686fdadbf8f5d66c0553a0b
name: python-envoy
arch: src
version: 0.0.3
epoch: 0
release: 1
summary: Simple API for running external processes.
url: https://github.com/kennethreitz/envoy
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-39941c2d-d784-4be4-8365-048f31103d05
location_href: 00013662-python-envoy/python-envoy-0.0.3-1.src.rpm
checksum_type: sha256
description:
  **Note:** Work in progress.
  This is a convenience wrapper around the `subprocess` module.
  You don't need this.
  But you want it.


pkgId: e873b5b689779bf2a28808d19b756a0a14ab73c1a7e46be9adb53acba27fd8ed
name: python-envparse
arch: src
version: 0.2.0
epoch: 0
release: 1
summary: Simple environment variable parsing
url: https://github.com/rconradharris/envparse
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2477bebe-e9af-454d-bc6f-22b8462564b5
location_href: 00011369-python-envparse/python-envparse-0.2.0-1.src.rpm
checksum_type: sha256
description:
  ``envparse`` is a simple utility to parse environment variables.
  If you use Heroku and/or subscribe to the tenets of the
  `12 Factor App <http://www.12factor.net/>`_
  you'll be using a lot of environment variable-based configuration in your app.
  ``os.environ`` is a great choice to start off with but over time you'll find
  yourself duplicating quite a bit of code around handling raw environment
  variables.
  ``envparse`` aims to eliminate this duplicated, often inconsistent parsing
  code and instead provide a single, easy-to-use wrapper.
  Ideas, and code portions, have been taken from `django-environ
  <https://github.com/joke2k/django-environ>`_ project but made framework
  agnostic.


pkgId: e88360e489af6024b3958a1815197d9ddd00d3554735fa32675053b83142100b
name: python-epc
arch: src
version: 0.0.5
epoch: 0
release: 1
summary: EPC (RPC stack for Emacs Lisp) implementation in Python
url: https://github.com/tkf/python-epc
rpm_license: GNU General Public License v3 (GPLv3)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-67bc38b6-8150-4a50-bf19-520a2eae8f80
location_href: 00003576-python-epc/python-epc-0.0.5-1.src.rpm
checksum_type: sha256
description:
  Links:
  * `Documentation <http://python-epc.readthedocs.org/>`_ (at Read the Docs)
  * `Repository <https://github.com/tkf/python-epc>`_ (at GitHub)
  * `Issue tracker <https://github.com/tkf/python-epc/issues>`_ (at GitHub)
  * `PyPI <http://pypi.python.org/pypi/epc>`_
  * `Travis CI <https://travis-ci.org/#!/tkf/python-epc>`_ |build-status|
  Other resources:
  * `kiwanami/emacs-epc <https://github.com/kiwanami/emacs-epc>`_
    (Client and server implementation in Emacs Lisp and Perl.)
  * `tkf/emacs-jedi <https://github.com/tkf/emacs-jedi>`_
    (Python completion for Emacs using EPC server.)
     image:: https://secure.travis-ci.org/tkf/python-epc.png
             ?branch=master


pkgId: 19eb1009a1919e8f76675f2b129b9f4fed69384b5f2746c99e4219c53f67b903
name: python-ephem-debuginfo
arch: aarch64
version: 4.1.4
epoch: 0
release: 1
summary: Debug information for package python-ephem
url: http://rhodesmill.org/pyephem/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-254636b0-316c-4882-b174-84b66f4a58c1
rpm_sourcerpm: python-ephem-4.1.4-1.src.rpm
location_href: 00003577-python-ephem/python-ephem-debuginfo-4.1.4-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-ephem.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 554c16751e4cc85f6bb3ec6bbf2b9ead7ce9c670c4c7073b2a005f0b6a4944a3
name: python-ephem-debugsource
arch: aarch64
version: 4.1.4
epoch: 0
release: 1
summary: Debug sources for package python-ephem
url: http://rhodesmill.org/pyephem/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-254636b0-316c-4882-b174-84b66f4a58c1
rpm_sourcerpm: python-ephem-4.1.4-1.src.rpm
location_href: 00003577-python-ephem/python-ephem-debugsource-4.1.4-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-ephem.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 68191307019641baf1151d7703bf1a7bd53e387f448d6a3340b025abd5a816c4
name: python-epiweeks
arch: src
version: 2.1.4
epoch: 0
release: 1
summary: Epidemiological weeks calculation based on the US CDC (MMWR) and ISO week numbering systems
url: https://github.com/mhalshehri/epiweeks
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d99def53-6c43-49ee-8748-989a180077b8
location_href: 00011477-python-epiweeks/python-epiweeks-2.1.4-1.src.rpm
checksum_type: sha256
description:
  <!-- start description -->

  A Python package to calculate epidemiological weeks using the US CDC (MMWR) and
  ISO week numbering systems.

  <!-- end description -->

  [![Build Status](https://img.shields.io/github/workflow/status/mhalshehri/epiweeks/Release)][build]
  [![Coverage Status](https://img.shields.io/badge/coverage-100%25-success)][coverage]
  [![Code Quality](https://img.shields.io/codefactor/grade/github/mhalshehri/epiweeks/main?&label=codefactor)][quality]
  [![Docs Status](https://img.shields.io/readthedocs/epiweeks/stable)][docs]
  [![PyPI Downloads](https://img.shields.io/pypi/dm/epiweeks?color=blue)][downloads]
  [![PyPI Version](https://img.shields.io/pypi/v/epiweeks)][pypi-version]
  [![Conda Version](https://img.shields.io/conda/vn/bioconda/epiweeks)][conda-version]
  [![Package License](https://img.shields.io/github/license/mhalshehri/epiweeks)][license]

  [build]: https://github.com/mhalshehri/epiweeks/actions/workflows/release.yml
  [coverage]: https://github.com/mhalshehri/epiweeks/actions/workflows/release.yml
  [quality]:
    https://www.codefactor.io/repository/github/mhalshehri/epiweeks/overview/main
  [docs]: https://epiweeks.readthedocs.io
  [downloads]: https://pypistats.org/packages/epiweeks
  [pypi-version]: https://pypi.python.org/pypi/epiweeks
  [conda-version]: https://anaconda.org/bioconda/epiweeks
  [license]: https://github.com/mhalshehri/epiweeks/blob/main/LICENSE

  <!-- start summary -->



  - Support for both the US CDC (MMWR) and ISO week numbering systems.
  - Accurate and tested calculations.
  - Intuitive, clean, and easy-to-use interface.
  - Calculation of the start and end dates of weeks.
  - Iteration of year's weeks or week's dates.
  - Rich comparison between weeks.
  - Logical operations for weeks (addition, subtraction and containment).
  - Validation of input data.
  - Works on Python 3.6+ with zero dependencies.
  - Thoroughly tested with 100% test coverage.



  To install using `pip`, run:

  ```shell
  pip install epiweeks
  ```

  To install using `conda`, run:

  ```shell
  conda install -c bioconda epiweeks
  ```



  ```python
  from epiweeks import Week, Year

  week = Week(2019, 1)
  print(week.enddate())


  for week in Year(2019).iterweeks():
      print(week.enddate())





  ```

  <!-- end summary -->



  Please see <https://epiweeks.readthedocs.io> for full documentation of this
  package, including background, more usage examples and API reference.



  This project is licensed under the terms of the MIT license.


pkgId: 44f1f75353f655c38ec24edd628756e9d940412ac721cb2a8c387c39294de46b
name: python-epsagon
arch: src
version: 1.82.0
epoch: 0
release: 1
summary: Epsagon Instrumentation for Python
url: https://github.com/epsagon/epsagon-python
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7b5f6b99-0fd4-4944-b6db-e179a63bdbdc
location_href: 00012739-python-epsagon/python-epsagon-1.82.0-1.src.rpm
checksum_type: sha256
description:
  <p align="center">
    <a href="https://epsagon.com" target="_blank" align="center">
      <img src="https://cdn2.hubspot.net/hubfs/4636301/Positive%20RGB_Logo%20Horizontal%20-01.svg" width="300">
    </a>
    <br />
  </p>

  [![Build Status](https://travis-ci.com/epsagon/epsagon-python.svg?token=wsveVqcNtBtmq6jpZfSf&branch=master)](https://travis-ci.com/epsagon/epsagon-python)
  [![Pyversions](https://img.shields.io/pypi/pyversions/epsagon.svg?style=flat)](https://pypi.org/project/epsagon/)
  [![PypiVersions](https://img.shields.io/pypi/v/epsagon.svg)](https://pypi.org/project/epsagon/)



  ![Trace](trace.png)

  This package provides tracing to Python applications for the collection of distributed tracing and performance metrics in [Epsagon](https://app.epsagon.com/?utm_source=github).



  - [Installation](#installation)
  - [Usage](#usage)
    - [Auto-tracing](#auto-tracing)
    - [Calling the SDK](#calling-the-sdk)
    - [Tagging Traces](#tagging-traces)
    - [Measuring Function Duration](#measuring-function-duration)
    - [Custom Errors](#custom-errors)
    - [Filter Sensitive Data](#filter-sensitive-data)
    - [Ignore Endpoints](#ignore-endpoints)
    - [Trace URL](#trace-url)
  - [Frameworks](#frameworks)
  - [Integrations](#integrations)
  - [Configuration](#configuration)
  - [Getting Help](#getting-help)
  - [Opening Issues](#opening-issues)
  - [License](#license)




  To install Epsagon, simply run:
  ```sh
  pip install -U epsagon
  ```





  The simplest way to get started is to run your python command with the following environment variable:
  ```sh
  export EPSAGON_TOKEN=<epsagon-token>
  export EPSAGON_APP_NAME=<app-name-stage>
  export EPSAGON_METADATA=FALSE
  export AUTOWRAPT_BOOTSTRAP=epsagon
  <python command>
  ```

  For example:
  ```sh
  export EPSAGON_TOKEN=<your-token>
  export EPSAGON_APP_NAME=django-prod
  export EPSAGON_METADATA=FALSE
  export AUTOWRAPT_BOOTSTRAP=epsagon
  python app.py
  ```

  When using inside a `Dockerfile`, you can use `ENV` instead of `export`.

  You can see the list of auto-tracing [supported frameworks](#frameworks)



  Another simple alternative is to copy the snippet into your code:
  ```python
  import epsagon
  epsagon.init(
      token='epsagon-token',
      app_name='app-name-stage',
      metadata_only=False,
  )
  ```

  To run on your framework please refer to [supported frameworks](#frameworks)




  You can add custom tags to your traces, for easier filtering and aggregations.

  Add the following call inside your code:
  ```python
  epsagon.label('key', 'value')
  epsagon.label('user_id', user_id)
  ```

  You can also use it to ship custom metrics:
  ```python
  epsagon.label('key', 'metric')
  epsagon.label('items_in_cart', items_in_cart)
  ```

  Valid types are `string`, `bool`, `int` and `float`.
  In some [frameworks](#frameworks) tagging can be done in different ways.



  You can measure internal functions duration by using the `@epsagon.measure` decorator. For example:
  ```python
  @epsagon.measure
  def heavy_calculation():
      
  ```

  This will ship another metric label to epsagon where the `key=heavy_calculation_duration` and the value will be the actual duration, in seconds.
  You'll be able to see this label in the trace search, visualize it over time, and generate alerts based on this metric.



  You can set a trace as an error (although handled correctly) to get an alert or just follow it on the dashboard.

  Add the following call inside your code:
  ```python
  try:
      fail = 1 / 0
  except Exception as ex:
      epsagon.error(ex)


  epsagon.error(Exception('My custom error'))
  ```

  In some [frameworks](#frameworks) custom errors can be declared in different ways.



  You can pass a list of sensitive properties and hostnames and they will be filtered out from the traces:

  ```python
  epsagon.init(
      token='epsagon-token',
      app_name='app-name-stage',
      metadata_only=False,
      keys_to_ignore=['password', 'user_name'],
      url_patterns_to_ignore=['example.com', 'auth.com']
  )
  ```

  Or specify keys that are allowed:

  ```python
  epsagon.init(
      token='epsagon-token',
      app_name='app-name-stage',
      metadata_only=False,
      keys_to_allow=['Request Data', 'Status_Code'],
  )
  ```

  The `keys_to_ignore` and `keys_to_allow` properties can contain strings (will perform a loose match, so that `First Name` also matches `first_name`).
  Also, you can set `url_patterns_to_ignore` to ignore HTTP calls to specific domains.




  You can ignore certain incoming requests by specifying endpoints:
  ```python
  epsagon.init(
      token='epsagon-token',
      app_name='app-name-stage',
      metadata_only=False,
      ignored_endpoints=['/healthcheck'],
  )
  ```



  You can get the Epsagon dashboard URL for the current trace, using the following:
  ```python
  import epsagon


  print('Epsagon trace URL:', epsagon.get_trace_url())
  ```

  This can be useful to have an easy access the trace from different platforms.



  The following frameworks are supported by Epsagon:

  |Framework                               |Supported Version          |Auto-tracing Supported                               |
  |----------------------------------------|---------------------------|-----------------------------------------------------|
  |[AWS Lambda](#aws-lambda)               |All                        |<ul><li>- [x] (Through the dashboard only)</li></ul> |
  |[Step Functions](#step-functions)       |All                        |<ul><li>- [ ] </li></ul>                             |
  |[Generic](#generic)                     |All                        |<ul><li>- [ ] </li></ul>                             |
  |[Gunicorn](#gunicorn)                   |`>=20.0.4`                 |<ul><li>- [x] </li></ul>                             |
  |[Django](#django)                       |`>=1.11`                   |<ul><li>- [x] </li></ul>                             |
  |[Flask](#flask)                         |`>=0.5`                    |<ul><li>- [x] </li></ul>                             |
  |[Tornado](#tornado)                     |`>=4.0`                    |<ul><li>- [x] </li></ul>                             |
  |[fastapi](#fastapi)                     |`>=0.62.0`                 |<ul><li>- [x] </li></ul>                             |
  |[Celery](#celery)                       |`>=4.0.0`                  |<ul><li>- [x] </li></ul>                             |
  |[Azure Functions](#azure-functions)     |`>=2.0.0`                  |<ul><li>- [ ] </li></ul>                             |
  |[Chalice](#chalice)                     |`>=1.0.0`                  |<ul><li>- [ ] </li></ul>                             |
  |[Zappa](#zappa)                         |`>=0.30.0`                 |<ul><li>- [ ] </li></ul>                             |




  Tracing Lambda functions can be done in three methods:
  1. Auto-tracing through the Epsagon dashboard.
  2. Using the [`serverless-plugin-epsagon`](https://github.com/epsagon/serverless-plugin-epsagon) if you're using The Serverless Framework.
  3. Calling the SDK.

  **Make sure to choose just one of the methods**

  Calling the SDK is simple:

  ```python
  import epsagon
  epsagon.init(
      token='<epsagon-token>',
      app_name='<app-name-stage>',
      metadata_only=False,
  )


  @epsagon.lambda_wrapper
  def handle(event, context):
      
  ```



  Tracing Step Functions is similar to regular Lambda functions, but the wrapper changes from `lambda_wrapper` to `step_lambda_wrapper`:

  ```python
  import epsagon
  epsagon.init(
      token='<epsagon-token>',
      app_name='<app-name-stage>',
      metadata_only=False,
  )


  @epsagon.step_lambda_wrapper
  def handle(event, context):
      
  ```



  Tracing Django application can be done in two methods:
  1. [Auto-tracing](#auto-tracing) using the environment variable.
  2. Calling the SDK.

  Calling the SDK is simple, and should be done in your main `settings.py` file where the application is being initialized:
  ```python
  import epsagon
  epsagon.init(
      token='<epsagon-token>',
      app_name='<app-name-stage>',
      metadata_only=False,
  )
  ```




  Tracing Flask application can be done in two methods:
  1. [Auto-tracing](#auto-tracing) using the environment variable.
  2. Calling the SDK.

  Calling the SDK is simple, and should be done in your main `py` file where the application is being initialized:
  ```python
  import epsagon
  epsagon.init(
      token='<epsagon-token>',
      app_name='<app-name-stage>',
      metadata_only=False,
  )
  ```



  Tracing Tornado application can be done in two methods:
  1. [Auto-tracing](#auto-tracing) using the environment variable.
  2. Calling the SDK.

  Calling the SDK is simple, and should be done in your main `py` file where the application is being initialized:
  ```python
  import epsagon
  epsagon.init(
      token='<epsagon-token>',
      app_name='<app-name-stage>',
      metadata_only=False,
  )
  ```



  Tracing fastapi application can be done in two methods:
  1. [Auto-tracing](#auto-tracing) using the environment variable.
  2. Calling the SDK.

  Calling the SDK is simple, and should be done in your main `py` file where the application is being initialized:
  ```python
  import epsagon
  epsagon.init(
      token='<epsagon-token>',
      app_name='<app-name-stage>',
      metadata_only=False,
  )
  ```



  Tracing Celery consumer can be done in two methods:
  1. [Auto-tracing](#auto-tracing) using the environment variable.
  2. Calling the SDK.

  Calling the SDK is simple, and should be done in your main `py` file where the consumer is being initialized:
  ```python
  import epsagon
  epsagon.init(
      token='epsagon-token',
      app_name='app-name-stage',
      metadata_only=False,
  )
  ```



  Tracing Gunicorn application can be done in two methods:
  1. [Auto-tracing](#auto-tracing) using the environment variable.
  2. Calling the SDK.

  Calling the SDK is simple, and should be done in your main `py` file where the application is being initialized:
  ```python
  import epsagon
  epsagon.init(
      token='<epsagon-token>',
      app_name='<app-name-stage>',
      metadata_only=False,
  )
  ```



  Tracing Azure Functions can be done in the following method:

  ```python
  import azure.functions as func
  import epsagon
  epsagon.init(
      token='epsagon-token',
      app_name='app-name-stage',
      metadata_only=False,
  )

  @epsagon.azure_wrapper
  def main(req):
      return func.HttpResponse('Success')
  ```



  Tracing Chalice applications running on Lambda functions can be done by:
  ```python
  from chalice import Chalice
  import epsagon
  epsagon.init(
      token='epsagon-token',
      app_name='app-name-stage',
      metadata_only=False
  )
  app = Chalice(app_name='hello-world')



  app = epsagon.chalice_wrapper(app)
  ```



  Tracing web applications running on Lambda functions using Zappa can be done by:
  ```python
  from zappa.handler import lambda_handler
  import epsagon

  epsagon.init(
      token='epsagon-token',
      app_name='app-name-stage',
      metadata_only=False
  )



  epsagon_handler = epsagon.lambda_wrapper(lambda_handler)
  ```

  And in your `zappa_settings.json` file include the following:

  ```json
  {
    "lambda_handler": "module.path_to.epsagon_handler"
  }
  ```



  For any tracing, you can simply use the generic Epsagon wrapper using the following example:

  ```python
  import epsagon
  epsagon.init(
      token='epsagon-token',
      app_name='app-name-stage',
      metadata_only=False,
  )


  @epsagon.python_wrapper(name='my-resource')
  def main(params):
      
  ```



  Epsagon provides out-of-the-box instrumentation (tracing) for many popular frameworks and libraries.

  |Library             |Supported Version          |
  |--------------------|---------------------------|
  |logging             |Fully supported            |
  |urllib              |Fully supported            |
  |urllib3             |Fully supported            |
  |requests            |`>=2.0.0`                  |
  |httplib2            |`>=0.9.2`                  |
  |redis               |`>=2.10.0`                 |
  |pymongo             |`>=3.0.0`                  |
  |pynamodb            |`>=2.0.0`                  |
  |PyMySQL             |`>=0.7.0`                  |
  |MySQLdb             |`>=1.0.0`                  |
  |psycopg2            |`>=2.2.0`                  |
  |pg8000              |`>=1.9.0`                  |
  |botocore (boto3)    |`>=1.4.0`                  |
  |azure.cosmos        |`>=4.0.0`                  |
  |celery              |`>=4.0.0`                  |
  |greengrasssdk       |`>=1.4.0`                  |
  |SQLAlchemy          |`>=1.2.0,<1.4.0`           |
  |kafka-python        |`>=1.4.0`                  |





  Advanced options can be configured as a parameter to the init() method or as environment variables.

  |Parameter               |Environment Variable           |Type   |Default      |Description                                                                        |
  |----------------------  |------------------------------ |-------|-------------|-----------------------------------------------------------------------------------|
  |token                   |EPSAGON_TOKEN                  |String |-            |Epsagon account token                                                              |
  |app_name                |EPSAGON_APP_NAME               |String |`Application`|Application name that will be set for traces                                       |
  |metadata_only           |EPSAGON_METADATA               |Boolean|`True`       |Whether to send only the metadata (`True`) or also the payloads (`False`)          |
  |use_ssl                 |EPSAGON_SSL                    |Boolean|`True`       |Whether to send the traces over HTTPS SSL or not                                   |
  |collector_url           |EPSAGON_COLLECTOR_URL          |String |-            |The address of the trace collector to send trace to                                |
  |keys_to_ignore          |EPSAGON_IGNORED_KEYS           |List   |-            |List of keys names to be removed from the trace                                    |
  |keys_to_allow           |EPSAGON_ALLOWED_KEYS           |List   |-            |List of keys names to be included from the trace                                   |
  |ignored_endpoints       |EPSAGON_ENDPOINTS_TO_IGNORE    |List   |-            |List of endpoints to ignore from tracing (for example `/healthcheck`               |
  |url_patterns_to_ignore  |EPSAGON_URLS_TO_IGNORE         |List   |`[]`         |Array of URL patterns to ignore the calls                                          |
  |debug                   |EPSAGON_DEBUG                  |Boolean|`False`      |Enable debug prints for troubleshooting                                            |
  |disable_timeout_send    |EPSAGON_DISABLE_ON_TIMEOUT     |Boolean|`False`      |Disable timeout detection in Lambda functions                                      |
  |split_on_send           |EPSAGON_SPLIT_ON_SEND          |Boolean|`False`      |Split the trace into multiple chunks to support large traces                       |
  |propagate_lambda_id     |EPSAGON_PROPAGATE_LAMBDA_ID    |Boolean|`False`      |Insert Lambda request ID into the response payload                                 |
  |logging_tracing_enabled |EPSAGON_LOGGING_TRACING_ENABLED|Boolean|`True`      |Add Epsagon Log Id to all `logging` messages                            |
  |step_dict_output_path |EPSAGON_STEPS_OUTPUT_PATH|List|`None`      |Path in the result dict to append the Epsagon steps data  |
  |-                       |EPSAGON_HTTP_ERR_CODE          |Integer|`500`        |The minimum number of an HTTP response status code to treat as an error            |
  |-                       |EPSAGON_SEND_TIMEOUT_SEC       |Float  |`1.0`        |The timeout duration in seconds to send the traces to the trace collector          |
  |-                       |EPSAGON_DISABLE_LOGGING_ERRORS |Boolean|`False`      |Disable the automatic capture of error messages into `logging`                     |
  |-                       |EPSAGON_IGNORE_FLASK_RESPONSE  |Boolean|`False`      |Disable the automatic capture of Flask response data                     |
  |-                       |EPSAGON_SKIP_HTTP_RESPONSE     |Boolean|`False`      |Disable the automatic capture of http client response data                     |
  |-                       |DISABLE_EPSAGON                |Boolean|`False`      |A flag to completely disable Epsagon (can be used for tests or locally)            |
  |-                       |DISABLE_EPSAGON_PATCH          |Boolean|`False`      |Disable the library patching (instrumentation)                                     |
  |-                       |EPSAGON_LAMBDA_TIMEOUT_THRESHOLD_MS          |Integer|`200`      |The threshold in millieseconds to send the trace before a Lambda timeout occurs                                     |
  |-                       |EPSAGON_PAYLOADS_TO_IGNORE     |List   |-            |Array of dictionaries to not instrument. Example: `'[{"source": "serverless-plugin-warmup"}]'` |
  |-                       |EPSAGON_REMOVE_EXCEPTION_FRAMES|Boolean|`False`      |Disable the automatic capture of exception frames data (Python 3)                             |
  |-                       |EPSAGON_FASTAPI_ASYNC_MODE|Boolean|`False`      |Enable capturing of Fast API async endpoint handlers calls(Python 3)                             |






  If you have any issue around using the library or the product, please don't hesitate to:

  * Use the [documentation](https://docs.epsagon.com).
  * Use the help widget inside the product.
  * Open an issue in GitHub.




  If you encounter a bug with the Epsagon library for Python, we want to hear about it.

  When opening a new issue, please provide as much information about the environment:
  * Library version, Python runtime version, dependencies, etc.
  * Snippet of the usage.
  * A reproducible example can really help.

  The GitHub issues are intended for bug reports and feature requests.
  For help and questions about Epsagon, use the help widget inside the product.



  Provided under the MIT license. See LICENSE for details.

  Copyright 2020, Epsagon


pkgId: 2f674a4aa412e15c85ace5fa0d482735df9939bcb3c9343b234bdea259f74880
name: python-epson-projector
arch: src
version: 0.5.0
epoch: 0
release: 1
summary: Epson projector support for Python
url: https://github.com/pszafer/epson_projector
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0a332bf2-d65e-42c8-8be3-8ff66f634a85
location_href: 00003579-python-epson-projector/python-epson-projector-0.5.0-1.src.rpm
checksum_type: sha256
description:
  Requires Python 3.5. asyncio, aiohttp.

  Created mostly to use with Home Assistant.



  Check out test.py and const.py to see all posibilities to send to projector.

  ```python
  """Test and example of usage of Epson module."""
  import epson_projector as epson
  from epson_projector.const import (POWER)

  import asyncio
  import aiohttp


  async def main():
      """Run main with aiohttp ClientSession."""
      async with aiohttp.ClientSession() as session:
          await run(session)


  async def run(websession):
      """Use Projector class of epson module and check if it is turned on."""
      projector = epson.Projector(
          host='HOSTNAME',
          websession=websession,
          encryption=False)
      data = await projector.get_property(POWER)
      print(data)

  asyncio.get_event_loop().run_until_complete(main())
  ```


pkgId: a85af930cde03297fe7d29c1653a9db5a65c81ae3735526d8421cb9521460aba
name: python-esprima
arch: src
version: 4.0.1
epoch: 0
release: 1
summary: ECMAScript parsing infrastructure for multipurpose analysis in Python
url: https://github.com/Kronuz/esprima-python
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a8303853-e3c0-4e0d-b4ab-214f47a43c1c
location_href: 00012675-python-esprima/python-esprima-4.0.1-1.src.rpm
checksum_type: sha256
description:
  |Donate| |PyPI Version| |PyPI License| |PyPI Format| |PyPI Status|

  **Esprima** (`esprima.org <http://esprima.org>`__, BSD license) is a
  high performance, standard-compliant
  `ECMAScript <http://www.ecma-international.org/publications/standards/Ecma-262.htm>`__
  parser officially written in ECMAScript (also popularly known as
  `JavaScript <https://en.wikipedia.org/wiki/JavaScript>`__) and ported to
  Python. Esprima is created and maintained by `Ariya
  Hidayat <https://twitter.com/ariyahidayat>`__, with the help of `many
  contributors <https://github.com/jquery/esprima/contributors>`__.

  Python port is a line-by-line manual translation and was created and is
  maintained by `German Mendez Bravo
  (Kronuz) <https://twitter.com/germbravo>`__.

  Features
  ~~~~~~~~

  -  Full support for ECMAScript 2017 (`ECMA-262 8th
     Edition <http://www.ecma-international.org/publications/standards/Ecma-262.htm>`__)
  -  Sensible `syntax tree
     format <https://github.com/estree/estree/blob/master/es5.md>`__ as
     standardized by `ESTree project <https://github.com/estree/estree>`__
  -  Experimental support for `JSX <https://facebook.github.io/jsx/>`__, a
     syntax extension for `React <https://facebook.github.io/react/>`__
  -  Optional tracking of syntax node location (index-based and
     line-column)
  -  `Heavily tested <http://esprima.org/test/ci.html>`__ (~1500 `unit
     tests <https://github.com/jquery/esprima/tree/master/test/fixtures>`__
     with `full code
     coverage <https://codecov.io/github/jquery/esprima>`__)

  Installation
  ~~~~~~~~~~~~

  .. code:: shell

      pip install esprima

  API
  ~~~

  Esprima can be used to perform `lexical
  analysis <https://en.wikipedia.org/wiki/Lexical_analysis>`__
  (tokenization) or `syntactic
  analysis <https://en.wikipedia.org/wiki/Parsing>`__ (parsing) of a
  JavaScript program.

  A simple example:

  .. code:: javascript

      >>> import esprima
      >>> program = 'const answer = 42'

      >>> esprima.tokenize(program)
      [{
          type: "Keyword",
          value: "const"
      }, {
          type: "Identifier",
          value: "answer"
      }, {
          type: "Punctuator",
          value: "="
      }, {
          type: "Numeric",
          value: "42"
      }]

      >>> esprima.parseScript(program)
      {
          body: [
              {
                  kind: "const",
                  declarations: [
                      {
                          init: {
                              raw: "42",
                              type: "Literal",
                              value: 42
                          },
                          type: "VariableDeclarator",
                          id: {
                              type: "Identifier",
                              name: "answer"
                          }
                      }
                  ],
                  type: "VariableDeclaration"
              }
          ],
          type: "Program",
          sourceType: "script"
      }

  For more information, please read the `complete
  documentation <http://esprima.org/doc>`__.

  .. |Donate| image:: https://img.shields.io/badge/Donate-PayPal-green.svg
     :target: https://www.paypal.me/Kronuz/25
  .. |PyPI Version| image:: https://img.shields.io/pypi/v/esprima.svg
     :target: https://pypi.python.org/pypi/esprima
  .. |PyPI License| image:: https://img.shields.io/pypi/l/esprima.svg
     :target: https://pypi.python.org/pypi/esprima
  .. |PyPI Wheel| image:: https://img.shields.io/pypi/wheel/esprima.svg
     :target: https://pypi.python.org/pypi/esprima
  .. |PyPI Format| image:: https://img.shields.io/pypi/format/esprima.svg
     :target: https://pypi.python.org/pypi/esprima
  .. |PyPI Python Version| image:: https://img.shields.io/pypi/pyversions/esprima.svg
     :target: https://pypi.python.org/pypi/esprima
  .. |PyPI Implementation| image:: https://img.shields.io/pypi/implementation/esprima.svg
     :target: https://pypi.python.org/pypi/esprima
  .. |PyPI Status| image:: https://img.shields.io/pypi/status/esprima.svg
     :target: https://pypi.python.org/pypi/esprima
  .. |PyPI Downloads| image:: https://img.shields.io/pypi/dm/esprima.svg
     :target: https://pypi.python.org/pypi/esprima


pkgId: 2b662519a86f8768314cecfe4acb75e7270a5891255e069a44dac0658691725e
name: python-et-xmlfile
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: An implementation of lxml.xmlfile for the standard library
url: https://foss.heptapod.net/openpyxl/et_xmlfile
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-595c4486-df25-4215-a18f-afb0619ed0dc
location_href: 00003584-python-et_xmlfile/python-et-xmlfile-1.1.0-1.src.rpm
checksum_type: sha256
description:
  et_xmlfile is a low memory library for creating large XML files.
  It is based upon the `xmlfile module from lxml <http://lxml.de/api.html#incremental-xml-generation>`_ with the aim of allowing code to be developed that will work with both libraries. It was developed initially for the openpyxl project but is now a standalone module.
  The code was written by Elias Rabel as part of the `Python Düsseldorf <http://pyddf.de>`_ openpyxl sprint in September 2014.


pkgId: 2c271ef571648de455055ad35bd2f906b62d1921f97757b526125657f0ef4de3
name: python-etcd3gw
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: A python client for etcd3 grpc-gateway v3 API
url: https://docs.openstack.org/etcd3gw/latest/
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f16469b8-2c85-444f-bf1c-f6a6a23e37a2
location_href: 00003586-python-etcd3gw/python-etcd3gw-2.1.0-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.org/dims/etcd3-gateway.svg?branch=master)](https://travis-ci.org/dims/etcd3-gateway)
  [![PyPI version](https://badge.fury.io/py/etcd3gw.svg)](https://badge.fury.io/py/etcd3gw)
  [![codecov](https://codecov.io/gh/dims/etcd3-gateway/branch/master/graph/badge.svg)](https://codecov.io/gh/dims/etcd3-gateway "Non-generated packages only")
  [![pypi status](https://img.shields.io/pypi/status/etcd3gw.svg)](https://pypi.python.org/pypi/etcd3gw)
  [![pypi supported versions](https://img.shields.io/pypi/pyversions/etcd3gw.svg)](https://pypi.python.org/pypi/etcd3gw)

  A python client for etcd3 grpc-gateway v3 API


pkgId: dd53b862a6081cab1251a79e46365dc0ce4f961d09ab7f15e55b377d025d6011
name: python-eth-hash
arch: src
version: 0.5.1
epoch: 0
release: 1
summary: eth-hash: The Ethereum hashing function, keccak256, sometimes (erroneously) called sha3
url: https://github.com/ethereum/eth-hash
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-611508a2-b401-4428-a701-187e2bde83d9
location_href: 00010352-python-eth-hash/python-eth-hash-0.5.1-1.src.rpm
checksum_type: sha256
description:
  [![Join the chat at https://gitter.im/ethereum/web3.py](https://badges.gitter.im/ethereum/web3.py.svg)](https://gitter.im/ethereum/web3.py?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
  [![Build Status](https://circleci.com/gh/ethereum/eth-hash.svg?style=shield)](https://circleci.com/gh/ethereum/eth-hash)
  [![PyPI version](https://badge.fury.io/py/eth-hash.svg)](https://badge.fury.io/py/eth-hash)
  [![Python versions](https://img.shields.io/pypi/pyversions/eth-hash.svg)](https://pypi.python.org/pypi/eth-hash)
  [![Docs build](https://readthedocs.org/projects/eth-hash/badge/?version=latest)](http://eth-hash.readthedocs.io/en/latest/?badge=latest)


  The Ethereum hashing function, keccak256, sometimes (erroneously) called sha3

  Note: the similarly named [pyethash](https://github.com/ethereum/ethash)
  has a completely different use: it generates proofs of work.

  This is a low-level library, intended to be used internally by other Ethereum tools.
  If you're looking for a convenient hashing tool, check out
  [`eth_utils.keccak()`](https://eth-utils.readthedocs.io/en/stable/utilities.html#keccak-bytes-int-bool-text-str-hexstr-str-bytes)
  which will be a little friendlier, and provide access to other helpful utilities.

  Read more in the [documentation on ReadTheDocs](https://eth-hash.readthedocs.io/). [View the change log](https://eth-hash.readthedocs.io/en/latest/release_notes.html).




  ```sh
  pip install eth-hash[pycryptodome]
  ```

  ```py
  >>> from eth_hash.auto import keccak
  >>> keccak(b'')
  b"\xc5\xd2F\x01\x86\xf7#<\x92~}\xb2\xdc\xc7\x03\xc0\xe5\x00\xb6S\xca\x82';{\xfa\xd8\x04]\x85\xa4p"
  ```

  See the [docs](http://eth-hash.readthedocs.io/en/latest/quickstart.html#quickstart)
  for more about choosing and installing backends.



  If you would like to hack on eth-hash, please check out the [Snake Charmers
  Tactical Manual](https://github.com/ethereum/snake-charmers-tactical-manual)
  for information on how we do:

  - Testing
  - Pull Requests
  - Code Style
  - Documentation



  You can set up your dev environment with:

  ```sh
  git clone git@github.com:ethereum/eth-hash.git
  cd eth-hash
  virtualenv -p python3 venv
  . venv/bin/activate
  pip install -e .[dev]
  ```



  During development, you might like to have tests run on every file save.

  Show flake8 errors on file change:

  ```sh

  when-changed -v -s -r -1 eth_hash/ tests/ -c "clear; flake8 eth_hash tests && echo 'flake8 success' || echo 'error'"
  ```

  Run multi-process tests in one command, but without color:

  ```sh

  pytest --numprocesses=4 --looponfail --maxfail=1

  pytest -n 4 -f --maxfail=1
  ```

  Run in one thread, with color and desktop notifications:

  ```sh
  cd venv
  ptw --onfail "notify-send -t 5000 'Test failure ⚠⚠⚠⚠⚠' 'python 3 test on eth-hash failed'" ../tests ../eth_hash
  ```



  For Debian-like systems:
  ```
  apt install pandoc
  ```

  To release a new version:

  ```sh
  make release bump=$$VERSION_PART_TO_BUMP$$
  ```



  The version format for this repo is `{major}.{minor}.{patch}` for stable, and
  `{major}.{minor}.{patch}-{stage}.{devnum}` for unstable (`stage` can be alpha or beta).

  To issue the next version in line, specify which part to bump,
  like `make release bump=minor` or `make release bump=devnum`. This is typically done from the
  master branch, except when releasing a beta (in which case the beta is released from master,
  and the previous stable branch is released from said branch).

  If you are in a beta version, `make release bump=stage` will switch to a stable.

  To issue an unstable version when the current version is stable, specify the
  new version explicitly, like `make release bump="--new-version 4.0.0-alpha.1 devnum"`


pkgId: c7be360aa7bc70d0f64c36ce8059cf7b5d06ebf9b2fa4eba9cf70ec8a647d267
name: python-eth-keys
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: Common API for Ethereum key operations.
url: https://github.com/ethereum/eth-keys
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f4a822a4-6dfd-4e56-91f8-4a4959233432
location_href: 00010572-python-eth-keys/python-eth-keys-0.4.0-1.src.rpm
checksum_type: sha256
description:
  A common API for Ethereum key operations with pluggable backends.


  > This library and repository was previously located at https://github.com/pipermerriam/ethereum-keys.  It was transferred to the Ethereum foundation github in November 2017 and renamed to `eth-keys`.  The PyPi package was also renamed from `ethereum-keys` to `eth-keys`.



  ```sh
  pip install eth-keys
  ```



  ```sh
  pip install -e .[dev]
  ```




  You can run the tests with:

  ```sh
  py.test tests
  ```

  Or you can install `tox` to run the full test suite.




  Pandoc is required for transforming the markdown README to the proper format to
  render correctly on pypi.

  For Debian-like systems:

  ```
  apt install pandoc
  ```

  Or on OSX:

  ```sh
  brew install pandoc
  ```

  To release a new version:

  ```sh
  make release bump=$$VERSION_PART_TO_BUMP$$
  ```




  The version format for this repo is `{major}.{minor}.{patch}` for stable, and
  `{major}.{minor}.{patch}-{stage}.{devnum}` for unstable (`stage` can be alpha or beta).

  To issue the next version in line, specify which part to bump,
  like `make release bump=minor` or `make release bump=devnum`.

  If you are in a beta version, `make release bump=stage` will switch to a stable.

  To issue an unstable version when the current version is stable, specify the
  new version explicitly, like `make release bump="--new-version 2.0.0-alpha.1 devnum"`





  ```python
  >>> from eth_keys import keys
  >>> pk = keys.PrivateKey(b'\x01' * 32)
  >>> signature = pk.sign_msg(b'a message')
  >>> pk
  '0x0101010101010101010101010101010101010101010101010101010101010101'
  >>> pk.public_key
  '0x1b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f70beaf8f588b541507fed6a642c5ab42dfdf8120a7f639de5122d47a69a8e8d1'
  >>> signature
  '0xccda990dba7864b79dc49158fea269338a1cf5747bc4c4bf1b96823e31a0997e7d1e65c06c5bf128b7109e1b4b9ba8d1305dc33f32f624695b2fa8e02c12c1e000'
  >>> pk.public_key.to_checksum_address()
  '0x1a642f0E3c3aF545E7AcBD38b07251B3990914F1'
  >>> signature.verify_msg(b'a message', pk.public_key)
  True
  >>> signature.recover_public_key_from_msg(b'a message') == pk.public_key
  True
  ```






  The `KeyAPI` object is the primary API for interacting with the `eth-keys`
  libary.  The object takes a single optional argument in its constructor which
  designates what backend will be used for eliptical curve cryptography
  operations.  The built-in backends are:

  * `eth_keys.backends.NativeECCBackend`: A pure python implementation of the ECC operations.
  * `eth_keys.backends.CoinCurveECCBackend`: Uses the [`coincurve`](https://github.com/ofek/coincurve) library for ECC operations.

  By default, `eth-keys` will *try* to use the `CoinCurveECCBackend`,
  falling back to the `NativeECCBackend` if the `coincurve` library is not
  available.

  > Note: The `coincurve` library is not automatically installed with `eth-keys` and must be installed separately.

  The `backend` argument can be given in any of the following forms.

  * Instance of the backend class
  * The backend class
  * String with the dot-separated import path for the backend class.

  ```python
  >>> from eth_keys import KeyAPI
  >>> from eth_keys.backends import NativeECCBackend

  >>> keys = KeyAPI(NativeECCBackend)
  >>> keys = KeyAPI(NativeECCBackend())
  >>> keys = KeyAPI('eth_keys.backends.NativeECCBackend')

  >>> keys = KeyAPI('eth_keys.backends.CoinCurveECCBackend')
  ```

  The backend can also be configured using the environment variable
  `ECC_BACKEND_CLASS` which should be set to the dot-separated python import path
  to the desired backend.

  ```python
  >>> import os
  >>> os.environ['ECC_BACKEND_CLASS'] = 'eth_keys.backends.CoinCurveECCBackend'
  ```




  This method returns a signature for the given `message_hash`, signed by the
  provided `private_key`.

  * `message_hash`: **must** be a byte string of length 32
  * `private_key`: **must** be an instance of `PrivateKey`




  Returns `True` or `False` based on whether the provided `signature` is a valid
  signature for the provided `message_hash` and `public_key`.

  * `message_hash`: **must** be a byte string of length 32
  * `signature`: **must** be an instance of `Signature`
  * `public_key`: **must** be an instance of `PublicKey`




  Returns the `PublicKey` instances recovered from the given `signature` and
  `message_hash`.

  * `message_hash`: **must** be a byte string of length 32
  * `signature`: **must** be an instance of `Signature`




  Returns the `PublicKey` instances computed from the given `private_key`
  instance.

  * `private_key`: **must** be an instance of `PublicKey`




  There is a common API for the following objects.

  * `PublicKey`
  * `PrivateKey`
  * `Signature`

  Each of these objects has all of the following APIs.

  * `obj.to_bytes()`: Returns the object in it's canonical `bytes` serialization.
  * `obj.to_hex()`: Returns a text string of the hex encoded canonical representation.




  The `PublicKey` class takes a single argument which must be a bytes string with length 64.

  > Note that there are two other common formats for public keys: 65 bytes with a leading `\x04` byte
  > and 33 bytes starting with either `\x02` or `\x03`. To use the former with the `PublicKey` object,
  > remove the first byte. For the latter, refer to `PublicKey.from_compressed_bytes`.

  The following methods are available:




  This `classmethod` returns a new `PublicKey` instance computed from its compressed representation.

  * `compressed_bytes` **must** be a byte string of length 33 starting with `\x02` or `\x03`.




  This `classmethod` returns a new `PublicKey` instance computed from the
  given `private_key`.

  * `private_key` may either be a byte string of length 32 or an instance of the `KeyAPI.PrivateKey` class.




  This `classmethod` returns a new `PublicKey` instance computed from the
  provided `message` and `signature`.

  * `message` **must** be a byte string
  * `signature` **must** be an instance of `KeyAPI.Signature`




  Same as `PublicKey.recover_from_msg` except that `message_hash` should be the Keccak
  hash of the `message`.




  This method returns `True` or `False` based on whether the signature is a valid
  for the given message.




  Same as `PublicKey.verify_msg` except that `message_hash` should be the Keccak
  hash of the `message`.




  Returns the compressed representation of this public key.




  Returns the hex encoded ethereum address for this public key.




  Returns the ERC55 checksum formatted ethereum address for this public key.




  Returns the 20-byte representation of the ethereum address for this public key.




  The `PrivateKey` class takes a single argument which must be a bytes string with length 32.

  The following methods and properties are available




  This *property* holds the `PublicKey` instance coresponding to this private key.




  This method returns a signature for the given `message` in the form of a
  `Signature` instance

  * `message` **must** be a byte string.




  Same as `PrivateKey.sign` except that `message_hash` should be the Keccak
  hash of the `message`.




  The `Signature` class can be instantiated in one of two ways.

  * `signature_bytes`: a bytes string with length 65.
  * `vrs`: a 3-tuple composed of the integers `v`, `r`, and `s`.

  > Note: If using the `signature_bytes` to instantiate, the byte string should be encoded as `r_bytes | s_bytes | v_bytes` where `|` represents concatenation.  `r_bytes` and `s_bytes` should be 32 bytes in length.  `v_bytes` should be a single byte `\x00` or `\x01`.

  Signatures are expected to use `1` or `0` for their `v` value.

  The following methods and properties are available




  This property returns the `v` value from the signature as an integer.




  This property returns the `r` value from the signature as an integer.




  This property returns the `s` value from the signature as an integer.




  This property returns a 3-tuple of `(v, r, s)`.




  This method returns `True` or `False` based on whether the signature is a valid
  for the given public key.

  * `message`: **must** be a byte string.
  * `public_key`: **must** be an instance of `PublicKey`




  Same as `Signature.verify_msg` except that `message_hash` should be the Keccak
  hash of the `message`.




  This method returns a `PublicKey` instance recovered from the signature.

  * `message`: **must** be a byte string.




  Same as `Signature.recover_public_key_from_msg` except that `message_hash`
  should be the Keccak hash of the `message`.






  This error is raised during instantaition of any of the `PublicKey`,
  `PrivateKey` or `Signature` classes if their constructor parameters are
  invalid.




  This error is raised from any of the `recover` or `verify` methods involving
  signatures if the signature is invalid.


pkgId: 20bced2fdcbd3754f212402a46cb60d896fd1b2b4f5df894926961fce33e4f49
name: python-eth-rlp
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: eth-rlp: RLP definitions for common Ethereum objects in Python
url: https://github.com/ethereum/eth-rlp
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c99e45c7-38ed-45c6-a584-044c8a70895f
location_href: 00010682-python-eth-rlp/python-eth-rlp-0.3.0-1.src.rpm
checksum_type: sha256
description:
  [![Join the chat at https://gitter.im/ethereum/eth-rlp](https://badges.gitter.im/ethereum/eth-rlp.svg)](https://gitter.im/ethereum/eth-rlp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
  [![Build Status](https://circleci.com/gh/ethereum/eth-rlp.svg?style=shield)](https://circleci.com/gh/ethereum/eth-rlp)
  [![PyPI version](https://badge.fury.io/py/eth-rlp.svg)](https://badge.fury.io/py/eth-rlp)
  [![Python versions](https://img.shields.io/pypi/pyversions/eth-rlp.svg)](https://pypi.python.org/pypi/eth-rlp)
  [![Docs build](https://readthedocs.org/projects/eth-rlp/badge/?version=latest)](http://eth-rlp.readthedocs.io/en/latest/?badge=latest)


  RLP definitions for common Ethereum objects in Python

  Read more in the [documentation on ReadTheDocs](http://eth-rlp.readthedocs.io/). [View the change log](http://eth-rlp.readthedocs.io/en/latest/release_notes.html).



  ```sh
  pip install eth-rlp
  ```



  If you would like to hack on eth-rlp, please check out the [Snake Charmers
  Tactical Manual](https://github.com/ethereum/snake-charmers-tactical-manual)
  for information on how we do:

  - Testing
  - Pull Requests
  - Code Style
  - Documentation



  You can set up your dev environment with:

  ```sh
  git clone git@github.com:ethereum/eth-rlp.git
  cd eth-rlp
  virtualenv -p python3 venv
  . venv/bin/activate
  pip install -e .[dev]
  ```



  During development, you might like to have tests run on every file save.

  Show flake8 errors on file change:

  ```sh

  when-changed -v -s -r -1 eth_rlp/ tests/ -c "clear; flake8 eth_rlp tests && echo 'flake8 success' || echo 'error'"
  ```

  Run multi-process tests in one command, but without color:

  ```sh

  pytest --numprocesses=4 --looponfail --maxfail=1

  pytest -n 4 -f --maxfail=1
  ```

  Run in one thread, with color and desktop notifications:

  ```sh
  cd venv
  ptw --onfail "notify-send -t 5000 'Test failure ⚠⚠⚠⚠⚠' 'python 3 test on eth-rlp failed'" ../tests ../eth_rlp
  ```



  For Debian-like systems:
  ```
  apt install pandoc
  ```

  To release a new version:

  ```sh
  make release bump=$$VERSION_PART_TO_BUMP$$
  ```



  The version format for this repo is `{major}.{minor}.{patch}` for stable, and
  `{major}.{minor}.{patch}-{stage}.{devnum}` for unstable (`stage` can be alpha or beta).

  To issue the next version in line, specify which part to bump,
  like `make release bump=minor` or `make release bump=devnum`. This is typically done from the
  master branch, except when releasing a beta (in which case the beta is released from master,
  and the previous stable branch is released from said branch).

  If you are in a beta version, `make release bump=stage` will switch to a stable.

  To issue an unstable version when the current version is stable, specify the
  new version explicitly, like `make release bump="--new-version 4.0.0-alpha.1 devnum"`


pkgId: 6416453e53767dbc201de73d7741025a332fd267b777f7fc12df3f69c86e3342
name: python-eth-utils
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: eth-utils: Common utility functions for python code that interacts with Ethereum
url: https://github.com/ethereum/eth-utils
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-bc83ac81-76fd-4091-b40a-2464ca7c3c09
location_href: 00010375-python-eth-utils/python-eth-utils-2.1.0-1.src.rpm
checksum_type: sha256
description:
  [![Join the chat at https://gitter.im/ethereum/eth-utils](https://badges.gitter.im/ethereum/eth-utils.svg)](https://gitter.im/ethereum/eth-utils?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
  [![Build Status](https://circleci.com/gh/ethereum/eth-utils.svg?style=shield)](https://circleci.com/gh/ethereum/eth-utils)
  [![PyPI version](https://badge.fury.io/py/eth-utils.svg)](https://badge.fury.io/py/eth-utils)
  [![Python versions](https://img.shields.io/pypi/pyversions/eth-utils.svg)](https://pypi.python.org/pypi/eth-utils)
  [![Docs build](https://readthedocs.org/projects/eth-utils/badge/?version=latest)](http://eth-utils.readthedocs.io/en/latest/?badge=latest)


  Common utility functions for python code that interacts with Ethereum

  Read more in the [documentation on ReadTheDocs](https://eth-utils.readthedocs.io/). [View the change log](https://eth-utils.readthedocs.io/en/latest/release_notes.html).



  ```sh
  pip install eth-utils
  ```



  If you would like to hack on eth-utils, please check out the [Snake Charmers
  Tactical Manual](https://github.com/ethereum/snake-charmers-tactical-manual)
  for information on how we do:

  - Testing
  - Pull Requests
  - Code Style
  - Documentation



  You can set up your dev environment with:

  ```sh
  git clone git@github.com:ethereum/eth-utils.git
  cd eth-utils
  virtualenv -p python3 venv
  . venv/bin/activate
  pip install -e .[dev]
  pip install -e eth-hash[pycryptodome]
  ```



  During development, you might like to have tests run on every file save.

  Show flake8 errors on file change:

  ```sh

  when-changed -v -s -r -1 eth_utils/ tests/ -c "clear; flake8 eth_utils tests && echo 'flake8 success' || echo 'error'"
  ```

  Run multi-process tests in one command, but without color:

  ```sh

  pytest --numprocesses=4 --looponfail --maxfail=1

  pytest -n 4 -f --maxfail=1
  ```

  Run in one thread, with color and desktop notifications:

  ```sh
  cd venv
  ptw --onfail "notify-send -t 5000 'Test failure ⚠⚠⚠⚠⚠' 'python 3 test on eth-utils failed'" ../tests ../eth_utils
  ```



  To release a new version:

  ```sh
  make release bump=$$VERSION_PART_TO_BUMP$$
  ```



  The version format for this repo is `{major}.{minor}.{patch}` for stable, and
  `{major}.{minor}.{patch}-{stage}.{devnum}` for unstable (`stage` can be alpha or beta).

  To issue the next version in line, specify which part to bump,
  like `make release bump=minor` or `make release bump=devnum`. This is typically done from the
  master branch, except when releasing a beta (in which case the beta is released from master,
  and the previous stable branch is released from said branch).

  If you are in a beta version, `make release bump=stage` will switch to a stable.

  To issue an unstable version when the current version is stable, specify the
  new version explicitly, like `make release bump="--new-version 4.0.0-alpha.1 devnum"`


pkgId: 8e8ba87a9518c413c828d904b780ddbb28b6a6fafaba01cc5c070569070e3e1c
name: python-event-tracking
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: A simple event tracking system.
url: https://github.com/edx/event-tracking
rpm_license: AGPLv3 License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7458be2b-98f8-4981-af43-ee56e58a403f
location_href: 00013458-python-event-tracking/python-event-tracking-2.1.0-1.src.rpm
checksum_type: sha256
description:
  The ``event-tracking`` library tracks context-aware semi-structured system events.
  It captures and stores events with nested data structures in order to truly
  take advantage of schemaless data storage systems.
  Key features:
  * Multiple backends - define custom backends that can be used to persist
    your event data.
  * Nested contexts - allows data to be injected into events even without
    having to pass around all of said data to every location where the events
    are emitted.
  * Django integration - provides a Django app that allows context aware events
    to easily be captured by multi-threaded web applications.
  * MongoDB integration - support writing events out to a mongo collection.
  Example::
      from eventtracking import tracker
      tracker = tracker.get_tracker()
      tracker.enter_context('outer', {'user_id': 10938})
      tracker.emit('navigation.request', {'url': 'http://www.edx.org/some/path/1'})
      with tracker.context({'user_id': 11111, 'session_id': '2987lkjdyoioey'}):
          tracker.emit('navigation.request', {'url': 'http://www.edx.org/some/path/2'})
      tracker.emit(
          'address.create',
          {
              'name': 'foo',
              'address': {
                  'postal_code': '90210',
                  'country': 'United States'
              }
          }
      )
  Running the above example produces the following events::
      {
          "name": "navigation.request",
          "timestamp": ...,
          "context": {
              "user_id": 10938
          },
          "data": {
              "url": "http://www.edx.org/some/path/1"
          }
      },
      {
          "name": "navigation.request",
          "timestamp": ...,
          "context": {
              "user_id": 11111,
              "session_id": "2987lkjdyoioey"
          },
          "data": {
              "url": "http://www.edx.org/some/path/2"
          }
      },
      {
          "name": "address.create",
          "timestamp": ...,
          "context": {
              "user_id": 10938
          },
          "data": {
              "name": "foo",
              "address": {
                  "postal_code": "90210",
                  "country": "United States"
              }
          }
      }


pkgId: 9ea4401b720b6b949362ec34339ccc575d5473f95464d121c8ba8bdf58e7b545
name: python-eventlet
arch: src
version: 0.33.3
epoch: 0
release: 1
summary: Highly concurrent networking library
url: http://eventlet.net
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-09740746-297a-44c8-b71d-ca75f03e8db3
location_href: 00003587-python-eventlet/python-eventlet-0.33.3-1.src.rpm
checksum_type: sha256
description:
  Here's something you can try right on the command line::
      % python3
      >>> import eventlet
      >>> from eventlet.green.urllib.request import urlopen
      >>> gt = eventlet.spawn(urlopen, 'http://eventlet.net')
      >>> gt2 = eventlet.spawn(urlopen, 'http://secondlife.com')
      >>> gt2.wait()
      >>> gt.wait()


pkgId: b45bd9c3b8f631499e590c4f94e7f03fbeb9a779ba1c6d009b39dc023e929de0
name: python-executing
arch: src
version: 1.2.0
epoch: 0
release: 1
summary: Get the currently executing AST node of a frame, and other information
url: https://github.com/alexmojaki/executing
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fc604130-ac07-45cc-9bd6-432c9bced410
location_href: 00010635-python-executing/python-executing-1.2.0-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://github.com/alexmojaki/executing/workflows/Tests/badge.svg?branch=master)](https://github.com/alexmojaki/executing/actions) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/executing/badge.svg?branch=master)](https://coveralls.io/github/alexmojaki/executing?branch=master) [![Supports Python versions 2.7 and 3.5+, including PyPy](https://img.shields.io/pypi/pyversions/executing.svg)](https://pypi.python.org/pypi/executing)

  This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed.

  * [Usage](#usage)
      * [Getting the AST node](#getting-the-ast-node)
      * [Getting the source code of the node](#getting-the-source-code-of-the-node)
      * [Getting the `__qualname__` of the current function](#getting-the-__qualname__-of-the-current-function)
      * [The Source class](#the-source-class)
  * [Installation](#installation)
  * [How does it work?](#how-does-it-work)
  * [Is it reliable?](#is-it-reliable)
  * [Which nodes can it identify?](#which-nodes-can-it-identify)
  * [Libraries that use this](#libraries-that-use-this)





  ```python
  import executing

  node = executing.Source.executing(frame).node
  ```

  Then `node` will be an AST node (from the `ast` standard library module) or None if the node couldn't be identified (which may happen often and should always be checked).

  `node` will always be the same instance for multiple calls with frames at the same point of execution.

  If you have a traceback object, pass it directly to `Source.executing()` rather than the `tb_frame` attribute to get the correct node.



  For this you will need to separately install the [`asttokens`](https://github.com/gristlabs/asttokens) library, then obtain an `ASTTokens` object:

  ```python
  executing.Source.executing(frame).source.asttokens()
  ```

  or:

  ```python
  executing.Source.for_frame(frame).asttokens()
  ```

  or use one of the convenience methods:

  ```python
  executing.Source.executing(frame).text()
  executing.Source.executing(frame).text_range()
  ```



  ```python
  executing.Source.executing(frame).code_qualname()
  ```

  or:

  ```python
  executing.Source.for_frame(frame).code_qualname(frame.f_code)
  ```



  Everything goes through the `Source` class. Only one instance of the class is created for each filename. Subclassing it to add more attributes on creation or methods is recommended. The classmethods such as `executing` will respect this. See the source code and docstrings for more detail.



      pip install executing

  If you don't like that you can just copy the file `executing.py`, there are no dependencies (but of course you won't get updates).



  Suppose the frame is executing this line:

  ```python
  self.foo(bar.x)
  ```

  and in particular it's currently obtaining the attribute `self.foo`. Looking at the bytecode, specifically `frame.f_code.co_code[frame.f_lasti]`, we can tell that it's loading an attribute, but it's not obvious which one. We can narrow down the statement being executed using `frame.f_lineno` and find the two `ast.Attribute` nodes representing `self.foo` and `bar.x`. How do we find out which one it is, without recreating the entire compiler in Python?

  The trick is to modify the AST slightly for each candidate expression and observe the changes in the bytecode instructions. We change the AST to this:

  ```python
  (self.foo ** 'longuniqueconstant')(bar.x)
  ```

  and compile it, and the bytecode will be almost the same but there will be two new instructions:

      LOAD_CONST 'longuniqueconstant'
      BINARY_POWER

  and just before that will be a `LOAD_ATTR` instruction corresponding to `self.foo`. Seeing that it's in the same position as the original instruction lets us know we've found our match.



  Yes - if it identifies a node, you can trust that it's identified the correct one. The tests are very thorough - in addition to unit tests which check various situations directly, there are property tests against a large number of files (see the filenames printed in [this build](https://travis-ci.org/alexmojaki/executing/jobs/557970457)) with real code. Specifically, for each file, the tests:

   1. Identify as many nodes as possible from all the bytecode instructions in the file, and assert that they are all distinct
   2. Find all the nodes that should be identifiable, and assert that they were indeed identified somewhere

  In other words, it shows that there is a one-to-one mapping between the nodes and the instructions that can be handled. This leaves very little room for a bug to creep in.

  Furthermore, `executing` checks that the instructions compiled from the modified AST exactly match the original code save for a few small known exceptions. This accounts for all the quirks and optimisations in the interpreter.



  Currently it works in almost all cases for the following `ast` nodes:

   - `Call`, e.g. `self.foo(bar)`
   - `Attribute`, e.g. `point.x`
   - `Subscript`, e.g. `lst[1]`
   - `BinOp`, e.g. `x + y` (doesn't include `and` and `or`)
   - `UnaryOp`, e.g. `-n` (includes `not` but only works sometimes)
   - `Compare` e.g. `a < b` (not for chains such as `0 < p < 1`)

  The plan is to extend to more operations in the future.





  - **[`stack_data`](https://github.com/alexmojaki/stack_data)**: Extracts data from stack frames and tracebacks, particularly to display more useful tracebacks than the default. Also uses another related library of mine: **[`pure_eval`](https://github.com/alexmojaki/pure_eval)**.
  - **[`futurecoder`](https://futurecoder.io/)**: Highlights the executing node in tracebacks using `executing` via `stack_data`, and provides debugging with `snoop`.
  - **[`snoop`](https://github.com/alexmojaki/snoop)**: A feature-rich and convenient debugging library. Uses `executing` to show the operation which caused an exception and to allow the `pp` function to display the source of its arguments.
  - **[`heartrate`](https://github.com/alexmojaki/heartrate)**: A simple real time visualisation of the execution of a Python program. Uses `executing` to highlight currently executing operations, particularly in each frame of the stack trace.
  - **[`sorcery`](https://github.com/alexmojaki/sorcery)**: Dark magic delights in Python. Uses `executing` to let special callables called spells know where they're being called from.



  - **[`IPython`](https://github.com/ipython/ipython/pull/12150)**: Highlights the executing node in tracebacks using `executing` via [`stack_data`](https://github.com/alexmojaki/stack_data).
  - **[`icecream`](https://github.com/gruns/icecream)**: 🍦 Sweet and creamy print debugging. Uses `executing` to identify where `ic` is called and print its arguments.
  - **[`friendly_traceback`](https://github.com/friendly-traceback/friendly-traceback)**: Uses `stack_data` and `executing` to pinpoint the cause of errors and provide helpful explanations.
  - **[`python-devtools`](https://github.com/samuelcolvin/python-devtools)**: Uses `executing` for print debugging similar to `icecream`.
  - **[`sentry_sdk`](https://github.com/getsentry/sentry-python)**: Add the integration `sentry_sdk.integrations.executingExecutingIntegration()` to show the function `__qualname__` in each frame in sentry events.
  - **[`varname`](https://github.com/pwwang/python-varname)**: Dark magics about variable names in python. Uses `executing` to find where its various magical functions like `varname` and `nameof` are called from.


pkgId: d93b06f95c643fb7fb7643cd564c04a45208eae1e7d01e3419914e669daa1f2e
name: python-executor
arch: src
version: 23.2
epoch: 0
release: 1
summary: Programmer friendly subprocess wrapper
url: https://executor.readthedocs.io
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ddfd3399-0e41-4494-8f2b-4398b851b134
location_href: 00013216-python-executor/python-executor-23.2-1.src.rpm
checksum_type: sha256
description:
  The `executor` package is a simple wrapper for Python's subprocess_ module
  that makes it very easy to handle subprocesses on UNIX systems with proper
  escaping of arguments and error checking:
  - An object oriented interface is used to execute commands using sane but
    customizable (and well documented) defaults.
  - Remote commands (executed over SSH_) are supported using the same object
    oriented interface, as are commands inside chroots_ (executed using
    schroot_).
  - There's also support for executing a group of commands concurrently in
    what's called a "command pool". The concurrency level can be customized and
    of course both local and remote commands are supported.
  The package is currently tested on Python 2.7, 3.5, 3.6, 3.7, 3.8 and PyPy. For
  usage instructions please refer to following sections and the documentation_.


pkgId: f7cf0b0e43ba96ca4932c3f990d75c5c62e45b6c49df526f9ea28adb1bb84468
name: python-exif
arch: src
version: 1.6.0
epoch: 0
release: 1
summary: Read and modify image EXIF metadata using Python.
url: https://gitlab.com/TNThieding/exif
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-17b77604-b9a7-40f4-922c-d36f11ae0dde
location_href: 00003592-python-exif/python-exif-1.6.0-1.src.rpm
checksum_type: sha256
description:
  [exif] Package


  .. image:: https://www.gitlab.com/TNThieding/exif/badges/master/pipeline.svg
      :target: https://gitlab.com/TNThieding/exif

  .. image:: https://www.gitlab.com/tnthieding/exif/badges/master/coverage.svg
      :target: https://gitlab.com/TNThieding/exif

  .. image:: https://readthedocs.org/projects/exif/badge/?version=latest
      :target: https://exif.readthedocs.io/en/latest/?badge=latest
      :alt: Documentation Status

  .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
      :target: https://github.com/psf/black

  .. image:: http://www.mypy-lang.org/static/mypy_badge.svg
      :target: http://mypy-lang.org/
      :alt: Checked with mypy

  Read and modify image EXIF metadata using Python without any third-party software
  dependencies. For example, batch process image metadata using a Python script.

  .. note::

      I developed this package in 2018 as a hobby; however, I no longer have the same bandwidth
      to work on this project. As always, contributions and bug fixes are welcome and appreciated.
      If this package does not suit your needs in its current form, I encourage you to investigate
      alternative packages such as piexif_, Pillow_, or the like.

      .. _piexif: https://pypi.org/project/piexif/
      .. _Pillow: https://pypi.org/project/Pillow/

  ***********
  Quick Start
  ***********

  Open an image with EXIF metadata using the Python ``open()`` built-in function. Ensure the
  binary mode flag is set. Pass this image file object into the ``exif.Image`` class::

      >>> from exif import Image
      >>> with open('grand_canyon.jpg', 'rb') as image_file:
      ...     my_image = Image(image_file)
      ...
      >>> my_image.has_exif
      True

  List EXIF attributes using the ``list_all()`` method::

      >>> my_image.list_all()
      ['_exif_ifd_pointer', '_gps_ifd_pointer', 'aperture_value', 'brightness_value', 'color_space',
       'components_configuration', 'compression', 'datetime', 'datetime_digitized', 'datetime_original', 'exif_version',
       'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash',
       'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'gps_altitude', 'gps_altitude_ref',
       'gps_datestamp', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error',
       'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude',
       'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'gps_timestamp', 'jpeg_interchange_format',
       'jpeg_interchange_format_length', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note',
       'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension',
       'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software',
       'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution',
       'y_and_c_positioning', 'y_resolution']

  Access EXIF metadata tags using Python attribute notation::

      >>> # Read tags with Python "get" notation.
      >>> my_image.gps_latitude
      (36.0, 3.0, 11.08)
      >>> my_image.gps_longitude
      (112.0, 5.0, 4.18)
      >>> my_image.model
      'iPhone 7'
      >>>
      >>> # Modify tags with Python "set" notation.
      >>> my_image.make = "Python"
      >>>
      >>> # Delete tags with Python "del" notation.
      >>> del my_image.gps_latitude
      >>> del my_image.gps_longitude
      >>>
      >>> # Add new tags with Python "set" notation.
      >>> from exif import LightSource
      >>> my_image.light_source = LightSource.DAYLIGHT

  Write the image with modified EXIF metadata to an image file using ``open()`` in binary
  write mode::

      >>> with open('modified_image.jpg', 'wb') as new_image_file:
      ...     new_image_file.write(my_image.get_file())
      ...

  Refer to the `usage page <https://exif.readthedocs.io/en/latest/usage.html>`_ for information and examples of alternative ways to access EXIF tags (e.g.
  with index/item syntax or with methods).


pkgId: a8a624a497a4d2498c0ab9526d0cf438b5614b6e2f3db01e428c664eba14352f
name: python-exiv2
arch: src
version: 0.13.2
epoch: 0
release: 1
summary: Python interface to libexiv2
url: https://github.com/jim-easterbrook/python-exiv2
rpm_license: GNU GPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e267b568-3586-4a13-8fa1-c801d13ba9e1
location_href: 00003593-python-exiv2/python-exiv2-0.13.2-1.src.rpm
checksum_type: sha256
description:
  python-exiv2 is a low level interface (or binding) to the exiv2_ C++ library.
  It is built using SWIG_ to automatically generate the interface code.
  The intention is to give direct access to all of the top-level classes in libexiv2_, but with additional "Pythonic" helpers where necessary.
  Not everything in libexiv2 is available in the Python interface.
  If you need something that's not there, please let me know.
  This project has taken over the PyPI exiv2 package created by Michael Vanslembrouck.
  If you need to use Michael's project, it is available at https://bitbucket.org/zmic/exiv2-python/src/master/ and can be installed with pip_::
      pip install exiv2==0.3.1


pkgId: b3380e1a1482ea4e996d2f3bd0f4d8450f259daa07fd8025783d29a76f0f16e9
name: python-expandvars
arch: src
version: 0.9.0
epoch: 0
release: 1
summary: Expand system variables Unix style
url: https://github.com/sayanarijit/expandvars
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5c59ae40-5b15-46a4-adfd-111fa1b4a44e
location_href: 00010118-python-expandvars/python-expandvars-0.9.0-1.src.rpm
checksum_type: sha256
description:
  Expand system variables Unix style
  [![PyPI version](https://img.shields.io/pypi/v/expandvars.svg)](https://pypi.org/project/expandvars)
  [![codecov](https://codecov.io/gh/sayanarijit/expandvars/branch/master/graph/badge.svg)](https://codecov.io/gh/sayanarijit/expandvars)


pkgId: 0213c39cab246cac8b85a938d09bddfa5e2f5e6622e37dbd920218266de71cba
name: python-expects
arch: src
version: 0.9.0
epoch: 0
release: 1
summary: Expressive and extensible TDD/BDD assertion library for Python
url: https://github.com/jaimegildesagredo/expects
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4c7490b8-f00a-4a21-9733-aed4c8e0aad7
location_href: 00013651-python-expects/python-expects-0.9.0-1.src.rpm
checksum_type: sha256
description:
  **Expects** is an *expressive* and *extensible* TDD/BDD assertion library for Python. Expects can be *extended* by defining `new matchers <http://expects.readthedocs.io/en/latest/custom-matchers.html>`_.


pkgId: aaf8187c5b117c183d801ec7b65c86f7645a372218a77d0df64f514a7742404c
name: python-expecttest
arch: src
version: 0.1.4
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/ezyang/expecttest
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-48896601-ca15-4b4e-b1e1-1a3ff1e266c4
location_href: 00010722-python-expecttest/python-expecttest-0.1.4-1.src.rpm
checksum_type: sha256
description:
  This library implements expect tests (also known as "golden" tests). Expect
  tests are a method of writing tests where instead of hard-coding the expected
  output of a test, you run the test to get the output, and the test framework
  automatically populates the expected output.  If the output of the test changes,
  you can rerun the test with the environment variable `EXPECTTEST_ACCEPT=1` to
  automatically update the expected output.

  Somewhat unusually, this library implements *inline* expect tests: that is to
  say, the expected output isn't saved to an external file, it is saved directly
  in the Python file (and we modify your Python file when updating the expect
  test.)

  The general recipe for how to use this is as follows:

    1. Write your test and use `assertExpectedInline()` instead of a normal
       `assertEqual`.  Leave the expected argument blank with an empty string:
       ```py
       self.assertExpectedInline(some_func(), "")
       ```

    2. Run your test.  It should fail, and you get an error message about
       accepting the output with `EXPECTTEST_ACCEPT=1`

    3. Rerun the test with `EXPECTTEST_ACCEPT=1`.  Now the previously blank string
       literal will contain the expected value of the test.
       ```py
       self.assertExpectedInline(some_func(), "my_value")
       ```

  Some tips and tricks:

    - Often, you will want to expect test on a multiline string.  This framework
      understands triple-quoted strings, so you can just write `"""my_value"""`
      and it will turn into triple-quoted strings.

    - Take some time thinking about how exactly you want to design the output
      format of the expect test.  It is often profitable to design an output
      representation specifically for expect tests.


pkgId: ab2dec973b5787097f9e9460d17358e50ee767e2e9533ea3bb817a11b331e6de
name: python-expiringdict
arch: src
version: 1.2.2
epoch: 0
release: 1
summary: Dictionary with auto-expiring values for caching purposes
url: https://www.mailgun.com/
rpm_license: Apache 2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-bce9d234-3820-43d0-8c8c-052a2747caf9
location_href: 00009631-python-expiringdict/python-expiringdict-1.2.2-1.src.rpm
checksum_type: sha256
description:
  ChangeLog_
  expiringdict is a Python caching library. The core of the library is ExpiringDict class which
  is an ordered dictionary with auto-expiring values for caching purposes. Expiration happens on
  any access, object is locked during cleanup from expired values. ExpiringDict can not store
  more than `max_len` elements - the oldest will be deleted.
  **Note:** Iteration over dict and also keys() do not remove expired values!


pkgId: 3245956cc836d3c7c14f07befe5d36350382851c67d183092716c57b73e43db0
name: python-exrex
arch: src
version: 0.11.0
epoch: 0
release: 1
summary: Irregular methods for regular expressions
url: https://github.com/asciimoo/exrex
rpm_license: AGPLv3+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1d218628-c976-4102-8a9f-e8975d80d01e
location_href: 00013075-python-exrex/python-exrex-0.11.0-1.src.rpm
checksum_type: sha256
description:
  Irregular methods for regular expressions.
  Exrex is a command line tool and python module that generates all - or random - matching strings to a given regular expression and more.
  It's pure python, without external dependencies.
  There are regular expressions with infinite matching strings (eg.: `[a-z]+`), in these cases exrex limits the maximum length of the infinite parts.
  Exrex uses generators, so the memory usage does not depend on the number of matching strings.
  [![Version](https://img.shields.io/pypi/v/exrex.svg)](https://crate.io/packages/exrex/)   [![Downloads](https://img.shields.io/pypi/dm/exrex.svg)](https://crate.io/packages/exrex/)
  *Features*
   * Generating all matching strings
   * Generating a random matching string
   * Counting the number of matching strings
   * Simplification of regular expressions

  To install exrex, simply:
  ```bash
  $ pip install exrex
  ```
  or
  ```bash
  $ easy_install exrex
  ```


pkgId: d253af348a19a86e5e6e9c69208617866ffcd14376b951c367fd86e1a11d7137
name: python-extension-helpers
arch: src
version: 1.0.0
epoch: 0
release: 1
summary: Utilities for building and installing packages with compiled extensions
url: https://github.com/astropy/extension-helpers
rpm_license: BSD 3-Clause License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fc66932d-a4c0-423b-8de0-0226d863f3a4
location_href: 00003594-python-extension-helpers/python-extension-helpers-1.0.0-1.src.rpm
checksum_type: sha256
description:
  The **extension-helpers** package includes convenience helpers to assist with
  building Python packages with compiled C/Cython extensions. It is developed by
  the Astropy project but is intended to be general and usable by any Python
  package.
  For more information, see the documentation at http://extension-helpers.readthedocs.io


pkgId: 2c8e455f67f5c272e40a81f3644eceeb200998c1f24b864bf0877803b52f825d
name: python-fab-classic
arch: src
version: 1.19.2
epoch: 0
release: 1
summary: fab-classic is a simple, Pythonic tool for remote execution and deployment.
url: https://github.com/ploxiln/fab-classic
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-69e19651-a57a-414f-90e7-04d7216cf46c
location_href: 00010291-python-fab-classic/python-fab-classic-1.19.2-1.src.rpm
checksum_type: sha256
description:
  fab-classic is `on PyPI <https://pypi.org/project/fab-classic/>`_,
  so you can ``pip install fab-classic``
  Be sure to ``pip uninstall fabric`` first if you happen to have it installed,
  because *fab-classic* uses the same import name "fabric" and entrypoint (tool)
  name "fab".
  Starting with version 1.16, *fab-classic* depends on
  `paramiko-ng <https://github.com/ploxiln/paramiko-ng/>`_ instead of
  `paramiko <https://github.com/paramiko/paramiko/>`_. Both of those packages
  are imported with the name ``paramiko``, and unfortunately that means that you
  should make sure you uninstall *paramiko* before *paramiko-ng* is installed,
  or you will get strange issues (even if things seem to work at first).
  Starting with version 1.18, you can switch back to depending on the package
  named *paramiko* by setting the environment variable ``PARAMIKO_REPLACE=1``
  while installing *fab-classic*::
      PARAMIKO_REPLACE=1 pip install --no-binary fab-classic fab-classic==1.18.0
  (*paramiko-ng* also supports ``PARAMIKO_REPLACE``,
  see `paramiko-ng#installation <https://github.com/ploxiln/paramiko-ng/#installation>`_)


pkgId: 9de2e2db09f1ae0d1840c72e7df5ee441167ac08db7725016d279bc001b36e1b
name: python-fabric
arch: src
version: 3.0.0
epoch: 0
release: 1
summary: High level SSH command execution
url: https://fabfile.org
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4b7dbae5-5a07-4f98-bce1-7d267e7418f2
location_href: 00009609-python-fabric/python-fabric-3.0.0-1.src.rpm
checksum_type: sha256
description:
  Fabric is a high level Python (2.7, 3.4+) library designed to execute shell
  commands remotely over SSH, yielding useful Python objects in return. It builds
  on top of `Invoke <https://pyinvoke.org>`_ (subprocess command execution and
  command-line features) and `Paramiko <https://paramiko.org>`_ (SSH protocol
  implementation), extending their APIs to complement one another and provide
  additional functionality.
  To find out what's new in this version of Fabric, please see `the changelog
  <https://fabfile.org/changelog.html#{}>`_.
  The project maintainer keeps a `roadmap
  <https://bitprophet.org/projects#roadmap>`_ on his website.


pkgId: 9cc32adc672dbb01a427f272dd09174862c7981475751de54cd32cffabf09130
name: python-face
arch: src
version: 22.0.0
epoch: 0
release: 1
description:
  A command-line interface parser and framework, friendly for users,
  full-featured for developers.

url: https://github.com/mahmoud/face
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a83e1b98-e3b8-48b5-96fd-4e92b1252be5
location_href: 00010024-python-face/python-face-22.0.0-1.src.rpm
checksum_type: sha256
summary:
  A command-line application framework (and CLI parser). Friendly for users, full-featured for developers.


pkgId: 6ca188d5124efff8ebbe9611cf1d5c72f53c4894625b458e607213d91de07586
name: python-face_recognition_models
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: Models used by the face_recognition package.
url: https://github.com/ageitgey/face_recognition_models
rpm_license: MIT license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8b19d86b-69a2-4803-9bb8-a70bff2a5d18
location_href: 00013079-python-face-recognition-models/python-face_recognition_models-0.3.0-1.src.rpm
checksum_type: sha256
description:
  This package contains only the models used by `face_recognition <https://github.com/ageitgey/face_recognition>`__.
  See  `face_recognition <https://github.com/ageitgey/face_recognition>`__ for more information.
  These models were created by `Davis King <https://github.com/davisking/dlib-models>`__ and are licensed in the public domain
  or under CC0 1.0 Universal. See LICENSE.


pkgId: 61dcee71faf1fe42e7c1be41579e5253edf7caea30c62c023b75480b28bf2d82
name: python-facebook-sdk
arch: src
version: 3.1.0
epoch: 0
release: 1
url: https://github.com/mobolic/facebook-sdk
rpm_license: Apache
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d6e6447d-cb1e-44d2-9451-c7b224078e7e
location_href: 00011411-python-facebook-sdk/python-facebook-sdk-3.1.0-1.src.rpm
checksum_type: sha256
summary:
  This client library is designed to support the Facebook Graph API and the official Facebook JavaScript SDK, which is the canonical way to implement Facebook authentication.


pkgId: 6d3af64a788b174956db504ff7fafa2483e9c8fdff4222395be5a58e0f90afac
name: python-fake-factory
arch: src
version: 9999.9.9
epoch: 0
release: 1
summary: The `fake-factory` package was deprecated on December 15th, 2016. Use the `Faker` package instead.
url: https://github.com/joke2k/faker
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-596dd49d-be7a-460b-85d0-6703a8456ae9
location_href: 00011681-python-fake-factory/python-fake-factory-9999.9.9-1.src.rpm
checksum_type: sha256
description:
  ERROR:
      The `fake-factory` package was deprecated on December 15th, 2016.
      Use the `Faker` package instead.


pkgId: af9f7f7ccdf244fba6ee31ac2e99e6625b62d2338c94087d55829644d9efe046
name: python-falcon
arch: src
version: 3.1.1
epoch: 0
release: 1
summary: The ultra-reliable, fast ASGI+WSGI framework for building data plane APIs at scale.
url: https://falconframework.org
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1b9ee6b6-dfba-47d8-8aa5-9e8493f29d08
location_href: 00003600-python-falcon/python-falcon-3.1.1-1.src.rpm
checksum_type: sha256
description:
  `Falcon <https://falconframework.org>`__ is a minimalist ASGI/WSGI framework for
  building mission-critical REST APIs and microservices, with a focus on
  reliability, correctness, and performance at scale.
  When it comes to building HTTP APIs, other frameworks weigh you down with tons
  of dependencies and unnecessary abstractions. Falcon cuts to the chase with a
  clean design that embraces HTTP and the REST architectural style.
  Falcon apps work with any `WSGI <https://www.python.org/dev/peps/pep-3333/>`_
  or `ASGI <https://asgi.readthedocs.io/en/latest/>`_ server, and run like a
  champ under CPython 3.5+ and PyPy 3.5+ (3.6+ required for ASGI).


pkgId: d60e1b01247ce621f39a28d1e30bb294a5e5db73eaa8f28e7e568068800342c5
name: python-fasjson-client
arch: src
version: 1.0.7
epoch: 0
release: 1
summary: An OpenAPI client for FASJSON
url: https://github.com/fedora-infra/fasjson-client
rpm_license: LGPL-3.0-or-later
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5c0030a7-e627-4404-90b4-10330d40652c
location_href: 00003601-python-fasjson-client/python-fasjson-client-1.0.7-1.src.rpm
checksum_type: sha256
description:
  A python client library for the FASJSON API

  This client uses the bravado library to build dynamic api methods based on open-api specs (version 2.0): https://github.com/Yelp/bravado

  The documentation is available at https://fasjson-client.readthedocs.io/



  Licensed under [lgpl-3.0](./LICENSE)


pkgId: bb383112bf7fdbb2bab700553082aa7e582be3bf93ddf67dfb1e64b88df4afc2
name: python-fastai
arch: src
version: 2.7.12
epoch: 0
release: 1
summary: fastai simplifies training fast and accurate neural nets using modern best practices
url: https://github.com/fastai/fastai
rpm_license: Apache Software License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3c830a8e-0419-4bf9-a422-4eeb4db03729
location_href: 00010076-python-fastai/python-fastai-2.7.12-1.src.rpm
checksum_type: sha256
description:
  <!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->
  ![CI](https://github.com/fastai/fastai/workflows/CI/badge.svg)
  [![PyPI](https://img.shields.io/pypi/v/fastai?color=blue&label=pypi%20version.png)](https://pypi.org/project/fastai/#description)
  [![Conda (channel
  only)](https://img.shields.io/conda/vn/fastai/fastai?color=seagreen&label=conda%20version.png)](https://anaconda.org/fastai/fastai)
  [![Build fastai
  images](https://github.com/fastai/docker-containers/workflows/Build%20fastai%20images/badge.svg)](https://github.com/fastai/docker-containers)
  ![docs](https://github.com/fastai/fastai/workflows/docs/badge.svg)

  You can use fastai without any installation by using [Google
  Colab](https://colab.research.google.com/). In fact, every page of this
  documentation is also available as an interactive notebook - click “Open
  in colab” at the top of any page to open it (be sure to change the Colab
  runtime to “GPU” to have it run fast!) See the fast.ai documentation on
  [Using Colab](https://course.fast.ai/start_colab) for more information.
  You can install fastai on your own machines with conda (highly
  recommended), as long as you’re running Linux or Windows (NB: Mac is not
  supported). For Windows, please see the “Running on Windows” for
  important notes.
  If you’re using
  [miniconda](https://docs.conda.io/en/latest/miniconda.html)
  (recommended) then run (note that if you replace `conda` with
  [mamba](https://github.com/mamba-org/mamba) the install process will be
  much faster and more reliable):
  ``` bash
  conda install -c fastchan fastai
  ```
  …or if you’re using
  [Anaconda](https://www.anaconda.com/products/individual) then run:
  ``` bash
  conda install -c fastchan fastai anaconda
  ```
  To install with pip, use: `pip install fastai`. If you install with pip,
  you should install PyTorch first by following the PyTorch [installation
  instructions](https://pytorch.org/get-started/locally/).
  If you plan to develop fastai yourself, or want to be on the cutting
  edge, you can use an editable install (if you do this, you should also
  use an editable install of
  [fastcore](https://github.com/fastai/fastcore) to go with it.) First
  install PyTorch, and then:
      git clone https://github.com/fastai/fastai
      pip install -e "fastai[dev]"

  The best way to get started with fastai (and deep learning) is to read
  [the
  book](https://www.amazon.com/Deep-Learning-Coders-fastai-PyTorch/dp/1492045527),
  and complete [the free course](https://course.fast.ai).
  To see what’s possible with fastai, take a look at the [Quick
  Start](https://docs.fast.ai/quick_start.html), which shows how to use
  around 5 lines of code to build an image classifier, an image
  segmentation model, a text sentiment model, a recommendation system, and
  a tabular model. For each of the applications, the code is much the
  same.
  Read through the [Tutorials](https://docs.fast.ai/tutorial.html) to
  learn how to train your own models on your own datasets. Use the
  navigation sidebar to look through the fastai documentation. Every
  class, function, and method is documented here.
  To learn about the design and motivation of the library, read the [peer
  reviewed paper](https://www.mdpi.com/2078-2489/11/2/108/htm).

  fastai is a deep learning library which provides practitioners with
  high-level components that can quickly and easily provide
  state-of-the-art results in standard deep learning domains, and provides
  researchers with low-level components that can be mixed and matched to
  build new approaches. It aims to do both things without substantial
  compromises in ease of use, flexibility, or performance. This is
  possible thanks to a carefully layered architecture, which expresses
  common underlying patterns of many deep learning and data processing
  techniques in terms of decoupled abstractions. These abstractions can be
  expressed concisely and clearly by leveraging the dynamism of the
  underlying Python language and the flexibility of the PyTorch library.
  fastai includes:
  - A new type dispatch system for Python along with a semantic type
    hierarchy for tensors
  - A GPU-optimized computer vision library which can be extended in pure
    Python
  - An optimizer which refactors out the common functionality of modern
    optimizers into two basic pieces, allowing optimization algorithms to
    be implemented in 4–5 lines of code
  - A novel 2-way callback system that can access any part of the data,
    model, or optimizer and change it at any point during training
  - A new data block API
  - And much more…
  fastai is organized around two main design goals: to be approachable and
  rapidly productive, while also being deeply hackable and configurable.
  It is built on top of a hierarchy of lower-level APIs which provide
  composable building blocks. This way, a user wanting to rewrite part of
  the high-level API or add particular behavior to suit their needs does
  not have to learn how to use the lowest level.
  <img alt="Layered API" src="https://raw.githubusercontent.com/fastai/fastai/master/images/layered.png" width="345">

  It’s very easy to migrate from plain PyTorch, Ignite, or any other
  PyTorch-based library, or even to use fastai in conjunction with other
  libraries. Generally, you’ll be able to use all your existing data
  processing code, but will be able to reduce the amount of code you
  require for training, and more easily take advantage of modern best
  practices. Here are migration guides from some popular libraries to help
  you on your way:
  - [Plain PyTorch](https://docs.fast.ai/examples/migrating_pytorch.html)
  - [Ignite](https://docs.fast.ai/examples/migrating_ignite.html)
  - [Lightning](https://docs.fast.ai/examples/migrating_lightning.html)
  - [Catalyst](https://docs.fast.ai/examples/migrating_catalyst.html)

  When installing with `mamba` or `conda` replace `-c fastchan` in the
  installation with `-c pytorch -c nvidia -c fastai`, since fastchan is
  not currently supported on Windows.
  Due to python multiprocessing issues on Jupyter and Windows,
  `num_workers` of `Dataloader` is reset to 0 automatically to avoid
  Jupyter hanging. This makes tasks such as computer vision in Jupyter on
  Windows many times slower than on Linux. This limitation doesn’t exist
  if you use fastai from a script.
  See [this
  example](https://github.com/fastai/fastai/blob/master/nbs/examples/dataloader_spawn.py)
  to fully leverage the fastai API on Windows.

  To run the tests in parallel, launch:
  `nbdev_test`
  For all the tests to pass, you’ll need to install the dependencies
  specified as part of dev_requirements in settings.ini
  `pip install -e .[dev]`
  Tests are written using `nbdev`, for example see the documentation for
  `test_eq`.

  After you clone this repository, make sure you have run
  `nbdev_install_hooks` in your terminal. This install Jupyter and git
  hooks to automatically clean, trust, and fix merge conflicts in
  notebooks.
  After making changes in the repo, you should run `nbdev_prepare` and
  make additional and necessary changes in order to pass all the tests.

  For those interested in official docker containers for this project,
  they can be found
  [here](https://github.com/fastai/docker-containers#fastai).


pkgId: cbce8b949747fee2b5b17c1db766b86972d6b76c021a7e155ea5e32b4adf97d5
name: python-fastapi-utils
arch: src
version: 0.2.1
epoch: 0
release: 1
summary: Reusable utilities for FastAPI
url: https://fastapi-utils.davidmontague.xyz
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9d0559e1-8122-459b-a1d5-8f345e93767e
location_href: 00011337-python-fastapi-utils/python-fastapi-utils-0.2.1-1.src.rpm
checksum_type: sha256
description:
  **Documentation**: <a href="https://fastapi-utils.davidmontague.xyz" target="_blank">https://fastapi-utils.davidmontague.xyz</a>


pkgId: 0adc841a2afa5a1726c507a3fab66d6edd7a8e4e81ec5d87d091378c36bf917e
name: python-fastavro
arch: src
version: 1.7.3
epoch: 0
release: 1
summary: Fast read/write of AVRO files
url: https://github.com/fastavro/fastavro
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e86f784c-0ed7-4304-8222-3ee6706b7125
location_href: 00003604-python-fastavro/python-fastavro-1.7.3-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://github.com/fastavro/fastavro/workflows/Build/badge.svg)](https://github.com/fastavro/fastavro/actions)
  [![Documentation Status](https://readthedocs.org/projects/fastavro/badge/?version=latest)](http://fastavro.readthedocs.io/en/latest/?badge=latest)
  [![codecov](https://codecov.io/gh/fastavro/fastavro/branch/master/graph/badge.svg)](https://codecov.io/gh/fastavro/fastavro)


  Because the Apache Python `avro` package is written in pure Python, it is
  relatively slow. In one test case, it takes about 14 seconds to iterate through
  a file of 10,000 records. By comparison, the JAVA `avro` SDK reads the same file in
  1.9 seconds.

  The `fastavro` library was written to offer performance comparable to the Java
  library. With regular CPython, `fastavro` uses C extensions which allow it to
  iterate the same 10,000 record file in 1.7 seconds. With PyPy, this drops to 1.5
  seconds (to be fair, the JAVA benchmark is doing some extra JSON
  encoding/decoding).

  `fastavro` supports the following Python versions:

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



  * File Writer
  * File Reader (iterating via records or blocks)
  * Schemaless Writer
  * Schemaless Reader
  * JSON Writer
  * JSON Reader
  * Codecs (Snappy, Deflate, Zstandard, Bzip2, LZ4, XZ)
  * Schema resolution
  * Aliases
  * Logical Types
  * Parsing schemas into the canonical form
  * Schema fingerprinting



  * Anything involving Avro's RPC features

  [Cython]: http://cython.org/



  Documentation is available at http://fastavro.readthedocs.io/en/latest/


  `fastavro` is available both on [PyPI](http://pypi.python.org/pypi)

      pip install fastavro

  and on [conda-forge](https://conda-forge.github.io) `conda` channel.

      conda install -c conda-forge fastavro



  * Bugs and new feature requests typically start as GitHub issues where they can be discussed. I try to resolve these as time affords, but PRs are welcome from all.
  * Get approval from discussing on the GitHub issue before opening the pull request
  * Tests must be passing for pull request to be considered

  Developer requirements can be installed with `pip install -r developer_requirements.txt`.
  If those are installed, you can run the tests with `./run-tests.sh`. If you have trouble
  installing those dependencies, you can run `docker build .` to run the tests inside
  a Docker container. This won't test on all versions of Python or on PyPy, so it's possible
  to still get CI failures after making a pull request, but we can work through those errors
  if/when they happen. `.run-tests.sh` only covers the Cython tests. In order to test the
  pure Python implementation, comment out `python setup.py build_ext --inplace`
  and re-run.

  NOTE: Some tests might fail when running the tests locally. An example of this
  is this codec tests. If the supporting codec library is not available, the test
  will fail. These failures can be ignored since the tests will on pull requests
  and will be run in the correct environments with the correct dependencies set up.



  We release both to [PyPI][pypi] and to [conda-forge][conda-forge].

  We assume you have [twine][twine] installed and that you've created your own
  fork of [fastavro-feedstock][feedstock].

  * Make sure the tests pass
  * Run `make tag`
  * Wait for all artifacts to be built and published the the Github release
  * Run `make publish`
  * The conda-forge PR should get created and merged automatically

  [conda-forge]: https://conda-forge.org/
  [feedstock]: https://github.com/conda-forge/fastavro-feedstock
  [pypi]: https://pypi.python.org/pypi
  [twine]: https://pypi.python.org/pypi/twine




  See the [ChangeLog]

  [ChangeLog]: https://github.com/fastavro/fastavro/blob/master/ChangeLog



  [Project Home](https://github.com/fastavro/fastavro)


pkgId: 0c7e6970e9f908360b69578eedc26f408393722f5ccffaff4d11442ab54596b8
name: python-fastavro-debuginfo
arch: aarch64
version: 1.7.3
epoch: 0
release: 1
summary: Debug information for package python-fastavro
url: https://github.com/fastavro/fastavro
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-e86f784c-0ed7-4304-8222-3ee6706b7125
rpm_sourcerpm: python-fastavro-1.7.3-1.src.rpm
location_href: 00003604-python-fastavro/python-fastavro-debuginfo-1.7.3-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-fastavro.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: dca5720f6ddcea0abf82a1dc46523a4e80f06a17963e7ae6b3c8ae588ac9abbe
name: python-fastavro-debugsource
arch: aarch64
version: 1.7.3
epoch: 0
release: 1
summary: Debug sources for package python-fastavro
url: https://github.com/fastavro/fastavro
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-e86f784c-0ed7-4304-8222-3ee6706b7125
rpm_sourcerpm: python-fastavro-1.7.3-1.src.rpm
location_href: 00003604-python-fastavro/python-fastavro-debugsource-1.7.3-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-fastavro.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: d1804c9e58c870c3448d122ce8ce0475655721a508e85f72ce4c3cd06b47fe9d
name: python-fastcache
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: C implementation of Python 3 functools.lru_cache
url: https://github.com/pbrady/fastcache
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d9f57350-fb60-4a50-a0d7-c648612e528d
location_href: 00003605-python-fastcache/python-fastcache-1.1.0-1.src.rpm
checksum_type: sha256
description:
  C implementation of Python 3 functools.lru_cache.  Provides speedup of 10-30x
  over standard library.  Passes test suite from standard library for lru_cache.

  Provides 2 Least Recently Used caching function decorators:

    clru_cache - built-in (faster)
               >>> from fastcache import clru_cache, __version__
               >>> __version__
               '1.1.0'
               >>> @clru_cache(maxsize=325, typed=False)
               ... def fib(n):
               ...     """Terrible Fibonacci number generator."""
               ...     return n if n < 2 else fib(n-1) + fib(n-2)
               ...
               >>> fib(300)
               222232244629420445529739893461909967206666939096499764990979600
               >>> fib.cache_info()
               CacheInfo(hits=298, misses=301, maxsize=325, currsize=301)
               >>> print(fib.__doc__)
               Terrible Fibonacci number generator.
               >>> fib.cache_clear()
               >>> fib.cache_info()
               CacheInfo(hits=0, misses=0, maxsize=325, currsize=0)
               >>> fib.__wrapped__(300)
               222232244629420445529739893461909967206666939096499764990979600
               >>> type(fib)
               >>> <class 'fastcache.clru_cache'>

    lru_cache  - python wrapper around clru_cache
               >>> from fastcache import lru_cache
               >>> @lru_cache(maxsize=128, typed=False)
               ... def f(a, b):
               ...     pass
               ...
               >>> type(f)
               >>> <class 'function'>


    (c)lru_cache(maxsize=128, typed=False, state=None, unhashable='error')

        Least-recently-used cache decorator.

        If *maxsize* is set to None, the LRU features are disabled and the cache
        can grow without bound.

        If *typed* is True, arguments of different types will be cached separately.
        For example, f(3.0) and f(3) will be treated as distinct calls with
        distinct results.

        If *state* is a list or dict, the items will be incorporated into the
        argument hash.

        The result of calling the cached function with unhashable (mutable)
        arguments depends on the value of *unhashable*:

            If *unhashable* is 'error', a TypeError will be raised.

            If *unhashable* is 'warning', a UserWarning will be raised, and
            the wrapped function will be called with the supplied arguments.
            A miss will be recorded in the cache statistics.

            If *unhashable* is 'ignore', the wrapped function will be called
            with the supplied arguments. A miss will will be recorded in
            the cache statistics.

        View the cache statistics named tuple (hits, misses, maxsize, currsize)
        with f.cache_info().  Clear the cache and statistics with f.cache_clear().
        Access the underlying function with f.__wrapped__.

        See:  http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used


pkgId: 2ba1c6d3f10dd93050993f488d92acf11da317fc1d8b97e8172934bfadb0f69a
name: python-fastly
arch: src
version: 1.3.0
epoch: 0
release: 1
summary: A Python Fastly API client library
url: https://github.com/fastly/fastly-py
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-49a0a814-2815-4db8-b82f-05e4b49d392a
location_href: 00013513-python-fastly/python-fastly-1.3.0-1.src.rpm
checksum_type: sha256
description:
  *AclApi* | [**create_acl**](docs/AclApi.md#create_acl) | **POST** /service/{service_id}/version/{version_id}/acl | Create a new ACL
  *AclApi* | [**delete_acl**](docs/AclApi.md#delete_acl) | **DELETE** /service/{service_id}/version/{version_id}/acl/{acl_name} | Delete an ACL
  *AclApi* | [**get_acl**](docs/AclApi.md#get_acl) | **GET** /service/{service_id}/version/{version_id}/acl/{acl_name} | Describe an ACL
  *AclApi* | [**list_acls**](docs/AclApi.md#list_acls) | **GET** /service/{service_id}/version/{version_id}/acl | List ACLs
  *AclApi* | [**update_acl**](docs/AclApi.md#update_acl) | **PUT** /service/{service_id}/version/{version_id}/acl/{acl_name} | Update an ACL
  *AclEntryApi* | [**bulk_update_acl_entries**](docs/AclEntryApi.md#bulk_update_acl_entries) | **PATCH** /service/{service_id}/acl/{acl_id}/entries | Update multiple ACL entries
  *AclEntryApi* | [**create_acl_entry**](docs/AclEntryApi.md#create_acl_entry) | **POST** /service/{service_id}/acl/{acl_id}/entry | Create an ACL entry
  *AclEntryApi* | [**delete_acl_entry**](docs/AclEntryApi.md#delete_acl_entry) | **DELETE** /service/{service_id}/acl/{acl_id}/entry/{acl_entry_id} | Delete an ACL entry
  *AclEntryApi* | [**get_acl_entry**](docs/AclEntryApi.md#get_acl_entry) | **GET** /service/{service_id}/acl/{acl_id}/entry/{acl_entry_id} | Describe an ACL entry
  *AclEntryApi* | [**list_acl_entries**](docs/AclEntryApi.md#list_acl_entries) | **GET** /service/{service_id}/acl/{acl_id}/entries | List ACL entries
  *AclEntryApi* | [**update_acl_entry**](docs/AclEntryApi.md#update_acl_entry) | **PATCH** /service/{service_id}/acl/{acl_id}/entry/{acl_entry_id} | Update an ACL entry
  *ApexRedirectApi* | [**delete_apex_redirect**](docs/ApexRedirectApi.md#delete_apex_redirect) | **DELETE** /apex-redirects/{apex_redirect_id} | Delete an apex redirect
  *ApexRedirectApi* | [**get_apex_redirect**](docs/ApexRedirectApi.md#get_apex_redirect) | **GET** /apex-redirects/{apex_redirect_id} | Get an apex redirect
  *ApexRedirectApi* | [**list_apex_redirects**](docs/ApexRedirectApi.md#list_apex_redirects) | **GET** /service/{service_id}/version/{version_id}/apex-redirects | List apex redirects
  *ApexRedirectApi* | [**update_apex_redirect**](docs/ApexRedirectApi.md#update_apex_redirect) | **PUT** /apex-redirects/{apex_redirect_id} | Update an apex redirect
  *BackendApi* | [**create_backend**](docs/BackendApi.md#create_backend) | **POST** /service/{service_id}/version/{version_id}/backend | Create a backend
  *BackendApi* | [**delete_backend**](docs/BackendApi.md#delete_backend) | **DELETE** /service/{service_id}/version/{version_id}/backend/{backend_name} | Delete a backend
  *BackendApi* | [**get_backend**](docs/BackendApi.md#get_backend) | **GET** /service/{service_id}/version/{version_id}/backend/{backend_name} | Describe a backend
  *BackendApi* | [**list_backends**](docs/BackendApi.md#list_backends) | **GET** /service/{service_id}/version/{version_id}/backend | List backends
  *BackendApi* | [**update_backend**](docs/BackendApi.md#update_backend) | **PUT** /service/{service_id}/version/{version_id}/backend/{backend_name} | Update a backend
  *BillingApi* | [**get_invoice**](docs/BillingApi.md#get_invoice) | **GET** /billing/v2/year/{year}/month/{month} | Get an invoice
  *BillingApi* | [**get_invoice_by_id**](docs/BillingApi.md#get_invoice_by_id) | **GET** /billing/v2/account_customers/{customer_id}/invoices/{invoice_id} | Get an invoice
  *BillingApi* | [**get_invoice_mtd**](docs/BillingApi.md#get_invoice_mtd) | **GET** /billing/v2/account_customers/{customer_id}/mtd_invoice | Get month-to-date billing estimate
  *BillingAddressApi* | [**add_billing_addr**](docs/BillingAddressApi.md#add_billing_addr) | **POST** /customer/{customer_id}/billing_address | Add a billing address to a customer
  *BillingAddressApi* | [**delete_billing_addr**](docs/BillingAddressApi.md#delete_billing_addr) | **DELETE** /customer/{customer_id}/billing_address | Delete a billing address
  *BillingAddressApi* | [**get_billing_addr**](docs/BillingAddressApi.md#get_billing_addr) | **GET** /customer/{customer_id}/billing_address | Get a billing address
  *BillingAddressApi* | [**update_billing_addr**](docs/BillingAddressApi.md#update_billing_addr) | **PATCH** /customer/{customer_id}/billing_address | Update a billing address
  *CacheSettingsApi* | [**create_cache_settings**](docs/CacheSettingsApi.md#create_cache_settings) | **POST** /service/{service_id}/version/{version_id}/cache_settings | Create a cache settings object
  *CacheSettingsApi* | [**delete_cache_settings**](docs/CacheSettingsApi.md#delete_cache_settings) | **DELETE** /service/{service_id}/version/{version_id}/cache_settings/{cache_settings_name} | Delete a cache settings object
  *CacheSettingsApi* | [**get_cache_settings**](docs/CacheSettingsApi.md#get_cache_settings) | **GET** /service/{service_id}/version/{version_id}/cache_settings/{cache_settings_name} | Get a cache settings object
  *CacheSettingsApi* | [**list_cache_settings**](docs/CacheSettingsApi.md#list_cache_settings) | **GET** /service/{service_id}/version/{version_id}/cache_settings | List cache settings objects
  *CacheSettingsApi* | [**update_cache_settings**](docs/CacheSettingsApi.md#update_cache_settings) | **PUT** /service/{service_id}/version/{version_id}/cache_settings/{cache_settings_name} | Update a cache settings object
  *ConditionApi* | [**create_condition**](docs/ConditionApi.md#create_condition) | **POST** /service/{service_id}/version/{version_id}/condition | Create a condition
  *ConditionApi* | [**delete_condition**](docs/ConditionApi.md#delete_condition) | **DELETE** /service/{service_id}/version/{version_id}/condition/{condition_name} | Delete a condition
  *ConditionApi* | [**get_condition**](docs/ConditionApi.md#get_condition) | **GET** /service/{service_id}/version/{version_id}/condition/{condition_name} | Describe a condition
  *ConditionApi* | [**list_conditions**](docs/ConditionApi.md#list_conditions) | **GET** /service/{service_id}/version/{version_id}/condition | List conditions
  *ConditionApi* | [**update_condition**](docs/ConditionApi.md#update_condition) | **PUT** /service/{service_id}/version/{version_id}/condition/{condition_name} | Update a condition
  *ContactApi* | [**delete_contact**](docs/ContactApi.md#delete_contact) | **DELETE** /customer/{customer_id}/contact/{contact_id} | Delete a contact
  *ContactApi* | [**list_contacts**](docs/ContactApi.md#list_contacts) | **GET** /customer/{customer_id}/contacts | List contacts
  *ContentApi* | [**content_check**](docs/ContentApi.md#content_check) | **GET** /content/edge_check | Check status of content in each POP&#39;s cache
  *CustomerApi* | [**delete_customer**](docs/CustomerApi.md#delete_customer) | **DELETE** /customer/{customer_id} | Delete a customer
  *CustomerApi* | [**get_customer**](docs/CustomerApi.md#get_customer) | **GET** /customer/{customer_id} | Get a customer
  *CustomerApi* | [**get_logged_in_customer**](docs/CustomerApi.md#get_logged_in_customer) | **GET** /current_customer | Get the logged in customer
  *CustomerApi* | [**list_users**](docs/CustomerApi.md#list_users) | **GET** /customer/{customer_id}/users | List users
  *CustomerApi* | [**update_customer**](docs/CustomerApi.md#update_customer) | **PUT** /customer/{customer_id} | Update a customer
  *DictionaryApi* | [**create_dictionary**](docs/DictionaryApi.md#create_dictionary) | **POST** /service/{service_id}/version/{version_id}/dictionary | Create an edge dictionary
  *DictionaryApi* | [**delete_dictionary**](docs/DictionaryApi.md#delete_dictionary) | **DELETE** /service/{service_id}/version/{version_id}/dictionary/{dictionary_name} | Delete an edge dictionary
  *DictionaryApi* | [**get_dictionary**](docs/DictionaryApi.md#get_dictionary) | **GET** /service/{service_id}/version/{version_id}/dictionary/{dictionary_name} | Get an edge dictionary
  *DictionaryApi* | [**list_dictionaries**](docs/DictionaryApi.md#list_dictionaries) | **GET** /service/{service_id}/version/{version_id}/dictionary | List edge dictionaries
  *DictionaryApi* | [**update_dictionary**](docs/DictionaryApi.md#update_dictionary) | **PUT** /service/{service_id}/version/{version_id}/dictionary/{dictionary_name} | Update an edge dictionary
  *DictionaryInfoApi* | [**get_dictionary_info**](docs/DictionaryInfoApi.md#get_dictionary_info) | **GET** /service/{service_id}/version/{version_id}/dictionary/{dictionary_id}/info | Get edge dictionary metadata
  *DictionaryItemApi* | [**create_dictionary_item**](docs/DictionaryItemApi.md#create_dictionary_item) | **POST** /service/{service_id}/dictionary/{dictionary_id}/item | Create an entry in an edge dictionary
  *DictionaryItemApi* | [**delete_dictionary_item**](docs/DictionaryItemApi.md#delete_dictionary_item) | **DELETE** /service/{service_id}/dictionary/{dictionary_id}/item/{dictionary_item_key} | Delete an item from an edge dictionary
  *DictionaryItemApi* | [**get_dictionary_item**](docs/DictionaryItemApi.md#get_dictionary_item) | **GET** /service/{service_id}/dictionary/{dictionary_id}/item/{dictionary_item_key} | Get an item from an edge dictionary
  *DictionaryItemApi* | [**list_dictionary_items**](docs/DictionaryItemApi.md#list_dictionary_items) | **GET** /service/{service_id}/dictionary/{dictionary_id}/items | List items in an edge dictionary
  *DictionaryItemApi* | [**update_dictionary_item**](docs/DictionaryItemApi.md#update_dictionary_item) | **PATCH** /service/{service_id}/dictionary/{dictionary_id}/item/{dictionary_item_key} | Update an entry in an edge dictionary
  *DictionaryItemApi* | [**upsert_dictionary_item**](docs/DictionaryItemApi.md#upsert_dictionary_item) | **PUT** /service/{service_id}/dictionary/{dictionary_id}/item/{dictionary_item_key} | Insert or update an entry in an edge dictionary
  *DiffApi* | [**diff_service_versions**](docs/DiffApi.md#diff_service_versions) | **GET** /service/{service_id}/diff/from/{from_version_id}/to/{to_version_id} | Diff two service versions
  *DirectorApi* | [**create_director**](docs/DirectorApi.md#create_director) | **POST** /service/{service_id}/version/{version_id}/director | Create a director
  *DirectorApi* | [**delete_director**](docs/DirectorApi.md#delete_director) | **DELETE** /service/{service_id}/version/{version_id}/director/{director_name} | Delete a director
  *DirectorApi* | [**get_director**](docs/DirectorApi.md#get_director) | **GET** /service/{service_id}/version/{version_id}/director/{director_name} | Get a director
  *DirectorApi* | [**list_directors**](docs/DirectorApi.md#list_directors) | **GET** /service/{service_id}/version/{version_id}/director | List directors
  *DirectorBackendApi* | [**create_director_backend**](docs/DirectorBackendApi.md#create_director_backend) | **POST** /service/{service_id}/version/{version_id}/director/{director_name}/backend/{backend_name} | Create a director-backend relationship
  *DirectorBackendApi* | [**delete_director_backend**](docs/DirectorBackendApi.md#delete_director_backend) | **DELETE** /service/{service_id}/version/{version_id}/director/{director_name}/backend/{backend_name} | Delete a director-backend relationship
  *DirectorBackendApi* | [**get_director_backend**](docs/DirectorBackendApi.md#get_director_backend) | **GET** /service/{service_id}/version/{version_id}/director/{director_name}/backend/{backend_name} | Get a director-backend relationship
  *DomainApi* | [**check_domain**](docs/DomainApi.md#check_domain) | **GET** /service/{service_id}/version/{version_id}/domain/{domain_name}/check | Validate DNS configuration for a single domain on a service
  *DomainApi* | [**check_domains**](docs/DomainApi.md#check_domains) | **GET** /service/{service_id}/version/{version_id}/domain/check_all | Validate DNS configuration for all domains on a service
  *DomainApi* | [**create_domain**](docs/DomainApi.md#create_domain) | **POST** /service/{service_id}/version/{version_id}/domain | Add a domain name to a service
  *DomainApi* | [**delete_domain**](docs/DomainApi.md#delete_domain) | **DELETE** /service/{service_id}/version/{version_id}/domain/{domain_name} | Remove a domain from a service
  *DomainApi* | [**get_domain**](docs/DomainApi.md#get_domain) | **GET** /service/{service_id}/version/{version_id}/domain/{domain_name} | Describe a domain
  *DomainApi* | [**list_domains**](docs/DomainApi.md#list_domains) | **GET** /service/{service_id}/version/{version_id}/domain | List domains
  *DomainApi* | [**update_domain**](docs/DomainApi.md#update_domain) | **PUT** /service/{service_id}/version/{version_id}/domain/{domain_name} | Update a domain
  *DomainOwnershipsApi* | [**list_domain_ownerships**](docs/DomainOwnershipsApi.md#list_domain_ownerships) | **GET** /domain-ownerships | List domain-ownerships
  *EnabledProductsApi* | [**disable_product**](docs/EnabledProductsApi.md#disable_product) | **DELETE** /enabled-products/{product_id}/services/{service_id} | Disable a product
  *EnabledProductsApi* | [**enable_product**](docs/EnabledProductsApi.md#enable_product) | **PUT** /enabled-products/{product_id}/services/{service_id} | Enable a product
  *EnabledProductsApi* | [**get_enabled_product**](docs/EnabledProductsApi.md#get_enabled_product) | **GET** /enabled-products/{product_id}/services/{service_id} | Get enabled product
  *EventsApi* | [**get_event**](docs/EventsApi.md#get_event) | **GET** /events/{event_id} | Get an event
  *EventsApi* | [**list_events**](docs/EventsApi.md#list_events) | **GET** /events | List events
  *GzipApi* | [**create_gzip_config**](docs/GzipApi.md#create_gzip_config) | **POST** /service/{service_id}/version/{version_id}/gzip | Create a gzip configuration
  *GzipApi* | [**delete_gzip_config**](docs/GzipApi.md#delete_gzip_config) | **DELETE** /service/{service_id}/version/{version_id}/gzip/{gzip_name} | Delete a gzip configuration
  *GzipApi* | [**get_gzip_configs**](docs/GzipApi.md#get_gzip_configs) | **GET** /service/{service_id}/version/{version_id}/gzip/{gzip_name} | Get a gzip configuration
  *GzipApi* | [**list_gzip_configs**](docs/GzipApi.md#list_gzip_configs) | **GET** /service/{service_id}/version/{version_id}/gzip | List gzip configurations
  *GzipApi* | [**update_gzip_config**](docs/GzipApi.md#update_gzip_config) | **PUT** /service/{service_id}/version/{version_id}/gzip/{gzip_name} | Update a gzip configuration
  *HeaderApi* | [**create_header_object**](docs/HeaderApi.md#create_header_object) | **POST** /service/{service_id}/version/{version_id}/header | Create a Header object
  *HeaderApi* | [**delete_header_object**](docs/HeaderApi.md#delete_header_object) | **DELETE** /service/{service_id}/version/{version_id}/header/{header_name} | Delete a Header object
  *HeaderApi* | [**get_header_object**](docs/HeaderApi.md#get_header_object) | **GET** /service/{service_id}/version/{version_id}/header/{header_name} | Get a Header object
  *HeaderApi* | [**list_header_objects**](docs/HeaderApi.md#list_header_objects) | **GET** /service/{service_id}/version/{version_id}/header | List Header objects
  *HeaderApi* | [**update_header_object**](docs/HeaderApi.md#update_header_object) | **PUT** /service/{service_id}/version/{version_id}/header/{header_name} | Update a Header object
  *HealthcheckApi* | [**create_healthcheck**](docs/HealthcheckApi.md#create_healthcheck) | **POST** /service/{service_id}/version/{version_id}/healthcheck | Create a health check
  *HealthcheckApi* | [**delete_healthcheck**](docs/HealthcheckApi.md#delete_healthcheck) | **DELETE** /service/{service_id}/version/{version_id}/healthcheck/{healthcheck_name} | Delete a health check
  *HealthcheckApi* | [**get_healthcheck**](docs/HealthcheckApi.md#get_healthcheck) | **GET** /service/{service_id}/version/{version_id}/healthcheck/{healthcheck_name} | Get a health check
  *HealthcheckApi* | [**list_healthchecks**](docs/HealthcheckApi.md#list_healthchecks) | **GET** /service/{service_id}/version/{version_id}/healthcheck | List health checks
  *HealthcheckApi* | [**update_healthcheck**](docs/HealthcheckApi.md#update_healthcheck) | **PUT** /service/{service_id}/version/{version_id}/healthcheck/{healthcheck_name} | Update a health check
  *HistoricalApi* | [**get_hist_stats**](docs/HistoricalApi.md#get_hist_stats) | **GET** /stats | Get historical stats
  *HistoricalApi* | [**get_hist_stats_aggregated**](docs/HistoricalApi.md#get_hist_stats_aggregated) | **GET** /stats/aggregate | Get aggregated historical stats
  *HistoricalApi* | [**get_hist_stats_field**](docs/HistoricalApi.md#get_hist_stats_field) | **GET** /stats/field/{field} | Get historical stats for a single field
  *HistoricalApi* | [**get_hist_stats_service**](docs/HistoricalApi.md#get_hist_stats_service) | **GET** /stats/service/{service_id} | Get historical stats for a single service
  *HistoricalApi* | [**get_hist_stats_service_field**](docs/HistoricalApi.md#get_hist_stats_service_field) | **GET** /stats/service/{service_id}/field/{field} | Get historical stats for a single service/field combination
  *HistoricalApi* | [**get_regions**](docs/HistoricalApi.md#get_regions) | **GET** /stats/regions | Get region codes
  *HistoricalApi* | [**get_usage**](docs/HistoricalApi.md#get_usage) | **GET** /stats/usage | Get usage statistics
  *HistoricalApi* | [**get_usage_month**](docs/HistoricalApi.md#get_usage_month) | **GET** /stats/usage_by_month | Get month-to-date usage statistics
  *HistoricalApi* | [**get_usage_service**](docs/HistoricalApi.md#get_usage_service) | **GET** /stats/usage_by_service | Get usage statistics per service
  *Http3Api* | [**create_http3**](docs/Http3Api.md#create_http3) | **POST** /service/{service_id}/version/{version_id}/http3 | Enable support for HTTP/3
  *Http3Api* | [**delete_http3**](docs/Http3Api.md#delete_http3) | **DELETE** /service/{service_id}/version/{version_id}/http3 | Disable support for HTTP/3
  *Http3Api* | [**get_http3**](docs/Http3Api.md#get_http3) | **GET** /service/{service_id}/version/{version_id}/http3 | Get HTTP/3 status
  *IamPermissionsApi* | [**list_permissions**](docs/IamPermissionsApi.md#list_permissions) | **GET** /permissions | List permissions
  *IamRolesApi* | [**delete_a_role**](docs/IamRolesApi.md#delete_a_role) | **DELETE** /roles/{role_id} | Delete a role
  *IamRolesApi* | [**get_a_role**](docs/IamRolesApi.md#get_a_role) | **GET** /roles/{role_id} | Get a role
  *IamRolesApi* | [**list_role_permissions**](docs/IamRolesApi.md#list_role_permissions) | **GET** /roles/{role_id}/permissions | List permissions in a role
  *IamRolesApi* | [**list_roles**](docs/IamRolesApi.md#list_roles) | **GET** /roles | List roles
  *IamServiceGroupsApi* | [**delete_a_service_group**](docs/IamServiceGroupsApi.md#delete_a_service_group) | **DELETE** /service-groups/{service_group_id} | Delete a service group
  *IamServiceGroupsApi* | [**get_a_service_group**](docs/IamServiceGroupsApi.md#get_a_service_group) | **GET** /service-groups/{service_group_id} | Get a service group
  *IamServiceGroupsApi* | [**list_service_group_services**](docs/IamServiceGroupsApi.md#list_service_group_services) | **GET** /service-groups/{service_group_id}/services | List services to a service group
  *IamServiceGroupsApi* | [**list_service_groups**](docs/IamServiceGroupsApi.md#list_service_groups) | **GET** /service-groups | List service groups
  *IamUserGroupsApi* | [**delete_a_user_group**](docs/IamUserGroupsApi.md#delete_a_user_group) | **DELETE** /user-groups/{user_group_id} | Delete a user group
  *IamUserGroupsApi* | [**get_a_user_group**](docs/IamUserGroupsApi.md#get_a_user_group) | **GET** /user-groups/{user_group_id} | Get a user group
  *IamUserGroupsApi* | [**list_user_group_members**](docs/IamUserGroupsApi.md#list_user_group_members) | **GET** /user-groups/{user_group_id}/members | List members of a user group
  *IamUserGroupsApi* | [**list_user_group_roles**](docs/IamUserGroupsApi.md#list_user_group_roles) | **GET** /user-groups/{user_group_id}/roles | List roles in a user group
  *IamUserGroupsApi* | [**list_user_group_service_groups**](docs/IamUserGroupsApi.md#list_user_group_service_groups) | **GET** /user-groups/{user_group_id}/service-groups | List service groups in a user group
  *IamUserGroupsApi* | [**list_user_groups**](docs/IamUserGroupsApi.md#list_user_groups) | **GET** /user-groups | List user groups
  *InvitationsApi* | [**create_invitation**](docs/InvitationsApi.md#create_invitation) | **POST** /invitations | Create an invitation
  *InvitationsApi* | [**delete_invitation**](docs/InvitationsApi.md#delete_invitation) | **DELETE** /invitations/{invitation_id} | Delete an invitation
  *InvitationsApi* | [**list_invitations**](docs/InvitationsApi.md#list_invitations) | **GET** /invitations | List invitations
  *LoggingAzureblobApi* | [**create_log_azure**](docs/LoggingAzureblobApi.md#create_log_azure) | **POST** /service/{service_id}/version/{version_id}/logging/azureblob | Create an Azure Blob Storage log endpoint
  *LoggingAzureblobApi* | [**delete_log_azure**](docs/LoggingAzureblobApi.md#delete_log_azure) | **DELETE** /service/{service_id}/version/{version_id}/logging/azureblob/{logging_azureblob_name} | Delete the Azure Blob Storage log endpoint
  *LoggingAzureblobApi* | [**get_log_azure**](docs/LoggingAzureblobApi.md#get_log_azure) | **GET** /service/{service_id}/version/{version_id}/logging/azureblob/{logging_azureblob_name} | Get an Azure Blob Storage log endpoint
  *LoggingAzureblobApi* | [**list_log_azure**](docs/LoggingAzureblobApi.md#list_log_azure) | **GET** /service/{service_id}/version/{version_id}/logging/azureblob | List Azure Blob Storage log endpoints
  *LoggingAzureblobApi* | [**update_log_azure**](docs/LoggingAzureblobApi.md#update_log_azure) | **PUT** /service/{service_id}/version/{version_id}/logging/azureblob/{logging_azureblob_name} | Update an Azure Blob Storage log endpoint
  *LoggingBigqueryApi* | [**create_log_bigquery**](docs/LoggingBigqueryApi.md#create_log_bigquery) | **POST** /service/{service_id}/version/{version_id}/logging/bigquery | Create a BigQuery log endpoint
  *LoggingBigqueryApi* | [**delete_log_bigquery**](docs/LoggingBigqueryApi.md#delete_log_bigquery) | **DELETE** /service/{service_id}/version/{version_id}/logging/bigquery/{logging_bigquery_name} | Delete a BigQuery log endpoint
  *LoggingBigqueryApi* | [**get_log_bigquery**](docs/LoggingBigqueryApi.md#get_log_bigquery) | **GET** /service/{service_id}/version/{version_id}/logging/bigquery/{logging_bigquery_name} | Get a BigQuery log endpoint
  *LoggingBigqueryApi* | [**list_log_bigquery**](docs/LoggingBigqueryApi.md#list_log_bigquery) | **GET** /service/{service_id}/version/{version_id}/logging/bigquery | List BigQuery log endpoints
  *LoggingBigqueryApi* | [**update_log_bigquery**](docs/LoggingBigqueryApi.md#update_log_bigquery) | **PUT** /service/{service_id}/version/{version_id}/logging/bigquery/{logging_bigquery_name} | Update a BigQuery log endpoint
  *LoggingCloudfilesApi* | [**create_log_cloudfiles**](docs/LoggingCloudfilesApi.md#create_log_cloudfiles) | **POST** /service/{service_id}/version/{version_id}/logging/cloudfiles | Create a Cloud Files log endpoint
  *LoggingCloudfilesApi* | [**delete_log_cloudfiles**](docs/LoggingCloudfilesApi.md#delete_log_cloudfiles) | **DELETE** /service/{service_id}/version/{version_id}/logging/cloudfiles/{logging_cloudfiles_name} | Delete the Cloud Files log endpoint
  *LoggingCloudfilesApi* | [**get_log_cloudfiles**](docs/LoggingCloudfilesApi.md#get_log_cloudfiles) | **GET** /service/{service_id}/version/{version_id}/logging/cloudfiles/{logging_cloudfiles_name} | Get a Cloud Files log endpoint
  *LoggingCloudfilesApi* | [**list_log_cloudfiles**](docs/LoggingCloudfilesApi.md#list_log_cloudfiles) | **GET** /service/{service_id}/version/{version_id}/logging/cloudfiles | List Cloud Files log endpoints
  *LoggingCloudfilesApi* | [**update_log_cloudfiles**](docs/LoggingCloudfilesApi.md#update_log_cloudfiles) | **PUT** /service/{service_id}/version/{version_id}/logging/cloudfiles/{logging_cloudfiles_name} | Update the Cloud Files log endpoint
  *LoggingDatadogApi* | [**create_log_datadog**](docs/LoggingDatadogApi.md#create_log_datadog) | **POST** /service/{service_id}/version/{version_id}/logging/datadog | Create a Datadog log endpoint
  *LoggingDatadogApi* | [**delete_log_datadog**](docs/LoggingDatadogApi.md#delete_log_datadog) | **DELETE** /service/{service_id}/version/{version_id}/logging/datadog/{logging_datadog_name} | Delete a Datadog log endpoint
  *LoggingDatadogApi* | [**get_log_datadog**](docs/LoggingDatadogApi.md#get_log_datadog) | **GET** /service/{service_id}/version/{version_id}/logging/datadog/{logging_datadog_name} | Get a Datadog log endpoint
  *LoggingDatadogApi* | [**list_log_datadog**](docs/LoggingDatadogApi.md#list_log_datadog) | **GET** /service/{service_id}/version/{version_id}/logging/datadog | List Datadog log endpoints
  *LoggingDatadogApi* | [**update_log_datadog**](docs/LoggingDatadogApi.md#update_log_datadog) | **PUT** /service/{service_id}/version/{version_id}/logging/datadog/{logging_datadog_name} | Update a Datadog log endpoint
  *LoggingDigitaloceanApi* | [**create_log_digocean**](docs/LoggingDigitaloceanApi.md#create_log_digocean) | **POST** /service/{service_id}/version/{version_id}/logging/digitalocean | Create a DigitalOcean Spaces log endpoint
  *LoggingDigitaloceanApi* | [**delete_log_digocean**](docs/LoggingDigitaloceanApi.md#delete_log_digocean) | **DELETE** /service/{service_id}/version/{version_id}/logging/digitalocean/{logging_digitalocean_name} | Delete a DigitalOcean Spaces log endpoint
  *LoggingDigitaloceanApi* | [**get_log_digocean**](docs/LoggingDigitaloceanApi.md#get_log_digocean) | **GET** /service/{service_id}/version/{version_id}/logging/digitalocean/{logging_digitalocean_name} | Get a DigitalOcean Spaces log endpoint
  *LoggingDigitaloceanApi* | [**list_log_digocean**](docs/LoggingDigitaloceanApi.md#list_log_digocean) | **GET** /service/{service_id}/version/{version_id}/logging/digitalocean | List DigitalOcean Spaces log endpoints
  *LoggingDigitaloceanApi* | [**update_log_digocean**](docs/LoggingDigitaloceanApi.md#update_log_digocean) | **PUT** /service/{service_id}/version/{version_id}/logging/digitalocean/{logging_digitalocean_name} | Update a DigitalOcean Spaces log endpoint
  *LoggingElasticsearchApi* | [**create_log_elasticsearch**](docs/LoggingElasticsearchApi.md#create_log_elasticsearch) | **POST** /service/{service_id}/version/{version_id}/logging/elasticsearch | Create an Elasticsearch log endpoint
  *LoggingElasticsearchApi* | [**delete_log_elasticsearch**](docs/LoggingElasticsearchApi.md#delete_log_elasticsearch) | **DELETE** /service/{service_id}/version/{version_id}/logging/elasticsearch/{logging_elasticsearch_name} | Delete an Elasticsearch log endpoint
  *LoggingElasticsearchApi* | [**get_log_elasticsearch**](docs/LoggingElasticsearchApi.md#get_log_elasticsearch) | **GET** /service/{service_id}/version/{version_id}/logging/elasticsearch/{logging_elasticsearch_name} | Get an Elasticsearch log endpoint
  *LoggingElasticsearchApi* | [**list_log_elasticsearch**](docs/LoggingElasticsearchApi.md#list_log_elasticsearch) | **GET** /service/{service_id}/version/{version_id}/logging/elasticsearch | List Elasticsearch log endpoints
  *LoggingElasticsearchApi* | [**update_log_elasticsearch**](docs/LoggingElasticsearchApi.md#update_log_elasticsearch) | **PUT** /service/{service_id}/version/{version_id}/logging/elasticsearch/{logging_elasticsearch_name} | Update an Elasticsearch log endpoint
  *LoggingFtpApi* | [**create_log_ftp**](docs/LoggingFtpApi.md#create_log_ftp) | **POST** /service/{service_id}/version/{version_id}/logging/ftp | Create an FTP log endpoint
  *LoggingFtpApi* | [**delete_log_ftp**](docs/LoggingFtpApi.md#delete_log_ftp) | **DELETE** /service/{service_id}/version/{version_id}/logging/ftp/{logging_ftp_name} | Delete an FTP log endpoint
  *LoggingFtpApi* | [**get_log_ftp**](docs/LoggingFtpApi.md#get_log_ftp) | **GET** /service/{service_id}/version/{version_id}/logging/ftp/{logging_ftp_name} | Get an FTP log endpoint
  *LoggingFtpApi* | [**list_log_ftp**](docs/LoggingFtpApi.md#list_log_ftp) | **GET** /service/{service_id}/version/{version_id}/logging/ftp | List FTP log endpoints
  *LoggingFtpApi* | [**update_log_ftp**](docs/LoggingFtpApi.md#update_log_ftp) | **PUT** /service/{service_id}/version/{version_id}/logging/ftp/{logging_ftp_name} | Update an FTP log endpoint
  *LoggingGcsApi* | [**create_log_gcs**](docs/LoggingGcsApi.md#create_log_gcs) | **POST** /service/{service_id}/version/{version_id}/logging/gcs | Create a GCS log endpoint
  *LoggingGcsApi* | [**delete_log_gcs**](docs/LoggingGcsApi.md#delete_log_gcs) | **DELETE** /service/{service_id}/version/{version_id}/logging/gcs/{logging_gcs_name} | Delete a GCS log endpoint
  *LoggingGcsApi* | [**get_log_gcs**](docs/LoggingGcsApi.md#get_log_gcs) | **GET** /service/{service_id}/version/{version_id}/logging/gcs/{logging_gcs_name} | Get a GCS log endpoint
  *LoggingGcsApi* | [**list_log_gcs**](docs/LoggingGcsApi.md#list_log_gcs) | **GET** /service/{service_id}/version/{version_id}/logging/gcs | List GCS log endpoints
  *LoggingGcsApi* | [**update_log_gcs**](docs/LoggingGcsApi.md#update_log_gcs) | **PUT** /service/{service_id}/version/{version_id}/logging/gcs/{logging_gcs_name} | Update a GCS log endpoint
  *LoggingHerokuApi* | [**create_log_heroku**](docs/LoggingHerokuApi.md#create_log_heroku) | **POST** /service/{service_id}/version/{version_id}/logging/heroku | Create a Heroku log endpoint
  *LoggingHerokuApi* | [**delete_log_heroku**](docs/LoggingHerokuApi.md#delete_log_heroku) | **DELETE** /service/{service_id}/version/{version_id}/logging/heroku/{logging_heroku_name} | Delete the Heroku log endpoint
  *LoggingHerokuApi* | [**get_log_heroku**](docs/LoggingHerokuApi.md#get_log_heroku) | **GET** /service/{service_id}/version/{version_id}/logging/heroku/{logging_heroku_name} | Get a Heroku log endpoint
  *LoggingHerokuApi* | [**list_log_heroku**](docs/LoggingHerokuApi.md#list_log_heroku) | **GET** /service/{service_id}/version/{version_id}/logging/heroku | List Heroku log endpoints
  *LoggingHerokuApi* | [**update_log_heroku**](docs/LoggingHerokuApi.md#update_log_heroku) | **PUT** /service/{service_id}/version/{version_id}/logging/heroku/{logging_heroku_name} | Update the Heroku log endpoint
  *LoggingHoneycombApi* | [**create_log_honeycomb**](docs/LoggingHoneycombApi.md#create_log_honeycomb) | **POST** /service/{service_id}/version/{version_id}/logging/honeycomb | Create a Honeycomb log endpoint
  *LoggingHoneycombApi* | [**delete_log_honeycomb**](docs/LoggingHoneycombApi.md#delete_log_honeycomb) | **DELETE** /service/{service_id}/version/{version_id}/logging/honeycomb/{logging_honeycomb_name} | Delete the Honeycomb log endpoint
  *LoggingHoneycombApi* | [**get_log_honeycomb**](docs/LoggingHoneycombApi.md#get_log_honeycomb) | **GET** /service/{service_id}/version/{version_id}/logging/honeycomb/{logging_honeycomb_name} | Get a Honeycomb log endpoint
  *LoggingHoneycombApi* | [**list_log_honeycomb**](docs/LoggingHoneycombApi.md#list_log_honeycomb) | **GET** /service/{service_id}/version/{version_id}/logging/honeycomb | List Honeycomb log endpoints
  *LoggingHoneycombApi* | [**update_log_honeycomb**](docs/LoggingHoneycombApi.md#update_log_honeycomb) | **PUT** /service/{service_id}/version/{version_id}/logging/honeycomb/{logging_honeycomb_name} | Update a Honeycomb log endpoint
  *LoggingHttpsApi* | [**create_log_https**](docs/LoggingHttpsApi.md#create_log_https) | **POST** /service/{service_id}/version/{version_id}/logging/https | Create an HTTPS log endpoint
  *LoggingHttpsApi* | [**delete_log_https**](docs/LoggingHttpsApi.md#delete_log_https) | **DELETE** /service/{service_id}/version/{version_id}/logging/https/{logging_https_name} | Delete an HTTPS log endpoint
  *LoggingHttpsApi* | [**get_log_https**](docs/LoggingHttpsApi.md#get_log_https) | **GET** /service/{service_id}/version/{version_id}/logging/https/{logging_https_name} | Get an HTTPS log endpoint
  *LoggingHttpsApi* | [**list_log_https**](docs/LoggingHttpsApi.md#list_log_https) | **GET** /service/{service_id}/version/{version_id}/logging/https | List HTTPS log endpoints
  *LoggingHttpsApi* | [**update_log_https**](docs/LoggingHttpsApi.md#update_log_https) | **PUT** /service/{service_id}/version/{version_id}/logging/https/{logging_https_name} | Update an HTTPS log endpoint
  *LoggingKafkaApi* | [**create_log_kafka**](docs/LoggingKafkaApi.md#create_log_kafka) | **POST** /service/{service_id}/version/{version_id}/logging/kafka | Create a Kafka log endpoint
  *LoggingKafkaApi* | [**delete_log_kafka**](docs/LoggingKafkaApi.md#delete_log_kafka) | **DELETE** /service/{service_id}/version/{version_id}/logging/kafka/{logging_kafka_name} | Delete the Kafka log endpoint
  *LoggingKafkaApi* | [**get_log_kafka**](docs/LoggingKafkaApi.md#get_log_kafka) | **GET** /service/{service_id}/version/{version_id}/logging/kafka/{logging_kafka_name} | Get a Kafka log endpoint
  *LoggingKafkaApi* | [**list_log_kafka**](docs/LoggingKafkaApi.md#list_log_kafka) | **GET** /service/{service_id}/version/{version_id}/logging/kafka | List Kafka log endpoints
  *LoggingKinesisApi* | [**create_log_kinesis**](docs/LoggingKinesisApi.md#create_log_kinesis) | **POST** /service/{service_id}/version/{version_id}/logging/kinesis | Create  an Amazon Kinesis log endpoint
  *LoggingKinesisApi* | [**delete_log_kinesis**](docs/LoggingKinesisApi.md#delete_log_kinesis) | **DELETE** /service/{service_id}/version/{version_id}/logging/kinesis/{logging_kinesis_name} | Delete the Amazon Kinesis log endpoint
  *LoggingKinesisApi* | [**get_log_kinesis**](docs/LoggingKinesisApi.md#get_log_kinesis) | **GET** /service/{service_id}/version/{version_id}/logging/kinesis/{logging_kinesis_name} | Get an Amazon Kinesis log endpoint
  *LoggingKinesisApi* | [**list_log_kinesis**](docs/LoggingKinesisApi.md#list_log_kinesis) | **GET** /service/{service_id}/version/{version_id}/logging/kinesis | List Amazon Kinesis log endpoints
  *LoggingLogentriesApi* | [**create_log_logentries**](docs/LoggingLogentriesApi.md#create_log_logentries) | **POST** /service/{service_id}/version/{version_id}/logging/logentries | Create a Logentries log endpoint
  *LoggingLogentriesApi* | [**delete_log_logentries**](docs/LoggingLogentriesApi.md#delete_log_logentries) | **DELETE** /service/{service_id}/version/{version_id}/logging/logentries/{logging_logentries_name} | Delete a Logentries log endpoint
  *LoggingLogentriesApi* | [**get_log_logentries**](docs/LoggingLogentriesApi.md#get_log_logentries) | **GET** /service/{service_id}/version/{version_id}/logging/logentries/{logging_logentries_name} | Get a Logentries log endpoint
  *LoggingLogentriesApi* | [**list_log_logentries**](docs/LoggingLogentriesApi.md#list_log_logentries) | **GET** /service/{service_id}/version/{version_id}/logging/logentries | List Logentries log endpoints
  *LoggingLogentriesApi* | [**update_log_logentries**](docs/LoggingLogentriesApi.md#update_log_logentries) | **PUT** /service/{service_id}/version/{version_id}/logging/logentries/{logging_logentries_name} | Update a Logentries log endpoint
  *LoggingLogglyApi* | [**create_log_loggly**](docs/LoggingLogglyApi.md#create_log_loggly) | **POST** /service/{service_id}/version/{version_id}/logging/loggly | Create a Loggly log endpoint
  *LoggingLogglyApi* | [**delete_log_loggly**](docs/LoggingLogglyApi.md#delete_log_loggly) | **DELETE** /service/{service_id}/version/{version_id}/logging/loggly/{logging_loggly_name} | Delete a Loggly log endpoint
  *LoggingLogglyApi* | [**get_log_loggly**](docs/LoggingLogglyApi.md#get_log_loggly) | **GET** /service/{service_id}/version/{version_id}/logging/loggly/{logging_loggly_name} | Get a Loggly log endpoint
  *LoggingLogglyApi* | [**list_log_loggly**](docs/LoggingLogglyApi.md#list_log_loggly) | **GET** /service/{service_id}/version/{version_id}/logging/loggly | List Loggly log endpoints
  *LoggingLogglyApi* | [**update_log_loggly**](docs/LoggingLogglyApi.md#update_log_loggly) | **PUT** /service/{service_id}/version/{version_id}/logging/loggly/{logging_loggly_name} | Update a Loggly log endpoint
  *LoggingLogshuttleApi* | [**create_log_logshuttle**](docs/LoggingLogshuttleApi.md#create_log_logshuttle) | **POST** /service/{service_id}/version/{version_id}/logging/logshuttle | Create a Log Shuttle log endpoint
  *LoggingLogshuttleApi* | [**delete_log_logshuttle**](docs/LoggingLogshuttleApi.md#delete_log_logshuttle) | **DELETE** /service/{service_id}/version/{version_id}/logging/logshuttle/{logging_logshuttle_name} | Delete a Log Shuttle log endpoint
  *LoggingLogshuttleApi* | [**get_log_logshuttle**](docs/LoggingLogshuttleApi.md#get_log_logshuttle) | **GET** /service/{service_id}/version/{version_id}/logging/logshuttle/{logging_logshuttle_name} | Get a Log Shuttle log endpoint
  *LoggingLogshuttleApi* | [**list_log_logshuttle**](docs/LoggingLogshuttleApi.md#list_log_logshuttle) | **GET** /service/{service_id}/version/{version_id}/logging/logshuttle | List Log Shuttle log endpoints
  *LoggingLogshuttleApi* | [**update_log_logshuttle**](docs/LoggingLogshuttleApi.md#update_log_logshuttle) | **PUT** /service/{service_id}/version/{version_id}/logging/logshuttle/{logging_logshuttle_name} | Update a Log Shuttle log endpoint
  *LoggingNewrelicApi* | [**create_log_newrelic**](docs/LoggingNewrelicApi.md#create_log_newrelic) | **POST** /service/{service_id}/version/{version_id}/logging/newrelic | Create a New Relic log endpoint
  *LoggingNewrelicApi* | [**delete_log_newrelic**](docs/LoggingNewrelicApi.md#delete_log_newrelic) | **DELETE** /service/{service_id}/version/{version_id}/logging/newrelic/{logging_newrelic_name} | Delete a New Relic log endpoint
  *LoggingNewrelicApi* | [**get_log_newrelic**](docs/LoggingNewrelicApi.md#get_log_newrelic) | **GET** /service/{service_id}/version/{version_id}/logging/newrelic/{logging_newrelic_name} | Get a New Relic log endpoint
  *LoggingNewrelicApi* | [**list_log_newrelic**](docs/LoggingNewrelicApi.md#list_log_newrelic) | **GET** /service/{service_id}/version/{version_id}/logging/newrelic | List New Relic log endpoints
  *LoggingNewrelicApi* | [**update_log_newrelic**](docs/LoggingNewrelicApi.md#update_log_newrelic) | **PUT** /service/{service_id}/version/{version_id}/logging/newrelic/{logging_newrelic_name} | Update a New Relic log endpoint
  *LoggingOpenstackApi* | [**create_log_openstack**](docs/LoggingOpenstackApi.md#create_log_openstack) | **POST** /service/{service_id}/version/{version_id}/logging/openstack | Create an OpenStack log endpoint
  *LoggingOpenstackApi* | [**delete_log_openstack**](docs/LoggingOpenstackApi.md#delete_log_openstack) | **DELETE** /service/{service_id}/version/{version_id}/logging/openstack/{logging_openstack_name} | Delete an OpenStack log endpoint
  *LoggingOpenstackApi* | [**get_log_openstack**](docs/LoggingOpenstackApi.md#get_log_openstack) | **GET** /service/{service_id}/version/{version_id}/logging/openstack/{logging_openstack_name} | Get an OpenStack log endpoint
  *LoggingOpenstackApi* | [**list_log_openstack**](docs/LoggingOpenstackApi.md#list_log_openstack) | **GET** /service/{service_id}/version/{version_id}/logging/openstack | List OpenStack log endpoints
  *LoggingOpenstackApi* | [**update_log_openstack**](docs/LoggingOpenstackApi.md#update_log_openstack) | **PUT** /service/{service_id}/version/{version_id}/logging/openstack/{logging_openstack_name} | Update an OpenStack log endpoint
  *LoggingPapertrailApi* | [**create_log_papertrail**](docs/LoggingPapertrailApi.md#create_log_papertrail) | **POST** /service/{service_id}/version/{version_id}/logging/papertrail | Create a Papertrail log endpoint
  *LoggingPapertrailApi* | [**delete_log_papertrail**](docs/LoggingPapertrailApi.md#delete_log_papertrail) | **DELETE** /service/{service_id}/version/{version_id}/logging/papertrail/{logging_papertrail_name} | Delete a Papertrail log endpoint
  *LoggingPapertrailApi* | [**get_log_papertrail**](docs/LoggingPapertrailApi.md#get_log_papertrail) | **GET** /service/{service_id}/version/{version_id}/logging/papertrail/{logging_papertrail_name} | Get a Papertrail log endpoint
  *LoggingPapertrailApi* | [**list_log_papertrail**](docs/LoggingPapertrailApi.md#list_log_papertrail) | **GET** /service/{service_id}/version/{version_id}/logging/papertrail | List Papertrail log endpoints
  *LoggingPapertrailApi* | [**update_log_papertrail**](docs/LoggingPapertrailApi.md#update_log_papertrail) | **PUT** /service/{service_id}/version/{version_id}/logging/papertrail/{logging_papertrail_name} | Update a Papertrail log endpoint
  *LoggingPubsubApi* | [**create_log_gcp_pubsub**](docs/LoggingPubsubApi.md#create_log_gcp_pubsub) | **POST** /service/{service_id}/version/{version_id}/logging/pubsub | Create a GCP Cloud Pub/Sub log endpoint
  *LoggingPubsubApi* | [**delete_log_gcp_pubsub**](docs/LoggingPubsubApi.md#delete_log_gcp_pubsub) | **DELETE** /service/{service_id}/version/{version_id}/logging/pubsub/{logging_google_pubsub_name} | Delete a GCP Cloud Pub/Sub log endpoint
  *LoggingPubsubApi* | [**get_log_gcp_pubsub**](docs/LoggingPubsubApi.md#get_log_gcp_pubsub) | **GET** /service/{service_id}/version/{version_id}/logging/pubsub/{logging_google_pubsub_name} | Get a GCP Cloud Pub/Sub log endpoint
  *LoggingPubsubApi* | [**list_log_gcp_pubsub**](docs/LoggingPubsubApi.md#list_log_gcp_pubsub) | **GET** /service/{service_id}/version/{version_id}/logging/pubsub | List GCP Cloud Pub/Sub log endpoints
  *LoggingPubsubApi* | [**update_log_gcp_pubsub**](docs/LoggingPubsubApi.md#update_log_gcp_pubsub) | **PUT** /service/{service_id}/version/{version_id}/logging/pubsub/{logging_google_pubsub_name} | Update a GCP Cloud Pub/Sub log endpoint
  *LoggingS3Api* | [**create_log_aws_s3**](docs/LoggingS3Api.md#create_log_aws_s3) | **POST** /service/{service_id}/version/{version_id}/logging/s3 | Create an AWS S3 log endpoint
  *LoggingS3Api* | [**delete_log_aws_s3**](docs/LoggingS3Api.md#delete_log_aws_s3) | **DELETE** /service/{service_id}/version/{version_id}/logging/s3/{logging_s3_name} | Delete an AWS S3 log endpoint
  *LoggingS3Api* | [**get_log_aws_s3**](docs/LoggingS3Api.md#get_log_aws_s3) | **GET** /service/{service_id}/version/{version_id}/logging/s3/{logging_s3_name} | Get an AWS S3 log endpoint
  *LoggingS3Api* | [**list_log_aws_s3**](docs/LoggingS3Api.md#list_log_aws_s3) | **GET** /service/{service_id}/version/{version_id}/logging/s3 | List AWS S3 log endpoints
  *LoggingS3Api* | [**update_log_aws_s3**](docs/LoggingS3Api.md#update_log_aws_s3) | **PUT** /service/{service_id}/version/{version_id}/logging/s3/{logging_s3_name} | Update an AWS S3 log endpoint
  *LoggingScalyrApi* | [**create_log_scalyr**](docs/LoggingScalyrApi.md#create_log_scalyr) | **POST** /service/{service_id}/version/{version_id}/logging/scalyr | Create a Scalyr log endpoint
  *LoggingScalyrApi* | [**delete_log_scalyr**](docs/LoggingScalyrApi.md#delete_log_scalyr) | **DELETE** /service/{service_id}/version/{version_id}/logging/scalyr/{logging_scalyr_name} | Delete the Scalyr log endpoint
  *LoggingScalyrApi* | [**get_log_scalyr**](docs/LoggingScalyrApi.md#get_log_scalyr) | **GET** /service/{service_id}/version/{version_id}/logging/scalyr/{logging_scalyr_name} | Get a Scalyr log endpoint
  *LoggingScalyrApi* | [**list_log_scalyr**](docs/LoggingScalyrApi.md#list_log_scalyr) | **GET** /service/{service_id}/version/{version_id}/logging/scalyr | List Scalyr log endpoints
  *LoggingScalyrApi* | [**update_log_scalyr**](docs/LoggingScalyrApi.md#update_log_scalyr) | **PUT** /service/{service_id}/version/{version_id}/logging/scalyr/{logging_scalyr_name} | Update the Scalyr log endpoint
  *LoggingSftpApi* | [**create_log_sftp**](docs/LoggingSftpApi.md#create_log_sftp) | **POST** /service/{service_id}/version/{version_id}/logging/sftp | Create an SFTP log endpoint
  *LoggingSftpApi* | [**delete_log_sftp**](docs/LoggingSftpApi.md#delete_log_sftp) | **DELETE** /service/{service_id}/version/{version_id}/logging/sftp/{logging_sftp_name} | Delete an SFTP log endpoint
  *LoggingSftpApi* | [**get_log_sftp**](docs/LoggingSftpApi.md#get_log_sftp) | **GET** /service/{service_id}/version/{version_id}/logging/sftp/{logging_sftp_name} | Get an SFTP log endpoint
  *LoggingSftpApi* | [**list_log_sftp**](docs/LoggingSftpApi.md#list_log_sftp) | **GET** /service/{service_id}/version/{version_id}/logging/sftp | List SFTP log endpoints
  *LoggingSftpApi* | [**update_log_sftp**](docs/LoggingSftpApi.md#update_log_sftp) | **PUT** /service/{service_id}/version/{version_id}/logging/sftp/{logging_sftp_name} | Update an SFTP log endpoint
  *LoggingSplunkApi* | [**create_log_splunk**](docs/LoggingSplunkApi.md#create_log_splunk) | **POST** /service/{service_id}/version/{version_id}/logging/splunk | Create a Splunk log endpoint
  *LoggingSplunkApi* | [**delete_log_splunk**](docs/LoggingSplunkApi.md#delete_log_splunk) | **DELETE** /service/{service_id}/version/{version_id}/logging/splunk/{logging_splunk_name} | Delete a Splunk log endpoint
  *LoggingSplunkApi* | [**get_log_splunk**](docs/LoggingSplunkApi.md#get_log_splunk) | **GET** /service/{service_id}/version/{version_id}/logging/splunk/{logging_splunk_name} | Get a Splunk log endpoint
  *LoggingSplunkApi* | [**list_log_splunk**](docs/LoggingSplunkApi.md#list_log_splunk) | **GET** /service/{service_id}/version/{version_id}/logging/splunk | List Splunk log endpoints
  *LoggingSplunkApi* | [**update_log_splunk**](docs/LoggingSplunkApi.md#update_log_splunk) | **PUT** /service/{service_id}/version/{version_id}/logging/splunk/{logging_splunk_name} | Update a Splunk log endpoint
  *LoggingSumologicApi* | [**create_log_sumologic**](docs/LoggingSumologicApi.md#create_log_sumologic) | **POST** /service/{service_id}/version/{version_id}/logging/sumologic | Create a Sumologic log endpoint
  *LoggingSumologicApi* | [**delete_log_sumologic**](docs/LoggingSumologicApi.md#delete_log_sumologic) | **DELETE** /service/{service_id}/version/{version_id}/logging/sumologic/{logging_sumologic_name} | Delete a Sumologic log endpoint
  *LoggingSumologicApi* | [**get_log_sumologic**](docs/LoggingSumologicApi.md#get_log_sumologic) | **GET** /service/{service_id}/version/{version_id}/logging/sumologic/{logging_sumologic_name} | Get a Sumologic log endpoint
  *LoggingSumologicApi* | [**list_log_sumologic**](docs/LoggingSumologicApi.md#list_log_sumologic) | **GET** /service/{service_id}/version/{version_id}/logging/sumologic | List Sumologic log endpoints
  *LoggingSumologicApi* | [**update_log_sumologic**](docs/LoggingSumologicApi.md#update_log_sumologic) | **PUT** /service/{service_id}/version/{version_id}/logging/sumologic/{logging_sumologic_name} | Update a Sumologic log endpoint
  *LoggingSyslogApi* | [**create_log_syslog**](docs/LoggingSyslogApi.md#create_log_syslog) | **POST** /service/{service_id}/version/{version_id}/logging/syslog | Create a syslog log endpoint
  *LoggingSyslogApi* | [**delete_log_syslog**](docs/LoggingSyslogApi.md#delete_log_syslog) | **DELETE** /service/{service_id}/version/{version_id}/logging/syslog/{logging_syslog_name} | Delete a syslog log endpoint
  *LoggingSyslogApi* | [**get_log_syslog**](docs/LoggingSyslogApi.md#get_log_syslog) | **GET** /service/{service_id}/version/{version_id}/logging/syslog/{logging_syslog_name} | Get a syslog log endpoint
  *LoggingSyslogApi* | [**list_log_syslog**](docs/LoggingSyslogApi.md#list_log_syslog) | **GET** /service/{service_id}/version/{version_id}/logging/syslog | List Syslog log endpoints
  *LoggingSyslogApi* | [**update_log_syslog**](docs/LoggingSyslogApi.md#update_log_syslog) | **PUT** /service/{service_id}/version/{version_id}/logging/syslog/{logging_syslog_name} | Update a syslog log endpoint
  *MutualAuthenticationApi* | [**create_mutual_tls_authentication**](docs/MutualAuthenticationApi.md#create_mutual_tls_authentication) | **POST** /tls/mutual_authentications | Create a Mutual Authentication
  *MutualAuthenticationApi* | [**delete_mutual_tls**](docs/MutualAuthenticationApi.md#delete_mutual_tls) | **DELETE** /tls/mutual_authentications/{mutual_authentication_id} | Delete a Mutual TLS
  *MutualAuthenticationApi* | [**get_mutual_authentication**](docs/MutualAuthenticationApi.md#get_mutual_authentication) | **GET** /tls/mutual_authentications/{mutual_authentication_id} | Get a Mutual Authentication
  *MutualAuthenticationApi* | [**list_mutual_authentications**](docs/MutualAuthenticationApi.md#list_mutual_authentications) | **GET** /tls/mutual_authentications | List Mutual Authentications
  *MutualAuthenticationApi* | [**patch_mutual_authentication**](docs/MutualAuthenticationApi.md#patch_mutual_authentication) | **PATCH** /tls/mutual_authentications/{mutual_authentication_id} | Update a Mutual Authentication
  *ObjectStoreApi* | [**create_store**](docs/ObjectStoreApi.md#create_store) | **POST** /resources/stores/object | Create an object store.
  *ObjectStoreApi* | [**delete_store**](docs/ObjectStoreApi.md#delete_store) | **DELETE** /resources/stores/object/{store_id} | Delete an object store.
  *ObjectStoreApi* | [**get_store**](docs/ObjectStoreApi.md#get_store) | **GET** /resources/stores/object/{store_id} | Describe an object store.
  *ObjectStoreApi* | [**get_stores**](docs/ObjectStoreApi.md#get_stores) | **GET** /resources/stores/object | List object stores.
  *ObjectStoreItemApi* | [**delete_key_from_store**](docs/ObjectStoreItemApi.md#delete_key_from_store) | **DELETE** /resources/stores/object/{store_id}/keys/{key_name} | Delete object store item.
  *ObjectStoreItemApi* | [**get_keys**](docs/ObjectStoreItemApi.md#get_keys) | **GET** /resources/stores/object/{store_id}/keys | List object store keys.
  *ObjectStoreItemApi* | [**get_value_for_key**](docs/ObjectStoreItemApi.md#get_value_for_key) | **GET** /resources/stores/object/{store_id}/keys/{key_name} | Get the value of an object store item
  *ObjectStoreItemApi* | [**set_value_for_key**](docs/ObjectStoreItemApi.md#set_value_for_key) | **PUT** /resources/stores/object/{store_id}/keys/{key_name} | Insert an item into an object store
  *PackageApi* | [**get_package**](docs/PackageApi.md#get_package) | **GET** /service/{service_id}/version/{version_id}/package | Get details of the service&#39;s Compute@Edge package.
  *PackageApi* | [**put_package**](docs/PackageApi.md#put_package) | **PUT** /service/{service_id}/version/{version_id}/package | Upload a Compute@Edge package.
  *PoolApi* | [**create_server_pool**](docs/PoolApi.md#create_server_pool) | **POST** /service/{service_id}/version/{version_id}/pool | Create a server pool
  *PoolApi* | [**delete_server_pool**](docs/PoolApi.md#delete_server_pool) | **DELETE** /service/{service_id}/version/{version_id}/pool/{pool_name} | Delete a server pool
  *PoolApi* | [**get_server_pool**](docs/PoolApi.md#get_server_pool) | **GET** /service/{service_id}/version/{version_id}/pool/{pool_name} | Get a server pool
  *PoolApi* | [**list_server_pools**](docs/PoolApi.md#list_server_pools) | **GET** /service/{service_id}/version/{version_id}/pool | List server pools
  *PoolApi* | [**update_server_pool**](docs/PoolApi.md#update_server_pool) | **PUT** /service/{service_id}/version/{version_id}/pool/{pool_name} | Update a server pool
  *PopApi* | [**list_pops**](docs/PopApi.md#list_pops) | **GET** /datacenters | List Fastly POPs
  *PublicIpListApi* | [**list_fastly_ips**](docs/PublicIpListApi.md#list_fastly_ips) | **GET** /public-ip-list | List Fastly&#39;s public IPs
  *PublishApi* | [**publish**](docs/PublishApi.md#publish) | **POST** /service/{service_id}/publish/ | Send messages to Fanout subscribers
  *PurgeApi* | [**purge_all**](docs/PurgeApi.md#purge_all) | **POST** /service/{service_id}/purge_all | Purge everything from a service
  *PurgeApi* | [**purge_single_url**](docs/PurgeApi.md#purge_single_url) | **POST** /purge/{cached_url} | Purge a URL
  *PurgeApi* | [**purge_tag**](docs/PurgeApi.md#purge_tag) | **POST** /service/{service_id}/purge/{surrogate_key} | Purge by surrogate key tag
  *RateLimiterApi* | [**delete_rate_limiter**](docs/RateLimiterApi.md#delete_rate_limiter) | **DELETE** /rate-limiters/{rate_limiter_id} | Delete a rate limiter
  *RateLimiterApi* | [**get_rate_limiter**](docs/RateLimiterApi.md#get_rate_limiter) | **GET** /rate-limiters/{rate_limiter_id} | Get a rate limiter
  *RateLimiterApi* | [**list_rate_limiters**](docs/RateLimiterApi.md#list_rate_limiters) | **GET** /service/{service_id}/version/{version_id}/rate-limiters | List rate limiters
  *RealtimeApi* | [**get_stats_last120_seconds**](docs/RealtimeApi.md#get_stats_last120_seconds) | **GET** /v1/channel/{service_id}/ts/h | Get real-time data for the last 120 seconds
  *RealtimeApi* | [**get_stats_last120_seconds_limit_entries**](docs/RealtimeApi.md#get_stats_last120_seconds_limit_entries) | **GET** /v1/channel/{service_id}/ts/h/limit/{max_entries} | Get a limited number of real-time data entries
  *RealtimeApi* | [**get_stats_last_second**](docs/RealtimeApi.md#get_stats_last_second) | **GET** /v1/channel/{service_id}/ts/{timestamp_in_seconds} | Get real-time data from specified time
  *RequestSettingsApi* | [**delete_request_settings**](docs/RequestSettingsApi.md#delete_request_settings) | **DELETE** /service/{service_id}/version/{version_id}/request_settings/{request_settings_name} | Delete a Request Settings object
  *RequestSettingsApi* | [**get_request_settings**](docs/RequestSettingsApi.md#get_request_settings) | **GET** /service/{service_id}/version/{version_id}/request_settings/{request_settings_name} | Get a Request Settings object
  *RequestSettingsApi* | [**list_request_settings**](docs/RequestSettingsApi.md#list_request_settings) | **GET** /service/{service_id}/version/{version_id}/request_settings | List Request Settings objects
  *RequestSettingsApi* | [**update_request_settings**](docs/RequestSettingsApi.md#update_request_settings) | **PUT** /service/{service_id}/version/{version_id}/request_settings/{request_settings_name} | Update a Request Settings object
  *ResourceApi* | [**create_resource**](docs/ResourceApi.md#create_resource) | **POST** /service/{service_id}/version/{version_id}/resource | Create a resource link
  *ResourceApi* | [**delete_resource**](docs/ResourceApi.md#delete_resource) | **DELETE** /service/{service_id}/version/{version_id}/resource/{id} | Delete a resource link
  *ResourceApi* | [**get_resource**](docs/ResourceApi.md#get_resource) | **GET** /service/{service_id}/version/{version_id}/resource/{id} | Display a resource link
  *ResourceApi* | [**list_resources**](docs/ResourceApi.md#list_resources) | **GET** /service/{service_id}/version/{version_id}/resource | List resource links
  *ResourceApi* | [**update_resource**](docs/ResourceApi.md#update_resource) | **PUT** /service/{service_id}/version/{version_id}/resource/{id} | Update a resource link
  *ResponseObjectApi* | [**delete_response_object**](docs/ResponseObjectApi.md#delete_response_object) | **DELETE** /service/{service_id}/version/{version_id}/response_object/{response_object_name} | Delete a Response Object
  *ResponseObjectApi* | [**get_response_object**](docs/ResponseObjectApi.md#get_response_object) | **GET** /service/{service_id}/version/{version_id}/response_object/{response_object_name} | Get a Response object
  *ResponseObjectApi* | [**list_response_objects**](docs/ResponseObjectApi.md#list_response_objects) | **GET** /service/{service_id}/version/{version_id}/response_object | List Response objects
  *ServerApi* | [**create_pool_server**](docs/ServerApi.md#create_pool_server) | **POST** /service/{service_id}/pool/{pool_id}/server | Add a server to a pool
  *ServerApi* | [**delete_pool_server**](docs/ServerApi.md#delete_pool_server) | **DELETE** /service/{service_id}/pool/{pool_id}/server/{server_id} | Delete a server from a pool
  *ServerApi* | [**get_pool_server**](docs/ServerApi.md#get_pool_server) | **GET** /service/{service_id}/pool/{pool_id}/server/{server_id} | Get a pool server
  *ServerApi* | [**list_pool_servers**](docs/ServerApi.md#list_pool_servers) | **GET** /service/{service_id}/pool/{pool_id}/servers | List servers in a pool
  *ServerApi* | [**update_pool_server**](docs/ServerApi.md#update_pool_server) | **PUT** /service/{service_id}/pool/{pool_id}/server/{server_id} | Update a server
  *ServiceApi* | [**create_service**](docs/ServiceApi.md#create_service) | **POST** /service | Create a service
  *ServiceApi* | [**delete_service**](docs/ServiceApi.md#delete_service) | **DELETE** /service/{service_id} | Delete a service
  *ServiceApi* | [**get_service**](docs/ServiceApi.md#get_service) | **GET** /service/{service_id} | Get a service
  *ServiceApi* | [**get_service_detail**](docs/ServiceApi.md#get_service_detail) | **GET** /service/{service_id}/details | Get service details
  *ServiceApi* | [**list_service_domains**](docs/ServiceApi.md#list_service_domains) | **GET** /service/{service_id}/domain | List the domains within a service
  *ServiceApi* | [**list_services**](docs/ServiceApi.md#list_services) | **GET** /service | List services
  *ServiceApi* | [**search_service**](docs/ServiceApi.md#search_service) | **GET** /service/search | Search for a service by name
  *ServiceApi* | [**update_service**](docs/ServiceApi.md#update_service) | **PUT** /service/{service_id} | Update a service
  *ServiceAuthorizationsApi* | [**create_service_authorization**](docs/ServiceAuthorizationsApi.md#create_service_authorization) | **POST** /service-authorizations | Create service authorization
  *ServiceAuthorizationsApi* | [**delete_service_authorization**](docs/ServiceAuthorizationsApi.md#delete_service_authorization) | **DELETE** /service-authorizations/{service_authorization_id} | Delete service authorization
  *ServiceAuthorizationsApi* | [**list_service_authorization**](docs/ServiceAuthorizationsApi.md#list_service_authorization) | **GET** /service-authorizations | List service authorizations
  *ServiceAuthorizationsApi* | [**show_service_authorization**](docs/ServiceAuthorizationsApi.md#show_service_authorization) | **GET** /service-authorizations/{service_authorization_id} | Show service authorization
  *ServiceAuthorizationsApi* | [**update_service_authorization**](docs/ServiceAuthorizationsApi.md#update_service_authorization) | **PATCH** /service-authorizations/{service_authorization_id} | Update service authorization
  *SettingsApi* | [**get_service_settings**](docs/SettingsApi.md#get_service_settings) | **GET** /service/{service_id}/version/{version_id}/settings | Get service settings
  *SettingsApi* | [**update_service_settings**](docs/SettingsApi.md#update_service_settings) | **PUT** /service/{service_id}/version/{version_id}/settings | Update service settings
  *SnippetApi* | [**create_snippet**](docs/SnippetApi.md#create_snippet) | **POST** /service/{service_id}/version/{version_id}/snippet | Create a snippet
  *SnippetApi* | [**delete_snippet**](docs/SnippetApi.md#delete_snippet) | **DELETE** /service/{service_id}/version/{version_id}/snippet/{snippet_name} | Delete a snippet
  *SnippetApi* | [**get_snippet**](docs/SnippetApi.md#get_snippet) | **GET** /service/{service_id}/version/{version_id}/snippet/{snippet_name} | Get a versioned snippet
  *SnippetApi* | [**get_snippet_dynamic**](docs/SnippetApi.md#get_snippet_dynamic) | **GET** /service/{service_id}/snippet/{snippet_id} | Get a dynamic snippet
  *SnippetApi* | [**list_snippets**](docs/SnippetApi.md#list_snippets) | **GET** /service/{service_id}/version/{version_id}/snippet | List snippets
  *SnippetApi* | [**update_snippet_dynamic**](docs/SnippetApi.md#update_snippet_dynamic) | **PUT** /service/{service_id}/snippet/{snippet_id} | Update a dynamic snippet
  *StarApi* | [**create_service_star**](docs/StarApi.md#create_service_star) | **POST** /stars | Create a star
  *StarApi* | [**delete_service_star**](docs/StarApi.md#delete_service_star) | **DELETE** /stars/{star_id} | Delete a star
  *StarApi* | [**get_service_star**](docs/StarApi.md#get_service_star) | **GET** /stars/{star_id} | Get a star
  *StarApi* | [**list_service_stars**](docs/StarApi.md#list_service_stars) | **GET** /stars | List stars
  *StatsApi* | [**get_service_stats**](docs/StatsApi.md#get_service_stats) | **GET** /service/{service_id}/stats/summary | Get stats for a service
  *TlsActivationsApi* | [**create_tls_activation**](docs/TlsActivationsApi.md#create_tls_activation) | **POST** /tls/activations | Enable TLS for a domain using a custom certificate
  *TlsActivationsApi* | [**delete_tls_activation**](docs/TlsActivationsApi.md#delete_tls_activation) | **DELETE** /tls/activations/{tls_activation_id} | Disable TLS on a domain
  *TlsActivationsApi* | [**get_tls_activation**](docs/TlsActivationsApi.md#get_tls_activation) | **GET** /tls/activations/{tls_activation_id} | Get a TLS activation
  *TlsActivationsApi* | [**list_tls_activations**](docs/TlsActivationsApi.md#list_tls_activations) | **GET** /tls/activations | List TLS activations
  *TlsActivationsApi* | [**update_tls_activation**](docs/TlsActivationsApi.md#update_tls_activation) | **PATCH** /tls/activations/{tls_activation_id} | Update a certificate
  *TlsBulkCertificatesApi* | [**delete_bulk_tls_cert**](docs/TlsBulkCertificatesApi.md#delete_bulk_tls_cert) | **DELETE** /tls/bulk/certificates/{certificate_id} | Delete a certificate
  *TlsBulkCertificatesApi* | [**get_tls_bulk_cert**](docs/TlsBulkCertificatesApi.md#get_tls_bulk_cert) | **GET** /tls/bulk/certificates/{certificate_id} | Get a certificate
  *TlsBulkCertificatesApi* | [**list_tls_bulk_certs**](docs/TlsBulkCertificatesApi.md#list_tls_bulk_certs) | **GET** /tls/bulk/certificates | List certificates
  *TlsBulkCertificatesApi* | [**update_bulk_tls_cert**](docs/TlsBulkCertificatesApi.md#update_bulk_tls_cert) | **PATCH** /tls/bulk/certificates/{certificate_id} | Update a certificate
  *TlsBulkCertificatesApi* | [**upload_tls_bulk_cert**](docs/TlsBulkCertificatesApi.md#upload_tls_bulk_cert) | **POST** /tls/bulk/certificates | Upload a certificate
  *TlsCertificatesApi* | [**create_tls_cert**](docs/TlsCertificatesApi.md#create_tls_cert) | **POST** /tls/certificates | Create a TLS certificate
  *TlsCertificatesApi* | [**delete_tls_cert**](docs/TlsCertificatesApi.md#delete_tls_cert) | **DELETE** /tls/certificates/{tls_certificate_id} | Delete a TLS certificate
  *TlsCertificatesApi* | [**get_tls_cert**](docs/TlsCertificatesApi.md#get_tls_cert) | **GET** /tls/certificates/{tls_certificate_id} | Get a TLS certificate
  *TlsCertificatesApi* | [**list_tls_certs**](docs/TlsCertificatesApi.md#list_tls_certs) | **GET** /tls/certificates | List TLS certificates
  *TlsCertificatesApi* | [**update_tls_cert**](docs/TlsCertificatesApi.md#update_tls_cert) | **PATCH** /tls/certificates/{tls_certificate_id} | Update a TLS certificate
  *TlsConfigurationsApi* | [**get_tls_config**](docs/TlsConfigurationsApi.md#get_tls_config) | **GET** /tls/configurations/{tls_configuration_id} | Get a TLS configuration
  *TlsConfigurationsApi* | [**list_tls_configs**](docs/TlsConfigurationsApi.md#list_tls_configs) | **GET** /tls/configurations | List TLS configurations
  *TlsConfigurationsApi* | [**update_tls_config**](docs/TlsConfigurationsApi.md#update_tls_config) | **PATCH** /tls/configurations/{tls_configuration_id} | Update a TLS configuration
  *TlsCsrsApi* | [**create_csr**](docs/TlsCsrsApi.md#create_csr) | **POST** /tls/certificate_signing_requests | Create CSR
  *TlsDomainsApi* | [**list_tls_domains**](docs/TlsDomainsApi.md#list_tls_domains) | **GET** /tls/domains | List TLS domains
  *TlsPrivateKeysApi* | [**create_tls_key**](docs/TlsPrivateKeysApi.md#create_tls_key) | **POST** /tls/private_keys | Create a TLS private key
  *TlsPrivateKeysApi* | [**delete_tls_key**](docs/TlsPrivateKeysApi.md#delete_tls_key) | **DELETE** /tls/private_keys/{tls_private_key_id} | Delete a TLS private key
  *TlsPrivateKeysApi* | [**get_tls_key**](docs/TlsPrivateKeysApi.md#get_tls_key) | **GET** /tls/private_keys/{tls_private_key_id} | Get a TLS private key
  *TlsPrivateKeysApi* | [**list_tls_keys**](docs/TlsPrivateKeysApi.md#list_tls_keys) | **GET** /tls/private_keys | List TLS private keys
  *TlsSubscriptionsApi* | [**create_globalsign_email_challenge**](docs/TlsSubscriptionsApi.md#create_globalsign_email_challenge) | **POST** /tls/subscriptions/{tls_subscription_id}/authorizations/{tls_authorization_id}/globalsign_email_challenges | Creates a GlobalSign email challenge.
  *TlsSubscriptionsApi* | [**create_tls_sub**](docs/TlsSubscriptionsApi.md#create_tls_sub) | **POST** /tls/subscriptions | Create a TLS subscription
  *TlsSubscriptionsApi* | [**delete_globalsign_email_challenge**](docs/TlsSubscriptionsApi.md#delete_globalsign_email_challenge) | **DELETE** /tls/subscriptions/{tls_subscription_id}/authorizations/{tls_authorization_id}/globalsign_email_challenges/{globalsign_email_challenge_id} | Delete a GlobalSign email challenge
  *TlsSubscriptionsApi* | [**delete_tls_sub**](docs/TlsSubscriptionsApi.md#delete_tls_sub) | **DELETE** /tls/subscriptions/{tls_subscription_id} | Delete a TLS subscription
  *TlsSubscriptionsApi* | [**get_tls_sub**](docs/TlsSubscriptionsApi.md#get_tls_sub) | **GET** /tls/subscriptions/{tls_subscription_id} | Get a TLS subscription
  *TlsSubscriptionsApi* | [**list_tls_subs**](docs/TlsSubscriptionsApi.md#list_tls_subs) | **GET** /tls/subscriptions | List TLS subscriptions
  *TlsSubscriptionsApi* | [**patch_tls_sub**](docs/TlsSubscriptionsApi.md#patch_tls_sub) | **PATCH** /tls/subscriptions/{tls_subscription_id} | Update a TLS subscription
  *TokensApi* | [**get_token_current**](docs/TokensApi.md#get_token_current) | **GET** /tokens/self | Get the current token
  *TokensApi* | [**list_tokens_customer**](docs/TokensApi.md#list_tokens_customer) | **GET** /customer/{customer_id}/tokens | List tokens for a customer
  *TokensApi* | [**list_tokens_user**](docs/TokensApi.md#list_tokens_user) | **GET** /tokens | List tokens for the authenticated user
  *TokensApi* | [**revoke_token**](docs/TokensApi.md#revoke_token) | **DELETE** /tokens/{token_id} | Revoke a token
  *TokensApi* | [**revoke_token_current**](docs/TokensApi.md#revoke_token_current) | **DELETE** /tokens/self | Revoke the current token
  *UserApi* | [**create_user**](docs/UserApi.md#create_user) | **POST** /user | Create a user
  *UserApi* | [**delete_user**](docs/UserApi.md#delete_user) | **DELETE** /user/{user_id} | Delete a user
  *UserApi* | [**get_current_user**](docs/UserApi.md#get_current_user) | **GET** /current_user | Get the current user
  *UserApi* | [**get_user**](docs/UserApi.md#get_user) | **GET** /user/{user_id} | Get a user
  *UserApi* | [**request_password_reset**](docs/UserApi.md#request_password_reset) | **POST** /user/{user_login}/password/request_reset | Request a password reset
  *UserApi* | [**update_user**](docs/UserApi.md#update_user) | **PUT** /user/{user_id} | Update a user
  *UserApi* | [**update_user_password**](docs/UserApi.md#update_user_password) | **POST** /current_user/password | Update the user&#39;s password
  *VclApi* | [**create_custom_vcl**](docs/VclApi.md#create_custom_vcl) | **POST** /service/{service_id}/version/{version_id}/vcl | Create a custom VCL file
  *VclApi* | [**delete_custom_vcl**](docs/VclApi.md#delete_custom_vcl) | **DELETE** /service/{service_id}/version/{version_id}/vcl/{vcl_name} | Delete a custom VCL file
  *VclApi* | [**get_custom_vcl**](docs/VclApi.md#get_custom_vcl) | **GET** /service/{service_id}/version/{version_id}/vcl/{vcl_name} | Get a custom VCL file
  *VclApi* | [**get_custom_vcl_boilerplate**](docs/VclApi.md#get_custom_vcl_boilerplate) | **GET** /service/{service_id}/version/{version_id}/boilerplate | Get boilerplate VCL
  *VclApi* | [**get_custom_vcl_generated**](docs/VclApi.md#get_custom_vcl_generated) | **GET** /service/{service_id}/version/{version_id}/generated_vcl | Get the generated VCL for a service
  *VclApi* | [**get_custom_vcl_raw**](docs/VclApi.md#get_custom_vcl_raw) | **GET** /service/{service_id}/version/{version_id}/vcl/{vcl_name}/download | Download a custom VCL file
  *VclApi* | [**lint_vcl_default**](docs/VclApi.md#lint_vcl_default) | **POST** /vcl_lint | Lint (validate) VCL using a default set of flags.
  *VclApi* | [**lint_vcl_for_service**](docs/VclApi.md#lint_vcl_for_service) | **POST** /service/{service_id}/lint | Lint (validate) VCL using flags set for the service.
  *VclApi* | [**list_custom_vcl**](docs/VclApi.md#list_custom_vcl) | **GET** /service/{service_id}/version/{version_id}/vcl | List custom VCL files
  *VclApi* | [**set_custom_vcl_main**](docs/VclApi.md#set_custom_vcl_main) | **PUT** /service/{service_id}/version/{version_id}/vcl/{vcl_name}/main | Set a custom VCL file as main
  *VclApi* | [**update_custom_vcl**](docs/VclApi.md#update_custom_vcl) | **PUT** /service/{service_id}/version/{version_id}/vcl/{vcl_name} | Update a custom VCL file
  *VclDiffApi* | [**vcl_diff_service_versions**](docs/VclDiffApi.md#vcl_diff_service_versions) | **GET** /service/{service_id}/vcl/diff/from/{from_version_id}/to/{to_version_id} | Get a comparison of the VCL changes between two service versions
  *VersionApi* | [**activate_service_version**](docs/VersionApi.md#activate_service_version) | **PUT** /service/{service_id}/version/{version_id}/activate | Activate a service version
  *VersionApi* | [**clone_service_version**](docs/VersionApi.md#clone_service_version) | **PUT** /service/{service_id}/version/{version_id}/clone | Clone a service version
  *VersionApi* | [**create_service_version**](docs/VersionApi.md#create_service_version) | **POST** /service/{service_id}/version | Create a service version
  *VersionApi* | [**deactivate_service_version**](docs/VersionApi.md#deactivate_service_version) | **PUT** /service/{service_id}/version/{version_id}/deactivate | Deactivate a service version
  *VersionApi* | [**get_service_version**](docs/VersionApi.md#get_service_version) | **GET** /service/{service_id}/version/{version_id} | Get a version of a service
  *VersionApi* | [**list_service_versions**](docs/VersionApi.md#list_service_versions) | **GET** /service/{service_id}/version | List versions of a service
  *VersionApi* | [**lock_service_version**](docs/VersionApi.md#lock_service_version) | **PUT** /service/{service_id}/version/{version_id}/lock | Lock a service version
  *VersionApi* | [**update_service_version**](docs/VersionApi.md#update_service_version) | **PUT** /service/{service_id}/version/{version_id} | Update a service version
  *VersionApi* | [**validate_service_version**](docs/VersionApi.md#validate_service_version) | **GET** /service/{service_id}/version/{version_id}/validate | Validate a service version
  *WafActiveRulesApi* | [**bulk_update_waf_active_rules**](docs/WafActiveRulesApi.md#bulk_update_waf_active_rules) | **PATCH** /waf/firewalls/{firewall_id}/versions/{version_id}/active-rules/bulk | Update multiple active rules
  *WafActiveRulesApi* | [**create_waf_active_rule**](docs/WafActiveRulesApi.md#create_waf_active_rule) | **POST** /waf/firewalls/{firewall_id}/versions/{version_id}/active-rules | Add a rule to a WAF as an active rule
  *WafActiveRulesApi* | [**create_waf_active_rules_tag**](docs/WafActiveRulesApi.md#create_waf_active_rules_tag) | **POST** /waf/firewalls/{firewall_id}/versions/{version_id}/tags/{waf_tag_name}/active-rules | Create active rules by tag
  *WafActiveRulesApi* | [**delete_waf_active_rule**](docs/WafActiveRulesApi.md#delete_waf_active_rule) | **DELETE** /waf/firewalls/{firewall_id}/versions/{version_id}/active-rules/{waf_rule_id} | Delete an active rule
  *WafActiveRulesApi* | [**get_waf_active_rule**](docs/WafActiveRulesApi.md#get_waf_active_rule) | **GET** /waf/firewalls/{firewall_id}/versions/{version_id}/active-rules/{waf_rule_id} | Get an active WAF rule object
  *WafActiveRulesApi* | [**list_waf_active_rules**](docs/WafActiveRulesApi.md#list_waf_active_rules) | **GET** /waf/firewalls/{firewall_id}/versions/{version_id}/active-rules | List active rules on a WAF
  *WafActiveRulesApi* | [**update_waf_active_rule**](docs/WafActiveRulesApi.md#update_waf_active_rule) | **PATCH** /waf/firewalls/{firewall_id}/versions/{version_id}/active-rules/{waf_rule_id} | Update an active rule
  *WafExclusionsApi* | [**create_waf_rule_exclusion**](docs/WafExclusionsApi.md#create_waf_rule_exclusion) | **POST** /waf/firewalls/{firewall_id}/versions/{firewall_version_number}/exclusions | Create a WAF rule exclusion
  *WafExclusionsApi* | [**delete_waf_rule_exclusion**](docs/WafExclusionsApi.md#delete_waf_rule_exclusion) | **DELETE** /waf/firewalls/{firewall_id}/versions/{firewall_version_number}/exclusions/{exclusion_number} | Delete a WAF rule exclusion
  *WafExclusionsApi* | [**get_waf_rule_exclusion**](docs/WafExclusionsApi.md#get_waf_rule_exclusion) | **GET** /waf/firewalls/{firewall_id}/versions/{firewall_version_number}/exclusions/{exclusion_number} | Get a WAF rule exclusion
  *WafExclusionsApi* | [**list_waf_rule_exclusions**](docs/WafExclusionsApi.md#list_waf_rule_exclusions) | **GET** /waf/firewalls/{firewall_id}/versions/{firewall_version_number}/exclusions | List WAF rule exclusions
  *WafExclusionsApi* | [**update_waf_rule_exclusion**](docs/WafExclusionsApi.md#update_waf_rule_exclusion) | **PATCH** /waf/firewalls/{firewall_id}/versions/{firewall_version_number}/exclusions/{exclusion_number} | Update a WAF rule exclusion
  *WafFirewallVersionsApi* | [**clone_waf_firewall_version**](docs/WafFirewallVersionsApi.md#clone_waf_firewall_version) | **PUT** /waf/firewalls/{firewall_id}/versions/{firewall_version_number}/clone | Clone a firewall version
  *WafFirewallVersionsApi* | [**create_waf_firewall_version**](docs/WafFirewallVersionsApi.md#create_waf_firewall_version) | **POST** /waf/firewalls/{firewall_id}/versions | Create a firewall version
  *WafFirewallVersionsApi* | [**deploy_activate_waf_firewall_version**](docs/WafFirewallVersionsApi.md#deploy_activate_waf_firewall_version) | **PUT** /waf/firewalls/{firewall_id}/versions/{firewall_version_number}/activate | Deploy or activate a firewall version
  *WafFirewallVersionsApi* | [**get_waf_firewall_version**](docs/WafFirewallVersionsApi.md#get_waf_firewall_version) | **GET** /waf/firewalls/{firewall_id}/versions/{firewall_version_number} | Get a firewall version
  *WafFirewallVersionsApi* | [**list_waf_firewall_versions**](docs/WafFirewallVersionsApi.md#list_waf_firewall_versions) | **GET** /waf/firewalls/{firewall_id}/versions | List firewall versions
  *WafFirewallVersionsApi* | [**update_waf_firewall_version**](docs/WafFirewallVersionsApi.md#update_waf_firewall_version) | **PATCH** /waf/firewalls/{firewall_id}/versions/{firewall_version_number} | Update a firewall version
  *WafFirewallsApi* | [**create_waf_firewall**](docs/WafFirewallsApi.md#create_waf_firewall) | **POST** /waf/firewalls | Create a firewall
  *WafFirewallsApi* | [**delete_waf_firewall**](docs/WafFirewallsApi.md#delete_waf_firewall) | **DELETE** /waf/firewalls/{firewall_id} | Delete a firewall
  *WafFirewallsApi* | [**get_waf_firewall**](docs/WafFirewallsApi.md#get_waf_firewall) | **GET** /waf/firewalls/{firewall_id} | Get a firewall
  *WafFirewallsApi* | [**list_waf_firewalls**](docs/WafFirewallsApi.md#list_waf_firewalls) | **GET** /waf/firewalls | List firewalls
  *WafFirewallsApi* | [**update_waf_firewall**](docs/WafFirewallsApi.md#update_waf_firewall) | **PATCH** /waf/firewalls/{firewall_id} | Update a firewall
  *WafRuleRevisionsApi* | [**get_waf_rule_revision**](docs/WafRuleRevisionsApi.md#get_waf_rule_revision) | **GET** /waf/rules/{waf_rule_id}/revisions/{waf_rule_revision_number} | Get a revision of a rule
  *WafRuleRevisionsApi* | [**list_waf_rule_revisions**](docs/WafRuleRevisionsApi.md#list_waf_rule_revisions) | **GET** /waf/rules/{waf_rule_id}/revisions | List revisions for a rule
  *WafRulesApi* | [**get_waf_rule**](docs/WafRulesApi.md#get_waf_rule) | **GET** /waf/rules/{waf_rule_id} | Get a rule
  *WafRulesApi* | [**list_waf_rules**](docs/WafRulesApi.md#list_waf_rules) | **GET** /waf/rules | List available WAF rules
  *WafTagsApi* | [**list_waf_tags**](docs/WafTagsApi.md#list_waf_tags) | **GET** /waf/tags | List tags

  The fastly-py API client currently does not support the following endpoints:
  - [`/automation-tokens/{id}/services`](https://developer.fastly.com/reference/api/auth-tokens/automation) (GET)
  - [`/automation-tokens/{id}`](https://developer.fastly.com/reference/api/auth-tokens/automation) (DELETE, GET)
  - [`/automation-tokens`](https://developer.fastly.com/reference/api/auth-tokens/automation) (GET, POST)
  - [`/customer/{customer_id}/contacts`](https://developer.fastly.com/reference/api/account/contact) (POST)
  - [`/docs/section/{section}`](https://developer.fastly.com/reference/api/utils/docs) (GET)
  - [`/docs/subject/{subject}`](https://developer.fastly.com/reference/api/utils/docs) (GET)
  - [`/metrics/domains/services/{service_id}`](https://developer.fastly.com/reference/api/metrics-stats/domain-inspector/historical) (GET)
  - [`/metrics/origins/services/{service_id}`](https://developer.fastly.com/reference/api/metrics-stats/origin-inspector/historical) (GET)
  - [`/rate-limiters/{rate_limiter_id}`](https://developer.fastly.com/reference/api/vcl-services/rate-limiter) (PUT)
  - [`/resources/stores/config/{config_store_id}/info`](https://developer.fastly.com/reference/api/services/resources/config-store) (GET)
  - [`/resources/stores/config/{config_store_id}/item/{config_store_item_key}`](https://developer.fastly.com/reference/api/services/resources/config-store-item) (DELETE, GET, PATCH, PUT)
  - [`/resources/stores/config/{config_store_id}/item`](https://developer.fastly.com/reference/api/services/resources/config-store-item) (POST)
  - [`/resources/stores/config/{config_store_id}/items`](https://developer.fastly.com/reference/api/services/resources/config-store-item) (GET, PATCH)
  - [`/resources/stores/config/{config_store_id}/services`](https://developer.fastly.com/reference/api/services/resources/config-store) (GET)
  - [`/resources/stores/config/{config_store_id}`](https://developer.fastly.com/reference/api/services/resources/config-store) (DELETE, GET, PUT)
  - [`/resources/stores/config`](https://developer.fastly.com/reference/api/services/resources/config-store) (GET, POST)
  - [`/resources/stores/secret/client-key`](https://developer.fastly.com/reference/api/services/resources/secret-store) (POST)
  - [`/resources/stores/secret/signing-key`](https://developer.fastly.com/reference/api/services/resources/secret-store) (GET)
  - [`/resources/stores/secret/{store_id}/secrets/{secret_name}`](https://developer.fastly.com/reference/api/services/resources/secret) (DELETE, GET)
  - [`/resources/stores/secret/{store_id}/secrets`](https://developer.fastly.com/reference/api/services/resources/secret) (GET, POST)
  - [`/resources/stores/secret/{store_id}`](https://developer.fastly.com/reference/api/services/resources/secret-store) (DELETE, GET)
  - [`/resources/stores/secret`](https://developer.fastly.com/reference/api/services/resources/secret-store) (GET, POST)
  - [`/roles/{role_id}/permissions`](https://developer.fastly.com/reference/api/account/roles) (DELETE, POST)
  - [`/roles/{role_id}`](https://developer.fastly.com/reference/api/account/roles) (PATCH)
  - [`/roles`](https://developer.fastly.com/reference/api/account/roles) (POST)
  - [`/service-authorizations`](https://developer.fastly.com/reference/api/account/service-authorization) (DELETE, PATCH)
  - [`/service-groups/{service_group_id}/services`](https://developer.fastly.com/reference/api/account/service-groups) (DELETE, POST)
  - [`/service-groups/{service_group_id}`](https://developer.fastly.com/reference/api/account/service-groups) (PATCH)
  - [`/service-groups`](https://developer.fastly.com/reference/api/account/service-groups) (POST)
  - [`/service/{service_id}/dictionary/{dictionary_id}/items`](https://developer.fastly.com/reference/api/dictionaries/dictionary-item) (PATCH)
  - [`/service/{service_id}/purge`](https://developer.fastly.com/reference/api/purging) (POST)
  - [`/service/{service_id}/version/{version_id}/apex-redirects`](https://developer.fastly.com/reference/api/vcl-services/apex-redirect) (POST)
  - [`/service/{service_id}/version/{version_id}/director/{director_name}`](https://developer.fastly.com/reference/api/load-balancing/directors/director) (PUT)
  - [`/service/{service_id}/version/{version_id}/generated_vcl/content`](https://developer.fastly.com/reference/api/vcl-services/vcl) (GET)
  - [`/service/{service_id}/version/{version_id}/logging/kafka/{logging_kafka_name}`](https://developer.fastly.com/reference/api/logging/kafka) (PUT)
  - [`/service/{service_id}/version/{version_id}/logging/kinesis/{logging_kinesis_name}`](https://developer.fastly.com/reference/api/logging/kinesis) (PUT)
  - [`/service/{service_id}/version/{version_id}/rate-limiters`](https://developer.fastly.com/reference/api/vcl-services/rate-limiter) (POST)
  - [`/service/{service_id}/version/{version_id}/request_settings`](https://developer.fastly.com/reference/api/vcl-services/request-settings) (POST)
  - [`/service/{service_id}/version/{version_id}/response_object/{response_object_name}`](https://developer.fastly.com/reference/api/vcl-services/response-object) (PUT)
  - [`/service/{service_id}/version/{version_id}/response_object`](https://developer.fastly.com/reference/api/vcl-services/response-object) (POST)
  - [`/service/{service_id}/version/{version_id}/snippet/{snippet_name}`](https://developer.fastly.com/reference/api/vcl-services/snippet) (PUT)
  - [`/service/{service_id}/version/{version_id}/vcl/{vcl_name}/content`](https://developer.fastly.com/reference/api/vcl-services/vcl) (GET)
  - [`/service/{service_id}/version/{version_id}/wafs/{firewall_id}`](https://developer.fastly.com/reference/api/legacy-waf/firewall) (GET, PATCH)
  - [`/service/{service_id}/version/{version_id}/wafs`](https://developer.fastly.com/reference/api/legacy-waf/firewall) (GET, POST)
  - [`/service/{service_id}/wafs/{firewall_id}/owasp`](https://developer.fastly.com/reference/api/legacy-waf/owasp) (GET, PATCH, POST)
  - [`/service/{service_id}/wafs/{firewall_id}/rule_statuses`](https://developer.fastly.com/reference/api/legacy-waf/rule-status) (GET, POST)
  - [`/service/{service_id}/wafs/{firewall_id}/rules/{waf_rule_id}/rule_status`](https://developer.fastly.com/reference/api/legacy-waf/rule-status) (GET, PATCH)
  - [`/service/{service_id}/wafs/{firewall_id}/ruleset/preview`](https://developer.fastly.com/reference/api/legacy-waf/ruleset) (GET)
  - [`/service/{service_id}/wafs/{firewall_id}/ruleset`](https://developer.fastly.com/reference/api/legacy-waf/ruleset) (GET, PATCH)
  - [`/service/{service_id}/wafs/{firewall_id}/update_statuses/{update_status_id}`](https://developer.fastly.com/reference/api/legacy-waf/update-status) (GET)
  - [`/service/{service_id}/wafs/{firewall_id}/update_statuses`](https://developer.fastly.com/reference/api/legacy-waf/update-status) (GET)
  - [`/sudo`](https://developer.fastly.com/reference/api/utils/sudo) (POST)
  - [`/tls/activations/{tls_activation_id}`](https://developer.fastly.com/reference/api/tls/mutual-tls/activations) (GET, PATCH)
  - [`/tls/activations`](https://developer.fastly.com/reference/api/tls/mutual-tls/activations) (GET)
  - [`/tokens`](https://developer.fastly.com/reference/api/auth-tokens/user) (DELETE, POST)
  - [`/user-groups/{user_group_id}/members`](https://developer.fastly.com/reference/api/account/user-groups) (DELETE, POST)
  - [`/user-groups/{user_group_id}/roles`](https://developer.fastly.com/reference/api/account/user-groups) (DELETE, POST)
  - [`/user-groups/{user_group_id}/service-groups`](https://developer.fastly.com/reference/api/account/user-groups) (DELETE, POST)
  - [`/user-groups/{user_group_id}`](https://developer.fastly.com/reference/api/account/user-groups) (PATCH)
  - [`/user-groups`](https://developer.fastly.com/reference/api/account/user-groups) (POST)
  - [`/v1/channel/{service_id}/ts/h/limit/{max_entries}`](https://developer.fastly.com/reference/api/metrics-stats/origin-insights) (GET)
  - [`/v1/channel/{service_id}/ts/h`](https://developer.fastly.com/reference/api/metrics-stats/origin-insights) (GET)
  - [`/v1/channel/{service_id}/ts/{start_timestamp}`](https://developer.fastly.com/reference/api/metrics-stats/origin-insights) (GET)
  - [`/v1/domains/{service_id}/ts/h/limit/{max_entries}`](https://developer.fastly.com/reference/api/metrics-stats/domain-inspector/real-time) (GET)
  - [`/v1/domains/{service_id}/ts/h`](https://developer.fastly.com/reference/api/metrics-stats/domain-inspector/real-time) (GET)
  - [`/v1/domains/{service_id}/ts/{start_timestamp}`](https://developer.fastly.com/reference/api/metrics-stats/domain-inspector/real-time) (GET)
  - [`/v1/origins/{service_id}/ts/h/limit/{max_entries}`](https://developer.fastly.com/reference/api/metrics-stats/origin-inspector/real-time) (GET)
  - [`/v1/origins/{service_id}/ts/h`](https://developer.fastly.com/reference/api/metrics-stats/origin-inspector/real-time) (GET)
  - [`/v1/origins/{service_id}/ts/{start_timestamp}`](https://developer.fastly.com/reference/api/metrics-stats/origin-inspector/real-time) (GET)
  - [`/waf/firewalls/{firewall_id}/versions/{version_id}/active-rules`](https://developer.fastly.com/reference/api/waf/rules/active) (DELETE)
  - [`/wafs/configuration_sets/{configuration_set_id}/relationships/wafs`](https://developer.fastly.com/reference/api/legacy-waf/configuration-set) (GET, PATCH)
  - [`/wafs/configuration_sets`](https://developer.fastly.com/reference/api/legacy-waf/configuration-set) (GET)
  - [`/wafs/rules/{waf_rule_id}/vcl`](https://developer.fastly.com/reference/api/legacy-waf/rule) (GET)
  - [`/wafs/rules/{waf_rule_id}`](https://developer.fastly.com/reference/api/legacy-waf/rule) (GET)
  - [`/wafs/rules`](https://developer.fastly.com/reference/api/legacy-waf/rule) (GET)
  - [`/wafs/tags`](https://developer.fastly.com/reference/api/legacy-waf/tag) (GET)
  - [`/wafs/{firewall_id}/disable`](https://developer.fastly.com/reference/api/legacy-waf/firewall) (PATCH)
  - [`/wafs/{firewall_id}/enable`](https://developer.fastly.com/reference/api/legacy-waf/firewall) (PATCH)
  - [`/wafs/{firewall_id}/rules/{waf_rule_id}/vcl`](https://developer.fastly.com/reference/api/legacy-waf/rule) (GET)
  - [`/wafs/{firewall_id}`](https://developer.fastly.com/reference/api/legacy-waf/firewall) (GET)
  - [`/wafs`](https://developer.fastly.com/reference/api/legacy-waf/firewall) (GET)
  If you encounter any non-security-related bug or unexpected behavior, please [file an issue][bug]
  using the bug report template.
  [bug]: https://github.com/fastly/fastly-py/issues/new?labels=bug

  Please see our [SECURITY.md](./SECURITY.md) for guidance on reporting security-related issues.

  [MIT](./LICENSE).


pkgId: 6d073407721bc3e2bd01707f696775a93ed20a3c35e129e4e385431146c708e8
name: python-fastnumbers
arch: src
version: 5.0.1
epoch: 0
release: 1
summary: Super-fast and clean conversions to numbers.
url: https://github.com/SethMMorton/fastnumbers
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-eef1e9fb-6de3-433d-8ffb-043533ee2350
location_href: 00013011-python-fastnumbers/python-fastnumbers-5.0.1-1.src.rpm
checksum_type: sha256
description:
  Super-fast and clean conversions to numbers.
      - Source Code: https://github.com/SethMMorton/fastnumbers
      - Downloads: https://pypi.org/project/fastnumbers/
      - Documentation: https://fastnumbers.readthedocs.io/
      - `Quick Start`_
      - `Timing`_
      - `High-level Algorithm`_
      - `How To Run Tests`_
      - `History`_
  ``fastnumbers`` is a module with the following three objectives (in order
  of decreasing importance as to why the module was created):
      
         ``int`` and ``float`` and provides easy, concise, powerful, fast
         and flexible error handling.
      
         an input *could* be converted to *int* or *float*.
      
         ``float`` that are on par or faster with the Python equivalents
         (see the `Timing`_ section for details). These functions
         should behave *identically* to the Python built-ins except for a few
         specific corner-cases as mentioned in the
         `API documentation for those functions <https://fastnumbers.readthedocs.io/en/stable/api.html#the-built-in-replacement-functions>`_.
         - **PLEASE** read the quick start for these functions to fully
           understand the caveats before using them.
  **What kind of speedups can you expect?** Here are some highlights, but please
  see the `Timing`_ section for the raw data if you want details.
      - Up to 2x faster conversion of strings to integers than the built-in
        ``int()`` function
      - Up to 5x faster conversion of strings to floats than the built-in
        ``float()`` function (possibly greater for very long strings)
      - Up to 10x faster handling of errors during conversion than using
        user-side error handling
      - On top of the above, operations to convert a list of strings
        (with the ``map`` option or ``try_array`` function) is 2x faster
        than the equivalent list comprehension.
  **NOTICE**: As of ``fastnumbers`` version 4.0.0, only Python >= 3.7 is
  supported.
  **NOTICE**: As of ``fastnumbers`` version 4.0.0, the functions ``fast_real``,
  ``fast_float``, ``fast_int``, ``fast_forceint``, ``isreal``, ``isfloat``,
  ``isint``, and ``isintlike`` have been deprecated and are replaced with
  ``try_real``, ``try_float``, ``try_int``, ``try_forceint``, ``check_real``,
  ``check_float``, ``check_int``, and ``check_intlike``, respectively. These
  new functions have more flexible APIs and have names that better reflect
  the intent of the functions. The old functions can still be used (they will
  *never* be removed from ``fastnumbers``), but the new ones should be
  preferred for new development.
  **NOTICE**: As of ``fastnumbers`` version 4.0.0, ``query_type`` now sets
  ``allow_underscores`` to ``False`` by default instead of ``True``.


pkgId: af9a4a350bdc04af3e6dc5b2599c9416544ad01d966f81824c54e8650ece4724
name: python-fastnumbers-debuginfo
arch: aarch64
version: 5.0.1
epoch: 0
release: 1
summary: Debug information for package python-fastnumbers
url: https://github.com/SethMMorton/fastnumbers
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-eef1e9fb-6de3-433d-8ffb-043533ee2350
rpm_sourcerpm: python-fastnumbers-5.0.1-1.src.rpm
location_href: 00013011-python-fastnumbers/python-fastnumbers-debuginfo-5.0.1-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-fastnumbers.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 5487be3040a8e5db35c307e12e6beec50a4af756150933c32aad45e10531725d
name: python-fastnumbers-debugsource
arch: aarch64
version: 5.0.1
epoch: 0
release: 1
summary: Debug sources for package python-fastnumbers
url: https://github.com/SethMMorton/fastnumbers
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-eef1e9fb-6de3-433d-8ffb-043533ee2350
rpm_sourcerpm: python-fastnumbers-5.0.1-1.src.rpm
location_href: 00013011-python-fastnumbers/python-fastnumbers-debugsource-5.0.1-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-fastnumbers.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 6082b764f6c6ed8308b12ed41c0c27609121255fafac03bda8552677c529ed64
name: python-fastprogress
arch: src
version: 1.0.3
epoch: 0
release: 1
summary: A nested progress with plotting options for fastai
url: https://github.com/fastai/fastprogress
rpm_license: Apache Software License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c70a1b03-7214-413d-9cd0-8c409b5ec4a7
location_href: 00003608-python-fastprogress/python-fastprogress-1.0.3-1.src.rpm
checksum_type: sha256
description:
  Copyright 2017 onwards, fast.ai. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. A copy of the License is provided in the LICENSE file in this repository.


pkgId: 05f2b2f8786bf4069d8367062a2b3e32f7de90dcc06c8794222edfc5b9adadd6
name: python-fastrlock
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: Fast, re-entrant optimistic lock implemented in Cython
url: https://github.com/scoder/fastrlock
rpm_license: MIT style
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a9f56b05-bb6f-4528-a959-0d58b9a3f5b2
location_href: 00012463-python-fastrlock/python-fastrlock-0.8.1-1.src.rpm
checksum_type: sha256
description:
  This is a C-level implementation of a fast, re-entrant, optimistic lock for CPython.
  It is a drop-in replacement for
  `threading.RLock <https://docs.python.org/3/library/threading.html#threading.RLock>`_.
  FastRLock is implemented in `Cython <http://cython.org>`_ and also provides a C-API
  for direct use from Cython code via ``from fastrlock cimport rlock``.
  Under normal conditions, it is about 10x faster than threading.RLock in Python 2.7
  because it avoids all locking unless two or more threads try to acquire it at the
  same time.  Under congestion, it is still about 10% faster than RLock due to being
  implemented in Cython.
  This is mostly equivalent to the revised RLock implementation in Python 3.2,
  but still faster due to being implemented in Cython.  However, in Python 3.4 and
  later, the ``threading.RLock`` implementation in the stdlib tends to be as fast
  or even faster than the lock provided by this package, when called through the
  Python API.  ``FastRLock`` is still faster also on these systems when called
  through its Cython API from other Cython modules.
  It was initially published as a code recipe here:
  https://code.activestate.com/recipes/577336-fast-re-entrant-optimistic-lock-implemented-in-cyt/
  FastRLock has been used and tested in `Lupa <https://github.com/scoder/lupa>`_ for several years.


pkgId: d255c08453fbea1c9496d6acf23dca10efe3a3101d516557620fa56afacb697c
name: python-fastrlock-debuginfo
arch: aarch64
version: 0.8.1
epoch: 0
release: 1
summary: Debug information for package python-fastrlock
url: https://github.com/scoder/fastrlock
rpm_license: MIT style
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-a9f56b05-bb6f-4528-a959-0d58b9a3f5b2
rpm_sourcerpm: python-fastrlock-0.8.1-1.src.rpm
location_href: 00012463-python-fastrlock/python-fastrlock-debuginfo-0.8.1-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-fastrlock.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 1feebb689e8f65f0fa0d8088a4eca8164d5daf73ba8e4cd46b11deb989a558ea
name: python-fastrlock-debugsource
arch: aarch64
version: 0.8.1
epoch: 0
release: 1
summary: Debug sources for package python-fastrlock
url: https://github.com/scoder/fastrlock
rpm_license: MIT style
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-a9f56b05-bb6f-4528-a959-0d58b9a3f5b2
rpm_sourcerpm: python-fastrlock-0.8.1-1.src.rpm
location_href: 00012463-python-fastrlock/python-fastrlock-debugsource-0.8.1-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-fastrlock.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 2668619ef9dbcf2196a21e615b943e0535b6d00c87653df3f215429c72a595a6
name: python-feather-format
arch: src
version: 0.4.1
epoch: 0
release: 1
summary: Simple wrapper library to the Apache Arrow-based Feather File Format
url: http://github.com/wesm/feather
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ebf77e1f-5f96-4be6-8e6e-0dc501720759
location_href: 00012084-python-feather-format/python-feather-format-0.4.1-1.src.rpm
checksum_type: sha256
description:
  Feather efficiently stores pandas DataFrame objects on disk. It depends on the
  Apache Arrow for Python



  ```shell
  pip install feather-format
  ```

  pip users note: ``feather-format`` depends on ``pyarrow`` and may not be
  available on your platform via pip. If that does not work try conda-forge.

  From [conda-forge][1]:

  ```shell
  conda install feather-format -c conda-forge
  ```



  Some features of pandas are not supported in Feather:

  * Non-string column names
  * Row indexes
  * Object-type columns with non-homogeneous data

  [1]: https://conda-forge.github.io


pkgId: 2b1217b17c18ed4f963b680c4c59f18f3961598a3e4a610b85f9da7344afaad2
name: python-featurewiz
arch: src
version: 0.2.6
epoch: 0
release: 1
summary: Select Best Features from your data set - any size - now with XGBoost!
url: https://github.com/AutoViML/featurewiz
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-69074651-c171-49a4-b221-c10279785434
location_href: 00012024-python-featurewiz/python-featurewiz-0.2.6-1.src.rpm
checksum_type: sha256
description:
  ![banner](featurewiz_logos.png)
  <p>


  <ol>
  <li><b>featurewiz 2.0 is here. You have two small performance improvements:</li> </b>
  1. SULOV method now has a higher correlation limit of 0.90 as default. This means fewer variables are removed and hence more vars are selected. You can always set it back to the old limit by setting `corr_limit`=0.70 if you want.<br>
  2. Recursive XGBoost algorithm is tighter in that it selects fewer features in each iteration. To see how many it selects, set `verbose` flag to 1. <br>
  The net effect is that the same number of features are selected but they are better at producing more accurate models. Try it out and let us know. </ol>


  <ol>
  <li>featurewiz now has a new input: `skip_sulov` flag is here. You can set it to `True` to skip the SULOV method if needed.</li>
  </ol>


  <ol>
  <li><b>featurewiz now has a "silent" mode which you can set using the "verbose=0" option.</b> It will run silently with no charts or graphs and very minimal verbose output. Hope this helps!<br></li>
  </ol>

  <ol>
  <li><b>featurewiz as of version 0.1.50 or higher has multiple high performance models</b> that you can use to build highly performant models once you have completed feature selection. These models are based on LightGBM and XGBoost and have even Stacking and Blending ensembles. You can find them as functions starting with "simple_" and "complex_" under featurewiz. All the best!<br></li>
  </ol>

  <ol>
  <li><b>featurewiz as of version 0.1.04 or higher can read `feather-format` files at blazing speeds.</b> See example below on how to convert your CSV files to feather. Then you can feed those '.ftr' files to featurewiz and it will read it 10-100X faster!<br></li>
  </ol>

  ![feather_example](feather_example.jpg)
  <ol>
  <li><b>featurewiz now runs at blazing speeds thanks to using GPU's by default.</b> So if you are running a large data set on Colab and/or Kaggle, make sure you turn on the GPU kernels. featurewiz will automatically detect that GPU is turned on and will utilize XGBoost using GPU-hist. That will ensure it will crunch your datasets even faster. I have tested it with a very large data set and it reduced the running time from 52 mins to 1 minute! That's a 98% reduction in running time using GPU compared to CPU!<br></li>
  </ol>

  <ol>
  <li><b>FeatureWiz as of version 0.0.90 or higher is a scikit-learn compatible feature selection transformer.</b> You can perform fit and predict as follows. You will get a Transformer that can select the top variables from your dataset. You can also use it in sklearn pipelines as a Transformer.</li>

  ```
  from featurewiz import FeatureWiz
  features = FeatureWiz(corr_limit=0.70, feature_engg='', category_encoders='',
  dask_xgboost_flag=False, nrows=None, verbose=2)
  X_train_selected = features.fit_transform(X_train, y_train)
  X_test_selected = features.transform(X_test)
  features.features  ### provides the list of selected features ###
  ```

  <li><b>Featurewiz is now upgraded with XGBOOST 1.5.1 for DASK for blazing fast performance</b> even for very large data sets! Set `dask_xgboost_flag = True` to run dask + xgboost.</li>
  <li><b>Featurewiz now runs with a default setting of `nrows=None`.</b> This means it will run using all rows. But if you want it to run faster, then you can change `nrows` to 1000 or whatever, so it will sample that many rows and run.</li>
  <li><b>Featurewiz has lots of new fast model builder functions:</b> that you can use to build highly performant models with the features selected by featurewiz. They are:<br>
  1. <b>simple_LightGBM_model()</b> - simple regression and classification with one target label<br>
  2. <b>simple_XGBoost_model()</b> - simple regression and classification with one target label<br>
  3. <b>complex_LightGBM_model()</b> - more complex multi-label and multi-class models<br>
  4. <b>complex_XGBoost_model()</b> - more complex multi-label and multi-class models<br>
  5. <b>Stacking_Classifier()</b>: Stacking model that can handle multi-label, multi-class problems<br>
  6. <b>Stacking_Regressor()</b>: Stacking model that can handle multi-label, regression problems<br>
  7. <b>Blending_Regressor()</b>: Blending model that can handle multi-label, regression problems<br></li>
  </ol>


  As of June 2022, thanks to [arturdaraujo](https://github.com/arturdaraujo), featurewiz is now available on conda-forge. You can try:<br>

  ```
   conda install -c conda-forge featurewiz
  ```




  ```
   !pip install featurewiz --ignore-installed --no-deps
   !pip install xlrd --ignore-installed --no-deps
  ```



  ```
   !pip install Pillow==9.0.0
  ```


  `featurewiz` a new python library for creating and selecting the best features in your data set fast!
  `featurewiz` can be used in one or two ways. Both are explained below.


  <p>The first step is not absolutely necessary but it can be used to create new features that may or may not be helpful (be careful with automated feature engineering tools!).<p>
  1. <b>Performing Feature Engineering</b>: One of the gaps in open source AutoML tools and especially Auto_ViML has been the lack of feature engineering capabilities that high powered competitions such as Kaggle required. The ability to create "interaction" variables or adding "group-by" features or "target-encoding" categorical variables was difficult and sifting through those hundreds of new features to find best features was difficult and left only to "experts" or "professionals". featurewiz was created to help you in this endeavor.<br>
  <p>featurewiz now enables you to add hundreds of such features with a single line of code. Set the "feature_engg" flag to "interactions", "groupby" or "target" and featurewiz will select the best encoders for each of those options and create hundreds (perhaps thousands) of features in one go. Not only that, using the next step, featurewiz will sift through numerous such variables and find only the least correlated and most relevant features to your model. All in one step!.<br>

  You must use this syntax for feature engg. Otherwise, featurewiz will give an error:

  ```
  import featurewiz as FW
  outputs = FW.featurewiz(dataname=train, target=target, corr_limit=0.70, verbose=2, sep=',',
  		header=0, test_data='',feature_engg='', category_encoders='',
  		dask_xgboost_flag=False, nrows=None)
  ```

  ![feature_engg](feature_engg.jpg)


  <p>The second step is Feature Selection. `featurewiz` uses the MRMR (Minimum Redundancy Maximum Relevance) algorithm as the basis for its feature selection. <br>
  <b> Why do Feature Selection</b>? Once you have created 100's of new features, you still have three questions left to answer:
  1. How do we interpret those newly created features?
  2. Which of these features is important and which are useless? How many of them are highly correlated to each other causing redundancy?
  3. Does the model overfit now on these new features and perform better or worse than before?
  <br>
  All are very important questions and featurewiz answers them by using the SULOV method and Recursive XGBoost to reduce features in your dataset to the best "minimum optimal" features for the model.<br>
  <p><b>SULOV</b>: SULOV stands for `Searching for Uncorrelated List of Variables`. The SULOV algorithm is based on the Minimum-Redundancy-Maximum-Relevance (MRMR) <a href="https://towardsdatascience.com/mrmr-explained-exactly-how-you-wished-someone-explained-to-you-9cf4ed27458b">algorithm explained in this article</a> as one of the best feature selection methods. To understand how MRMR works and how it is different from `Boruta` and other feature selection methods, see the chart below. Here "Minimal Optimal" refers to the MRMR and featurewiz kind of algorithms while "all-relevant" refers to Boruta kind of algorithms.<br>

  ![MRMR_chart](MRMR.png)
  <br>
  The working of the SULOV algorithm is as follows:
  <ol>
  <li>Find all the pairs of highly correlated variables exceeding a correlation threshold (say absolute(0.7)).
  <li>Then find their MIS score (Mutual Information Score) to the target variable. MIS is a non-parametric scoring method. So its suitable for all kinds of variables and target.
  <li>Now take each pair of correlated variables, then knock off the one with the lower MIS score.
  <li>What’s left is the ones with the highest Information scores and least correlation with each other.
  </ol>

  ![sulov](SULOV.jpg)

  <b>Recursive XGBoost</b>: Once SULOV has selected variables that have high mutual information scores with least less correlation amongst them, we use XGBoost to repeatedly find best features among the remaining variables after SULOV. The Recursive XGBoost method is explained in this chart below.
  Here is how it works:
  <ol>
  <li>Select all variables in data set and the full data split into train and valid sets.
  <li>Find top X features (could be 10) on train using valid for early stopping (to prevent over-fitting)
  <li>Then take next set of vars and find top X
  <li>Do this 5 times. Combine all selected features and de-duplicate them.
  </ol>

  ![xgboost](xgboost.jpg)

  <b>Building the simplest and most "interpretable" model</b>: featurewiz represents the "next best" step you must perform after doing feature engineering  since you might have added some highly correlated or even useless features when you use automated feature engineering. featurewiz ensures you have the least number of features needed to build a high performing or equivalent model.

  <b>A WORD OF CAUTION:</b> Just because you can engineer new features, doesn't mean you should always create tons of new features. You must make sure you understand what the new features stand for before you attempt to build a model with these (sometimes useless) features. featurewiz displays the SULOV chart which can show you how the 100's of newly created variables added to your dataset are highly correlated to each other and were removed. This will help you understand how feature selection works in featurewiz.


  <ul>
  <li><a href="#background">Background</a></li>
  <li><a href="#install">Install</a></li>
  <li><a href="#usage">Usage</a></li>
  <li><a href="#api">API</a></li>
  <li><a href="#maintainers">Maintainers</a></li>
  <li><a href="#contributing">Contributing</a></li>
  <li><a href="#license">License</a></li>
  </ul>



  ![background](featurewiz_background.jpg)

  To learn more about how featurewiz works under the hood, watch this [video](https://www.youtube.com/embed/ZiNutwPcAU0)<br>

  <p>featurewiz was designed for selecting High Performance variables with the fewest steps.

  In most cases, featurewiz builds models with 20% fewer features than your original data set with nearly the same or slightly lower performance (this is based on my trials. Your experience may vary).<br>
  <p>
  featurewiz is every Data Scientist's feature wizard that will:<ol>
  <li><b>Automatically pre-process data</b>: you can send in your entire dataframe "as is" and featurewiz will classify and change/label encode categorical variables changes to help XGBoost processing. It classifies variables as numeric or categorical or NLP or date-time variables automatically so it can use them correctly to model.<br>
  <li><b>Perform feature engineering automatically</b>: The ability to create "interaction" variables or adding "group-by" features or "target-encoding" categorical variables is difficult and sifting through those hundreds of new features is painstaking and left only to "experts". Now, with featurewiz you can create hundreds or even thousands of new features with the click of a mouse. This is very helpful when you have a small number of features to start with. However, be careful with this option. You can very easily create a monster with this option.
  <li><b>Perform feature reduction automatically</b>. When you have small data sets and you know your domain well, it is easy to perhaps do EDA and identify which variables are important. But when you have a very large data set with hundreds if not thousands of variables, selecting the best features from your model can mean the difference between a bloated and highly complex model or a simple model with the fewest and most information-rich features. featurewiz uses XGBoost repeatedly to perform feature selection. You must try it on your large data sets and compare!<br>
  <li><b>Explain SULOV method graphically </b> using networkx library so you can see which variables are highly correlated to which ones and which of those have high or low mutual information scores automatically. Just set verbose = 2 to see the graph. <br>
  <li><b>Build a fast LightGBM model </b> using the features selected by featurewiz. There is a function called "simple_lightgbm_model" which you can use to build a fast model. It is a new module, so check it out.<br>
  </ol>

  <b>***  Notes of Gratitude ***</b>:<br>
  <ol>
  <li><b>Alex Lekov</b> (https://github.com/Alex-Lekov/AutoML_Alex/tree/master/automl_alex) for his DataBunch and encoders modules which are used by the tool (although with some modifications).</li>
  <li><b>Category Encoders</b> library in Python : This is an amazing library. Make sure you read all about the encoders that featurewiz uses here: https://contrib.scikit-learn.org/category_encoders/index.html </li>
  </ol>



  **Prerequsites:**
  <ol>
  <li><b>featurewiz is built using xgboost, dask, numpy, pandas and matplotlib</b>. It should run on most Python 3 Anaconda installations. You won't have to import any special libraries other than "dask", "XGBoost" and "networkx" library. Optionally, it uses LightGBM for fast modeling, which it installs automatically. </li>
  <li><b>We use "networkx" library for charts and interpretability</b>. <br>But if you don't have these libraries, featurewiz will install those for you automatically.</li>
  </ol>
  - [Anaconda](https://docs.anaconda.com/anaconda/install/)

  To clone featurewiz, it is better to create a new environment, and install the required dependencies:

  To install from PyPi:

  ```
  conda create -n <your_env_name> python=3.7 anaconda
  conda activate <your_env_name> # ON WINDOWS: `source activate <your_env_name>`
  pip install featurewiz --ignore-installed --no-deps
  pip install lazytransform
  or
  pip install git+https://github.com/AutoViML/featurewiz.git
  ```

  To install from source:

  ```
  cd <featurewiz_Destination>
  git clone git@github.com:AutoViML/featurewiz.git

  conda create -n <your_env_name> python=3.7 anaconda
  conda activate <your_env_name> # ON WINDOWS: `source activate <your_env_name>`
  cd featurewiz
  pip install -r requirements.txt
  ```



  As of Jan 2022, you now invoke featurewiz in two ways for two different goals. For feature selection, you must use the scikit-learn compatible fit and predict transformer syntax such as below.

  ```
  from featurewiz import FeatureWiz
  features = FeatureWiz(corr_limit=0.70, feature_engg='', category_encoders='', dask_xgboost_flag=False, nrows=None, verbose=2)
  X_train_selected = features.fit_transform(X_train, y_train)
  X_test_selected = features.transform(X_test)
  features.features  ### provides the list of selected features ###
  ```

  Alternatively, you can use featurewiz for feature engineering using this older syntax. Otherwise, it will give an error. If you want to combine feature engg and then feature selection, you must use this older syntax:

  ```
  import featurewiz as FW
  outputs = FW.featurewiz(dataname=train, target=target, corr_limit=0.70, verbose=2, sep=',',
  		header=0, test_data='',feature_engg='', category_encoders='',
  		dask_xgboost_flag=False, nrows=None)
  ```

  `outputs`: There will always be multiple objects in output. The objects in that tuple can vary:
  1. "features" and "train": It be a list (of selected features) and one dataframe (if you sent in train only)
  2. "trainm" and "testm": It can be two dataframes when you send in both test and train but with selected features.
  <ol>
  <li>Both the selected features and dataframes are ready for you to now to do further modeling.
  <li>Featurewiz works on any multi-class, multi-label data Set. So you can have as many target labels as you want.
  <li>You don't have to tell Featurewiz whether it is a Regression or Classification problem. It will decide that automatically.
  </ol>



  **Arguments**

  - `dataname`: could be a datapath+filename or a dataframe. It will detect whether your input is a filename or a dataframe and load it automatically.
  - `target`: name of the target variable in the data set.
  - `corr_limit`: if you want to set your own threshold for removing variables as highly correlated, then give it here. The default is 0.7 which means variables less than -0.7 and greater than 0.7 in pearson's correlation will be candidates for removal.
  - `verbose`: This has 3 possible states:
    - `0` limited output. Great for running this silently and getting fast results.
    - `1` more verbiage. Great for knowing how results were and making changes to flags in input.
    - `2` SULOV charts and output. Great for finding out what happens under the hood for SULOV method.
  - `test_data`: If you want to transform test data in the same way you are transforming dataname, you can.
      test_data could be the name of a datapath+filename or a dataframe. featurewiz will detect whether
          your input is a filename or a dataframe and load it automatically. Default is empty string.
  - `feature_engg`: You can let featurewiz select its best encoders for your data set by setting this flag
      for adding feature engineering. There are three choices. You can choose one, two or all three.
      - `interactions`: This will add interaction features to your data such as x1*x2, x2*x3, x1**2, x2**2, etc.
      - `groupby`: This will generate Group By features to your numeric vars by grouping all categorical vars.
      - `target`:  This will encode and transform all your categorical features using certain target encoders.<br>
      Default is empty string (which means no additional features)
  - `category_encoders`: Instead of above method, you can choose your own kind of category encoders from the list below.
      Recommend you do not use more than two of these. Featurewiz will automatically select only two from your list. Default is empty string (which means no encoding of your categorical features)<br> These descriptions are derived from the excellent <a href="https://contrib.scikit-learn.org/category_encoders/"> category_encoders</a> python library. Please check it out!
      - `HashingEncoder`: HashingEncoder is a multivariate hashing implementation with configurable dimensionality/precision. The advantage of this encoder is that it does not maintain a dictionary of observed categories. Consequently, the encoder does not grow in size and accepts new values during data scoring by design.
      - `SumEncoder`: SumEncoder is a Sum contrast coding for the encoding of categorical features.
      - `PolynomialEncoder`: PolynomialEncoder is a Polynomial contrast coding for the encoding of categorical features.
      - `BackwardDifferenceEncoder`: BackwardDifferenceEncoder is a Backward difference contrast coding for encoding categorical variables.
      - `OneHotEncoder`: OneHotEncoder is the traditional Onehot (or dummy) coding for categorical features. It produces one feature per category, each being a binary.
      - `HelmertEncoder`: HelmertEncoder uses the Helmert contrast coding for encoding categorical features.
      - `OrdinalEncoder`: OrdinalEncoder uses Ordinal encoding to designate a single column of integers to represent the categories in your data. Integers however start in the same order in which the categories are found in your dataset. If you want to change the order, just sort the column and send it in for encoding.
      - `FrequencyEncoder`: FrequencyEncoder is a count encoding technique for categorical features. For a given categorical feature, it replaces the names of the categories with the group counts of each category.
      - `BaseNEncoder`: BaseNEncoder encodes the categories into arrays of their base-N representation. A base of 1 is equivalent to one-hot encoding (not really base-1, but useful), a base of 2 is equivalent to binary encoding. N=number of actual categories is equivalent to vanilla ordinal encoding.
      - `TargetEncoder`: TargetEncoder performs Target encoding for categorical features. It supports following kinds of targets: binary and continuous. For multi-class targets it uses a PolynomialWrapper.
      - `CatBoostEncoder`: CatBoostEncoder performs CatBoost coding for categorical features. It supports the following kinds of targets: binary and continuous. For polynomial target support, it uses a PolynomialWrapper. This is very similar to leave-one-out encoding, but calculates the values “on-the-fly”. Consequently, the values naturally vary during the training phase and it is not necessary to add random noise.
      - `WOEEncoder`: WOEEncoder uses the Weight of Evidence technique for categorical features. It supports only one kind of target: binary. For polynomial target support, it uses a PolynomialWrapper. It cannot be used for Regression.
      - `JamesSteinEncoder`: JamesSteinEncoder uses the James-Stein estimator. It supports 2 kinds of targets: binary and continuous. For polynomial target support, it uses PolynomialWrapper.
      For feature value i, James-Stein estimator returns a weighted average of:
      The mean target value for the observed feature value i.
      The mean target value (regardless of the feature value).
      - `dask_xgboost_flag`: Default is False. Set to True to use dask_xgboost estimator. You can turn it off if it gives an error. Then it will use pandas and regular xgboost to do the job.
      - `nrows`: default `None`. You can set the number of rows to read from your datafile if it is too large to fit into either dask or pandas. But you won't have to if you use dask.
  **Return values**
  -   `outputs`: Output is always a tuple. We can call our outputs in that tuple: out1 and out2.
      -   `out1` and `out2`: If you sent in just one dataframe or filename as input, you will get:
          - 1. `features`: It will be a list (of selected features) and
          - 2. `trainm`: It will be a dataframe (if you sent in a file or dataname as input)
      -   `out1` and `out2`: If you sent in two files or dataframes (train and test), you will get:
          - 1. `trainm`: a modified train dataframe with engineered and selected features from dataname and
          - 2. `testm`: a modified test dataframe with engineered and selected features from test_data.



  * [@AutoViML](https://github.com/AutoViML)



  See [the contributing file](CONTRIBUTING.md)!

  PRs accepted.



  Apache License 2.0 © 2020 Ram Seshadri


  This project is not an official Google project. It is not supported by Google and Google specifically disclaims all warranties as to its quality, merchantability, or fitness for a particular purpose.


pkgId: 7ae8c7a98119e1d7eef2011d973daae03212855acfc9445d6cf81e7b35d4bde2
name: python-fedfind
arch: src
version: 5.0.1
epoch: 0
release: 1
summary: Fedora Finder finds Fedora - images, more to come?
url: https://pagure.io/fedora-qa/fedfind
rpm_license: GPLv3+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-643b572d-2d41-4846-9081-4cb760ab9263
location_href: 00003617-python-fedfind/python-fedfind-5.0.1-1.src.rpm
checksum_type: sha256
description:
  Fedora Finder finds Fedoras. It provides a CLI and Python module that find and providing identifying information about Fedora images and release trees. Try it out:

      fedfind images --release 35
      fedfind images --release 36 --milestone Beta
      fedfind images --release 36 --milestone Beta --compose 1 --respin 1
      fedfind images --dist Fedora-Container --release 33 --compose 20211123 --respin 0
      fedfind images --compose 20211210
      fedfind images --composeid Fedora-Rawhide-20211210.n.0
      fedfind images --release 34 --label Beta-1.1
      fedfind images --release 5 --arch x86_64,ppc
      fedfind images --release 15 --search desk

  Fedora has stable releases, archive releases, really old archive releases, 'milestone' releases (Alpha / Beta), release validation 'candidate' composes, unstable nightly composes, and post-release nightly composes, all in different places, with several different layouts. There is no canonical database of the locations and contents of all the various composes/releases. We in Fedora QA found we had several tools that needed to know where to find various images from various different types of releases, and little bits of knowledge about the locations and layouts of various releases/composes had been added to different tools. fedfind was written to consolidate all this esoteric knowledge in a single codebase with a consistent interface.

  fedfind lets you specify a release/compose using five values: 'dist', 'release', 'milestone', 'compose', and 'respin'. It can then find the location for that compose, tell you whether it exists, and give you the locations of all the images that are part of the release and what each image actually contains. As an alternative to this versioning concept, you can also find releases by their Pungi 4 / productmd 'compose ID' or 'compose label' (see examples above).

  fedfind runs on Python versions 2.7 and later (including 3.x).



  fedfind is packaged in the official Fedora and EPEL repositories: to install on Fedora run `dnf install fedfind`, on RHEL / CentOS with EPEL enabled, run `yum install fedfind`. You may need to enable the *updates-testing* repository to get the latest version.

  You can visit [the fedfind project page on Pagure][1], and clone with `git clone https://pagure.io/fedora-qa/fedfind.git`. Tarballs are released through [PyPI][2].

  You can use the fedfind CLI from the tarball without installing it, as `./fedfindlocal.py` from the root of the tarball (you will need `productmd` and `six`, and `cached_property` for Python < 3.8). You can of course copy the Python module anywhere you like and use it in place. To install both CLI and module systemwide, run `python setup.py install`.



  You can file issues and pull requests on [Pagure][1]. 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][3]:

      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.



  Some usage of fedfind relies on understanding the 'dist', 'release', 'milestone', 'compose', 'respin' versioning concept, so here is a quick primer. Note that if you intend to use fedfind solely with compose IDs or URLs for modern Pungi 4-generated composes, this section will be of less interest to you and you can probably skip it.

  In this section we will write release, milestone, compose, dist quints as (release, milestone, compose, respin, dist) with '' indicating an omitted value, e.g. (22, Beta, TC3, '', 'Fedora') or (22, '', '', '', 'Fedora'). Note 'dist' is usually 'Fedora', and this is its default value, used when it is not explicitly specified. Conceptually, 'dist' should come at the front, but in fact fedfind functions which accept these values tend to place it after the others, for historical reasons (it did not exist when fedfind's versioning scheme was created).

  * **Dist** is the term fedfind uses for what pungi and productmd refer to as the *shortname*; when fedfind was created this didn't really exist, but now the Fedora project produces many more composes than it used to, some with different *dists* / *shortnames*. In the compose with compose ID 'Fedora-Rawhide-20160301.n.0', the *dist* / *shortname* is *Fedora*; in a compose with compose ID 'Fedora-Container-33-20211123.0', the dist / shortname is *Fedora-Container*. *Fedora* is the **dist** for all mainline composes, and this is the default value. *Fedora-Container* is the **dist** for the nightly container image composes, produced once a day for each of the current stable releases, which at present are found only in their initial location as output by release engineering, and not in their mirrored locations. Similarly, *Fedora-Cloud* and *Fedora-IoT* are the **dists** for the nightly Cloud and IoT composes for the current stable releases. So e.g. (35, '', 20211210, 0, 'Fedora-Cloud') will find the (first) 2021-12-10 nightly Cloud compose for Fedora 35. *FedoraRespin* is the **dist** for the current post-release live respin compose in the `live-respins` directory; there is only ever one of these at a time (and note that these are only semi-official builds, provided by volunteers as a courtesy, they do not have the status of official composes). Any **release** or **compose** passed with the **dist** *FedoraRespin* is used as a *check*: if the existing contents of the `live-respins` directory don't match the expected release (number) or compose (date), fedfind will raise an exception instead of returning the `RespinRelease` instance.

  * **Release** is usually a Fedora release number, e.g. 27, 15 or 1. The only non-integer value that is accepted is 'Rawhide', for Rawhide nightly composes. These do not, properly speaking, have a definite release number associated with them: Rawhide is a perpetually rolling tree. The canonical versioning for Rawhide nightly composes is (Rawhide, '', YYYYMMDD, N) (where N is the respin number). Note that [python-wikitcms][4] uses almost the same versioning concept as fedfind, but Wikitcms 'validation events' for Rawhide nightly composes **do** have a release number: this is a property of the *validation event*, not of the *compose*. Thus there may be a Wikitcms *validation event* (24, Rawhide, 20151012, 1, 'Fedora') for the fedfind *compose* (Rawhide, '', 20151012, 1). fedfind and python-wikitcms both recognize this case and will attempt to convert each other's values for convenience.

  * **Milestone** indicates the milestone or the type of nightly compose. Valid milestones for current releases are *Beta*, *RC* (or *Final*, which means the same), *Branched*, and *Production*. The *Alpha* milestone existed until Fedora 25, but Fedora 26 and later releases have no Alpha; no Alpha releases can be found any more, as the Fedora 25 and earlier Alphas are now removed. fedfind will accept *Rawhide* as a milestone and convert it to the release - so ('', Rawhide, YYYYMMDD, N, 'Fedora') is not exactly *valid* but will be handled by the CLI and the `get_release` function and converted to (Rawhide, '', YYYYMMDD, N, 'Fedora'). Stable releases do not have a milestone; (23, RC, '', '', 'Fedora') will be accepted by `get_release` and the CLI but is treated internally as (23, '', '', '', 'Fedora'). The *Production* milestone indicates a so-called 'production' compose, which will usually also be an Alpha, Beta or Final 'candidate' compose - you may be able to find the same compose in two different places, for instance, with the *Production* milestone and a date-based **compose** and **respin**, or with the *Alpha*, *Beta* or *Final* milestone and a numeric **compose** and **respin**. It is approximately the same as the difference between searching for a production compose by compose ID and searching for it by compose label. See more on this in the *fedfind / Wikitcms vs. Pungi / productmd versioning* section below. Currently, the milestone value has no meaning for **dists** other than *Fedora*.

  The values *Cloud* and *Respin* are accepted for backwards compatibility purposes; they will be translated into a **dist** value of *Fedora-Cloud* or *FedoraRespin* respectively, and a blank **milestone** value. Versions of fedfind before 4.0 overloaded the **milestone** concept to handle these **dist** values, rather than properly handling them as **dists**. This functionality may be removed in a future major release.

  * **Compose** is the precise compose identifier (in cases where one is needed). For candidate composes it is always 1. For nightly composes it is a date in YYYYMMDD format. Stable releases and milestone releases do not have a compose.

  * **Respin** is an integer that's bumped any time a compose which would otherwise have the same version is repeated. The concept is taken from Pungi. If we attempt to build two Rawhide nightly composes on 2016-03-01, for instance, in fedfind's versioning they are (Rawhide, '', 20160301, 0) and (Rawhide, '', 20160301, 1). The corresponding Pungi / productmd 'compose ID'-style versioning is Fedora-Rawhide-20160301.n.0 and Fedora-Rawhide-20160301.n.1.

  Note that, as a convenience, fedfind will attempt to detect when a 'compose' value is in fact a combined compose and respin, and split it up - so you can specify the compose as `1.7` (for compose `1`, respin `7`) or `20160330.0` or `20160330.n.0` (both of which will be treated as compose `20160330`, respin `0`).

  Some examples:

  * Stable release: (23, '', '', '', 'Fedora')
  * Beta release: (24, Beta, '', '', 'Fedora')
  * Candidate: (24, Beta, 1, 7, 'Fedora')
  * Branched nightly: (24, Branched, 20160330, 0, 'Fedora')
  * Rawhide nightly: (Rawhide, '', 20160330, 1, 'Fedora')

  The test suite contains a bunch of tests for `get_release()` which incidentally may function as further examples of accepted usage. The fedfind CLI and `get_release()` are designed to guess omitted values in many cases, primarily to aid unattended usage, so e.g. a script can simply specify ('', Branched, '', '', 'Fedora') to run on the date's latest branched compose, without having to know what the current Branched release number is. More detailed information on various cases can be found in the `get_release()` function's docstring.



  The fedfind / Wikitcms versioning system was developed prior to the use of Pungi 4 for Fedora composes. The 'respin' concept from Pungi / productmd was then stuffed into the fedfind / Wikitcms versioning concept quite hastily to keep stuff working, and the productmd 'short' concept was also added to fedfind (usually under the name 'dist', which more closely describes its function in Fedora's context).

  For now, fedfind attempts to remain compatible with its legacy versioning approach as well as possible, while also supporting release identification using productmd versioning concepts. For instance, non-Pungi 4 composes have a sloppily-faked up *cid* attribute that at least will produce the correct release number when parsed like a 'compose ID', and `get_release()` can parse *most* (we aim for 'all', but we're also realists!) compose IDs, compose URLs and compose labels and return appropriate Release instances.

  Pungi has several version-ish concepts. The two most important to fedfind are the 'compose ID' and 'label'. All Pungi composes have a 'compose ID'. Not all have a label - only 'production' composes do (not 'nightly' or 'test' composes).

  A compose ID looks like `Fedora-24-20160301.n.0` (nightly), or `Fedora-Rawhide-20160302.t.1` (test), or `Fedora-24-20160303.0` (production). The release number, date and type of compose are always indicated somehow. For Fedora purposes the respin value should always be present. There is no kind of 'milestone' indicator.

  A label looks like `Alpha-1.2`, or `Beta-13.16`. There's a list of supported milestones (including Fedora's Alpha and Beta, but not Final - productmd uses RC instead). The first number is a public release number (RHEL has numbered milestone releases, unlike Fedora); the second is the respin value, which is considered more of a private/internal property. The system around which the scheme was designed appears to be that multiple "Alpha 1" respins are produced and tested and the final one is released as the public "Alpha 1" - thus the 'respin' concept covers approximately the same ground as Fedora's "TC" and "RC" composes used to.

  Mainline Fedora nightly composes are built just as you'd expect: the short name is 'Fedora', the release number is 'Rawhide' or the actual release number, the type is nightly, and the respin value is incremented if multiple composes are run on the same date (usually only if the first fails and we want to fix it before the next day). So Fedora nightly compose IDs look like `Fedora-Rawhide-20180119.n.0`, for instance.

  For milestone releases, Fedora builds 'production' composes with the label `release` number always set as 1, and the `respin` number incremented each time a compose is run. Thus for Fedora 24 Alpha validation testing we built `Alpha-1.1`, `Alpha-1.2`, `Alpha-1.3` and so on, until `Alpha-1.7` was ultimately released as the public Alpha release. Each of these composes also had a compose ID in `Fedora-24-20160323.0` format.

  The post-release nightly composes for Cloud, Container and IoT images are built almost as you'd expect, but with their type as 'production', not 'nightly'. So their compose IDs look like `Fedora-Cloud-27-20180119.0` or `Fedora-IoT-26-20171215.1`. Their labels are always `RC-(date).(respin)`, e.g. `RC-20180119.0`.

  Current fedfind should be capable in almost all cases of finding any findable Fedora compose by its compose ID or its label. The Fedora 'production' composes initially land in one location (on *kojipkgs*, alongside the nightly Branched and Rawhide composes, in directory names based on the compose ID) and are then mirrored to another location (on *alt*, in directory names based on the compose label). When you search for a given production / candidate compose whether you find its *kojipkgs* location or its *alt* location depends to some extent on how you search for it. Searching by compose label, or with something like *milestone* Alpha, *compose* 1, *respin* 7, will usually find its *alt* location (as a `Compose` class instance). Searching by compose ID, or with something like *milestone* Production, *compose* 20160323, *respin* 0, will usually find its *kojipkgs* location (as a `Production` class instance). However, you can set the `get_fedora_release` argument `promote` to `True` when searching by compose ID-ish values, and fedfind will attempt to find the `Compose` class (*alt* location) if it can. All fedfind release instances for Pungi 4 composes that actually exist should have the compose's compose ID as their `cid` attribute. If the compose has a label, it should be available as the `label` attribute.



  The `fedfind` CLI command gives you URLs for a release's images. For instance, `fedfind images -r 25` will print the URLs to all Fedora 25 images. You can filter the results in various ways. For more information, use `fedfind -h` and `fedfind images -h`.



  The Python module provides access to all fedfind's capabilities.



      import fedfind.release

      comp = fedfind.release.get_release(release=27)
      print comp.location
      for img in comp.all_images:
          print(img['url'])



  The main part of fedfind is the `Release` class, in `fedfind.release`. The primary entry point is `fedfind.release.get_release()` - in almost all cases you would start by getting a release using that function, which takes the `release`, `milestone`, `compose`, `respin`, and `dist` values that identify a release as its arguments and returns an instance of a `Release` subclass. You may also pass `url` (which is expected to be the `/compose` directory of a Pungi 4 compose, or as a special case, `https://dl.fedoraproject.org/pub/alt/live-respins/` for the semi-official post-release live respins which live there), `cid` (a Pungi 4 compose ID), or `label` (a Pungi 4 compose label) as an alternative to release/milestone/compose/respin. If you pass a `url` or `cid`, fedfind will run a cross-check to ensure the URL or CID of the discovered compose actually matches what you requested, and raise an exception if it does not.

  Anyone who used fedfind 1.x may remember the `Image` class for describing images and the `Query` class for doing searches. Both of those were removed from fedfind 2.x in favour of productmd-style metadata. All `Release` instances have a `metadata` dict which, if the release exists, will contain an `images` item which is itself a dict containing image metadata in the format of the productmd `images.json` file. For Pungi 4 releases this is read straight in from `images.json`; for pre-Pungi 4 releases fedfind synthesizes metadata in approximately the same format.

  You can also use the `all_images` convenience property; this is basically a flattened form of the images metadata. It's a list of image dicts, with each image dict in the same basic form as a productmd image dict, but with a `variant` entry added to indicate its variant (in the original productmd layout, the image dicts are grouped by variant and then by arch, which is kind of a pain to parse for many use cases). Note that since fedfind 3.1.0, from Fedora 9 onwards, `boot.iso` files are not included in `all_images`(or the lower-level `all_paths`).

  Since fedfind 3.3.0, image dicts also have `url` and `direct_url` entries added which provide full HTTPS URLs for the image files (so fedfind consumers no longer have to worry about constructing URLs by combining the release `location` or `alt_location` and the image `path`). `url` may go through the https://download.fedoraproject.org mirror redirector, which tries to spread load between mirrors. `direct_url` will always be a direct link. If the image is in the public mirror system, it will use the https://dl.fedoraproject.org mirror. Please use `url` unless you have a strong reason to use `direct_url`, to avoid excessive load on the server.

  You're expected to roll your own queries as appropriate for your use case. The reason fedfind 1.x had a dedicated query interface was primarily to try and speed things up for nightly composes by avoiding Koji queries where possible and tailoring them where not; since fedfind no longer ever has to perform slow Koji queries to find images, the need for the `Query` class is no longer there, you can always just operate on the data in `metadata['images']` or `all_images`. Note the image `subvariant` property is extremely useful for identifying images; you may also want to use the `identify_image` function from `productmd` for this purpose.

  All methods and functions in fedfind are documented directly: please do refer to the docstrings for information on their purposes. Attributes are documented with comments wherever their purpose is not immediately obvious.

  All methods, functions, attributes and properties not prefixed with a `_` are considered 'public'. Public method and function signatures and all public data types will only change in major releases. fedfind has no control over the form or content of the productmd metadata, so when and how that changes is out of our hands; I will make a best effort to keep the synthesized metadata for old composes broadly in line with whatever current Pungi produces, though it is not perfect now and likely never will be (it's kinda tailored to the information I actually need from it).



  fedfind can do some useful stuff that isn't just querying images for releases:

  * `Release.check_expected()` sees if all 'expected' images for the release are present.
  * `Release.previous_release()` takes a cut at figuring out what the 'previous' release was, though this is difficult and may not always work or return what you expect.
  * `helpers.get_current_release()` tells you what the current Fedora release is.



  fedfind has a bunch of knowledge about where Fedora keeps various composes wired in. For Pungi 4 compose types, finding the compose is about all fedfind has to do; it reads all the information about what images are in the compose out from the metadata and exposes it.

  For non-Pungi 4 composes (old stable releases) and Pungi 4 composes that are modified and have their metadata stripped (current stable and milestone releases), fedfind uses the `imagelist` files present on dl.fedoraproject.org, which contain lists of every image file in the entire tree. It finds the images for the specific compose being queried, then produces a path relative to the top of the mirror tree from the result. It can then combine that with a known prefix to produce an HTTPS URL.

  For metadata, fedfind first tries to see if the compose was originally produced with Pungi 4 and its metadata is available from PDC. It tries to guess the compose label from the image file names, and then a compose ID from the compose label, and then query PDC for metadata for that compose. If it is successful, it tries to match each image discovered from the `imagelist` file with an image dict from the original metadata, and combine the two so that the path information is correct but all other information for the image is taken from the original metadata, rather than synthesized by fedfind.

  For any discovered image no matching original image dict is found for, and for composes where no original metadata is available at all, fedfind synthesizes productmd-style metadata by analyzing the file path, guessing the properties that can be guessed and omitting others.

  In all cases, the result is that metadata and derived properties like `all_images` are as similar as possible for the different types of compose, so fedfind consumers can interact with non-Pungi 4 composes in the same way as Pungi 4 ones (to the extent of the metadata discovery and synthesis implementations, some stuff just isn't covered by the synthesis).





  With the use of small metadata files (for metadata composes) and still-quite-small image list files that are cached locally (for non-metadata composes), fedfind is much faster than it used to be. It can still take a few seconds to do all its parsing and analysis, though.

  When used as a module it caches properties and image lists for the lifetime of the release instance. The image list files are cached (in `~/.cache/fedfind`) based on the 'last modified time' provided by the server they come from: for each new release instance, fedfind will hit the server to retrieve the last modified time header, but if the cached copy matches that time, it will not re-download the file. These files are also quite small so will not take long to download in any case. If the download fails for some reason, but we do have a cached copy of the necessary lists, fedfind will work but log a warning that it's using cached data which may be outdated.

  Certain PDC queries, whose results are never expected to change, are also cached (again in `~/.cache/fedfind`), to speed up repeated searches and reduce load on PDC.

  If `~/.cache/fedfind` is not writeable for the user running fedfind, we fall back to using a temporary cache location that is only valid for the life of the process (and deleted on exit). This at least ensures fedfind will work in this case, but results in it being slower and doing more round trips.

  It shouldn't use too much bandwidth (though I haven't really measured), but obviously the server admins won't be happy with me if the servers get inundated with fedfind requests, so don't go *completely* crazy with it - if you want to do something script-y, please at least use the module and re-use release instances so the queries get cached.



  All releases other than stable releases disappear. fedfind can find stable releases all the way back to Fedora Core 1, but it is not going to find Fedora 14 Alpha, Fedora 19 Beta TC3, or nightlies from more than 2-3 weeks ago. This isn't a bug in fedfind - those images literally are not publicly available any more. Nightlies only stick around for a few weeks, candidate composes for a given milestone usually disappear once we've moved on another couple of milestones, and pre-releases (Alphas and Betas) usually disappear some time after the release in question goes stable. fedfind will only find what's actually there.

  Also note that fedfind is not designed to find even *notional* locations for old non-stable releases. Due to their ephemeral nature, the patterns it uses for nightly builds and candidate composes only reflect current practice, and will simply be updated any time that practice changes. It doesn't have a big store of knowledge of what exact naming conventions we used for old composes. If you do `comp = fedfind.release.Compose(12, 'Final', 'TC4')` and read out `comp.location` or something what you get is almost certainly *not* the location where Fedora 12 Final TC4 actually lived when it was around.



  fedfind does not, for the present, handle secondary arches at all. It *will* find PPC images for releases where PPC was a primary arch and i686 images for releases where i686 was a primary arch, though.



  This is pretty much all my fault. Note that aside from its external deps, older versions of fedfind (up to 1.1.2) included a copy of the `cached_property` implementation maintained [here][5] by Daniel Greenfield. The bundled copy was dropped with version 1.1.3.



  Fedora Finder is available under the GPL, version 3 or any later version. A copy is included as COPYING.

  [1]: https://pagure.io/fedora-qa/fedfind
  [2]: https://pypi.python.org/pypi/fedfind
  [3]: https://developercertificate.org/
  [4]: https://pagure.io/fedora-qa/python-wikitcms
  [5]: https://github.com/pydanny


pkgId: 738f8a391d90d578e06a37b1fa782dcafd1b3b54c8b8a8ca784d912bb59cd613
name: python-fedmsg
arch: src
version: 1.1.3
epoch: 0
release: 1
summary: Fedora Messaging Client API
url: https://github.com/fedora-infra/fedmsg/
rpm_license: LGPLv2+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-86fd1777-10b7-42de-baca-65c21a1e6a0d
location_href: 00003618-python-fedmsg/python-fedmsg-1.1.3-1.src.rpm
checksum_type: sha256
description:
  .. image:: https://img.shields.io/pypi/v/fedmsg.svg
      :target: https://pypi.python.org/pypi/fedmsg

  .. image:: https://img.shields.io/pypi/pyversions/fedmsg.svg
      :target: https://pypi.python.org/pypi/fedmsg

  .. image:: https://img.shields.io/pypi/l/fedmsg.svg
      :target: https://pypi.python.org/pypi/fedmsg

  .. image:: https://readthedocs.org/projects/docs/badge/?version=latest
      :alt: Documentation Status
      :target: https://fedmsg.readthedocs.io/en/latest/?badge=latest

  .. image:: https://secure.travis-ci.org/fedora-infra/fedmsg.png?branch=develop
     :alt: Build Status - develop branch
     :target: https://travis-ci.org/#!/fedora-infra/fedmsg

  .. image:: https://codecov.io/github/fedora-infra/fedmsg/coverage.svg?branch=develop
      :target: https://codecov.io/github/fedora-infra/fedmsg
      :alt: codecov.io


  fedmsg (Federated Message Bus) is a library built on ZeroMQ using the PyZMQ Python bindings.
  fedmsg aims to make it easy to connect services together using ZeroMQ publishers and
  subscribers.

  Note that this library is deprecated in favor of https://github.com/fedora-infra/fedora-messaging

  Check out the `documentation <https://fedmsg.readthedocs.io/en/stable/>`_ for installation and
  configuration instructions.


pkgId: d708781c28ffe623ab655914415580ba8a89ac14dac04a08f8f88238948fb83d
name: python-fedmsg-meta-fedora-infrastructure
arch: src
version: 0.31.0
epoch: 0
release: 1
summary: fedmsg metadata providers for Fedora Infrastructure's deployment
url: https://github.com/fedora-infra/fedmsg_meta_fedora_infrastructure/
rpm_license: LGPLv2+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0f267138-182d-474f-8a50-4bde4e3036b5
checksum_type: sha256
description:
  `fedmsg <http://fedmsg.com>`_ is a set of tools for knitting together services
  and webapps into a realtime messaging net.  This package contains metadata
  provider plugins for the primary deployment of that system:  `Fedora
  Infrastructure <https://fedoraproject.org/wiki/Infrastructure>`_.
  If you were to deploy fedmsg at another site, you would like want to write your
  own module like this one that could provide textual representations of *your*
  messages.
  Pop into ``#fedora-apps`` on freenode if you have questions or comments.

location_href:
  00003619-python-fedmsg-meta-fedora-infrastructure/python-fedmsg-meta-fedora-infrastructure-0.31.0-1.src.rpm


pkgId: 7df4c7dc4bd3756475ff788efadbfe05c95c71be41dc6bb32df55036083c7025
name: python-fedora-messaging
arch: src
version: 3.2.0
epoch: 0
release: 1
summary: A set of tools for using Fedora's messaging infrastructure
url: https://github.com/fedora-infra/fedora-messaging
rpm_license: GPLv2+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9e15831f-9cc9-436f-8406-9e36d324349a
location_href: 00003622-python-fedora-messaging/python-fedora-messaging-3.2.0-1.src.rpm
checksum_type: sha256
description:
  This package provides tools and APIs to make using Fedora's messaging
  infrastructure easier. These include a framework for declaring message schemas,
  a set of synchronous APIs to publish messages to AMQP brokers, a set of
  asynchronous APIs to consume messages, and services to easily run consumers.
  This library is designed to be a replacement for the `PyZMQ`_-backed `fedmsg`_
  library in Fedora Infrastructure.
  To get started, check out our `user guide`_.
  Looking to contribute? We appreciate it! Check out the `contributor guide`_.


pkgId: de3eaa6ab325b83fe99e0eadfe75bd6cfe09c565af260a27a5d726016d5cb169
name: python-feedfinder2
arch: src
version: 0.0.4
epoch: 0
release: 1
summary: Find the feed URLs for a website.
url: https://github.com/dfm/feedfinder2
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8ce53f39-92da-4f3a-ba8f-1a2175a90feb
location_href: 00010978-python-feedfinder2/python-feedfinder2-0.0.4-1.src.rpm
checksum_type: sha256
description:
  This is a Python library for finding links feeds on a website. It is based on
  `feedfinder <http://www.aaronsw.com/2002/feedfinder/>`_ - originally
  written by `Mark
  Pilgrim <http://en.wikipedia.org/wiki/Mark_Pilgrim_(software_developer)>`_ and
  subsequently maintained by `Aaron
  Swartz <http://en.wikipedia.org/wiki/Aaron_Swartz>`_ until his untimely death.


pkgId: 0fe98c31a2f31a1b65a01080bbd9306712c570a5a892f233dd75de29ccc3b49d
name: python-feedgen
arch: src
version: 0.9.0
epoch: 0
release: 1
summary: Feed Generator (ATOM, RSS, Podcasts)
url: https://lkiesow.github.io/python-feedgen
rpm_license: FreeBSD and LGPLv3+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1d4510be-41ac-47d2-8584-fbda68c3c02f
location_href: 00003623-python-feedgen/python-feedgen-0.9.0-1.src.rpm
checksum_type: sha256
description:
  This module can be used to generate web feeds in both ATOM and RSS format. It
  has support for extensions. Included is for example an extension to produce
  Podcasts.
  It is licensed under the terms of both, the FreeBSD license and the LGPLv3+.
  Choose the one which is more convenient for you. For more details have a look
  at license.bsd and license.lgpl.


pkgId: 02d9492035ac638700f9204f28c7433a2fa0fcbd434b28e5dc7bf5df125bcdd3
name: python-feedgenerator
arch: src
version: 2.0.0
epoch: 0
release: 1
summary: Standalone version of django.utils.feedgenerator
url: https://github.com/getpelican/feedgenerator
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7a258597-a8f5-4e22-b216-b9f01642a4cc
location_href: 00003624-python-feedgenerator/python-feedgenerator-2.0.0-1.src.rpm
checksum_type: sha256
description:
  |githubci| |pypi|
  FeedGenerator is a standalone version of Django’s feedgenerator_ module.
  It has evolved over time and includes numerous enhancements.


pkgId: e8fca11c53d138b0bd4b8853f25899d86facef4aa784cb7fd6879cdcc0a25bba
name: python-ffmpeg-normalize
arch: src
version: 1.26.6
epoch: 0
release: 1
summary: Normalize audio via ffmpeg
url: https://github.com/slhck/ffmpeg-normalize
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-654ba187-773d-44ac-b364-6c1873bf69c0
location_href: 00013862-python-ffmpeg-normalize/python-ffmpeg-normalize-1.26.6-1.src.rpm
checksum_type: sha256
description:
  You need Python 3.8 or higher.

  - ffmpeg 5.x is required
  - Download a [static build](https://ffmpeg.org/download.html) for your system
  - Place the `ffmpeg` executable in your `$PATH`, or specify the path to the binary with the `FFMPEG_PATH` environment variable in `ffmpeg-normalize`
  For instance, under Linux:
  ```bash
  wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
  mkdir -p ffmpeg
  tar -xf ffmpeg-release-amd64-static.tar.xz -C ffmpeg --strip-components=1
  sudo cp ffmpeg/ffmpeg /usr/local/bin
  sudo cp ffmpeg/ffprobe /usr/local/bin
  sudo chmod +x /usr/local/bin/ffmpeg /usr/local/bin/ffprobe
  ```
  For Windows, follow [this guide](https://www.wikihow.com/Install-FFmpeg-on-Windows).
  For macOS and Linux, you can also use [Homebrew](https://brew.sh):
  ```bash
  brew install ffmpeg
  ```
  Note that using distribution packages (e.g., `apt install ffmpeg`) is not recommended, as these are often outdated.

  For Python 3 and pip:
  ```bash
  pip3 install ffmpeg-normalize
  ```
  Or download this repository, then run `pip3 install .`.

  ```
  ffmpeg-normalize [-h]
      [-o OUTPUT [OUTPUT ...]] [-of OUTPUT_FOLDER]
      [-f] [-d] [-v] [-q] [-n] [-pr]
      [--version]
      [-nt {ebu,rms,peak}]
      [-t TARGET_LEVEL] [-p] [-lrt LOUDNESS_RANGE_TARGET] [-tp TRUE_PEAK] [--offset OFFSET] [--dual-mono] [--dynamic]
      [-c:a AUDIO_CODEC] [-b:a AUDIO_BITRATE] [-ar SAMPLE_RATE] [-koa]
      [-prf PRE_FILTER] [-pof POST_FILTER]
      [-vn] [-c:v VIDEO_CODEC]
      [-sn] [-mn] [-cn]
      [-ei EXTRA_INPUT_OPTIONS] [-e EXTRA_OUTPUT_OPTIONS]
      [-ofmt OUTPUT_FORMAT] [-ext EXTENSION]
      input [input ...]
  ```
  For more information, run `ffmpeg-normalize -h`, or read on.

  Please read this section for a high level introduction.
  **What does the program do?**
  The program takes one or more input files and, by default, writes them to a folder called `normalized`, using an `.mkv` container. All audio streams will be normalized so that they have the same (perceived) volume.
  **How do I specify the input?**
  Just give the program one or more input files as arguments. It works with most media files.
  **How do I specify the output?**
  You can specify one output file name for each input file with the `-o` option. In this case, the container format (e.g. `.wav`) will be inferred from the file name extension that you've given.
  Example:
  ```
  ffmpeg-normalize 1.wav 2.wav -o 1n.wav 2n.wav
  ```
  If you don't specify the output file name for an input file, the container format will be MKV, and the output will be written to `normalized/<input>.mkv`.
  Using the `-ext` option, you can supply a different output extension common to all output files, e.g. `-ext m4a`.
  **What will get normalized?**
  By default, all streams from the input file will be written to the output file. For example, if your input is a video with two language tracks and a subtitle track, both audio tracks will be normalized independently. The video and subtitle tracks will be copied over to the output file.
  **How will the normalization be done?**
  The normalization will be performed with the [`loudnorm` filter](http://ffmpeg.org/ffmpeg-filters.html#loudnorm) from FFmpeg, which was [originally written by Kyle Swanson](https://k.ylo.ph/2016/04/04/loudnorm.html). It will bring the audio to a specified target level. This ensures that multiple files normalized with this filter will have the same perceived loudness.
  **What codec is chosen?**
  The default audio encoding method is uncompressed PCM (`pcm_s16le`) to avoid introducing compression artifacts. This will result in a much higher bitrate than you might want, for example if your input files are MP3s.
  Some containers (like MP4) also cannot handle PCM audio. If you want to use such containers and/or keep the file size down, use `-c:a` and specify an audio codec (e.g., `-c:a aac` for ffmpeg's built-in AAC encoder).

  [Read the examples on the the wiki.](https://github.com/slhck/ffmpeg-normalize/wiki/examples)


  - `input`: Input media file(s)
  - `-o OUTPUT [OUTPUT ...], --output OUTPUT [OUTPUT ...]`: Output file names.
      Will be applied per input file.
      If no output file name is specified for an input file, the output files
      will be written to the default output folder with the name `<input>.<ext>`, where `<ext>` is the output extension (see `-ext` option).
      Example: `ffmpeg-normalize 1.wav 2.wav -o 1n.wav 2n.wav`
  - `-of OUTPUT_FOLDER, --output-folder OUTPUT_FOLDER`: Output folder (default: `normalized`)
      This folder will be used for input files that have no explicit output name specified.

  - `-f, --force`: Force overwrite existing files
  - `-d, --debug`: Print debugging output
  - `-v, --verbose`: Print verbose output
  - `-q, --quiet`: Only print errors
  - `-n, --dry-run`: Do not run normalization, only print what would be done
  - `-pr`, `--progress`: Show progress bar for files and streams
  - `--version`: Print version and exit

  - `-nt {ebu,rms,peak}, --normalization-type {ebu,rms,peak}`: Normalization type (default: `ebu`).
      EBU normalization performs two passes and normalizes according to EBU R128.
      RMS-based normalization brings the input file to the specified RMS level.
      Peak normalization brings the signal to the specified peak level.
  - `-t TARGET_LEVEL, --target-level TARGET_LEVEL`: Normalization target level in dB/LUFS (default: -23).
      For EBU normalization, it corresponds to Integrated Loudness Target in LUFS. The range is -70.0 - -5.0.
      Otherwise, the range is -99 to 0.
  - `-p, --print-stats`: Print first pass loudness statistics formatted as JSON to stdout.

  - `-lrt LOUDNESS_RANGE_TARGET, --loudness-range-target LOUDNESS_RANGE_TARGET`: EBU Loudness Range Target in LUFS (default: 7.0).
      Range is 1.0 - 50.0.
  - `--keep-loudness-range-target`: Keep the input loudness range target to allow for linear normalization.
  - `-tp TRUE_PEAK, --true-peak TRUE_PEAK`: EBU Maximum True Peak in dBTP (default: -2.0).
      Range is -9.0 - +0.0.
  - `--offset OFFSET`: EBU Offset Gain (default: 0.0).
      The gain is applied before the true-peak limiter in the first pass only. The offset for the second pass will be automatically determined based on the first pass statistics.
      Range is -99.0 - +99.0.
  - `--dual-mono`: Treat mono input files as "dual-mono".
      If a mono file is intended for playback on a stereo system, its EBU R128 measurement will be perceptually incorrect. If set, this option will compensate for this effect. Multi-channel input files are not affected by this option.
  - `--dynamic`: Force dynamic normalization mode.
      Instead of applying linear EBU R128 normalization, choose a dynamic normalization. This is not usually recommended.
      Dynamic mode will automatically change the sample rate to 192 kHz. Use -ar/--sample-rate to specify a different output sample rate.

  - `-c:a AUDIO_CODEC, --audio-codec AUDIO_CODEC`: Audio codec to use for output files.
      See `ffmpeg -encoders` for a list.
      Will use PCM audio with input stream bit depth by default.
  - `-b:a AUDIO_BITRATE, --audio-bitrate AUDIO_BITRATE`: Audio bitrate in bits/s, or with K suffix.
      If not specified, will use codec default.
  - `-ar SAMPLE_RATE, --sample-rate SAMPLE_RATE`: Audio sample rate to use for output files in Hz.
      Will use input sample rate by default, except for EBU normalization, which will change the input sample rate to 192 kHz.
  - `-koa, --keep-original-audio`: Copy original, non-normalized audio streams to output file
  - `-prf PRE_FILTER, --pre-filter PRE_FILTER`: Add an audio filter chain before applying normalization.
      Multiple filters can be specified by comma-separating them.
  - `-pof POST_FILTER, --post-filter POST_FILTER`: Add an audio filter chain after applying normalization.
      Multiple filters can be specified by comma-separating them.
      For EBU, the filter will be applied during the second pass.

  - `-vn, --video-disable`: Do not write video streams to output
  - `-c:v VIDEO_CODEC, --video-codec VIDEO_CODEC`: Video codec to use for output files (default: 'copy').
      See `ffmpeg -encoders` for a list.
      Will attempt to copy video codec by default.
  - `-sn, --subtitle-disable`: Do not write subtitle streams to output
  - `-mn, --metadata-disable`: Do not write metadata to output
  - `-cn, --chapters-disable`: Do not write chapters to output

  - `-ei EXTRA_INPUT_OPTIONS, --extra-input-options EXTRA_INPUT_OPTIONS`: Extra input options list.
      A list of extra ffmpeg command line arguments valid for the input, applied before ffmpeg's `-i`.
      You can either use a JSON-formatted list (i.e., a list of comma-separated, quoted elements within square brackets), or a simple string of space-separated arguments.
      If JSON is used, you need to wrap the whole argument in quotes to prevent shell expansion and to preserve literal quotes inside the string. If a simple string is used, you need to specify the argument with `-e=`.
      Examples: `-ei '[ "-f", "mpegts", "-r", "24" ]'` or `-ei="-f mpegts -r 24"`
  - `-e EXTRA_OUTPUT_OPTIONS, --extra-output-options EXTRA_OUTPUT_OPTIONS`: Extra output options list.
      A list of extra ffmpeg command line arguments valid for the output.
      You can either use a JSON-formatted list (i.e., a list of comma-separated, quoted elements within square brackets), or a simple string of space-separated arguments.
      If JSON is used, you need to wrap the whole argument in quotes to prevent shell expansion and to preserve literal quotes inside the string. If a simple string is used, you need to specify the argument with `-e=`.
      Examples: `-e '[ "-vbr", "3", "-preset:v", "ultrafast" ]'` or `-e="-vbr 3 -preset:v ultrafast"`
  - `-ofmt OUTPUT_FORMAT, --output-format OUTPUT_FORMAT`: Media format to use for output file(s).
      See `ffmpeg -formats` for a list.
      If not specified, the format will be inferred by ffmpeg from the output file name. If the output file name is not explicitly specified, the extension will govern the format (see '--extension' option).
  - `-ext EXTENSION, --extension EXTENSION`: Output file extension to use for output files that were not explicitly specified. (Default: `mkv`)

  The program additionally respects environment variables:
  - `TMP` / `TEMP` / `TMPDIR`
      Sets the path to the temporary directory in which files are
      stored before being moved to the final output directory.
      Note: You need to use full paths.
  - `FFMPEG_PATH`
      Sets the full path to an `ffmpeg` executable other than
      the system default or you can provide a file name available on $PATH

  This program has a simple API that can be used to integrate it into other Python programs.
  For more information see the [API documentation](https://htmlpreview.github.io/?https://github.com/slhck/ffmpeg-normalize/blob/master/docs/ffmpeg_normalize.html).


  Make sure you run ffmpeg v3.1 or higher and that `loudnorm` is part of the output when you run `ffmpeg -filters`. Many distributions package outdated ffmpeg 2.x versions, or (even worse), Libav's `ffmpeg` disguising as a real `ffmpeg` from the FFmpeg project.
  Some ffmpeg builds also do not have the `loudnorm` filter enabled.
  You can always download a static build from [their website](http://ffmpeg.org/download.html) and use that.
  If you have to use an outdated ffmpeg version, you can only use `rms` or `peak` as normalization types, but I can't promise that the program will work correctly.

  When you run `ffmpeg-normalize` and re-encode files with MP3 or AAC, you will inevitably introduce [generation loss](https://en.wikipedia.org/wiki/Generation_loss). Therefore, I do not recommend running this on your precious music collection, unless you have a backup of the originals or accept potential quality reduction. If you just want to normalize the subjective volume of the files without changing the actual content, consider using [MP3Gain](http://mp3gain.sourceforge.net/) and [aacgain](http://aacgain.altosdesign.com/).

  I chose MKV as a default output container since it handles almost every possible combination of audio, video, and subtitle codecs. If you know which audio/video codec you want, and which container is supported, use the output options to specify the encoder and output file name manually.

  See the [next section](#the-conversion-does-not-work-and-i-get-a-cryptic-ffmpeg-error).

  Maybe ffmpeg says something like:
  > Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
  Or the program says:
  > … Please choose a suitable audio codec with the `-c:a` option.
  One possible reason is that the input file contains some streams that cannot be mapped to the output file, or that you are using a codec that does not work for the output file. Examples:
  - You are trying to normalize a movie file, writing to a `.wav` or `.mp3` file. WAV/MP3 files only support audio, not video. Disable video and subtitles with `-vn` and `-sn`, or choose a container that supports video (e.g. `.mkv`).
  - You are trying to normalize a file, writing to an `.mp4` container. This program defaults to PCM audio, but MP4 does not support PCM audio. Make sure that your audio codec is set to something MP4 containers support (e.g. `-c:a aac`).
  The default output container is `.mkv` as it will support most input stream types. If you want a different output container, [make sure that it supports](https://en.wikipedia.org/wiki/Comparison_of_container_file_formats) your input file's video, audio, and subtitle streams (if any).
  Also, if there is some other broken metadata, you can try to disable copying over of metadata with `-mn`.
  Finally, make sure you use a recent version of ffmpeg. The [static builds](https://ffmpeg.org/download.html) are usually the best option.

  - **EBU R128** is an EBU standard that is commonly used in the broadcasting world. The normalization is performed using a psychoacoustic model that targets a subjective loudness level measured in LUFS (Loudness Unit Full Scale). R128 is subjectively more accurate than any peak or RMS-based normalization. More info on R128 can be found in the [official document](https://tech.ebu.ch/docs/r/r128.pdf) and [the `loudnorm` filter description](http://k.ylo.ph/2016/04/04/loudnorm.html) by its original author.
  - **Peak Normalization** analyzes the peak signal level in dBFS and increases the volume of the input signal such that the maximum in the output is 0 dB (or any other chosen threshold). Since spikes in the signal can cause high volume peaks, peak normalization might still result in files that are subjectively quieter than other, non-peak-normalized files.
  - **RMS-based Normalization** analyzes the [RMS power](https://en.wikipedia.org/wiki/Root_mean_square#Average_power) of the signal and changes the volume such that a new RMS target is reached. Otherwise it works similar to peak normalization.

  You absolutely can. However, you can get better accuracy and linear normalization with two passes of the filter. Since ffmpeg does not allow you to automatically run these two passes, you have to do it yourself and parse the output values from the first run.
  If ffmpeg-normalize is too over-engineered for you, you could also use an approach such as featured [in this Ruby script](https://gist.github.com/kylophone/84ba07f6205895e65c9634a956bf6d54) that performs the two `loudnorm` passes.
  If you want dynamic normalization (the loudnorm default), simply use ffmpeg with one pass, e.g.:
  ```bash
  ffmpeg -i input.mp3 -af loudnorm -c:a aac -b:a 192k output.m4a
  ```

  You should check out the `speechnorm` filter that is part of ffmpeg. It is a designed to be used in one pass, so you don't need this script at all.
  See [the documentation](https://ffmpeg.org/ffmpeg-all.html#speechnorm) for more information.

  You are probably using a 0.x version of this program. There are significant changes to the command line arguments and inner workings of this program, so please  adapt your scripts to the new one. Those changes were necessary to address a few issues that kept piling up; leaving the program as-is would have made it hard to extend it. You can continue using the old version (find it under *Releases* on GitHub or request the specific version from PyPi), but it will not be supported anymore.

  If you found this program useful and feel like giving back, feel free to send a donation [via PayPal](https://paypal.me/WernerRobitza).

  - [Create an AppleScript application to drop or open a folder of files in ffmpeg-normalize](https://prehensileblog.wordpress.com/2022/04/15/create-an-applescript-application-to-drop-or-open-a-folder-of-files-in-ffmpeg-normalize/)
  *(Have a link? Please propose an edit to this section via a pull request!)*

  <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
  <!-- prettier-ignore-start -->
  <!-- markdownlint-disable -->
  <table>
    <tbody>
      <tr>
        <td align="center" valign="top" width="14.28%"><a href="https://overtag.dk/"><img src="https://avatars.githubusercontent.com/u/374612?v=4?s=100" width="100px;" alt="Benjamin Balder Bach"/><br /><sub><b>Benjamin Balder Bach</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=benjaoming" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://chaos.social/@eleni"><img src="https://avatars.githubusercontent.com/u/511547?v=4?s=100" width="100px;" alt="Eleni Lixourioti"/><br /><sub><b>Eleni Lixourioti</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=Geekfish" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/thenewguy"><img src="https://avatars.githubusercontent.com/u/77731?v=4?s=100" width="100px;" alt="thenewguy"/><br /><sub><b>thenewguy</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=thenewguy" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/aviolo"><img src="https://avatars.githubusercontent.com/u/560229?v=4?s=100" width="100px;" alt="Anthony Violo"/><br /><sub><b>Anthony Violo</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=aviolo" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://jacobs.af/"><img src="https://avatars.githubusercontent.com/u/952830?v=4?s=100" width="100px;" alt="Eric Jacobs"/><br /><sub><b>Eric Jacobs</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=jetpks" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/kostalski"><img src="https://avatars.githubusercontent.com/u/34033008?v=4?s=100" width="100px;" alt="kostalski"/><br /><sub><b>kostalski</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=kostalski" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="http://justinppearson.com/"><img src="https://avatars.githubusercontent.com/u/8844823?v=4?s=100" width="100px;" alt="Justin Pearson"/><br /><sub><b>Justin Pearson</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=justinpearson" title="Code">💻</a></td>
      </tr>
      <tr>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/Nottt"><img src="https://avatars.githubusercontent.com/u/13532436?v=4?s=100" width="100px;" alt="ad90xa0-aa"/><br /><sub><b>ad90xa0-aa</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=Nottt" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/Mathijsz"><img src="https://avatars.githubusercontent.com/u/1891187?v=4?s=100" width="100px;" alt="Mathijs"/><br /><sub><b>Mathijs</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=Mathijsz" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/mpuels"><img src="https://avatars.githubusercontent.com/u/2924816?v=4?s=100" width="100px;" alt="Marc Püls"/><br /><sub><b>Marc Püls</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=mpuels" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="http://www.mvbattista.com/"><img src="https://avatars.githubusercontent.com/u/158287?v=4?s=100" width="100px;" alt="Michael V. Battista"/><br /><sub><b>Michael V. Battista</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=mvbattista" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="http://auto-editor.com"><img src="https://avatars.githubusercontent.com/u/57511737?v=4?s=100" width="100px;" alt="WyattBlue"/><br /><sub><b>WyattBlue</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=WyattBlue" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/g3n35i5"><img src="https://avatars.githubusercontent.com/u/17593457?v=4?s=100" width="100px;" alt="Jan-Frederik Schmidt"/><br /><sub><b>Jan-Frederik Schmidt</b></sub></a><br /><a href="https://github.com/slhck/ffmpeg-normalize/commits?author=g3n35i5" title="Code">💻</a></td>
      </tr>
    </tbody>
    <tfoot>
      <tr>
        <td align="center" size="13px" colspan="7">
          <img src="https://raw.githubusercontent.com/all-contributors/all-contributors-cli/1b8533af435da9854653492b1327a23a4dbd0a10/assets/logo-small.svg">
            <a href="https://all-contributors.js.org/docs/en/bot/usage">Add your contributions</a>
          </img>
        </td>
      </tr>
    </tfoot>
  </table>
  <!-- markdownlint-restore -->
  <!-- prettier-ignore-end -->
  <!-- ALL-CONTRIBUTORS-LIST:END -->

  The MIT License (MIT)
  Copyright (c) 2015-2022 Werner Robitza
  Permission is hereby granted, free of charge, to any person obtaining a
  copy of this software and associated documentation files (the
  "Software"), to deal in the Software without restriction, including
  without limitation the rights to use, copy, modify, merge, publish,
  distribute, sublicense, and/or sell copies of the Software, and to
  permit persons to whom the Software is furnished to do so, subject to
  the following conditions:
  The above copyright notice and this permission notice shall be included
  in all copies or substantial portions of the Software.
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


  * Production status stable.
  * Make install_requires more abstract.

  * Add "-hide_banner" remove "-nostdin" (#222)
    The `-nostdin` option is unnessary because of the `-y` option.
    Adding `-hide_banner` makes DEBUG statements shorter.
  * Homebrew works on linux too.
  * Explain ffmpeg installation steps.

  * Re-add requirements.txt to (maybe) fix conda-forge builds.

  * Fix requirements (#218)
  * Improve types.
  * Docs: add @g3n35i5 as a contributor.

  * Add ignore-revs file.
  * Formatting and import sorting.
  * Refactor: Improved logging behavior (#216)
  * Add "apt update" (#215)
  * Remove stalebot.
  * Update README.
  * Move to_ms and make CommandRunner more ergonomic (#212)
  * Upgrade workflow, get ffmpeg from apt (#213)
  * Turn FFmpegNormalizeError into a normal Exception (#211)
  * Remove manifest.in (#210)
  * Simplify logging (#209)
  * Use pep585 type hints (#207)
  * Don't use tempfile's private module function (#206)
  * Fix smaller type errors.
  * Reduce mypy errors 12 -> 4 (#204)
  * Make input validation more efficient.
    Make input validation more efficient
    Re-separate formats and exts

  * Bump requirements.
  * Add py.typed support.
  * General refactoring + type hints (#202)
  * Re-write to f-strings when possible (#201)
  * Remove unnecessary utf-8 declarations (#200)
    "-*- coding: utf-8 -*-" is a Python 2 construct and can be safely
    removed. Other utf-8 declarations are also unnecessary.

  * Add .editorconfig.
  * Link to API docs.
  * Add docs.
  * Add type hints, document everything, refactor some code.
  * Add more audio formats (#199)
  * Add python 3.11 to CI.
  * Docs: add WyattBlue as a contributor for code (#198)
    * docs: update README.md
    * docs: update .all-contributorsrc
  * Upgrade to Python 3.8 syntax (#197)
  * Fix python version in github tests.
  * Bump requirements to latest versions.
  * Add python 3.11 to list of languages.
  * Bump required python version to 3.8.
  * Various minor code cleanups and type hints.
  * Harmonize logger code.
  * Update python version in tests.
  * Docs: add @mvbattista as a contributor.
  * Docs: add @mpuels as a contributor.
  * Docs: add @Mathijsz as a contributor.
  * Docs: add @Nottt as a contributor.
  * Docs: add @justinpearson as a contributor.
  * Docs: add @kostalski as a contributor.
  * Docs: add @jetpks as a contributor.
  * Docs: add @aviolo as a contributor.
  * Docs: add @thenewguy as a contributor.
  * Docs: add @Geekfish as a contributor.
  * Docs: add @benjaoming as a contributor.
  * Reference speechnorm.

  * Update README.
  * Update list of pcm-incompatible extensions.

  * Constrain parsed ranges to avoid out of bounds, fixes #189.
  * Fix readme for extra-input-options.
  * Warn about dynamic mode only if not already set, fixes #187.

  * Add warning in case user specifies both --lrt and --keep-loudness-range-target.

  * Add option to keep loudness range target, fixes #181.
  * Only show warning about disabling video if not yet disabled, addresses #184.

  * Code formatting.
  * Extend warning for audio-only format to opus, fixes #184.

  * Update python requirements.
  * Prevent race condition in output dir creation.

  * Increase possible loudness range target to 50.

  * Add way to force dynamic mode, clarify usage, fixes #176.

  * Add warning for cover art, addresses #174 and #175.
  * Update README.

  * Improve issue templates.
  * Do not print ffmpeg progress in debug logs.
  * Remove unused import.
  * Replace which() function with shlex version.
  * Add python 3.10 in setup.py.
  * Clarify minimum ffmpeg version.

  * Properly detect -inf dB input.

  * Debug command output for ffmpeg commands.
  * Remove unneeded warning message.

  * Use astats instead of volumedetect filter, fixes #163.
    Allows floating point calculation.

  * Print warning for bit depths > 16, addresses #163.

  * Re-raise error on ffmpeg command failure.
    This prevents incorrectly telling the user that a normalized file was written when it wasn't.

  * Set tqdm lock for logging only when multiprocessing is available.
    Multiprocessing is not available in all environments, for example
    on AWS lambda python run time lacks /dev/shm, so trying to acquire
    a multiprocessing Lock throws an OSError. The module could also be
    missing in some cases (ex. Jython, although this library doesn't support
    Jython anyway).
    The solution to this is to only try to set the lock when multiprocessing
    is available. The tqdm library solves this in the same manner.
    For more details: https://github.com/slhck/ffmpeg-normalize/issues/156
  * Add instructions on how to run tests.

  * Bump requirements, should fix #155.
  * Move all examples to Wiki.
  * Update badge link.

  * Add python_requires to setup.py.

  * Improve README.
  * Add GitHub actions badge.
  * Add GitHub actions tests.
  * Properly convert EBU JSON values to float.
  * Switch to f strings, remove Python 3.5 support.
  * Format code with black.
  * Fix flake8 errors.
  * Factor out method.
  * WIP: new tests.
  * Log to stderr by default to enable JSON parsing.
  * Remove release script.

  * Format setup.py.
  * Switch progress to external lib.
  * Remove support for older versions.

  * Adjusted handling of FFMPEG_PATH for binaries available via $PATH (#149)
    * adjusted handling of FFMPEG_PATH for binaries available via $PATH
    fixes #147
    * adjusted use of %s to {} to match style
    * documented the feature
    * condensed error message as other lines are longer

  * Fix JSON output for multiple files.
  * Update badge URL.
  * Update README.md (#142)
    * Update README.md
    Added example of verifying levels
    Fixes #141
    * shorten example, add link to wiki page
  * Error if no ffmpeg exec exists.
  * Add stalebot.

  * Fixing stdin corruption caused by new subprocess (#138)
  * Update issue template.
  * Create FUNDING.yml.
  * Fix usage, addresses #132.

  * Manually specify usage string, fixes #132.
  * Fix local import for tests.

  * Add extra input options.

  * Add colorama to requirements, fixes #131.
  * Fix warning that is printed with default options.

  * Fix issue with output folder, fixes #126.
  * Fix typo in README's table of contents link to "File Input/Output". (#124)
  * Clarify readme, fixes #122.

  * Add warning for automatic sample rate conversion, addresses #122.
  * Ignore vscode folder.
  * Fix printing of errors in conversion.

  * Fix unit tests.
  * Improve handling of output file folder and errors.
  * Clarify usage of output options, add warning.
  * Improve documentation, fixes #120.
  * Do not include bump messages in changelog.

  * Use measured offset in second pass, fixes #119.
  * Update release instructions.
  * Remove author names from changelog.

  * Update release script and changelog template.
  * Apply pre-filters in all first passes, fixes #118.
    This allows properly reading the level for any kind of normalization, even if
    filters affect the loudness in the first pass.

  * Add all commits to changelog.
  * Remove python 2 support.
  * Add quiet option, fixes #116.
    - Add a new quiet option
    - Promote some warnings to actual errors that need to be shown
    - Add a very basic test case

  * Improve release script.
  * Python 3.8.

  * Only print length warning for non-EBU type normalization.

  * Remove build and dist folder on release.
  * Do not exit on error in batch processing.
    Simply process the next file if one has errors, addresses #110.

  * Use minimal dependency for tqdm.
  * Remove specific python version requirement.

  * Freeze tqdm version.
  * Update python to 3.7.
  * Improve release documentation.

  * Do not print stream warning when there is only one stream.
  * Remove previous dist versions before release.

  * Warn when duration cannot be read, fixes #105.
  * Update README.
    minor improvements in the description

  * Add output to unit test failures.
  * Fix input label for audio stream.

  * Add pre-and post-filter hooks, fixes #67.
    This allows users to specify filters to be run before or after the actual
    normalization call, using regular ffmpeg syntax.
    Only applies to audio.
  * Document audiostream class.
  * Warn when file is too short, fixes #87.
  * Update release method to twine.

  * Handle progress output from ffmpeg, fixes #10.
  * Merge pull request #99 from Nottt/patch-1.
    fix -cn description
  * Fix -cn description.
  * Add nicer headers for options in README.

  * Add version file in release script before committing.
  * Add option to keep original audio, fixes #83.
  * Add pypi badge.
  * Allow release script to add changelog for future version; upload to pypi.

  * Add release script.
  * Add small developer guide on releasing.
  * Move HISTORY.md to CHANGELOG.md.
  * Fix ffmpeg static build download location.

  * Bump version.
  * Cap measured input loudness, fixes #92.

  * Bump version.
  * Fix handling of errors with tqdm.
  * Improve readme.
  * Delete issue template.
  * Bump version.
  * Clarify extra argument options, move to main entry point.
  * Update issue templates.

  * Bump version.
  * Clarify extra argument options, move to main entry point.

  * Bump version.
  * Copy metadata from individual streams, fixes #86.
  * Add python version for pyenv.

  * Bump version.
  * Update README, fixes #79 and addresses #80.

  * Bump version.
  * Minor README updates.
  * Fix documentation of TMPDIR parameter.

  * Bump version.
  * New way to specify extra options.

  * Update README.
  * Decode strings in extra options.

  * Bump version.
  * Merge pull request #69 from UbiCastTeam/master.
    Stderror decoding ignoring utf8 encoding errors
  * Stderror decoding ignoring utf8 encoding errors.

  * Bump version.
  * Do not require main module in setup.py, fixes #68.

  * Bump version.
  * Remove dead code.
  * Fix for python2 division.
  * Update documentation.
  * Progress bar.
  * Remove imports from test file.
  * Fix travis file.
  * WIP: progress bar.
  * Minor typo in option group.
  * Add simple unit test for disabling chapters.

  * Fix unit test.
  * Bump version.
  * Add option to disable chapters, fixes #65, also fix issue with metadata.

  * Bump version.
  * Set default loudness target to -23, fixes #48.

  * Bump version.
  * Merge pull request #64 from UbiCastTeam/encoding-issue.
    Stdout and stderror decoding ignoring utf8 encoding errors
  * Stdout and stderror decoding ignoring utf8 encoding errors.

  * Bump version.
  * Add errors for impossible format combinations, fixes #60.
  * Fix ordering of output maps, fixes #63.
  * Improve documentation.

  * Add option to print first pass statistics.

  * Bump version.
  * Restrict parsing to valid JSON part only, fixes #61.
  * Add an example for MP3 encoding.
  * Update paypal link.

  * Bump version.
  * Add normalized folder to gitignore.
  * Do not print escape sequences on Windows.
  * Do not check for file existence, fixes #57.
  * Add github issue template.

  * Bump version.
  * Do not check for ffmpeg upon module import.

  * Bump version.
  * Rename function test.
  * Fix issue with wrong adjustment parameters, fixes #54.

  * Allow setting FFMPEG_PATH and document TMP.

  * Handle edge case for short input clips.

  * Bump version.
  * Do not try to remove nonexisting file in case of error in command.

  * Bump version.
  * Always streamcopy when detecting streams to avoid initializing encoder.
  * Fix handling of temporary file.
  * Add build status.
  * Travis tests.

  * Fix bug with target level for peak/RMS.
  * Update documentation formatting.
  * Update history.

  * Bump version.
  * Set default target to -23.

  * Add version info and test case for dry run.
  * New feature detection, add documentation, contributors guide etc.
  * WIP: v1.0 rewrite.

  * Use shutil.move instead of os.rename.

  * Allow setting threshold to 0.

  * Bump version.
  * Update HISTORY.md.
  * Merge pull request #37 from Mathijsz/fix-which-path-expansion.
    expand tilde and environment variables, fixes #36
  * Expand tilde and environment variables, fixes #36.
  * Update HISTORY.md.
  * Update README w.r.t. loudnorm filter.
  * Update README and indentation.

  * Bump version.
  * Fix handling of extra options with spaces.
  * Include test script.
  * Logging and other improvements.
  * Add test files.
  * Autopep8 that thing.
  * Logger improvements.
  * Add example for overwriting.

  * Allow overwriting input file, fixes #22.
  * Version bump.
  * Better handle cmd arguments.
  * Update README.md.
    add another example

  * Fix for problem introduced in 304e8df.

  * Fix pypi topics.
  * Bump version and README.
  * Fix issue where output was wrong format.
  * Add EBU R128 filter.
  * Use Markdown instead of RST for README/HISTORY.
  * Define file encode for python3, fixes #24.
  * Fix history.
  * Fix option -np.
  * Clarify merge option.
  * Minor documentation improvements.
    - change README from CRLF to LF
    - add "attenuated" in description
    - extend LICENSE year
    - add license to main README

  * Update for release.
  * Merge pull request #21 from mpuels/patch-1.
    Fix for #13
  * Fix for #13.
  * Mention Python 3.
    mention that Python 3 may work, just didn't have time to test
  * Fix README's code blocks.

  * Code cleanup, add option to set format and audio codec.

  * Add option for no prefix, fixes #20.
  * Handle multiple spaces in path; fixes issue #18.
  * Handle spaces in path, fixes #12.
  * Update README.rst.
  * Change default level back  to -26.
  * Typo in README example.
  * Update documentation.
  * Bump to v0.2.0.
    * Support for multiple files and output directories.
    * Support merging of audio with input file
    * Set audio codec and additional options
    * User-definable threshold
    * Better error handling and logging
    * Deprecates avconv
  * Change default level back to -28.
  * Merge pull request #15 from auricgoldfinger/master.
    Add extended normalisation options
  * Add extended normalisation options.
    - add program option to write output in a separate directory in stead of
       prefixing it
    - add program option to merge the normalized audio in the original
       (video) file rather than creating a separate WAV file
    - change the maximum setting: will now normalize so that max
       volume is set to 0, adjusted with the given level.
       e.g. : -m -l -5 will increase the audio level to max = -5.0dB
    - improve verbose logging: number of files are written to the
       info log
    - improve performance: check first whether the output file
       exists before calculating the volume levels + not modifying
       the file if the adjustment < 0.5dB (level is never exactly 0)
  * Update README, fixes #11.

  * Check for Windows .exe, fixes #10.
  * Check path and fix #9.
  * Merge pull request #8 from benjaoming/master.
    Add MANIFEST.in
  * Bump version.
  * Add manifest to include missing files in sdist.
  * Merge pull request #6 from jetpks/master.
    Fixed ffmpeg v2.6.3 compatibility and docopt config
  * Updated to work with ffmpeg v2.6.3, and fixed broken docopt config.
    ffmpeg update:
    ffmpeg v2.6.3 puts mean_volume on stderr instead of stdout, causing
    `output` in `ffmpeg_get_mean` to be completely empty, and no match for
    mean_volume or max_volume to be found.
    Fixed by adding `stderr=subprocess.PIPE` in both Popen calls in
    `run_command`, and combining stdout and stderr on return. We already
    exit with non-zero return, so combining stderr/stdout shouldn't cause
    any poor side-effects.
    docopt config:
    - args['--level'] was not recognizing its default because there was
      an errant comma between -l and --level, and it needed <level> after
      the arguments.
    - Fixed spacing for --max
    - Removed quotes around 'normalized' so single quote characters don't
      end up in the output file names.
  * Removed Windows carraige returns from __main__.py.
  * Merge pull request #5 from mvbattista/master.
    Installation update to ffmpeg
  * Installation update to ffmpeg.
  * Update to ffmpeg.
  * Update HISTORY.rst.
  * Update to ffmpeg.
  * Merge pull request #4 from benjaoming/rename.
    Rename project
  * Make at least one file mandatory.
  * Rename project and remove pyc file.
  * Merge pull request #2 from benjaoming/docopt-setuptools-avconv.
    Docopt, Setuptools, avconv compatibility
  * Use docopt.
  * Use normalize-audio when using avconv because it doesn't have a way to measure volume.
  * Functional setup.py, communicate with avconv/ffmpeg about overwriting.
  * Also detect avconv.
  * Use a main function instead.
  * Add a history for the project.
  * Move to more unique module name.
  * Update README.rst.
  * Change the README to rst (PyPi)
  * Delete .gitignore.
  * Update README.md.
  * Various improvements, fixes #1.
  * License.
  * Livense.
  * Update README.md.
  * Merge branch 'master' of https://github.com/slhck/audio-normalize.
  * Initial commit.
  * Initial commit.


pkgId: d765a01d2c5677df8ca4050ba40948cc0b1be361744fb83e46647b255aff3a64
name: python-ffmpy
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: A simple Python wrapper for ffmpeg
url: https://github.com/Ch00k/ffmpy
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9b99b76d-1e45-462a-bac6-45d3877a23c3
location_href: 00011230-python-ffmpy/python-ffmpy-0.3.0-1.src.rpm
checksum_type: sha256
description:
  ffmpy is a simplistic `FFmpeg <http://ffmpeg.org/>`_ command line wrapper. It implements a Pythonic interface for FFmpeg command line compilation and uses Python `subprocess <https://docs.python.org/2/library/subprocess.html>`_ module to execute compiled command line.


pkgId: ff7f3247e11ca0644d543ba7a4076b99e35abd9e2da4ff17036c5c7e2de5acd2
name: python-fiddler-client
arch: src
version: 1.7.0
epoch: 0
release: 1
summary: Python client for Fiddler Service
url: https://fiddler.ai
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5974e5ea-67a9-4e37-8c63-6f14208b65c7
location_href: 00010324-python-fiddler-client/python-fiddler-client-1.7.0-1.src.rpm
checksum_type: sha256
description:
  Python client for interacting with Fiddler. Provides a user-friendly interface to our REST API and enables event
  publishing for use with our monitoring features.


pkgId: 6ca7727085e58a7a9ab51138d3b58e4a4e196c263167288df5c954a424a5392d
name: python-file-magic
arch: src
version: 0.4.1
epoch: 0
release: 1
summary: Python front end for libmagic(3)
url: https://https://darwinsys.com/file/
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2012aecc-7fc6-46cb-8c33-d6e9635811f7
location_href: 00003630-python-file-magic/python-file-magic-0.4.1-1.src.rpm
checksum_type: sha256
description:
  This library is a Python ctypes interface to `libmagic`.




  You can install `file-magic` either with:

      python setup.py install
      
      easy_install .
      
      pip install file-magic




      import magic

      detected = magic.detect_from_filename('magic.py')
      print 'Detected MIME type: {}'.format(detected.mime_type)
      print 'Detected encoding: {}'.format(detected.encoding)
      print 'Detected file type name: {}'.format(detected.name)




  To run the tests:

      python setup.py test

rpm_license:
  Copyright (c) Ian F. Darwin 1986-1995. Software written by Ian F. Darwin and others; maintained 1995-present by Christos Zoulas and others. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice immediately at the beginning of the file, without modification, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


pkgId: df0946f9a4308011e83bff5345ac2ceae17529d0f2b32525dd116561f12fe8cc
name: python-filesplit
arch: src
version: 4.0.1
epoch: 0
release: 1
summary: Python module that is capable of splitting files and merging it back.
url: https://github.com/ram-jayapalan/filesplit
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c2ad49fe-0dd1-4930-8c8f-85f07988ae82
location_href: 00013104-python-filesplit/python-filesplit-4.0.1-1.src.rpm
checksum_type: sha256
description:
  File splitting and merging made easy for python programmers!
  This module
      * Can split files of any size into multiple chunks and also merge them back.
      * Can handle both structured and unstructured files.


pkgId: 1a24e004988e65c6c4a6e4b19af837837630616439b80dd84896a83a674e108a
name: python-filetype
arch: src
version: 1.2.0
epoch: 0
release: 1
summary: Infer file type and MIME type of any file/buffer. No external dependencies.
url: https://github.com/h2non/filetype.py
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4b125a5f-2379-4b57-b4b3-f8e6009b1aba
location_href: 00003631-python-filetype/python-filetype-1.2.0-1.src.rpm
checksum_type: sha256
description:
  Small and dependency free `Python`_ package to infer file type and MIME
  type checking the `magic numbers`_ signature of a file or buffer.
  This is a Python port from `filetype`_ Go package.


pkgId: 90e5ee74e914ad26e8278cac04ebcfde1b96bd8f61302d9a9475e8ee0504b345
name: python-fire
arch: src
version: 0.5.0
epoch: 0
release: 1
summary: A library for automatically generating command line interfaces.
url: https://github.com/google/python-fire
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-913e2e7e-25af-4adc-a530-5e30792f8be8
location_href: 00009463-python-fire/python-fire-0.5.0-1.src.rpm
checksum_type: sha256
description:
  Python Fire is a library for automatically generating command line interfaces
  (CLIs) with a single line of code.

  It will turn any Python module, class, object, function, etc. (any Python
  component will work!) into a CLI. It's called Fire because when you call Fire(),
  it fires off your command.


pkgId: 8f20767ccd7b288b94ce2cf3592ddf4bd5df86c05c165fcf049b10fa52ef68c8
name: python-firehose
arch: src
version: 0.5
epoch: 0
release: 1
summary: Library for working with output from static code analyzers
url: https://github.com/fedora-static-analysis/firehose
rpm_license: LGPL2.1 or later
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-95d309ce-d3ff-4518-b9d8-e3f189c446bd
location_href: 00003633-python-firehose/python-firehose-0.5-1.src.rpm
checksum_type: sha256
description:
  "firehose" is a Python package intended for managing the results from
  code analysis tools (e.g. compiler warnings, static analysis, linters,
  etc).

  It currently provides parsers for the output of gcc, clang-analyzer, cppcheck,
  and findbugs.  These parsers convert the results into a common data model of
  Python objects, with methods for lossless roundtrips through a provided
  XML format.  There is also a JSON equivalent.

  It is available on pypi here:
    https://pypi.python.org/pypi/firehose

  and via git from:
    https://github.com/fedora-static-analysis/firehose

  The mailing list is:
    https://admin.fedoraproject.org/mailman/listinfo/firehose-devel

  Documentation can be read here:
    http://firehose.readthedocs.io/en/latest/

  Firehose is Free Software, licensed under the LGPLv2.1 or (at your
  option) any later version.

  It requires Python 2.7 or 3.2 onwards, and has been successfully tested
  with PyPy.

  It is currently of alpha quality.

  The API and serialization formats are not yet set in stone (and we're
  keen on hearing feedback before we lock things down more).

  Motivation: http://lists.fedoraproject.org/pipermail/devel/2012-December/175232.html

  I want to slurp the results from static code analysis into a database,
  which means coercing all of the results into some common interchange format,
  codenamed "firehose" (which could also be the name of the database).

  The idea is a common XML format that all tools can emit that:
    * describes a warning
    * gives source-code location of the warning: filename, function,
      line number.
    * optionally with a `CWE <http://cwe.mitre.org/about/index.html>`_
      identifier
    * potentially with other IDs and URLs, e.g. the ID "SIG30-C" with URL
      https://www.securecoding.cert.org/confluence/display/seccode/SIG30-C.+Call+only+asynchronous-safe+functions+within+signal+handlers
    * optionally describes code path to get there (potentially
      interprocedural across source files), potentially with "state"
      annotations (e.g. in the case of a reference-counting bug, it's useful
      to be able to annotate the changes to the refcount).

  together with a simple Python API for working with the format as a
  collection of Python objects (creating, write to XML, read from XML,
  modification, etc)

  I initially considered using JSON, but went with XML because if multiple
  tools are going to emit this, it's good to be able to validate things
  against a schema (see
  `firehose.rng <https://github.com/fedora-static-analysis/firehose/blob/master/firehose.rng>`_,
  a RELAX-NG schema).

  References to source files in the format can include a hash of the source
  file itself (e.g. SHA-1) so that you can uniquely identify which source file
  you were talking about.

  This format would be slurped into the DB for the web UI, and can have other
  things done to it without needing a server:
  e.g.:

    * convert it to the textual form of a gcc compilation error, so that
      Emacs etc can parse it and take you to the source
    * be turned into a simple HTML report locally on your workstation

  Projects using Firehose:

    * `mock-with-analysis <https://github.com/fedora-static-analysis/mock-with-analysis>`_
      can rebuild a source RPM, capturing the results of 4 different code
      analysis tools in Firehose format (along with all source files that
      were mentioned in any report).
    * The `"firehose" branch
      <http://git.fedorahosted.org/cgit/gcc-python-plugin.git/log/?h=firehose>`_
      of
      `cpychecker <https://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html>`_
      can natively emit Firehose XML reports
    * https://github.com/paultag/storz/blob/master/wrappers/storz-lintian


pkgId: fd2b5e83eda3b02a058f25b1dad81523a90cb3c51021d680d0d4bcf3e47fc3fc
name: python-first
arch: src
version: 2.0.2
epoch: 0
release: 1
summary: Return the first true value of an iterable.
url: http://github.com/hynek/first/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-25b13988-0dc6-4a75-a0ff-eb0e444fb34d
location_href: 00003635-python-first/python-first-2.0.2-1.src.rpm
checksum_type: sha256
description:
  ``first`` is an MIT-licensed Python package with a simple function that returns the first true value from an iterable, or ``None`` if there is none.
  If you need more power, you can also supply a ``key`` function that is used to judge the truth value of the element or a ``default`` value if ``None`` doesn’t fit your use case.
  N.B. I’m using the term “true” consistently with Python docs for ``any()`` and ``all()`` — it means that the value evaluates to true like: ``True``, ``1``, ``"foo"``, or ``[None]``.
  But **not**: ``None``, ``False``, ``[]``, or ``0``.
  In JavaScript, they call this “truthy”.


pkgId: c329390aef4c562431cf8f7a4d78f2c45af6ca13b6af3b094f5b8f36f5aa7d48
name: python-fissix
arch: src
version: 21.11.13
epoch: 0
release: 1
summary: Monkeypatches to override default behavior of lib2to3.
url: https://github.com/jreese/fissix
rpm_license: Python Software Foundation License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8d4d8907-7e9d-402d-9eee-40e4e7c5d5b0
location_href: 00003636-python-fissix/python-fissix-21.11.13-1.src.rpm
checksum_type: sha256
description:
  Backport of latest lib2to3, with enhancements.
  [![build status](https://travis-ci.org/jreese/fissix.svg?branch=master)](https://travis-ci.org/jreese/fissix)
  [![version](https://img.shields.io/pypi/v/fissix.svg)](https://pypi.org/project/fissix)
  [![license](https://img.shields.io/pypi/l/fissix.svg)](https://github.com/jreese/fissix/blob/master/LICENSE)
  [![code style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)


pkgId: ecbeff2f70297020a425d761a2448b36a80dbbc50fed02590c87d08163d0f4a7
name: python-fitsio
arch: src
version: 1.1.8
epoch: 0
release: 1
summary: A full featured python library to read from and write to FITS files.
url: https://github.com/esheldon/fitsio
rpm_license: GPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-51648e12-e92b-4d74-bc3e-75ee7b46cdf4
location_href: 00003638-python-fitsio/python-fitsio-1.1.8-1.src.rpm
checksum_type: sha256
description:
  A python library to read from and write to FITS files.

  [![Build Status (master)](https://travis-ci.com/esheldon/fitsio.svg?branch=master)](https://travis-ci.com/esheldon/fitsio)
  [![tests](https://github.com/esheldon/fitsio/workflows/tests/badge.svg)](https://github.com/esheldon/fitsio/actions?query=workflow%3Atests)



  This is a python extension written in c and python.  Data are read into
  numerical python arrays.

  A version of cfitsio is bundled with this package, there is no need to install
  your own, nor will this conflict with a version you have installed.




  - Read from and write to image, binary, and ascii table extensions.
  - Read arbitrary subsets of table columns and rows without loading all the data
    to memory.
  - Read image subsets without reading the whole image.  Write subsets to existing images.
  - Write and read variable length table columns.
  - Read images and tables using slice notation similar to numpy arrays.  This is like a more
    powerful memmap, since it is column-aware for tables.
  - Append rows to an existing table.  Delete row sets and row ranges. Resize tables,
      or insert rows.
  - Query the columns and rows in a table.
  - Read and write header keywords.
  - Read and write images in tile-compressed format (RICE,GZIP,PLIO,HCOMPRESS).
  - Read/write gzip files directly.  Read unix compress (.Z,.zip) and bzip2 (.bz2) files.
  - TDIM information is used to return array columns in the correct shape.
  - Write and read string table columns, including array columns of arbitrary
    shape.
  - Read and write complex, bool (logical), unsigned integer, signed bytes types.
  - Write checksums into the header and verify them.
  - Insert new columns into tables in-place.
  - Iterate over rows in a table.  Data are buffered for efficiency.
  - python 3 support, including python 3 strings




  ```python
  import fitsio
  from fitsio import FITS,FITSHDR






  filename='data.fits'
  data = fitsio.read(filename)


  data = fitsio.read(filename, rows=[35,1001], columns=['x','y'], ext=2)


  h = fitsio.read_header(filename)

  data,h = fitsio.read(filename, header=True)




  data = np.zeros(10, dtype=[('id','i8'),('ra','f8'),('dec','f8')])
  fitsio.write(filename, data)





  fitsio.write(filename, image)












  fits=fitsio.FITS('data.fits')


  print(fits)

  file: data.fits
  mode: READONLY
  extnum hdutype         hduname
  0      IMAGE_HDU
  1      BINARY_TBL      mytable



  >>> fits
  file: data.fits
  ... etc



  >>> fits[0]

  file: data.fits
  extension: 0
  type: IMAGE_HDU
  image info:
    data type: f8
    dims: [4096,2048]


  >>> fits['mytable']

  file: data.fits
  extension: 1
  type: BINARY_TBL
  extname: mytable
  rows: 4328342
  column info:
    i1scalar            u1
    f                   f4
    fvec                f4  array[2]
    darr                f8  array[3,2]
    dvarr               f8  varray[10]
    s                   S5
    svec                S6  array[3]
    svar                S0  vstring[8]
    sarr                S2  array[4,3]




  >>> fits[-1]
  ...







  img = fits[0].read()
  img = fits[0][:,:]


  img = fits[0][25:35, 45:55]



  data = fits[1].read()
  data = fits['mytable'].read()
  data = fits[1][:]




  data = fits[1].read(rows=[1,5], columns=['index','x','y'])



  data = fits[1][10:20]
  data = fits[1][10:20:2]
  data = fits[1][[1,5,18]]


  data = fits['SCI',2][10:20]


  data = fits[1][40:25]
  data = fits[1][40:25:-5]


  data = fits[1]['x'][:]



  data = fits[1]['x','y'][:]



  columns=['index','x','y']
  rows=[1,5]
  data = fits[1][columns][rows]



  fits=fitsio.FITS(filename,iter_row_buffer=1000)
  for row in fits[1]:
      print(row)


  for hdu in fits:
      data=hdu.read()










  fits = fitsio.FITS(filename,vstorage='object')

  data = fits[1].read(vstorage='object')
  print(data['dvarr'].dtype)
      dtype('object')



  hdu1 = fits[1]
  data = hdu1['x','y'][35:50]




  w=fits[1].where("x > 0.25 && y < 35.0")
  data = fits[1][w]


  h = fits[0].read_header()
  print(h['BITPIX'])
      -64

  fits.close()



  fits = FITS('test.fits','rw')




  nrows=35
  data = np.zeros(nrows, dtype=[('index','i4'),('vstr','O'),('x','f8'),
                                ('arr','f4',(3,4))])
  data['index'] = np.arange(nrows,dtype='i4')
  data['x'] = np.random.random(nrows)
  data['vstr'] = [str(i) for i in xrange(nrows)]
  data['arr'] = np.arange(nrows*3*4,dtype='f4').reshape(nrows,3,4)


  fits.write(data)


  array_list=[xarray,yarray,namearray]
  names=['x','y','name']
  fits.write(array_list, names=names)


  fits.write(dict_of_arrays)
  fits.write(dict_of_arrays, names=names) # control name order



  fits[-1].append(data2)


  fits[-1].insert_column('newcol', data)


  fits[-1].insert_column('newcol', data, colnum=2)


  fits[-1].write(data)


  fits[-1].write(data, firstrow=350)



  img=np.arange(2*3,dtype='i4').reshape(2,3)


  fits.write(img)


  fits.write(img, compress='rice')


  fimg=np.random.normal(size=2*3).reshape(2, 3)
  fits.write(img, compress='rice', qlevel=16, qmethod='SUBTRACTIVE_DITHER_2')


  fits.write(img, compress='gzip', qlevel=None)
  fits.write(fimg, compress='gzip', qlevel=None)


  fits[ext].write(img2)



  fits[ext].write(img3, start=[300,400])


  fits[ext].reshape([250,100])


  fits[-1].write_checksum()


  fits[-1].verify_checksum()






  hdict = {'somekey': 35, 'location': 'kitt peak'}
  fits.write(data, header=hdict)
  hlist = [{'name':'observer', 'value':'ES', 'comment':'who'},
           {'name':'location','value':'CTIO'},
           {'name':'photometric','value':True}]
  fits.write(data, header=hlist)
  hdr=FITSHDR(hlist)
  fits.write(data, header=hdr)


  fits[1].write_key(name, value, comment="my comment")



  fits[1].write_keys(records)


  fits[1].write_comment("observer JS")
  fits[1].write_comment("we had good weather")


  fits[1].write_history("processed with software X")
  fits[1].write_history("re-processed with software Y")

  fits.close()


  with FITS('path/to/file') as fits:
      data = fits[ext].read()

      
      if 'blah' in fits:
          data=fits['blah'].read()
      if 2 in f:
          data=fits[2].read()


  f[1].get_info()             # lots of info about the extension
  f[1].has_data()             # returns True if data is present in extension
  f[1].get_extname()
  f[1].get_extver()
  f[1].get_extnum()           # return zero-offset extension number
  f[1].get_exttype()          # 'BINARY_TBL' or 'ASCII_TBL' or 'IMAGE_HDU'
  f[1].get_offsets()          # byte offsets (header_start, data_start, data_end)
  f[1].is_compressed()        # for images. True if tile-compressed
  f[1].get_colnames()         # for tables
  f[1].get_colname(colnum)    # for tables find the name from column number
  f[1].get_nrows()            # for tables
  f[1].get_rec_dtype()        # for tables
  f[1].get_rec_column_descr() # for tables
  f[1].get_vstorage()         # for tables, storage mechanism for variable
                              


  f[1].lower           # If True, lower case colnames on output
  f[1].upper           # If True, upper case colnames on output
  f[1].case_sensitive  # if True, names are matched case sensitive
  ```




  The easiest way is using pip or conda. To get the latest release

      pip install fitsio

      
      pip install fitsio --upgrade

      
      pip install fitsio --upgrade --ignore-installed

      
      pip install fitsio --no-deps --upgrade --ignore-installed

      
      conda install -c conda-forge fitsio

  You can also get the latest source tarball release from

      https://pypi.python.org/pypi/fitsio

  or the bleeding edge source from github or use git. To check out
  the code for the first time

      git clone https://github.com/esheldon/fitsio.git

  Or at a later time to update to the latest

      cd fitsio
      git update

  Use tar xvfz to untar the file, enter the fitsio directory and type

      python setup.py install

  optionally with a prefix

      python setup.py install --prefix=/some/path



  - python 2 or python 3
  - a C compiler and build tools like `make`, `patch`, etc.
  - numpy (See the note below. Generally, numpy 1.11 or later is better.)




  There is a serious performance regression in numpy 1.10 that results
  in fitsio running tens to hundreds of times slower.  A fix may be
  forthcoming in a later release.  Please comment here if this
  has already impacted your work https://github.com/numpy/numpy/issues/6467




  The unit tests should all pass for full support.

  ```bash
  python -c "import fitsio; fitsio.test.test()"
  ```

  Some tests may fail if certain libraries are not available, such
  as bzip2.  This failure only implies that bzipped files cannot
  be read, without affecting other functionality.





  We bundle cfitsio partly because many deployed versions of cfitsio in the
  wild do not have support for interesting features like tiled image compression.
  Bundling a version that meets our needs is a safe alternative.



  Since numpy uses C order, FITS uses fortran order, we have to write the TDIM
  and image dimensions in reverse order, but write the data as is.  Then we need
  to also reverse the dims as read from the header when creating the numpy dtype,
  but read as is.



  As of version `1.0.0`, `fitsio` has been transitioned to `setuptools` for packaging
  and installation. There are many reasons to do this (and to not do this). However,
  at a practical level, what this means for you is that you may have trouble uninstalling
  older versions with `pip` via `pip uninstall fitsio`. If you do, the best thing to do is
  to manually remove the files manually. See this [stackoverflow question](https://stackoverflow.com/questions/402359/how-do-you-uninstall-a-python-package-that-was-installed-using-distutils)
  for example.



  As of version `1.0.0`, fitsio now supports Python 3 strings natively. This support
  means that for Python 3, native strings are read from and written correctly to
  FITS files. All byte string columns are treated as ASCII-encoded unicode strings
  as well. For FITS files written with a previous version of fitsio, the data
  in Python 3 will now come back as a string and not a byte string. Note that this
  support is not the same as full unicode support. Internally, fitsio only supports
  the ASCII character set.



  - HDU groups: does anyone use these? If so open an issue!


pkgId: f38dc90acd5f14d0d6ae3f5ee48b340739eb9b79aae40461ad8fe6def2f6f28d
name: python-fixtures
arch: src
version: 4.0.1
epoch: 0
release: 1
summary: Fixtures, reusable state for writing clean tests and more.
url: https://github.com/testing-cabal/fixtures
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-86209f72-daa2-4c45-872a-66de3fb83b29
location_href: 00010106-python-fixtures/python-fixtures-4.0.1-1.src.rpm
checksum_type: sha256
description:
  * Python 3.6+
    This is the base language fixtures is written in and for.
  * pbr
    Used for version and release management of fixtures.
  The ``fixtures[streams]`` extra adds:
  * testtools <https://launchpad.net/testtools> 0.9.22 or newer.
    testtools provides helpful glue functions for the details API used to report
    information about a fixture (whether its used in a testing or production
    environment).
  For use in a unit test suite using the included glue, one of:
  * bzrlib.tests
  * Or any other test environment that supports TestCase.addCleanup.
  Writing your own glue code is easy, or you can simply use Fixtures directly
  without any support code.
  To run the test suite for fixtures, testtools is needed.


pkgId: f28f92a8a156765c9d1a959dae538a9e76317bfbca6bad68339555f5f1172fcc
name: python-flake8-broken-line
arch: src
version: 0.6.0
epoch: 0
release: 1
summary: Flake8 plugin to forbid backslashes for line breaks
url: https://github.com/wemake-services/flake8-broken-line
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-629a861d-78be-4fb0-b3e5-cd9627f0fceb
location_href: 00010610-python-flake8-broken-line/python-flake8-broken-line-0.6.0-1.src.rpm
checksum_type: sha256
description:
  [![wemake.services](https://img.shields.io/badge/-wemake.services-green.svg?label=%20&logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAbUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2F%2F%2F5TvxDIAAAAIdFJOUwAjRA8xXANAL%2Bv0SAAAADNJREFUGNNjYCAIOJjRBdBFWMkVQeGzcHAwksJnAPPZGOGAASzPzAEHEGVsLExQwE7YswCb7AFZSF3bbAAAAABJRU5ErkJggg%3D%3D)](https://wemake-services.github.io)
  [![Build Status](https://github.com/wemake-services/flake8-broken-line/workflows/test/badge.svg?branch=master&event=push)](https://github.com/wemake-services/flake8-broken-line/actions?query=workflow%3Atest)
  [![codecov](https://codecov.io/gh/wemake-services/flake8-broken-line/branch/master/graph/badge.svg)](https://codecov.io/gh/wemake-services/flake8-broken-line)
  [![Python Version](https://img.shields.io/pypi/pyversions/flake8-broken-line.svg)](https://pypi.org/project/flake8-broken-line/)
  [![PyPI version](https://badge.fury.io/py/flake8-broken-line.svg)](https://pypi.org/project/flake8-broken-line/)
  [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide)

  Do not break the line! 🚨




  ```bash
  pip install flake8-broken-line
  ```

  It is also a valuable part of [`wemake-python-styleguide`](https://github.com/wemake-services/wemake-python-styleguide).




  Things we check with this plugin:

  ```python


  some_string = 'first line\
  second line'



  if 1 == 1 and \
      2 == 2:
      print('Do not do that!')


  some_object \
    .call_method(param1, param2) \
    .call_other(keyword=value) \
    .finalize()


  some_objects.call_method(
      param1, param2,
  ).call_other(
      keyword=value
  ).finalize()

  ```




  | Error code |                   Description                  |
  |:----------:|:----------------------------------------------:|
  |    N400    | Found backslash that is used for line breaking |




  MIT.


pkgId: 796e5f31dc276c6a468d0fa1078f84c009af7f801f7e000577e854d91df034f5
name: python-flake8-bugbear
arch: src
version: 23.3.23
epoch: 0
release: 1
url: https://github.com/PyCQA/flake8-bugbear
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ad239806-0d1f-4ae6-9b1b-e406dae19adc
location_href: 00009563-python-flake8-bugbear/python-flake8-bugbear-23.3.23-1.src.rpm
checksum_type: sha256
summary:
  A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle.


pkgId: 6d5ee3d689c0baca4390d97712ce667c9582d4b965ea1ed4f8980c0652281c5a
name: python-flake8-builtins
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: Check for python builtins being used as variables or parameters.
url: https://github.com/gforcada/flake8-builtins
rpm_license: GPL version 2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-980116ea-c065-478b-b77f-92fdfc8a8582
location_href: 00010149-python-flake8-builtins/python-flake8-builtins-2.1.0-1.src.rpm
checksum_type: sha256
description:
  Check for python builtins being used as variables or parameters.
  Imagine some code like this:
      def max_values(list, list2):
          max = list[0]
          for x in list:
              if x > 0:
                  max = x
          all_values = list()
          all_values.append(max)
          max = list2[0]
          for x in list2:
              if x > 0:
                  max = x
          all_values.append(max)
          return all_values
      max_values([3, 4, 5, ], [5, 6, 7])
  The last statement is not returning ``[5, 7]`` as one would expect,
  instead is raising this exception::
      Traceback (most recent call last):
        File "test.py", line 17, in <module>
          max_values([3,4,5], [4,5,6])
        File "bla.py", line 6, in max_values
          all_values = list()
      TypeError: 'list' object is not callable
  **Why?** Because ``max_value`` function's first argument is ``list`` a Python builtin.
  Python allows to override them, but although could be useful in some really specific use cases,
  the general approach is to **not** do that as code then can suddenly break without a clear trace.


pkgId: b147d33e526c224b76d46f5ee465ea31537df66194307e4a47fc2435ebbe5a30
name: python-flake8-colors
arch: src
version: 0.1.9
epoch: 0
release: 1
summary: Error highlight plugin for Flake8.
url: https://github.com/and3rson/flake8-colors
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e8079b1a-c78e-475d-8296-1ceef26ed674
location_href: 00011792-python-flake8-colors/python-flake8-colors-0.1.9-1.src.rpm
checksum_type: sha256
description:
  ANSI colors highlight for Flake8



  1. Install plugin:

      ```
      pip install flake8-colors
      ```

  2. Use the following example format in your `.flake8` file:

      ```
      format = ${cyan}s${reset}:${yellow_bold}d${reset}:${green_bold}d${reset}: ${red_bold}s${reset} s
      ```

  3. Enjoy!

    ![Example image](https://habrastorage.org/files/0a7/cf5/47c/0a7cf547cd03457385c23691a4f29869.png)



  There are three forms of tags:

    - ${COLOR}
    - ${COLOR_MODIFIER}
    - ${TAG}

  Colors:

    - black
    - red
    - green
    - yellow
    - blue
    - purple
    - cyan
    - white

  Modifiers:

    - fg
    - bold
    - underline
    - bg

  Tags:

    - bold
    - underline
    - reset



  Inspired by [flake8-format-ansi](https://github.com/jayvdb/flake8-format-ansi/)



  Just do whatever you want to do.


pkgId: 0e1c107f15d7e64f97b31d1bc18e3f1d9aa137b83cc42acc9c56ea04bbdbb008
name: python-flake8-debugger
arch: src
version: 4.1.2
epoch: 0
release: 1
summary: ipdb/pdb statement checker plugin for flake8
url: https://github.com/jbkahn/flake8-debugger
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c971d477-0dac-4d9e-85e4-5f10f4fd11ad
location_href: 00010472-python-flake8-debugger/python-flake8-debugger-4.1.2-1.src.rpm
checksum_type: sha256
description:
  Check for pdb;idbp imports and set traces, as well as `from IPython.terminal.embed import InteractiveShellEmbed` and `InteractiveShellEmbed()()`.
  This module provides a plugin for ``flake8``, the Python code checker.


pkgId: 2c8ed39612a778d405e77552910d1ae9c84432dea662c677a86c3f546d2f049a
name: python-flake8-django
arch: src
version: 1.1.5
epoch: 0
release: 1
summary: Plugin to catch bad style specific to Django Projects.
url: https://github.com/rocioar/flake8-django
rpm_license: GPL-3.0-or-later
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ba9249da-ca09-49ae-ba52-b2d3ba5e7115
location_href: 00012815-python-flake8-django/python-flake8-django-1.1.5-1.src.rpm
checksum_type: sha256
description:
  [![pypi](https://img.shields.io/pypi/v/flake8-django.svg)](https://pypi.python.org/pypi/flake8-django/)
  ![CI](https://github.com/rocioar/flake8-django/workflows/CI/badge.svg)[![Codecov](https://codecov.io/gh/rocioar/flake8-django/branch/master/graph/badge.svg)](https://codecov.io/gh/rocioar/flake8-django)
  [![Downloads](https://pepy.tech/badge/flake8-django)](https://pepy.tech/project/flake8-django)

  A flake8 plugin to detect bad practices on Django projects.



  Install from pip with:

  ```
  $ pip install flake8-django
  ```



  flake8-django uses pytest for tests. To run them use:

  ```
  $ pytest
  ````

  Run coverage report using:

  ```
  $ pytest --cov=.
  ```



  | Rule | Description |
  | ---- | ----------- |
  | [`DJ01`](https://github.com/rocioar/flake8-django/wiki/%5BDJ01%5D-Avoid-using-null=True-on-string-based-fields-such-as-CharField-and-TextField) | Avoid using null=True on string-based fields such as CharField and TextField |
  | [`DJ03`](https://github.com/rocioar/flake8-django/wiki/%5BDJ03%5D-Avoid-passing-locals()-as-context-to-a-render-function) | Avoid passing locals() as context to a render function |
  | [`DJ06`](https://github.com/rocioar/flake8-django/wiki/%5BDJ06%5D-Do-not-use-exclude-with-ModelForm,-use-fields-instead) | Do not use exclude with ModelForm, use fields instead |
  | [`DJ07`](https://github.com/rocioar/flake8-django/wiki/%5BDJ07%5D-Do-not-set-fields-to-'__all__'-on-ModelForm,-use-fields-instead) | Do not use `__all__` with ModelForm, use fields instead |
  | [`DJ08`](https://github.com/rocioar/flake8-django/wiki/%5BDJ08%5D-Model-does-not-define-__str__-method) | Model does not define `__str__` method |
  | [`DJ12`](https://github.com/rocioar/flake8-django/wiki/%5BDJ12%5D-Order-of-Model's-inner-classes,-methods,-and-fields-does-not-follow-the-Django-Style-Guide) | Order of Model's inner classes, methods, and fields does not follow the [Django Style Guide](https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style/#model-style) |
  | [`DJ13`](https://github.com/rocioar/flake8-django/wiki/DJ13---@receiver-decorator-must-be-on-top-of-all-the-other-decorators) | @receiver decorator must be on top of all the other decorators |

  More details about each of the Rules can be found on the [wiki page](https://github.com/rocioar/flake8-django/wiki).



  | Rule | Description |
  | ---- | ----------- |
  | [`DJ10`](https://github.com/rocioar/flake8-django/wiki/%5BDJ10%5D-Model-should-define-verbose_name-on-its-Meta-inner-class) | Model should define verbose_name on its Meta inner class |
  | [`DJ11`](https://github.com/rocioar/flake8-django/wiki/%5BDJ11%5D-Model-should-define-verbose_name_plural-on-its-Meta-inner-class) | Model should define verbose_name_plural on its Meta inner class |

  To enable optional rules you can use the `--select` parameter. It's default values are: E,F,W,C90.

  For example, if you wanted to enable `DJ10`, you could call `flake8` in the following way:
  ```
  flake8 --select=E,F,W,C90,DJ,DJ10
  ```

  You could also add it to your configuration file:
  ```
  [flake8]
  max-line-length = 120
  ...
  select = C,E,F,W,DJ,DJ10
  ```



  GPL



  [@stummjr](https://github.com/stummjr) for teaching me AST, and what I could do with it. His [blog](https://stummjr.org/post/building-a-custom-flake8-plugin/) is cool.


pkgId: d8b5214c25d4e4148d39cb3858a11b1d382afc8e385f073d1afd7aff6d6944e1
name: python-flake8-docstrings
arch: src
version: 1.7.0
epoch: 0
release: 1
summary: Extension for flake8 which uses pydocstyle to check docstrings
url: https://github.com/pycqa/flake8-docstrings
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4a2287d2-ec92-47c4-93ba-c00934780584
location_href: 00003639-python-flake8-docstrings/python-flake8-docstrings-1.7.0-1.src.rpm
checksum_type: sha256
description:
  A simple module that adds an extension for the fantastic pydocstyle_ tool to
  flake8_.
  Simply install this extension::
      pip install flake8-docstrings
  and run flake8.
  You can set the pydocstyle convention_ at the command line using::
      $ flake8 --docstring-convention numpy ...
  Or, adding ``docstring-convention=numpy`` to your flake8 configuration file.
  The available set of conventions depends on the version of pydocstyle installed.
  The default is ``pep257``, pydocstyle v2.0.0 added ``numpy`` (for the numpydoc
  standard), while pydocstyle v4.0.0 added ``google``.
  In order to choose a custom list of error codes, use the special value
  ``docstring-convention=all``, then choose the codes you want checked using
  flake8_'s built-in ``--ignore``/``--select`` functionality.
  Report any issues on our `bug tracker`_.


pkgId: d62b2adc174d96f3546e787152d437f34bcb26684149d67758f72a582ba124f3
name: python-flake8-eradicate
arch: src
version: 1.4.0
epoch: 0
release: 1
summary: Flake8 plugin to find commented out code
url: https://github.com/wemake-services/flake8-eradicate
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-35ce4ca1-a6cd-490a-a134-f220497b6a58
location_href: 00010581-python-flake8-eradicate/python-flake8-eradicate-1.4.0-1.src.rpm
checksum_type: sha256
description:
  [![wemake.services](https://img.shields.io/badge/-wemake.services-green.svg?label=%20&logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAbUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2F%2F%2F5TvxDIAAAAIdFJOUwAjRA8xXANAL%2Bv0SAAAADNJREFUGNNjYCAIOJjRBdBFWMkVQeGzcHAwksJnAPPZGOGAASzPzAEHEGVsLExQwE7YswCb7AFZSF3bbAAAAABJRU5ErkJggg%3D%3D)](https://wemake-services.github.io)
  [![Build Status](https://github.com/wemake-services/flake8-eradicate/workflows/test/badge.svg?branch=master&event=push)](https://github.com/wemake-services/flake8-eradicate/actions?query=workflow%3Atest)
  [![codecov](https://codecov.io/gh/wemake-services/flake8-eradicate/branch/master/graph/badge.svg)](https://codecov.io/gh/wemake-services/flake8-eradicate)
  [![Python Version](https://img.shields.io/pypi/pyversions/flake8-eradicate.svg)](https://pypi.org/project/flake8-eradicate/)
  [![PyPI version](https://badge.fury.io/py/flake8-eradicate.svg)](https://pypi.org/project/flake8-eradicate/)
  [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide)

  `flake8` plugin to find commented out (or so called "dead") code.

  This is quite important for the project in a long run.
  Based on [`eradicate`](https://github.com/myint/eradicate) project.




  ```bash
  pip install flake8-eradicate
  ```

  It is also a valuable part of [`wemake-python-styleguide`](https://github.com/wemake-services/wemake-python-styleguide).




  Run your `flake8` checker [as usual](http://flake8.pycqa.org/en/latest/user/invocation.html).
  Commented code should raise an error.

  Example:

  ```bash
  flake8 your_module.py
  ```




  - `--eradicate-aggressive` to enable aggressive mode from `eradicate`, can lead to false positives
  - `--eradicate-whitelist` to overwrite the whitelist from `eradicate` (`#` separated list)
  - `--eradicate-whitelist-extend` to extend the whitelist from `eradicate` (`#` separated list)




  | Error code |        Description       |
  |:----------:|:------------------------:|
  |    E800    | Found commented out code |




  Here's how output looks like (we are using [`wemake` formatter](https://wemake-python-stylegui.de/en/latest/pages/usage/formatter.html)):


  ![flake8-eradicate output](https://raw.githubusercontent.com/wemake-services/flake8-eradicate/master/eradicate.png)




  MIT.


pkgId: 47e2d779146729111043f1d1f0ed17b19f0273b847d9ce664a4eadd8e3578932
name: python-flake8-import-order
arch: src
version: 0.18.2
epoch: 0
release: 1
summary: Flake8 and pylama plugin that checks the ordering of import statements.
url: https://github.com/PyCQA/flake8-import-order
rpm_license: LGPLv3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e5f2e551-2738-4bd8-b722-d92a228ea872
location_href: 00003640-python-flake8-import-order/python-flake8-import-order-0.18.2-1.src.rpm
checksum_type: sha256
description:
  |Build Status|
  A `flake8 <http://flake8.readthedocs.org/en/latest/>`__ and `Pylama
  <https://github.com/klen/pylama>`__ plugin that checks the ordering of
  your imports. It does not check anything else about the
  imports. Merely that they are grouped and ordered correctly.
  In general stdlib comes first, then 3rd party, then local packages,
  and that each group is individually alphabetized, however this depends
  on the style used. Flake8-Import-Order supports a number of `styles
  <#styles>`_ and is extensible allowing for `custom styles
  <#extending-styles>`_.
  This plugin was originally developed to match the style preferences of
  the `cryptography <https://github.com/pyca/cryptography>`__ project,
  with this style remaining the default.


pkgId: f82e5c9e8305bd87af784832ac884c3471694aa5c895e2e79bec27ac3cc697c5
name: python-flake8-import-restrictions
arch: src
version: 1.1.1
epoch: 0
release: 1
summary: A flake8 plugin used to disallow certain forms of imports.
url: https://github.com/atollk/flake8-import-restrictions
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c4225705-70ec-456e-a875-be0f0fef6f5c
location_href: 00011736-python-flake8-import-restrictions/python-flake8-import-restrictions-1.1.1-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://github.com/atollk/flake8-import-restrictions/workflows/tox/badge.svg)](https://github.com/atollk/flake8-import-restrictions/actions)
  [![Build Status](https://github.com/atollk/flake8-import-restrictions/workflows/pylint/badge.svg)](https://github.com/atollk/flake8-import-restrictions/actions)
  [![Build Status](https://github.com/atollk/flake8-import-restrictions/workflows/black/badge.svg)](https://github.com/atollk/flake8-import-restrictions/actions)
  [![Build Status](https://github.com/atollk/flake8-import-restrictions/workflows/flake8/badge.svg)](https://github.com/atollk/flake8-import-restrictions/actions)

  A flake8 plugin used to disallow certain forms of imports.

  This plugin talks about the `import` syntax (`import X.Y.Z [as foo]`)
  and the `from` syntax (`from X.Y import Z [as foo]`). It talks about
  `import` segments (`import X`), `from` segments (`from Y`), and `as`
  segments (`as Z`).


  For every error `I20xx` listed below, there are options `--i20xx_include` and `--i20xx_exclude`
  which are passed a comma separated list of UNIX wildcard patterns each. The error
  will then only be reported on imports of modules that match a include pattern but no exclude
  pattern.

  By default, I2000, I2001, I2002, I2021, I2023, I2041, and I2043 include all (`*`) modules. Only I2041 excludes the
  `typing` module from checks, the other errors have no excludes by default.




  Imports should only happen on module level, not locally.

  ```python

  def f():
      import os.path
      return os.path.join("a", "b")


  import os.path
  def f():
      return os.path.join("a", "b")
  ```


  Alias identifiers defined from `as` segments should be at
  least two characters long.

  ```python

  import os.path as p


  import os.path as path
  ```


  Alias identifiers should not have the same name as the imported object.

  ```python

  import sys as sys


  import sys
  ```




  When using the `import` syntax, if the imported module is a submodule,
  i.e. not a top level module, an `as` segment should be present.

  ```python

  import os.path


  import sys
  import os.path as path
  ```


  When using the `import` syntax, each import statement should
  only import one module.

  ```python

  import sys, os


  import sys
  import os
  ```


  The `import` syntax should not be used.



  When using the `import` syntax, do not duplicate module names in the `as`
  segment.

  ```python

  import os.path as path


  from os import path
  import os.path as ospath
  ```





  When using the `from` syntax, the `import` segment only contains one
  import.

  ```python

  from os import path, environ


  from os import path
  from os import environ
  ```


  When using the `from` syntax, only submodules are imported, not
  module elements.

  ```python

  from os.path import join


  from os import path
  ```


  When using the `from` syntax, only module elements are imported,
  not submodules.

  ```python

  from os import path


  from os.path import join
  ```


  When using the `from` syntax, `import *` should not be used.

  ```python

  from os.path import *


  from os.path import join
  ```


  Relative imports should not be used.

  ```python

  from . import foo


  from flake8_import_restrictions import foo
  ```


  The `from` syntax should not be used.


pkgId: 1c1a2cfda7d5eceb811b268a3e89eb211636c3738fd2b7eef5f69f275f267091
name: python-flake8-import-restrictions-help
arch: noarch
version: 1.1.1
epoch: 0
release: 1
summary: Development documents and examples for flake8-import-restrictions
url: https://github.com/atollk/flake8-import-restrictions
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c4225705-70ec-456e-a875-be0f0fef6f5c
rpm_sourcerpm: python-flake8-import-restrictions-1.1.1-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://github.com/atollk/flake8-import-restrictions/workflows/tox/badge.svg)](https://github.com/atollk/flake8-import-restrictions/actions)
  [![Build Status](https://github.com/atollk/flake8-import-restrictions/workflows/pylint/badge.svg)](https://github.com/atollk/flake8-import-restrictions/actions)
  [![Build Status](https://github.com/atollk/flake8-import-restrictions/workflows/black/badge.svg)](https://github.com/atollk/flake8-import-restrictions/actions)
  [![Build Status](https://github.com/atollk/flake8-import-restrictions/workflows/flake8/badge.svg)](https://github.com/atollk/flake8-import-restrictions/actions)

  A flake8 plugin used to disallow certain forms of imports.

  This plugin talks about the `import` syntax (`import X.Y.Z [as foo]`)
  and the `from` syntax (`from X.Y import Z [as foo]`). It talks about
  `import` segments (`import X`), `from` segments (`from Y`), and `as`
  segments (`as Z`).


  For every error `I20xx` listed below, there are options `--i20xx_include` and `--i20xx_exclude`
  which are passed a comma separated list of UNIX wildcard patterns each. The error
  will then only be reported on imports of modules that match a include pattern but no exclude
  pattern.

  By default, I2000, I2001, I2002, I2021, I2023, I2041, and I2043 include all (`*`) modules. Only I2041 excludes the
  `typing` module from checks, the other errors have no excludes by default.




  Imports should only happen on module level, not locally.

  ```python

  def f():
      import os.path
      return os.path.join("a", "b")


  import os.path
  def f():
      return os.path.join("a", "b")
  ```


  Alias identifiers defined from `as` segments should be at
  least two characters long.

  ```python

  import os.path as p


  import os.path as path
  ```


  Alias identifiers should not have the same name as the imported object.

  ```python

  import sys as sys


  import sys
  ```




  When using the `import` syntax, if the imported module is a submodule,
  i.e. not a top level module, an `as` segment should be present.

  ```python

  import os.path


  import sys
  import os.path as path
  ```


  When using the `import` syntax, each import statement should
  only import one module.

  ```python

  import sys, os


  import sys
  import os
  ```


  The `import` syntax should not be used.



  When using the `import` syntax, do not duplicate module names in the `as`
  segment.

  ```python

  import os.path as path


  from os import path
  import os.path as ospath
  ```





  When using the `from` syntax, the `import` segment only contains one
  import.

  ```python

  from os import path, environ


  from os import path
  from os import environ
  ```


  When using the `from` syntax, only submodules are imported, not
  module elements.

  ```python

  from os.path import join


  from os import path
  ```


  When using the `from` syntax, only module elements are imported,
  not submodules.

  ```python

  from os import path


  from os.path import join
  ```


  When using the `from` syntax, `import *` should not be used.

  ```python

  from os.path import *


  from os.path import join
  ```


  Relative imports should not be used.

  ```python

  from . import foo


  from flake8_import_restrictions import foo
  ```


  The `from` syntax should not be used.

location_href:
  00011736-python-flake8-import-restrictions/python-flake8-import-restrictions-help-1.1.1-1.noarch.rpm


pkgId: b7daa77e5d604220231a7384dafd5c421bc58e24558f63b276076870a91d8ec8
name: python-flake8-junit-report
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: Simple tool that converts a flake8 file to junit format
url: https://github.com/initios/flake8-junit-report
rpm_license: BSD 3-Clause License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-953d23fd-1f3c-4164-afa8-a428a04eb4e5
location_href: 00012625-python-flake8-junit-report/python-flake8-junit-report-2.1.0-1.src.rpm
checksum_type: sha256
description:
  Simple tool that converts a flake8 file to junit format.
  Use it on your CI server to see the flake8 failures with ease.
      * - Master
        - .. image:: https://travis-ci.org/initios/flake8-junit-report.svg?branch=master
        - .. image:: https://coveralls.io/repos/initios/flake8-junit-report/badge.svg?branch=master
      * - Develop
        - .. image:: https://travis-ci.org/initios/flake8-junit-report.svg?branch=develop
        - .. image:: https://coveralls.io/repos/initios/flake8-junit-report/badge.svg?branch=develop


pkgId: 891cbedf0af003c3d883279ae25b4f239ba39d93739632321529940e9c324ea0
name: python-flake8-logging-format
arch: src
version: 0.9.0
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/globality-corp/flake8-logging-format
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-55201956-3478-4971-8dc7-a11fd9410d30
location_href: 00010785-python-flake8-logging-format/python-flake8-logging-format-0.9.0-1.src.rpm
checksum_type: sha256
description:
  Flake8 extension to validate (lack of) logging format strings




  Python [logging](https://docs.python.org/3/library/logging.html#logging.Logger.debug) supports a special `extra` keyword
  for passing a dictionary of user-defined attributes to include in a logging event. One way to ensure consistency and
  rigor in logging is to **always** use `extra` to pass non-constant data and, therefore, to **never** use format strings,
  concatenation, or other similar techniques to construct a log string.

  In other words, do this:

  ```python
  logger.info(
      "Hello {world}",
      extra=dict(
          world="Earth"
      )
  )
  ```

  Instead of:

  ```python
  logger.info(
      "Hello {world}".format(world=Earth)
  )
  ```



  As a further level of rigor, we can enforce that `extra` dictionaries only use keys from a well-known whitelist.

  Usage:

  ```bash
  flake8 --enable-extra-whitelist
  ```

  The built-in `Whitelist` supports plugins using `entry_points` with a key of `"logging.extra.whitelist"`. Each
  registered entry point must be a callable that returns an iterable of string.

  In some cases you may want to log sensitive data only in debugging scenarios.  This is supported in 2 ways:
  1. We do not check the logging.extra.whitelist for lines logged at the `debug` level
  2. You may also prefix a keyword with 'debug\_' and log it at another level.  You can safely assume these will be
     filtered out of shipped logs.



   -  `G001` Logging statements should not use `string.format()` for their first argument
   -  `G002` Logging statements should not use `%` formatting for their first argument
   -  `G003` Logging statements should not use `+` concatenation for their first argument
   -  `G004` Logging statements should not use `f"..."` for their first argument (only in Python 3.6+)
   -  `G010` Logging statements should not use `warn` (use `warning` instead)
   -  `G100` Logging statements should not use `extra` arguments unless whitelisted
   -  `G101` Logging statement should not use `extra` arguments that clash with LogRecord fields
   -  `G200` Logging statements should not include the exception in logged string (use `exception` or `exc_info=True`)
   -  `G201` Logging statements should not use `error(..., exc_info=True)` (use `exception(...)` instead)
   -  `G202` Logging statements should not use redundant `exc_info=True` in `exception`

  These violations are disabled by default. To enable them for your project, specify the code(s) in your `setup.cfg`:

  ```ini
  [flake8]
  enable-extensions=G
  ```



  Our motivation has to do with balancing the needs of our team and those of our customers.
  On the one hand, developers and front-line support should be able to look at application logs. On the other hand, our customers don't want their data shared with anyone, including internal employees.

  The implementation approaches this in two ways:

  1. By trying to prevent the use of string concatenation in logs (vs explicit variable passing in the standard logging `extra` dictionary)

  2. By providing an (optional) mechanism for whitelisting which field names may appear in the `extra` dictionary

  Naturally, this _does not_ prevent developers from doing something like:

  ```python
  extra=dict(
      user_id=user.name,
  )
  ```

  but then avoiding a case like this falls back to other processes around pull-requests, code review and internal policy.


pkgId: 9977102a9c9a16867d66bace5086aea9d809e56f43534246bba30e41f841d43d
name: python-flake8-markdown
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: Lints Python code blocks in Markdown files using flake8
url: https://github.com/johnfraney/flake8-markdown
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b07b42d7-e236-44f2-a708-a174e8dc0709
location_href: 00012196-python-flake8-markdown/python-flake8-markdown-0.4.0-1.src.rpm
checksum_type: sha256
description:
  [
  ![PyPI](https://img.shields.io/pypi/v/flake8-markdown.svg)
  ![PyPI](https://img.shields.io/pypi/pyversions/flake8-markdown.svg)
  ![PyPI](https://img.shields.io/github/license/johnfraney/flake8-markdown.svg)
  ](https://pypi.org/project/flake8-markdown/)
  [![TravisCI](https://travis-ci.com/johnfraney/flake8-markdown.svg?branch=master)](https://travis-ci.com/johnfraney/flake8-markdown)

  Flake8 Markdown lints [GitHub-style Python code blocks](https://help.github.com/en/articles/creating-and-highlighting-code-blocks#fenced-code-blocks) in Markdown files using [`flake8`](https://flake8.readthedocs.io/en/stable/).

  This package helps improve a Python project's documentation by ensuring that code samples are error-free.



  - Lints code blocks containing regular Python and Python interpreter code ([`pycon`](http://pygments.org/docs/lexers/#pygments.lexers.python.PythonConsoleLexer))
  - [pre-commit](#pre-commit-hook) hook to lint on commit



  Flake8 Markdown can be installed from PyPI using `pip` or your package manager of choice:

  ```
  pip install flake8-markdown
  ```





  You can use Flake8 Markdown as a CLI tool using the `flake8-markdown` command.

  `flake8-markdown` accepts one or more [globs](https://docs.python.org/3.7/library/glob.html) as its arguments.

  Example:

  ```console
  $ flake8-markdown "tests/samples/*.md"
  tests/samples/emphasized_lines.md:6:1: F821 undefined name 'emphasized_imaginary_function'
  tests/samples/basic.md:8:48: E999 SyntaxError: EOL while scanning string literal
  tests/samples/basic.md:14:7: F821 undefined name 'undefined_variable'
  ```



  You can also add `flake8-markdown` to your project using [pre-commit](https://pre-commit.com/). When configured, any staged Markdown files will be linted using `flake8-markdown` once you run `git commit`.

  To enable this hook in your local repository, add the following `repo` to your `.pre-commit-config.yaml` file:

  ```yaml

  repos:
    - repo: https://github.com/johnfraney/flake8-markdown
      rev: v0.4.0
      hooks:
        - id: flake8-markdown
  ```



  Everyone interacting in the project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [PyPA Code of Conduct](https://www.pypa.io/en/latest/code-of-conduct/).







  - Added support for `flake8` v5
  - Added support for `python` 3.10



  - Dropped support for `python` 3.6





  - Added support for `flake8` v4





  - [`pycon`](http://pygments.org/docs/lexers/#pygments.lexers.python.PythonConsoleLexer) code block support





  - Fixed pre-commit example in README





  - Added code for initial release


pkgId: 39869d03ee5eda2a48693d3ec43828b2349a72d8d8a016cfd7d7bdc8e39f8698
name: python-flake8-mutable
arch: src
version: 1.2.0
epoch: 0
release: 1
summary: mutable defaults flake8 extension
url: https://github.com/ebeweber/flake8-mutable
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-dedff7f1-f70e-4d86-b9f6-012d652d3a84
location_href: 00011295-python-flake8-mutable/python-flake8-mutable-1.2.0-1.src.rpm
checksum_type: sha256
description:
  [![PyPI version](https://img.shields.io/pypi/v/flake8-mutable.svg)](https://pypi.python.org/pypi/flake8-mutable)

  Python's default arguments are evaluated at definition as opposed to when the function is invoked. This leads to unexpected behavior, as mutations persist between calls. For a more detailed explanation, see [The Hitchhiker's Guide to Python](http://docs.python-guide.org/en/latest/writing/gotchas/#mutable-default-arguments).

  ```
  def fnc(a, b={}):
      pass
  foo.py:2:14: M511 - mutable default arg of type Dict
  ```

  ```
  pip install flake8-mutable
  ```


  - Callables

  - added MANIFEST.in

  [MIT](https://opensource.org/licenses/MIT)


pkgId: b5eff5306cd505e0275df161c2bf6e3ecaf6b8ee28fcf091d380e0fcffe7d0db
name: python-flake8-pie
arch: src
version: 0.16.0
epoch: 0
release: 1
summary: A flake8 extension that implements misc. lints
url: https://github.com/sbdchd/flake8-pie
rpm_license: BSD-2-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4ac9067c-ba63-4fd6-a707-bf1137dc7b4d
location_href: 00012136-python-flake8-pie/python-flake8-pie-0.16.0-1.src.rpm
checksum_type: sha256
description:
  > A flake8 extension that implements misc. lints





  Based on Clippy's
  [`let_and_return`](https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return)
  and Microsoft's TSLint rule
  [`no-unnecessary-local-variable`](https://github.com/Microsoft/tslint-microsoft-contrib).

  For more info on the structure of this lint, see the [accompanying blog
  post](https://steve.dignam.xyz/2018/12/16/creating-a-flake8-lint/).



  ```python

  def foo():
     x = bar()
     return x


  def foo():
     x, _ = bar()
     return x
  ```



  Warn about [Celery](https://pypi.org/project/celery/) task definitions that don't have explicit names.

  Note: this lint is kind of naive considering any decorator with a `.task()`
  method or any decorator called `shared_task()` a Celery decorator.



  ```python

  @app.task()
  def foo():
      pass


  @app.task(name="app_name.tasks.foo")
  def foo():
      pass
  ```



  The `crontab` class provided by Celery has some default args that are
  suprising to new users. Specifically, `crontab(hour="0,12")` won't run a task
  at midnight and noon, it will run the task at every minute during those two
  hours. This lint makes that call an error, forcing you to write
  `crontab(hour="0, 12", minute="*")`.

  Additionally, the lint is a bit more complex in that it requires you specify
  every smaller increment than the largest time increment you provide. So if you
  provide `days_of_week`, then you need to provide `hour`s and `minute`s
  explicitly.

  Note: if you like the default behavior of `crontab()` then you can either
  disable this lint or pass `"*"` for the `kwarg` value, e.g., `minutes="*"`.

  Also, since this lint is essentially a naive search for calls to a
  `crontab()` function, if you have a function named the same then this will
  cause false positives.



  Celery tasks can bunch up if they don't have expirations.

  This enforces specifying expirations in both the celery beat config dict and
  in `.apply_async()` calls.

  The same caveat applies about how this lint is naive.



  Be precise in what exceptions you catch. Bare `except:` handlers, catching `BaseException`, or catching `Exception` can lead to unexpected bugs.



  ```python

  try:
      save_file(name="export.csv")
  except:
      pass


  try:
      save_file(name="export.csv")
  except BaseException:
      pass


  try:
      save_file(name="export.csv")
  except Exception:
      pass


  try:
      save_file(name="export.csv")
  except (ValueError, Exception):
      pass



  try:
      save_file(name="export.csv")
  except OSError:
      pass
  ```



  Empty collections are fasley in Python so calling `len()` is unnecessary when
  checking for emptiness in an if statement/expression.

  Comparing to explicit scalars is allowed.

  ```python

  if len(foo): ...
  if not len(foo): ...


  if foo: ...
  if not foo: ...
  if len(foo) > 0: ...
  if len(foo) == 0: ...
  ```



  If statements/expressions evalute the truthiness of the their test argument,
  so calling `bool()` is unnecessary.

  Comparing to `True`/`False` is allowed.

  ```python

  if bool(foo): ...
  if not bool(foo): ...


  if foo: ...
  if not foo: ...
  if bool(foo) is True: ...
  if bool(foo) is False: ...
  ```



  Using `type()` doesn't take into account subclassess and type checkers won't
  refine the type, use `isinstance` instead.

  ```python

  if type(foo) == str: ...
  if type(foo) is str: ...
  if type(foo) in [int, str]: ...


  if isinstance(foo, str): ...
  if isinstance(foo, (int, str)): ...
  ```



  `pass` is unnecessary when definining a `class` or function with an empty
  body.

  ```python

  class BadError(Exception):
      """
      some doc comment
      """
      pass

  def foo() -> None:
      """
      some function
      """
      pass


  class BadError(Exception):
      """
      some doc comment
      """

  def foo() -> None:
      """
      some function
      """
  ```



  Comparisions without an assignment or assertion are probably a typo.

  ```python

  "foobar" in data
  res.json() == []
  user.is_authenticated() is True


  assert "foobar" in data
  foo = res.json() == []
  use.is_authenticated()
  ```



  Inheriting from `object` isn't necessary in Python 3.

  ```python

  class Foo(object):
      ...


  class Foo:
      ...
  ```



  Attempts to find cases where the `@dataclass` decorator is unintentionally
  missing.

  ```python

  class Foo:
      z: dict[int, int]
      def __init__(self) -> None: ...

  class Bar:
      x: list[str]


  class Bar(Foo):
      z: dict[int, int]

  @dataclass
  class Bar:
      x: list[str]
  ```



  Finds duplicate definitions for the same field, which can occur in large ORM
  model definitions.

  ```python

  class User(BaseModel):
      email = fields.EmailField()
      
      email = fields.EmailField()


  class User(BaseModel):
      email = fields.EmailField()
      
  ```



  Instead of defining various constant properties on a class, use the stdlib
  enum which typecheckers support for type refinement.

  ```python

  class Foo:
      A = "A"
      B = "B"
      C = "C"


  import enum
  class Foo(enum.Enum):
      A = "A"
      B = "B"
      C = "C"
  ```



  By default the stdlib enum allows multiple field names to map to the same
  value, this lint requires each enum value be unique.

  ```python

  class Foo(enum.Enum):
      A = "A"
      B = "B"
      C = "C"
      D = "C"


  class Foo(enum.Enum):
      A = "A"
      B = "B"
      C = "C"
      D = "D"
  ```



  Call `bool()` directly rather than reimplementing its functionality.

  ```python

  foo(is_valid=True if buzz() else False)


  foo(is_valid=bool(buzz()))
  ```



  Instead of using class to namespace functions, use a module.

  ```python

  class UserManager:
      class User(NamedTuple):
          name: str

      @classmethod
      def update_user(cls, user: User) -> None:
          ...

      @staticmethod
      def sync_users() -> None:
          ...


  class User(NamedTuple):
      name: str

  def update_user(user: User) -> None:
      ...

  def sync_users() -> None:
      ...
  ```



  Check that values are passed in when collections are created rather than
  creating an empty collection and then inserting.

  ```python

  bars = []
  bar = bar()
  bars.append(bar)


  bar = bar()
  bars = [bar]


  s = deque()
  s.append(foo)


  s = deque([foo])
  ```



  Check for unnecessary dict unpacking.

  ```python

  {**foo, **{"bar": 10}}


  {**foo, "bar": 10}
  ```



  Return boolean expressions directly instead of returning `True` and `False`.

  ```python

  def main():
      if foo > 5:
          return True
      return False


  def main():
      if foo > 5:
          return True
      else:
          return False


  def main():
      return foo > 5
  ```



  Remove unnecessary comprehensions for `any` and `all`

  ```python

  any([x.id for x in bar])
  all([x.id for x in bar])


  all(x.id for x in bar)
  any(x.id for x in bar)
  any({x.id for x in bar})
  ```



  Don't format strings before logging. Let `logging` interpolate arguments.

  This allows Sentry to aggregate logs, prevents raising exceptions if interpolation fails, and improves performance if the log level is disabled. See ["PyCQA/pylint#1788"](https://github.com/PyCQA/pylint/issues/1788#issuecomment-461279687).

  ```python

  logger.info("Login error for %s" % user)
  logger.info("Login error for %s, %s" % (user_id, name))


  logger.info("Login error for {}".format(user))
  logger.info("Login error for {}, {}".format(user_id, name))


  logger.info(f"Login error for {user}")
  logger.info(f"Login error for {user_id}, {name}")


  logger.info("Login error for %s", user)
  logger.info("Login error for %s, %s", user_id, name)
  ```



  As long as the keys of the dict are valid Python identifier names, we can safely
  remove the surrounding dict.

  ```python

  foo(**{"bar": True})


  foo(bar=True)
  foo(**buzz)
  foo(**{"bar foo": True})
  ```



  ```shell

  poetry install

  s/lint
  s/test
  ```



  Currently only checks for byte string literals.

  ```python

  "foo".encode()


  b"foo"
  "😀".encode()
  ```



  Instead of `assert`ing and catching the exception, use an if statement.

  ```python

  try:
      assert "@" in bar
  except AssertionError:
      ...


  if "@" in bar:
      ...
  ```



  `lambda: []` is equivalent to the builtin `list`

  ```python

  @dataclass
  class Foo:
      foo: List[str] = field(default_factory=lambda: [])


  @dataclass
  class Foo:
      foo: List[str] = field(default_factory=list)
  ```



  We can leave out the first argument to `range` in some cases since the default
  start position is 0.

  ```python

  range(0, 10)


  range(10)
  range(x, 10)
  range(0, 10, x)
  ```



  Bulk create multiple objects instead of executing O(N) queries.

  ```python

  [Item.objects.create(item) for item in items]


  [Item.objects.create(item) for item in [bar for bar in buzz]]


  (Item.objects.create(item) for item in items)


  Item.objects.insert(items)
  Item.objects.create(item)
  ```




  You can use `astpretty` to dump the AST of a piece of code.

  ```shell
  ./.venv/bin/astpretty <(pbpaste)
  ```



  ```shell




  rm -rf dist && poetry publish --build
  ```


pkgId: a1b87648f40f37559f7ccb0decfd358347b81cd030d1beb1e1f9422f4a174b61
name: python-flake8-pytest
arch: src
version: 1.4
epoch: 0
release: 1
summary: pytest assert checker plugin for flake8
url: https://github.com/vikingco/flake8-pytest
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f53e74f3-ef2e-4b1e-a4c0-89154fa9b6f4
location_href: 00013826-python-flake8-pytest/python-flake8-pytest-1.4-1.src.rpm
checksum_type: sha256
description:
  Check for uses of Django-style assert-statements in tests. So no more ``self.assertEqual(a, b)``,
  but instead ``assert a == b``.
  This module provides a plugin for ``flake8``, the Python code checker.


pkgId: 56ae9f52678bdc9f63799e6276331ec4767ecbbaa7a3d7c02dedcffb780f5245
name: python-flake8-string-format
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: string format checker, plugin for flake8
url: https://github.com/xZise/flake8-string-format
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7c64b0de-0751-44ce-bfd9-20558983d612
location_href: 00011155-python-flake8-string-format/python-flake8-string-format-0.3.0-1.src.rpm
checksum_type: sha256
description:
  An extension for `Flake8 <https://pypi.python.org/pypi/flake8>`_ to check the
  strings and parameters using ``str.format``. It checks all strings whether they
  use numbered parameters with an implicit index which isn't support in
  Python 2.6.
  In all instances of ``'…'.format(…)`` it will also check whether there are
  enough parameters given. If the format call uses variable arguments, it'll just
  check whether the right types of arguments are present.


pkgId: 299341f24e43fe76ca5c46c950dff8487c30f619ece8657e21442dc18dff83d5
name: python-flameprof
arch: src
version: 0.4
epoch: 0
release: 1
summary: cProfile flamegraph generator
url: https://github.com/baverman/flameprof/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2e1a0fd1-f8db-49be-b971-3b2ae266eac3
location_href: 00012407-python-flameprof/python-flameprof-0.4-1.src.rpm
checksum_type: sha256
description:
  Via pip::
      pip install flameprof
  Or you can invoke ``flameprof.py`` directly::
      python flameprof.py input.prof > output.svg


pkgId: dfd0167d8a5ba40f3124905e15b096ed4514a372085bd268990527feab4fec84
name: python-flanker
arch: src
version: 0.9.11
epoch: 0
release: 1
summary: Mailgun Parsing Tools
url: https://www.mailgun.com/
rpm_license: Apache 2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-aa7e5fd0-1d39-46aa-af11-a9bd2be93cd6
location_href: 00013925-python-flanker/python-flanker-0.9.11-1.src.rpm
checksum_type: sha256
description:
  Flanker is an open source parsing library written in Python by the Mailgun Team.
  Flanker currently consists of an address parsing library (`flanker.addresslib`) as
  well as a MIME parsing library (`flanker.mime`).
  Detailed documentation is provided in the `User Manual <https://github.com/mailgun/flanker/blob/master/docs/User%20Manual.md>`_ as well as the
  `API Reference <https://github.com/mailgun/flanker/blob/master/docs/API%20Reference.md>`_. A Quickstart Guide is provided below.


pkgId: 1a1b7e22c99a3d34c31ceafe73077150a43fe2d10daf0792f27ff222b1bfe01f
name: python-flann
arch: src
version: 1.6.13
epoch: 0
release: 1
summary: flann is the python 3.6 bindings for FLANN - Fast Library for Approximate Nearest Neighbors.
url: https://github.com/pypa/flann
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7bda5fc3-6812-4704-980f-8dcc15b7fb64
location_href: 00003643-python-flann/python-flann-1.6.13-1.src.rpm
checksum_type: sha256
description:
  1. Introduction
  ~~~~~~~~~~~~~~~
  pyflann is the python bindings for `FLANN - Fast Library for Approximate
  Nearest Neighbors <http://www.cs.ubc.ca/research/flann/>`__.
  2. Install
  ~~~~~~~~~~
  For python2
  ^^^^^^^^^^^
  This package uses distutils, which is the default way of installing
  python modules. To install in your home directory, securely run the
  following:
      git clone https://github.com/primetang/pyflann.git
      cd pyflann
      [sudo] python setup.py install
  Or directly through ``pip`` to install it:
      [sudo] pip install pyflann
  For python3
  ^^^^^^^^^^^
  Please refer to `this
  issuse <https://github.com/primetang/pyflann/issues/1>`__ to modify the
  code.
  3. Usage
  ~~~~~~~~
  Use it just like the following code:
      from pyflann import *
      import numpy as np
      dataset = np.array(
          [[1., 1, 1, 2, 3],
           [10, 10, 10, 3, 2],
           [100, 100, 2, 30, 1]
           ])
      testset = np.array(
          [[1., 1, 1, 1, 1],
           [90, 90, 10, 10, 1]
           ])
      flann = FLANN()
      result, dists = flann.nn(
          dataset, testset, 2, algorithm="kmeans", branching=32, iterations=7, checks=16)
      print result
      print dists
      dataset = np.random.rand(10000, 128)
      testset = np.random.rand(1000, 128)
      flann = FLANN()
      result, dists = flann.nn(
          dataset, testset, 5, algorithm="kmeans", branching=32, iterations=7, checks=16)
      print result
      print dists


pkgId: c6660c5d49b67c612c4c54035583c4bff29e874ebdd50f57f9da6ffd17c496b2
name: python-flasgger
arch: src
version: 0.9.5
epoch: 0
release: 1
summary: Extract swagger specs from your flask project
url: https://github.com/flasgger/flasgger/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-911817db-8424-469a-bb59-2264c2263981
location_href: 00010293-python-flasgger/python-flasgger-0.9.5-1.src.rpm
checksum_type: sha256
description:
      parameters:
        - name: palette
          in: path
          type: string
          enum: ['all', 'rgb', 'cmyk']
          required: true
          default: all
      definitions:
        Palette:
          type: object
          properties:
            palette_name:
              type: array
              items:
                $ref: '#/definitions/Color'
        Color:
          type: string
      responses:
        200:
          description: A list of colors (may be filtered by palette)
          schema:
            $ref: '#/definitions/Palette'
          examples:
            rgb: ['red', 'green', 'blue']
      """
      all_colors = {
          'cmyk': ['cian', 'magenta', 'yellow', 'black'],
          'rgb': ['red', 'green', 'blue']
      }
      if palette == 'all':
          result = all_colors
      else:
          result = {palette: all_colors.get(palette)}
      return jsonify(result)
  app.run(debug=True)
  ```
  Now run:
  ```
  python colors.py
  ```
  And go to: [http://localhost:5000/apidocs/](http://localhost:5000/apidocs/)
  You should get:
  ![colors](docs/colors.png)

  Save a new file `colors.yml`
  ```yaml
  Example endpoint returning a list of colors by palette


