# packages

pkgId: 59c2f7dacf698a17aa8b976351efaa6f8bf72fb36e56967e0b4e443114844829
name: python-oci-cli
arch: src
version: 3.25.1
epoch: 0
release: 1
summary: Oracle Cloud Infrastructure CLI
url: https://docs.cloud.oracle.com/iaas/Content/API/Concepts/cliconcepts.htm
rpm_license: Universal Permissive License 1.0 or Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4b05f300-0751-4037-8f8e-a3d3796fad48
location_href: 00011464-python-oci-cli/python-oci-cli-3.25.1-1.src.rpm
checksum_type: sha256
description:
  This is the command line interface for Oracle Cloud Infrastructure.
  The project is open source and maintained by Oracle Corp. The home page for the project is `here`__.
  __ https://docs.cloud.oracle.com/Content/API/Concepts/cliconcepts.htm


pkgId: 63d2416c1600af9c3c4a1c773de1d984fdf754bf69402a05de56b298060b31e5
name: python-odML
arch: src
version: 1.5.2
epoch: 0
release: 1
summary: open metadata Markup Language
url: https://github.com/G-Node/python-odml
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-027546b4-a3ba-4022-bb90-bdda758e141d
location_href: 00004367-python-odml/python-odML-1.5.2-1.src.rpm
checksum_type: sha256
description:
  [![gh actions tests](https://github.com/G-Node/python-odml/workflows/run-tests/badge.svg?branch=master)](https://github.com/G-Node/python-odml/actions)
  [![Build status](https://ci.appveyor.com/api/projects/status/br7pe6atlwdg5618/branch/master?svg=true)](https://ci.appveyor.com/project/G-Node/python-odml/branch/master)
  [![Test coverage](https://coveralls.io/repos/github/G-Node/python-odml/badge.svg?branch=master)](https://coveralls.io/github/G-Node/python-odml)
  [![PyPI version](https://img.shields.io/pypi/v/odml.svg)](https://pypi.org/project/odML/)
  [![Read the Docs](https://img.shields.io/readthedocs/python-odml)](https://python-odml.readthedocs.io/en/latest/)




  The open metadata Markup Language is a file based format (XML, JSON, YAML) for storing
  metadata in an organised human- and machine-readable way. odML is an initiative to define
  and establish an open, flexible, and easy-to-use format to transport metadata.

  The Python-odML library can be easily installed via ```pip```. The source code is freely
  available on [GitHub](https://github.com/G-Node/python-odml). If you are not familiar
  with the version control system **git**, but still want to use it, have a look at the
  documentation available on the [git-scm website](https://git-scm.com/).




  More information about the project including related projects as well as tutorials and
  examples can be found at our odML [project page](https://g-node.github.io/python-odml).






  *python-odml* is most conveniently installed via pip.

  ```
  pip install odml
  ```

  To install the latest development version of odml you can use the git installation option of pip:

  ```
  pip install git+https://github.com/G-Node/python-odml
  ```

  Please note that this version might not be stable.



  - We have assembled a set of
   [tutorials](https://python-odml.readthedocs.io/en/latest/tutorial.html "Python Tutorial").



  The Python installation features multiple convenience commandline scripts.

  - `odmlconvert`: Converts odML files of previous file versions into the current one.
  - `odmltordf`: Converts odML files to the supported RDF version of odML.
  - `odmlview`: Render and browse local XML odML files in the webbrowser.

  All scripts provide detailed usage descriptions by adding the `help` flag to the command.

      odmlconvert -h
      odmltordf -h
      odmlview -h




  odML Version 1.4 introduced breaking format and API changes compared to the previous
  versions of odML. Files saved in the previous format versions can be converted to a 1.4
  compatible format using the version converter from the odml/tools package.

  Be aware that the value dtype ```binary``` has been removed. Incorporating actual binary
  data into odML files is discouraged, provide references to the original files using the
  ```URL``` dtype instead.

  For details regarding the introduced changes please check the [github
  release notes](https://github.com/G-Node/python-odml/releases).




  * Python 3.6+
  * Python packages:

    * lxml (version 3.7.2)
    * yaml (version >= 5.1)
    * rdflib (version >=4.2.2)

  * These packages will be downloaded and installed automatically if the ```pip```
    method is used to install odML. Alternatively, they can be installed from the OS
    package manager. On Ubuntu, they are available as:

    * python-lxml
    * python-yaml
    * python-rdflib

  * If you prefer installing using the Python package manager, the following packages are
    required to build the lxml Python package on Ubuntu 14.04:

    * libxml2-dev
    * libxslt1-dev
    * lib32z1-dev



  Python 2 has reached end of life. We will not keep any future versions of odml Python 2 compatible and will completely drop support for Python 2 with August 2020. We also recommend using a Python version >= 3.6. If a Python version < 3.6 is a requirement, the following dependency needs to be installed as well:

  * pip install
    * enum34 (version 0.4.4)
  * apt install
    * python-enum



  To download the Python-odML library please either use git and clone
  the repository from GitHub:

  ```
    $ git clone https://github.com/G-Node/python-odml.git
  ```

  If you don't want to use git download the ZIP file also provided on
  GitHub to your computer (e.g. as above on your home directory under a "toolbox"
  folder).

  To install the Python-odML library, enter the corresponding directory and run:

  ```
    $ cd python-odml
    $ python setup.py install
  ```

  **Note** The master branch is our current development branch, not all features might be
  working as expected. Use the release tags instead.




  See the [CONTRIBUTING](https://github.com/G-Node/python-odml/blob/master/CONTRIBUTING.md) document
  for more information on this.




  Should you find a behaviour that is likely a bug, please file a bug report at
  [the github bug tracker](https://github.com/G-Node/python-odml/issues).

  If you have questions regarding the use of the library, feel free to join the
  [#gnode](http://webchat.freenode.net?channels=%23gnode) IRC channel on freenode.


pkgId: e8c74fa7756bfcb0592f905763c37fd4274de496192f5c59c5efd05b2d061d67
name: python-odfpy
arch: src
version: 1.4.1
epoch: 0
release: 1
summary: Python API and tools to manipulate OpenDocument files
url: https://github.com/eea/odfpy
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-62148650-d5e8-43d4-ae76-9c7f354ae64f
location_href: 00004366-python-odfpy/python-odfpy-1.4.1-1.src.rpm
checksum_type: sha256
description:
  Odfpy is a library to read and write OpenDocument v. 1.2 files.
  The main focus has been to prevent the programmer from creating invalid
  documents. It has checks that raise an exception if the programmer adds
  an invalid element, adds an attribute unknown to the grammar, forgets to
  add a required attribute or adds text to an element that doesn't allow it.

  These checks and the API itself were generated from the RelaxNG
  schema, and then hand-edited. Therefore the API is complete and can
  handle all ODF constructions.

  In addition to the API, there are a few scripts:

  - csv2odf - Create OpenDocument spreadsheet from comma separated values
  - mailodf - Email ODF file as HTML archive
  - odf2xhtml - Convert ODF to (X)HTML
  - odf2mht - Convert ODF to HTML archive
  - odf2xml - Create OpenDocument XML file from OD? package
  - odfimgimport - Import external images
  - odflint - Check ODF file for problems
  - odfmeta - List or change the metadata of an ODF file
  - odfoutline - Show outline of OpenDocument
  - odfuserfield - List or change the user-field declarations in an ODF file
  - xml2odf - Create OD? package from OpenDocument in XML form

  The source code is at https://github.com/eea/odfpy

  Visit https://github.com/eea/odfpy/wiki for documentation and examples.

  The code at https://joinup.ec.europa.eu/software/odfpy/home is obsolete.


pkgId: 77222cecc6ab7574a2cd3653faa7c3c8b52cc089bc7f1a1de2c0ab5f722ed9b3
name: python-offspring
arch: src
version: 0.1.1
epoch: 0
release: 1
summary: Objects and patterns for working with processes in Python using the multiprocessing library
url: https://github.com/borgstrom/offspring
rpm_license: Apache 2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-94a9c7b3-4cf2-42ed-8480-3ceeaf6d44fb
location_href: 00014022-python-offspring/python-offspring-0.1.1-1.src.rpm
checksum_type: sha256
description:
  This is a collection of objects and patterns for working with processes in Python using the multiprocessing library.
  The main idea is that you express your unit of work as a simple method on an object and then when that object is
  instantiated the work will be run in a subprocess.


pkgId: 253443dc3274e599646f32a5bb5a34d70b45fdae85bcd9cbc5790ffa6dff2415
name: python-ofxparse
arch: src
version: 0.21
epoch: 0
release: 1
summary: Tools for working with the OFX (Open Financial Exchange) file format
url: http://sites.google.com/site/ofxparse
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-06a2991c-1e8b-4889-9ac4-e77f647a705e
location_href: 00004368-python-ofxparse/python-ofxparse-0.21-1.src.rpm
checksum_type: sha256
description:
  ofxparse is a parser for Open Financial Exchange (.ofx) format files.  OFX
  files are available from almost any online banking site, so they work well
  if you want to pull together your finances from multiple sources.  Online
  trading accounts also provide account statements in OFX files.
  There are three different types of OFX files, called BankAccount,
  CreditAccount and InvestmentAccount files.  This library has been tested with
  real-world samples of all three types.  If you find a file that does not work
  with this library, please consider contributing the file so ofxparse can be
  improved.  See the Help! section below for directions on how to do this.


pkgId: b8f39be29edc38370f2d1437e7124a244686150eeb3889d2e5aeee67a937934f
name: python-ogr
arch: src
version: 0.44.0
epoch: 0
release: 1
summary: One API for multiple git forges.
url: https://github.com/packit/ogr
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-90bb9efa-b744-4313-801b-8c4653f72b9c
location_href: 00004369-python-ogr/python-ogr-0.44.0-1.src.rpm
checksum_type: sha256
description:
  ![PyPI](https://img.shields.io/pypi/v/ogr.svg)
  ![PyPI - License](https://img.shields.io/pypi/l/ogr.svg)
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ogr.svg)
  ![PyPI - Status](https://img.shields.io/pypi/status/ogr.svg)
  [![Build Status](https://zuul-ci.org/gated.svg)](https://softwarefactory-project.io/zuul/t/local/builds?project=packit-service/ogr)
  [![black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)

  Library for one API for many git forges. (e.g. GitHub, GitLab, Pagure).



  - GitHub
  - GitLab
  - Pagure



  See [Documentation of Index of Sub-modules, Functions & Classes](https://packit.github.io/ogr)

  For examples of how to use `ogr` see [Jupyter examples](examples).



  This snippet shows how to obtain all releases for certain GitHub project using ogr.

  ```python
  from ogr.services.github import GithubService

  service = GithubService(token="your_token")

  ogr_project = service.get_project(
          repo="ogr",
          namespace="packit-service"
  )

  ogr_releases = ogr_project.get_releases()


  for release in ogr_releases:
      print(release.tag_name)
  ```

  This will output:

  ```
  0.7.0
  0.6.0
  0.5.0
  0.4.0
  0.3.1
  0.3.0
  0.2.0
  0.1.0
  0.0.3
  0.0.2
  0.0.1
  ```

  You can use the same API for other forges, you just need to replace `GithubService` with `PagureService`.



  For more info on functionality that _is not_ supported in all services the same way
  see [compatibility tables](COMPATIBILITY.md).



  On Fedora:

  ```
  $ dnf install python3-ogr
  ```

  You can also use our [`packit-releases` Copr repository](https://copr.fedorainfracloud.org/coprs/packit/packit-releases/)
  (contains also released versions of [OGR](https://github.com/packit/ogr)):

  ```
  $ dnf copr enable packit/packit-releases
  $ dnf install python3-ogr
  ```

  Or from PyPI:

  ```
  $ pip3 install --user ogr
  ```

  You can also install OGR from the `main` branch, if you are brave enough:

  You can use our [`packit-dev` Copr repository](https://copr.fedorainfracloud.org/coprs/packit/packit-dev/)
  (contains the latest development version of [ogr](https://github.com/packit/ogr)):

  ```
  $ dnf copr enable packit/packit-dev
  $ dnf install python3-ogr
  ```

  Or

  ```
  $ pip3 install --user git+https://github.com/packit/ogr.git
  ```





  - [podman](https://github.com/containers/libpod)
  - [ansible-bender](https://pypi.org/project/ansible-bender)



  Make sure to install prerequisite packages before first `make check`,
  `make build`, or `make check-in-container`. See CONTRIBUTING.md for
  details.



  - Property should not connect to network.



  For more info about contributing to our project see [our contribution guide](/CONTRIBUTING.md).



  For more info about deprecation policy see [Deprecation policy](https://github.com/packit/research/tree/main/deprecation)


pkgId: 275c201546cdf6bb5cd734358d8eb318de04e676324d98ebf3d95287547f6528
name: python-oic
arch: src
version: 1.5.0
epoch: 0
release: 1
summary: Python implementation of OAuth2 and OpenID Connect
url: https://github.com/OpenIDC/pyoidc/
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9b4479bd-8440-45cf-bf75-b2a58960b257
location_href: 00002750-python-oic/python-oic-1.5.0-1.src.rpm
checksum_type: sha256
description:
  This is a complete implementation of OpenID Connect as specified in the `OpenID
  Connect Core specification`_. And as a side effect, a complete implementation
  of OAuth2.0 too.
  Please see the `CHANGELOG.md`_ to review the latest changes.


pkgId: 73511ecc85366a6baf4569d596ae6c8f981cfd87d786a28988a9e5127a72718a
name: python-okaara
arch: src
version: 1.0.37
epoch: 0
release: 1
summary: Python command line utilities
url: https://okaara.readthedocs.org/en/latest/
rpm_license: GPLv2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f3d5e69d-382a-4745-b640-a9e4309e8f01
location_href: 00004370-python-okaara/python-okaara-1.0.37-1.src.rpm
checksum_type: sha256
description:
  For more information, see:

    http://okaara.readthedocs.org/en/latest/

  That site's documentation can also be built locally by running "make html"
  from the doc directory.


pkgId: 905c7c0c86a632d479b1bf64f350d4f935c221d86f40a2bf092465a63316c501
name: python-oldest-supported-numpy
arch: src
version: 2022.11.19
epoch: 0
release: 1
url: https://github.com/scipy/oldest-supported-numpy
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4cbca113-ad54-4280-ab86-acfdb6b9187f
location_href: 00009306-python-oldest-supported-numpy/python-oldest-supported-numpy-2022.11.19-1.src.rpm
checksum_type: sha256
summary:
  Meta-package that provides the oldest NumPy that supports a given Python version and platform. If wheels for the platform became available on PyPI only for a more recent NumPy version, then that NumPy version is specified.

description:
  This is a meta-package which can be used in ``pyproject.toml`` files
  to automatically provide as a build-time dependency the oldest version
  of NumPy that supports the given Python version and platform. In case
  of platforms for which NumPy has prebuilt wheels, the provided version
  also has a prebuilt NumPy wheel.
  The reason to use the oldest available NumPy version as a build-time
  dependency is because of ABI compatibility. Binaries compiled with old
  NumPy versions are binary compatible with newer NumPy versions, but
  not vice versa. This meta-package exists to make dealing with this
  more convenient, without having to duplicate the same list manually in
  all packages requiring it.
  In other words:
      [build-system]
      requires = [
          "wheel",
          "setuptools",
          "numpy==1.13.3; python_version=='3.5'",
          "numpy==1.13.3; python_version=='3.6'",
          "numpy==1.14.5; python_version=='3.7'",
          
      ]
  can be replaced by:
      [build-system]
      requires = ["wheel", "setuptools", "oldest-supported-numpy"]
  And as new Python versions are released, the ``pyproject.toml`` file does not
  need to be updated.


pkgId: cf79ae51a7efbc7593f0dbde61e7f32adff52baa876e05e0bcd613752c058dda
name: python-olefile
arch: src
version: 0.46
epoch: 0
release: 1
url: https://www.decalage.info/python/olefileio
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3aa93f05-dbc3-42c9-9b82-e46be4b86bce
location_href: 00009816-python-olefile/python-olefile-0.46-1.src.rpm
checksum_type: sha256
summary:
  Python package to parse, read and write Microsoft OLE2 files (Structured Storage or Compound Document, Microsoft Office)

description:
  |Build Status TravisCI| |Build Status AppVeyor| |Coverage Status|
  |Documentation Status| |PyPI| |Can I Use Python 3?| |Say Thanks!|
  `olefile <https://www.decalage.info/olefile>`__ is a Python package to
  parse, read and write `Microsoft OLE2
  files <http://en.wikipedia.org/wiki/Compound_File_Binary_Format>`__
  (also called Structured Storage, Compound File Binary Format or Compound
  Document File Format), such as Microsoft Office 97-2003 documents,
  vbaProject.bin in MS Office 2007+ files, Image Composer and FlashPix
  files, Outlook messages, StickyNotes, several Microscopy file formats,
  McAfee antivirus quarantine files, etc.
  **Quick links:** `Home page <https://www.decalage.info/olefile>`__ -
  `Download/Install <http://olefile.readthedocs.io/en/latest/Install.html>`__
  - `Documentation <http://olefile.readthedocs.io/en/latest>`__ - `Report
  Issues/Suggestions/Questions <https://github.com/decalage2/olefile/issues>`__
  - `Contact the author <https://www.decalage.info/contact>`__ -
  `Repository <https://github.com/decalage2/olefile>`__ - `Updates on
  Twitter <https://twitter.com/decalage2>`__


pkgId: b5358e3f8df16d8662e2fba51175bc65aadd43b86a8a5bebb2ac055f97f0578d
name: python-oletools
arch: src
version: 0.60.1
epoch: 0
release: 1
url: http://www.decalage.info/python/oletools
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ecfbfb3a-fb91-4e40-a967-cbf9e7f64908
location_href: 00004371-python-oletools/python-oletools-0.60.1-1.src.rpm
checksum_type: sha256
summary:
  Python tools to analyze security characteristics of MS Office and OLE files (also called Structured Storage, Compound File Binary Format or Compound Document File Format), for Malware Analysis and Incident Response #DFIR

description:
  |PyPI| |Build Status| |Say Thanks!|
  `oletools <http://www.decalage.info/python/oletools>`__ is a package of
  python tools to analyze `Microsoft OLE2
  files <http://en.wikipedia.org/wiki/Compound_File_Binary_Format>`__
  (also called Structured Storage, Compound File Binary Format or Compound
  Document File Format), such as Microsoft Office documents or Outlook
  messages, mainly for malware analysis, forensics and debugging. It is
  based on the `olefile <http://www.decalage.info/olefile>`__ parser. See
  http://www.decalage.info/python/oletools for more info.
  **Quick links:** `Home
  page <http://www.decalage.info/python/oletools>`__ -
  `Download/Install <https://github.com/decalage2/oletools/wiki/Install>`__
  - `Documentation <https://github.com/decalage2/oletools/wiki>`__ -
  `Report
  Issues/Suggestions/Questions <https://github.com/decalage2/oletools/issues>`__
  - `Contact the Author <http://decalage.info/contact>`__ -
  `Repository <https://github.com/decalage2/oletools>`__ - `Updates on
  Twitter <https://twitter.com/decalage2>`__
  `Cheatsheet <https://github.com/decalage2/oletools/blob/master/cheatsheet/oletools_cheatsheet.pdf>`__
  Note: python-oletools is not related to OLETools published by BeCubed
  Software.


pkgId: 554ccb4287c8570922c24c0f8ef486f5c0eae461e9ef8416d4dbf10fca891e1d
name: python-omnilogic
arch: src
version: 0.5.0
epoch: 0
release: 1
summary: Integration for the Hayward OmniLogic pool control system
url: https://github.com/djtimca/omnilogic-api
rpm_license: apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-acde1ec4-7e51-4433-984b-9f8ee50de2ad
location_href: 00004373-python-omnilogic/python-omnilogic-0.5.0-1.src.rpm
checksum_type: sha256
description:
  Integration library for Hayward Omnilogic pool controllers to allow easy integration through their API to your home automation system.





  To download OmniLogic, either fork this github repo or simply use PyPi via pip.

  ```
  $ pip install omnilogic
  ```



  OmniLogic provides just the core actions, you will need to code your own specific use of the returned data.

  ```
  from omnilogic import OmniLogic
  ```

  A simple example to return the status of your pool equipment is:

  ```
  api_client = OmniLogic(username, password)

  telemetry_data = await api_client.get_telemetry_data()
  ```





  ** DEPRECATED - ALL CONFIG DATA NOW RETURNED WITH THE TELEMETRY **

  Returns the full configuration of the registered Omnilogic System in JSON format with all systems on your account returned in a list and all bodies-of-water captured in a list (BOWS). Additional components like lights and relays are also forced into a list to make them easier to parse. You will need to retain the MspSystemID for each pool system in order to be able to call any of the equipment change methods. Left available to allow retrieval of new configurations for addition to the get_telemetry_data method as development continues.



  Returns the status of all of the equipment in the Omnilogic System in JSON format (ie. pump speeds, water temperature, heat setting, etc). This data also is returned as a list with components like lights and relays grouped into lists for easy parsing. Includes key config data such as SystemIds, equipment names, equipment parameters (max/min speed etc) and alarms for common pool components.



  Returns a list of all alarms on the pool equipment in JSON format. If there are no alarms returns JSON {'BowID', 'False'}. Also returned as a list for all pool systems on your Omnilogic account. Note that alarm information is also returned in the get_telemetry_data method so unless you need just the full list of alarms this should not be needed.



  Turns the heater on or off (toggle). Pass the MspSystemID, PoolID and HeaterID as int and boolean True (turn on) or False (turn off) to set the heater state.



  Sets the heater set-point to a specified temperature. Pass the MspSystemId, PoolID, HeaterID, and desired Temperature as int to set the heater target temperature.



  Sets the pump speed or turns the pump on or off. Pass the MspSystemID, PoolID and HeaterID as int. Pass the Speed according to the following table.

  |Pump Type|ON|OFF|
  |---------|--|---|
  |Single Speed|100|0|
  |Variable Speed|18-100|0|



  Sets a relay or valve to On/Off (Open/Close). Pass the MspSystemID, PoolID and EquipmentID of the valve or relay as int. Pass OnOff value as int according to the following table. Also used to turn on/off lights attached to a relay without changing the lightshow.

  |Equipment Type|Value=1|Value=0|
  |--------------|-------|-------|
  |Relay|ON|OFF|
  |Valve|OPEN|CLOSED|



  Sets the spillover speed for a pool that supports Spillover. Pass the MspSystemID, PoolID and desired spillover Speed as int.



  Sets the SuperChlorination function on or off. Pass the MspSystemID, PoolID and the ChlorID (Equipment ID of the Chlorinator) as int. Pass IsOn as int with 1 to turn on SuperChlorination and 0 to turn off SuperChlorination.



  Turns on and sets the desired lightshow for V1 (non-brightness/speed controlled) lights. Pass the MspSystemID, PoolID and LightID as int. Select the desired show based on the table below:

  |ShowID|Color/Show|
  |------|----------|
  |0|Show-Voodoo Lounge|
  |1|Fixed-Deep Blue Sea|
  |2|Fixed-Royal Blue|
  |3|Fixed-Afternoon Skies|
  |4|Fixed-Aqua Green|
  |5|Fixed-Emerald|
  |6|Fixed-Cloud White|
  |7|Fixed-Warm Red|
  |8|Fixed-Flamingo|
  |9|Fixed-Vivid Violet|
  |10|Fixed-Sangria|
  |11|Show-Twilight|
  |12|Show-Tranquility|
  |13|Show-Gemstone|
  |14|Show-USA|
  |15|Show-Mardi Gras|
  |16|Show-Cool Cabaret|
  |17|YELLOW|
  |18|ORANGE|
  |19|GOLD|
  |20|MINT|
  |21|TEAL|
  |22|BURNT_ORANGE|
  |23|PURE_WHITE|
  |24|CRISP_WHITE|
  |25|WARM_WHITE|
  |26|BRIGHT_YELLOW|

  Note that show 17-26 may not be supported by all ColorLogic Light Systems.



  Turns on and sets the desired lightshow for V2 light systems. Pass the MspSystemID, PoolID and LightID as int. Use the table from above for the desired show as int. Send brightness and speed as Int.


pkgId: 66d405443618bde48eb67e9745de03b9e606d446698a6d98dad457b56a5fccfe
name: python-onetimepass
arch: src
version: 1.0.1
epoch: 0
release: 1
summary: Module for generating and validating HOTP and TOTP tokens
url: https://github.com/tadeck/onetimepass/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-922ecd85-67e3-485d-9b80-ebdf72d663bb
location_href: 00014214-python-onetimepass/python-onetimepass-1.0.1-1.src.rpm
checksum_type: sha256
description:
  Current development release: `onetimepass-master.tar.gz`_ |otp-status-dev|_
     https://api.travis-ci.org/tadeck/onetimepass.png?branch=master
     https://github.com/tadeck/onetimepass/archive/master.tar.gz


pkgId: 6fee4d28f025cd67a4188992bab5d6d6795f02cea528601bbdb21ee2c0b05132
name: python-openbabel
arch: src
version: 3.1.1.1
epoch: 0
release: 1
summary: Python interface to the Open Babel chemistry library
url: http://openbabel.org/
rpm_license: GPL-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ed3f6f68-bda4-4d02-b4bc-b405f474a6f1
location_href: 00004375-python-openbabel/python-openbabel-3.1.1.1-1.src.rpm
checksum_type: sha256
description:
  This is a Python interface to the Open Babel chemistry library. For the
  main Open Babel project, see http://openbabel.org.
  Open Babel is a chemical toolbox designed to speak the many languages
  of chemical data. It's an open, collaborative project allowing anyone
  to search, convert, analyze, or store data from molecular modeling,
  chemistry, solid-state materials, biochemistry, or related areas. For
  installation instructions, tutorials and examples, please visit the
  `Open Babel website`_.
  This package provides two Python modules that can be used to access the
  functionality of the Open Babel toolkit:
  -  The `openbabel`_ module: A wrapper that is automatically generated using
     the SWIG package and provides access to almost all of the Open Babel
     interfaces via Python, including the base classes OBMol, OBAtom, OBBond,
     and OBResidue, as well as the conversion framework OBConversion.
  -  The `pybel`_ module: A lightweight wrapper around the classes and methods
     in the openbabel module. Pybel provides more convenient and Pythonic ways
     to access the Open Babel toolkit.
  For detailed installation instructions, API documentation and further information
  on the Python bindings, see the `Python pages on the Open Babel website`_.


pkgId: 09dd3b4c484ba9ce5c839a080f3900ab9f494be77ad7f5c0f9082de5affc3f43
name: python-opencensus
arch: src
version: 0.11.1
epoch: 0
release: 1
summary: A stats collection and distributed tracing framework
url: https://github.com/census-instrumentation/opencensus-python
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8c266249-6d2f-488e-800f-72d726e191ea
location_href: 00004376-python-opencensus/python-opencensus-0.11.1-1.src.rpm
checksum_type: sha256
description:
  |gitter|
  |travisci|
  |circleci|
  |pypi|
  |compat_check_pypi|
  |compat_check_github|
  `OpenCensus`_ for Python. OpenCensus provides a framework to measure a
  server's resource usage and collect performance stats. This repository
  contains Python related utilities and supporting software needed by
  OpenCensus.


pkgId: fc210426c615132aaaf2ea181fdddef99988eb69f5e29a95321d828859943e90
name: python-opencensus-context
arch: src
version: 0.1.3
epoch: 0
release: 1
summary: OpenCensus Runtime Context
url: https://github.com/census-instrumentation/opencensus-python/tree/master/context/opencensus-context
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a9668631-6c60-44a7-980e-025434caea39
location_href: 00004377-python-opencensus-context/python-opencensus-context-0.1.3-1.src.rpm
checksum_type: sha256
description:
  |pypi|
  The **OpenCensus Runtime Context** provides in-process context propagation.
  By default, ``thread local storage`` is used for Python 2.7, 3.4 and 3.5;
  ``contextvars`` is used for Python >= 3.6, which provides ``asyncio`` support.


pkgId: 483fa5c0b8cc95661748348880f52c8eb7333475cadf9f977bfaca91bf3a5878
name: python-opencensus-ext-azure
arch: src
version: 1.1.8
epoch: 0
release: 1
summary: OpenCensus Azure Monitor Exporter
description: |pypi|
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-843baf3d-d11b-4d32-97b6-a26df2121c93
location_href: 00004379-python-opencensus-ext-azure/python-opencensus-ext-azure-1.1.8-1.src.rpm
checksum_type: sha256
url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-azure


pkgId: 8b73ece0f488562bc8f700503be0e044326f2f799700425e057287712d193743
name: python-opencensus-ext-django
arch: src
version: 0.8.0
epoch: 0
release: 1
summary: OpenCensus Django Integration
description: |pypi|
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3955404b-df94-4c11-ab41-9ca690bc36b7
location_href: 00004382-python-opencensus-ext-django/python-opencensus-ext-django-0.8.0-1.src.rpm
checksum_type: sha256
url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-django


pkgId: e57b0d4709173f0e9524c4ebed2b0248a1ed4c6458792b24e9c19f155276b6df
name: python-opencensus-ext-flask
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: OpenCensus Flask Integration
description: |pypi|
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7e3bfe4a-bbae-492b-baf5-75198ede6983
location_href: 00004383-python-opencensus-ext-flask/python-opencensus-ext-flask-0.8.1-1.src.rpm
checksum_type: sha256
url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-flask


pkgId: b585df9e4fbce83aeec77af1ac8291e649f98724851b9fbc7488a80c2f0f12e5
name: python-opencensus-ext-grpc
arch: src
version: 0.7.2
epoch: 0
release: 1
summary: OpenCensus gRPC Integration
url: https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-grpc
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c9b123e6-af6b-4a85-a4e4-bdd5903bddc7
location_href: 00004385-python-opencensus-ext-grpc/python-opencensus-ext-grpc-0.7.2-1.src.rpm
checksum_type: sha256
description:
  |pypi|
  OpenCensus provides the implementation of interceptors for both the client side
  and server side to instrument the gRPC requests and responses. The client
  interceptors are used to create a decorated channel that intercepts client
  gRPC calls and server interceptors act as decorators over handlers.
  gRPC interceptor is a new feature in the grpcio1.8.0 release, please upgrade
  your grpcio to the latest version to use this feature.
  For sample usage, please refer to the hello world example in the examples
  directory.
  More information about the gRPC interceptors please see the `proposal`_.


pkgId: d5cbd4be7025fd3907141842b81074ad81dc836945530ef88fd91a2586b45902
name: python-opencensus-ext-httplib
arch: src
version: 0.7.5
epoch: 0
release: 1
summary: OpenCensus httplib Integration
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9ed6486c-36b5-475e-89bc-93637bc6caa7
location_href: 00004386-python-opencensus-ext-httplib/python-opencensus-ext-httplib-0.7.5-1.src.rpm
checksum_type: sha256
description:
  |pypi|
  OpenCensus can trace HTTP requests made with the httplib library.
  You can enable requests integration by specifying ``'httplib'`` to ``trace_integrations``.
  It's possible to configure a list of URL you don't want traced. See requests integration
  for more information. The only difference is that you need to specify hostname and port
  every time.

url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-httplib


pkgId: 87e9f31de27a9f0f0cdfc962f86d88aec1ebd465eb51a85eb73a61a92daf3c4b
name: python-opencensus-ext-logging
arch: src
version: 0.1.1
epoch: 0
release: 1
summary: OpenCensus logging Integration
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fb9cf948-f10f-436f-b747-fba0003a8d5b
location_href: 00004388-python-opencensus-ext-logging/python-opencensus-ext-logging-0.1.1-1.src.rpm
checksum_type: sha256
description:
  |pypi|
  The logging integration enriches the log records with trace ID, span ID and sampling flag.
  The following attributes will be added to ``LogRecord``:
      * traceId
      * spanId
      * traceSampled
  Note that this only takes effect for loggers created after the integration.

url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-logging


pkgId: c49384ef9f28ff1218e9b35f45bd915d65c28859437d2a21872cdf03611854d8
name: python-opencensus-ext-mysql
arch: src
version: 0.1.3
epoch: 0
release: 1
summary: OpenCensus MySQL Integration
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-806db53d-0b96-426c-b310-7ece20012376
location_href: 00004389-python-opencensus-ext-mysql/python-opencensus-ext-mysql-0.1.3-1.src.rpm
checksum_type: sha256
description:
  |pypi|
  The integration with MySQL supports the `mysql-connector`_ library and is specified
  to ``trace_integrations`` using ``'mysql'``.

url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-mysql


pkgId: 819dc97683a57fb6b1bfd37df92235dd795d07d858b13ccba2e3e1e5ba72db46
name: python-opencensus-ext-postgresql
arch: src
version: 0.1.3
epoch: 0
release: 1
summary: OpenCensus PostgreSQL Integration
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-55dfe893-0279-4b5f-9a29-0698025ff22e
location_href: 00004391-python-opencensus-ext-postgresql/python-opencensus-ext-postgresql-0.1.3-1.src.rpm
checksum_type: sha256
description:
  |pypi|
  The integration with PostgreSQL supports the `psycopg2`_ library and is specified
  to ``trace_integrations`` using ``'postgresql'``.

url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-postgresql


pkgId: f6c1ddafeabbdafba562f2970cc223377434f76d7fe3a8483ca335d3bd21fa2b
name: python-opencensus-ext-pymongo
arch: src
version: 0.7.2
epoch: 0
release: 1
summary: OpenCensus pymongo Integration
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5b91d0d6-c9c4-4eb7-8dce-7f7ca31934a9
location_href: 00004393-python-opencensus-ext-pymongo/python-opencensus-ext-pymongo-0.7.2-1.src.rpm
checksum_type: sha256
description:
  |pypi|
  The integration with MongoDB supports the `pymongo`_ library and is specified
  to ``trace_integrations`` using ``'pymongo'``.

url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-pymongo


pkgId: a35d934a23cbac4e5e9f85a76c05ca674cd84091374e2f4f70377b597d9d2d98
name: python-opencensus-ext-pymysql
arch: src
version: 0.1.3
epoch: 0
release: 1
summary: OpenCensus PyMySQL Integration
description: |pypi|
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6e4b4843-e700-473a-bc66-b08206653a75
location_href: 00004394-python-opencensus-ext-pymysql/python-opencensus-ext-pymysql-0.1.3-1.src.rpm
checksum_type: sha256
url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-pymysql


pkgId: f3c0f70747722f831c7448482c203d0620811040e3d9b43cc8c38d6d9a075517
name: python-opencensus-ext-pyramid
arch: src
version: 0.7.3
epoch: 0
release: 1
summary: OpenCensus Pyramid Integration
description: |pypi|
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3b20192d-1a2a-4011-a5b9-01ea47fb9d78
location_href: 00004395-python-opencensus-ext-pyramid/python-opencensus-ext-pyramid-0.7.3-1.src.rpm
checksum_type: sha256
url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-pyramid


pkgId: d29ebcd80737748cbd68ec497057c5522e3bc89228763e61f1811030a4af1ce2
name: python-opencensus-ext-requests
arch: src
version: 0.8.0
epoch: 0
release: 1
summary: OpenCensus Requests Integration
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-df2f4e3e-6cdd-4e77-862f-6e51cc22fda4
location_href: 00004396-python-opencensus-ext-requests/python-opencensus-ext-requests-0.8.0-1.src.rpm
checksum_type: sha256
description:
  |pypi|
  OpenCensus can trace HTTP requests made with the `requests package`_. The request URL,
  method, and status will be collected.
  You can enable requests integration by specifying ``'requests'`` to ``trace_integrations``.
  It's possible to configure a list of URL you don't want traced. By default the request to exporter
  won't be traced. It's configurable by giving an array of hostname/port to the attribute
  ``excludelist_hostnames`` in OpenCensus context's attributes:
  Only the hostname must be specified if only the hostname is specified in the URL request.

url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-requests


pkgId: 8eb8ea0f509324ace2473c779bd0a9161aa1f51803875af5f8aefb561f2e6736
name: python-opencensus-ext-sqlalchemy
arch: src
version: 0.1.3
epoch: 0
release: 1
summary: OpenCensus SQLAlchemy Integration
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e0f256a5-8f35-44a6-92b6-c9b2e72e1e8d
location_href: 00004397-python-opencensus-ext-sqlalchemy/python-opencensus-ext-sqlalchemy-0.1.3-1.src.rpm
checksum_type: sha256
description:
  |pypi|
  You can trace usage of the `sqlalchemy package`_, regardless of the underlying
  database, by specifying ``'sqlalchemy'`` to ``trace_integrations``.
      driver, you will get duplicate spans. Instead, just trace SQLAlchemy.

url:
  https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-sqlalchemy


pkgId: e577b0e01b2dd871965d0522a1ad37c82eaa58bf3ab9959161a04105cdaa14b0
name: python-openml
arch: src
version: 0.13.1
epoch: 0
release: 1
summary: Python API for OpenML
url: https://openml.org/
rpm_license: BSD 3-clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-69831909-2a55-4038-b75b-ffa3145aeb35
location_href: 00009961-python-openml/python-openml-0.13.1-1.src.rpm
checksum_type: sha256
description:
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
  [![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-)
  <!-- ALL-CONTRIBUTORS-BADGE:END -->

  A python interface for [OpenML](http://openml.org), an online platform for open science collaboration in machine learning.
  It can be used to download or upload OpenML data such as datasets and machine learning experiment results.



  * [Documentation](https://openml.github.io/openml-python).
  * [Contribution guidelines](https://github.com/openml/openml-python/blob/develop/CONTRIBUTING.md).

  [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)



  If you use OpenML-Python in a scientific publication, we would appreciate a reference to the
  following paper:

  [Matthias Feurer, Jan N. van Rijn, Arlind Kadra, Pieter Gijsbers, Neeratyoy Mallik, Sahithya Ravi, Andreas Müller, Joaquin Vanschoren, Frank Hutter<br/>
  **OpenML-Python: an extensible Python API for OpenML**<br/>
  *arXiv:1911.02490 [cs.LG]*](https://arxiv.org/abs/1911.02490)

  Bibtex entry:
  ```bibtex
  @article{feurer-arxiv19a,
    author    = {Matthias Feurer and Jan N. van Rijn and Arlind Kadra and Pieter Gijsbers and Neeratyoy Mallik and Sahithya Ravi and Andreas Müller and Joaquin Vanschoren and Frank Hutter},
    title     = {OpenML-Python: an extensible Python API for OpenML},
    journal   = {arXiv:1911.02490},
    year      = {2019},
  }
  ```



  Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):

  <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
  <!-- prettier-ignore-start -->
  <!-- markdownlint-disable -->
  <table>
    <tr>
      <td align="center"><a href="https://github.com/a-moadel"><img src="https://avatars0.githubusercontent.com/u/46557866?v=4" width="100px;" alt=""/><br /><sub><b>a-moadel</b></sub></a><br /><a href="https://github.com/openml/openml-python/commits?author=a-moadel" title="Documentation">📖</a> <a href="#example-a-moadel" title="Examples">💡</a></td>
      <td align="center"><a href="https://github.com/Neeratyoy"><img src="https://avatars2.githubusercontent.com/u/3191233?v=4" width="100px;" alt=""/><br /><sub><b>Neeratyoy Mallik</b></sub></a><br /><a href="https://github.com/openml/openml-python/commits?author=Neeratyoy" title="Code">💻</a> <a href="https://github.com/openml/openml-python/commits?author=Neeratyoy" title="Documentation">📖</a> <a href="#example-Neeratyoy" title="Examples">💡</a></td>
    </tr>
  </table>

  <!-- markdownlint-enable -->
  <!-- prettier-ignore-end -->
  <!-- ALL-CONTRIBUTORS-LIST:END -->

  This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!


pkgId: b24ffb14362e04042854f1bd986143a06ebea494d0254ceb929b6886051bd982
name: python-openpyxl
arch: src
version: 3.1.1
epoch: 0
release: 1
summary: A Python library to read/write Excel 2010 xlsx/xlsm files
url: https://openpyxl.readthedocs.io
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-31332de3-0fd8-4029-bc16-21767970b018
location_href: 00004412-python-openpyxl/python-openpyxl-3.1.1-1.src.rpm
checksum_type: sha256
description:
  openpyxl is a Python library to read/write Excel 2010 xlsx/xlsm/xltx/xltm files.
  It was born from lack of existing library to read/write natively from Python
  the Office Open XML format.
  All kudos to the PHPExcel team as openpyxl was initially based on PHPExcel.


pkgId: d80ce11b7f357339795a076e270d7fff5201a33dd365cd66db22422379899218
name: python-openqa-client
arch: src
version: 4.2.1
epoch: 0
release: 1
summary: Python client library for openQA API
url: https://github.com/os-autoinst/openQA-python-client
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c0779a6e-b316-40e6-819e-442ccc468ca5
location_href: 00004413-python-openqa_client/python-openqa-client-4.2.1-1.src.rpm
checksum_type: sha256
description:
  This is a client for the [openQA](https://os-autoinst.github.io/openQA/)
  API, based on [requests](https://python-requests.org). It requires Python
  3.6 or later.



  Here's a simple example of reading the status of a job:

      from openqa_client.client import OpenQA_Client
      client = OpenQA_Client(server='openqa.opensuse.org')
      print(client.openqa_request('GET', 'jobs/1'))

  Here's an example of triggering jobs for an ISO:

      
      client = OpenQA_Client(server='openqa.happyassassin.net')
      params = {}
      params['ISO'] = '22_Beta_TC2_server_x86_64_boot.iso'
      params['DISTRI'] = 'fedora'
      params['VERSION'] = '22'
      params['FLAVOR'] = 'server_boot'
      params['ARCH'] = 'x86_64'
      params['BUILD'] = '22_Beta_TC2'
      print(cl.openqa_request('POST', 'isos', params))

  All methods other than `GET` require authentication. This client uses
  the same configuration file format as the reference (perl) client in
  openQA itself. Configuration will be read from `/etc/openqa/client.conf`
  or `~/.config/openqa/client.conf`. A configuration file looks like this:

      [openqa.happyassassin.net]
      key = APIKEY
      secret = APISECRET

  You can get the API key and secret from the web UI after logging in. Your
  configuration file may include credentials for multiple servers; each
  section contains the credentials for the server named in the section
  title.

  If you create an `OpenQA_Client` instance without passing the `server`
  argument, it will use the first server listed in the configuration file
  if there is one, otherwise it will use 'localhost'. Note: this is a
  difference in behaviour from the perl client, which *always* uses 'localhost'
  unless a server name is passed.

  TLS/SSL connections are the default (except for localhost). You can
  pass the argument `scheme` to `OpenQA_Client` to force the use of
  unencrypted HTTP, e.g.
  `OpenQA_Client(server='openqa.happyassassin.net', scheme='http')`.

  The API always returns JSON responses; this client's request functions
  parse the response before returning it.

  If you need for some reason to make a request which does not fall into
  the `openqa_request()` method's expected pattern, you can construct a
  `requests.Request` and pass it to `do_request()`, which will attach the
  required headers, execute the request, and return the parsed JSON response.

  The `const` module provides several constants that are shadowed from the
  upstream openQA code, including job states, results, and the 'scenario
  keys'.



  You can file pull requests at [Github](https://github.com/os-autoinst/openQA-python-client).
  There is an extensive test suite with CI integration. You can run the test
  suite locally by running `tox`. If your system has a tox version earlier
  than 3.3.0, you must have the `setuptools_scm` Python module installed for
  this to work correctly, or else you will get errors about a missing
  `install.requires` file.



  This software is available under the GPL, version 2 or any later version.
  A copy is included as COPYING. Contributions submitted as pull requests are
  assumed to be submitted under the same license terms unless otherwise
  specified.

rpm_license:
  GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.  This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it.  (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.)  You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software.  If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents.  We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary.  To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License.  The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.  (Hereinafter, translation is included without limitation in the term "modification".)  Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope.  The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License.  (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole.  If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works.  But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code.  (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it.  For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.  However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License.  Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it.  However, nothing else grants you permission to modify or distribute the Program or its derivative works.  These actions are prohibited by law if you do not accept this License.  Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions.  You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all.  For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices.  Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded.  In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number.  If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission.  For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.  Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year>  <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary.  Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use the GNU Lesser General Public License instead of this License.


pkgId: 2805cac2f3c7c7a9f5231c0643cf3c0952a8f300045664092f61b8c5a86ff849
name: python-opensearch-py
arch: src
version: 2.2.0
epoch: 0
release: 1
summary: Python client for OpenSearch
url: https://github.com/opensearch-project/opensearch-py
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fb35768c-efcf-4c77-803e-3a2a20d69db2
location_href: 00009558-python-opensearch-py/python-opensearch-py-2.2.0-1.src.rpm
checksum_type: sha256
description:
  [![Release](https://github.com/opensearch-project/opensearch-py/actions/workflows/unified-release.yml/badge.svg)](https://github.com/opensearch-project/opensearch-py/actions/workflows/unified-release.yml)
  [![CI](https://github.com/opensearch-project/opensearch-py/actions/workflows/ci.yml/badge.svg)](https://github.com/opensearch-project/opensearch-py/actions/workflows/ci.yml)
  [![Integration](https://github.com/opensearch-project/opensearch-py/actions/workflows/integration.yml/badge.svg)](https://github.com/opensearch-project/opensearch-py/actions/workflows/integration.yml)
  [![Chat](https://img.shields.io/badge/chat-on%20forums-blue)](https://discuss.opendistrocommunity.dev/c/clients/)
  ![PRs welcome!](https://img.shields.io/badge/PRs-welcome!-success)

  ![OpenSearch logo](https://github.com/opensearch-project/opensearch-py/raw/main/OpenSearch.svg)

  OpenSearch Python Client

  - [Welcome!](https://github.com/opensearch-project/opensearch-py#welcome)
  - [User Guide](https://github.com/opensearch-project/opensearch-py#user-guide)
  - [API Doc](https://opensearch-project.github.io/opensearch-py/)
  - [Compatibility with OpenSearch](https://github.com/opensearch-project/opensearch-py#compatibility-with-opensearch)
  - [Project Resources](https://github.com/opensearch-project/opensearch-py#project-resources)
  - [Code of Conduct](https://github.com/opensearch-project/opensearch-py#code-of-conduct)
  - [License](https://github.com/opensearch-project/opensearch-py#license)
  - [Copyright](https://github.com/opensearch-project/opensearch-py#copyright)



  **opensearch-py** is [a community-driven, open source fork](https://aws.amazon.com/blogs/opensource/introducing-opensearch/)
  of elasticsearch-py licensed under the [Apache v2.0 License](https://github.com/opensearch-project/opensearch-py/blob/main/LICENSE.txt).
  For more information, see [opensearch.org](https://opensearch.org/) and the [API Doc](https://opensearch-project.github.io/opensearch-py/).



  To get started with the OpenSearch Python Client, see [User Guide](https://github.com/opensearch-project/opensearch-py/blob/main/USER_GUIDE.md).



  See [Compatibility](https://github.com/opensearch-project/opensearch-py/blob/main/COMPATIBILITY.md).



  * [Project Website](https://opensearch.org/)
  * [Downloads](https://opensearch.org/downloads.html)
  * [Documentation](https://opensearch.org/docs/latest/clients/python/)
  * Need help? Try [Forums](https://discuss.opendistrocommunity.dev/)
  * [Project Principles](https://opensearch.org/#principles)
  * [Contributing to OpenSearch](https://github.com/opensearch-project/opensearch-py/blob/main/CONTRIBUTING.md)
  * [Maintainer Responsibilities](https://github.com/opensearch-project/opensearch-py/blob/main/MAINTAINERS.md)
  * [Release Management](https://github.com/opensearch-project/opensearch-py/blob/main/RELEASING.md)
  * [Admin Responsibilities](https://github.com/opensearch-project/opensearch-py/blob/main/ADMINS.md)
  * [Security](https://github.com/opensearch-project/opensearch-py/blob/main/SECURITY.md)



  This project has adopted the
  [Amazon Open Source Code of Conduct](https://github.com/opensearch-project/opensearch-py/blob/main/CODE_OF_CONDUCT.md).
  For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq), or contact
  [opensource-codeofconduct@amazon.com](mailto:opensource-codeofconduct@amazon.com) with any additional questions or comments.



  This project is licensed under the
  [Apache v2.0 License](https://github.com/opensearch-project/opensearch-py/blob/main/LICENSE.txt).



  Copyright OpenSearch Contributors. See
  [NOTICE](https://github.com/opensearch-project/opensearch-py/blob/main/NOTICE.txt) for details.


pkgId: 2bcff4370d326c612b13a0ccc1ea5719bf6d7a0ecf9a1746b16fc9b1e22deae0
name: python-opensensemap-api
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: Python client for interacting with the openSenseMap API.
url: https://github.com/home-assistant-ecosystem/python-opensensemap-api
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a2866693-f1ec-4f44-a0c6-4eb7704f82dc
location_href: 00004414-python-opensensemap-api/python-opensensemap-api-0.3.0-1.src.rpm
checksum_type: sha256
description:
  Python Client for interacting with the `openSenseMap <https://opensensemap.org/>`_
  API.
  This module is not official, developed, supported or endorsed by
  `openSenseMap <https://opensensemap.org/>`_


pkgId: c8038f794fc91cbe328976504bcb3234a0ed04e1a96f479c1b00b21786893e25
name: python-opentracing
arch: src
version: 2.4.0
epoch: 0
release: 1
summary: OpenTracing API for Python. See documentation at http://opentracing.io
url: https://github.com/opentracing/opentracing-python
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-76625975-e498-4acd-8a31-073f84a69a2e
location_href: 00009441-python-opentracing/python-opentracing-2.4.0-1.src.rpm
checksum_type: sha256
description:
  |GitterChat| |BuildStatus| |PyPI| |ReadTheDocs|
  This library is a Python platform API for OpenTracing.


pkgId: 659a12169f59c9244fa493260c71216d2dfa569b4d9d16264aad132b3d4fc786
name: python-opentrep
arch: src
version: 0.7.11
epoch: 0
release: 1
summary: Simple Python wrapper for OpenTREP
url: https://github.com/trep/opentrep
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-558e4630-aa31-41ab-b4dd-610c38c03d13
location_href: 00004445-python-opentrep/python-opentrep-0.7.11-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.com/trep/opentrep.svg?branch=master)](https://travis-ci.com/trep/opentrep)
  [![Docker Repository on Quay](https://quay.io/repository/trep/opentrep/status "Docker Repository on Quay")](https://quay.io/repository/trep/opentrep)

  - [Open Travel Request Parser (TREP)](#open-travel-request-parser--trep-)
  - [Table of content](#table-of-content)
  - [Overview](#overview)
  - [Docker images](#docker-images)
    * [OpenTREP Docker images](#opentrep-docker-images)
    * [General purpose C++/Python Docker images](#general-purpose-c---python-docker-images)
      + [CentOS 7](#centos-7)
      + [Ubuntu 18.04 LTS Bionic Beaver](#ubuntu-1804-lts-bionic-beaver)
      + [Debian 9 Stretch](#debian-9-stretch)
      + [Common to all the above-mentioned Linux distributions](#common-to-all-the-above-mentioned-linux-distributions)
  - [Native installation (without Docker)](#native-installation--without-docker-)
    * [RPM-based distributions (eg, Fedora/CentOS/RedHat)](#rpm-based-distributions--eg--fedora-centos-redhat-)
    * [Installation from the sources](#installation-from-the-sources)
      + [Clone the Git repository](#clone-the-git-repository)
      + [Alternatively, download and extract the tar-ball](#alternatively--download-and-extract-the-tar-ball)
      + [Installation of the dependencies](#installation-of-the-dependencies)
        - [On Linux](#on-linux)
          * [Fedora](#fedora)
          * [CentOS](#centos)
          * [Debian/Ubuntu](#debian-ubuntu)
        - [On MacOS](#on-macos)
      + [ICU](#icu)
      + [Boost](#boost)
        - [CentOS](#centos-1)
      + [SOCI](#soci)
        - [General Unix/Linux](#general-unix-linux)
        - [Debian](#debian)
        - [MacOS](#macos)
      + [Building the library and test binary](#building-the-library-and-test-binary)
    * [Underlying (relational) database, SQLite or MySQL/MariaDB, if any](#underlying--relational--database--sqlite-or-mysql-mariadb--if-any)
  - [Indexing the POR data](#indexing-the-por-data)
    * [Filling the (relational) database, SQLite or MySQL/MariaDB, if any](#filling-the--relational--database--sqlite-or-mysql-mariadb--if-any)
    * [Xapian indexing with standard installation](#xapian-indexing-with-standard-installation)
    * [Xapian indexing for an ad hoc deployed Web application](#xapian-indexing-for-an-ad-hoc-deployed-web-application)
  - [Searching](#searching)
  - [Deployment stages](#deployment-stages)
  - [Index, or not, non-IATA POR](#index--or-not--non-iata-por)
  - [Installing a Python virtual environment](#installing-a-python-virtual-environment)
  - [Checking that the Python module works](#checking-that-the-python-module-works)
  - [Trouble-shooting Python issues on MacOS](#trouble-shooting-python-issues-on-macos)
    * [Interceptors not installed / late](#interceptors-not-installed---late)
  - [OpenTREP as a Python extension](#opentrep-as-a-python-extension)
    * [References](#references)
    * [Build and package OpenTREP as a Python extension](#build-and-package-opentrep-as-a-python-extension)
      + [Install Python modules/dependencies](#install-python-modules-dependencies)
      + [Install OpenTrep Python extension with system-based `pip`](#install-opentrep-python-extension-with-system-based--pip-)
      + [Build the OpenTrep Python extension locally with system-based Scikit-build](#build-the-opentrep-python-extension-locally-with-system-based-scikit-build)
    * [Test the OpenTREP Python extension](#test-the-opentrep-python-extension)
    * [Use the OpenTREP Python extension](#use-the-opentrep-python-extension)
      + [Download the latest OpenTravelData (OPTD) POR data file](#download-the-latest-opentraveldata--optd--por-data-file)
      + [Xapian index initialization](#xapian-index-initialization)
      + [Search with the OpenTrep Python extension](#search-with-the-opentrep-python-extension)
      + [Search with the OpenTrepWrapper package](#search-with-the-opentrepwrapper-package)
  - [(Optional) Running the Django-based application server (needs update)](#-optional--running-the-django-based-application-server--needs-update-)
  <small><i><a href='http://ecotrust-canada.github.io/markdown-toc/'>Table of contents generated with markdown-toc</a></i></small>

  [OpenTREP](https://github.com/trep/opentrep)
  aims at providing a clean API, and the corresponding C++
  implementation, for parsing travel-/transport-focused requests.
  It powers the https://transport-search.org Web site (as well
  as its newer version, https://www2.transport-search.org).
  OpenTREP uses Xapian (https://www.xapian.org) for the Information Retrieval
  part, on freely available transport-/travel-related data (_e.g._, country
  names and codes, city names and codes, airline names and codes, _etc_),
  mainly to be found in the
  [OpenTravelData (OPTD)
  project](https://github.com/opentraveldata/opentraveldata):
  http://github.com/opentraveldata/opentraveldata/tree/master/opentraveldata
  OpenTREP exposes a simple, clean and object-oriented, API. For instance,
  the
  [`OPENTREP::interpretTravelRequest()`
  method](https://github.com/trep/opentrep/blob/master/opentrep/OPENTREP_Service.hpp#L58):
  * takes, as input, a character string containing the travel request;
  * and yields, as output, the list of the recognized terms,
    as well as their corresponding types.
  As an example, the travel request
  `Washington DC Beijing Monday a/r +AA -UA 1 week 2 adults 1 dog` would yield
  the following list:
   * Origin airport: Washington, DC, United States (US)
   * Destination airport: Beijing, China (CN)
   * Date of travel: next Monday
   * Date of return: 1 week after next Monday
   * Preferred airline: American Airlines (AA);
     non-preferred airline: United Airlines
   * Number of travelers: 2 adults and a dog
  The output may then be used by other systems, for instance to book the
  corresponding travel, or to visualize it on a map and calendar and to
  share it with others.
  Note that the current version of OpenTREP recognizes only geographical POR
  (points of reference), whatever their number in the request. For instance,
  the request `lviv rivne jitomir kbp kharkiv dnk ods lwo` yields the
  following list of POR: `LWO`, `RWN`, `ZTR`, `KBP`, `HRK`, `DNK`,
  `ODS` and `LWO` again.
  See
  [that request in action on the transport-search.org site](https://transport-search.org/search/?q=lwo+rwn+ztr+kbp+hrk+dnk+ods+lwo)
  or [through the API](https://www2.transport-search.org/api/v1/geo?query=lwo+rwn+ztr+kbp+hrk+dnk+ods+lwo)
  (enable [JSONView](https://github.com/gildas-lormeau/JSONView-for-Chrome)
  or similar for a more confortable reading).
  OpenTREP also deals with transport-related requests. For instance,
  `cnshg deham nlrtm uslbg brssz cnshg` correspond to a world tour
  of famous ports:
  * Shanghai, China (CN)
  * Hamburg, Germany (DE)
  * Rotterdam, Netherlands (NL)
  * Los Angeles/Long Beach, California (CA), United States (US)
  * Santos, Brazil (BR)
  * (Back to) Shanghai, China (CN)
  See
  [that request in action on the transport-search.org site](https://transport-search.org/search/?q=sha+ham+rtm+lgb+ssz+sha)
  or [through the API](https://www2.transport-search.org/api/v1/geo?query=sha+ham+rtm+lgb+ssz+sha).
  The underlying data for the POR is the
  [OpenTravelData `optd_por_public_all.csv` file](http://github.com/opentraveldata/opentraveldata/tree/master/opentraveldata/optd_por_public_all.csv).
  A good complementary tool is
  [GeoBase](http://opentraveldata.github.io/geobases/),
  a Python-based software able to access any travel-related data source.
  OpenTREP makes an extensive use of existing open-source libraries for
  increased functionality, speed and accuracy. In particular the
  [Boost](http://www.boost.org) (C++ Standard Extensions),
  [Xapian](http://xapian.org) and [SOCI](http://soci.sourceforge.net)
  libraries are used.


  Docker images provide ready-to-use environments, and are available on
  [Docker Cloud](https://cloud.docker.com/u/opentrep/repository/docker/opentrep/search-travel)
  and [Quay.io](https://quay.io/repository/trep/opentrep):
  ```bash
  $ docker pull opentrep/search-travel:legacy # for Docker.io
  $ docker pull quay.io/trep/opentrep # for Quay.io
  $ docker run --rm -it opentrep/search-travel:legacy bash
  ```
  See https://github.com/trep/opentrep/tree/master/gui/legacy for more details.

  General purpose Docker images for C++/Python development are also available from
  [Docker Cloud](https://cloud.docker.com/u/cpppythondevelopment/repository/docker/cpppythondevelopment/base/general).
  Those Docker images allow to develop on the major Linux distributions, _i.e._,
  CentOS, Debian and Ubuntu.

  ```bash
  $ docker pull cpppythondevelopment/base:centos8
  $ docker run -t cpppythondevelopment/base:centos8 bash
  [build@2..c ~]$ $ mkdir -p ~/dev/geo && cd ~/dev/geo
  [build@2..c geo]$ git clone https://github.com/trep/opentrep.git
  [build@2..c geo]$ cd opentrep && mkdir build && cd build
  [build@2..c build (master)]$ cmake3 -DCMAKE_INSTALL_PREFIX=${HOME}/dev/deliveries/opentrep-99.99.99 -DCMAKE_BUILD_TYPE:STRING=Debug -DINSTALL_DOC:BOOL=ON -DRUN_GCOV:BOOL=OFF -DLIB_SUFFIX= ..
  ```

  ```bash
  $ docker pull cpppythondevelopment/base:centos7
  $ docker run -t cpppythondevelopment/base:centos7 bash
  [build@2..c ~]$ $ mkdir -p ~/dev/geo && cd ~/dev/geo
  [build@2..c geo]$ git clone https://github.com/trep/opentrep.git
  [build@2..c geo]$ cd opentrep && mkdir build && cd build
  [build@2..c build (master)]$ cmake3 -DCMAKE_INSTALL_PREFIX=${HOME}/dev/deliveries/opentrep-99.99.99 -DCMAKE_BUILD_TYPE:STRING=Debug -DINSTALL_DOC:BOOL=ON -DRUN_GCOV:BOOL=OFF -DLIB_SUFFIX= ..
  ```

  ```bash
  $ docker pull cpppythondevelopment/base:ubuntu2004
  $ docker run -t cpppythondevelopment/base:ubuntu2004 bash
  [build@2..c ~]$ $ mkdir -p ~/dev/geo && cd ~/dev/geo
  [build@2..c geo]$ git clone https://github.com/trep/opentrep.git
  [build@2..c geo]$ cd opentrep && mkdir build && cd build
  [build@2..c build (master)]$ cmake -DCMAKE_INSTALL_PREFIX=${HOME}/dev/deliveries/opentrep-99.99.99 -DCMAKE_BUILD_TYPE:STRING=Debug -DINSTALL_DOC:BOOL=ON -DRUN_GCOV:BOOL=OFF -DLIB_SUFFIX= ..
  ```

  ```bash
  $ docker pull cpppythondevelopment/base:ubuntu1804
  $ docker run -t cpppythondevelopment/base:ubuntu1804 bash
  [build@2..c ~]$ $ mkdir -p ~/dev/geo && cd ~/dev/geo
  [build@2..c geo]$ git clone https://github.com/trep/opentrep.git
  [build@2..c geo]$ cd opentrep && mkdir build && cd build
  [build@2..c build (master)]$ cmake -DCMAKE_INSTALL_PREFIX=${HOME}/dev/deliveries/opentrep-99.99.99 -DCMAKE_BUILD_TYPE:STRING=Debug -DINSTALL_DOC:BOOL=ON -DRUN_GCOV:BOOL=OFF -DLIB_SUFFIX= ..
  ```

  ```bash
  $ docker pull cpppythondevelopment/base:debian10
  $ docker run -t cpppythondevelopment/base:debian10 bash
  [build@2..c ~]$ $ mkdir -p ~/dev/geo && cd ~/dev/geo
  [build@2..c geo]$ git clone https://github.com/trep/opentrep.git
  [build@2..c geo]$ cd opentrep && mkdir build && cd build
  [build@2..c build (master)]$ cmake -DCMAKE_INSTALL_PREFIX=${HOME}/dev/deliveries/opentrep-99.99.99 -DCMAKE_BUILD_TYPE:STRING=Debug -DINSTALL_DOC:BOOL=ON -DRUN_GCOV:BOOL=OFF -DLIB_SUFFIX= ..
  ```

  ```bash
  $ docker pull cpppythondevelopment/base:debian9
  $ docker run -t cpppythondevelopment/base:debian9 bash
  [build@2..c ~]$ $ mkdir -p ~/dev/geo && cd ~/dev/geo
  [build@2..c geo]$ git clone https://github.com/trep/opentrep.git
  [build@2..c geo]$ cd opentrep && mkdir build && cd build
  [build@2..c build (master)]$ cmake -DCMAKE_INSTALL_PREFIX=${HOME}/dev/deliveries/opentrep-99.99.99 -DCMAKE_BUILD_TYPE:STRING=Debug -DINSTALL_DOC:BOOL=ON -DRUN_GCOV:BOOL=OFF -DLIB_SUFFIX= ..
  ```

  ```bash
  [build@2..c build (master)]$ make install
  [build@2..c build (master)]$ ./opentrep/opentrep-indexer
  [build@2..c build (master)]$ ./opentrep/opentrep-searcher -q "nice san francisco"
  ```


  Since OpenTREP has been approved as an official package of Fedora/CentOS/RedHat
  (see the
  [review request on Bugzilla for further details](https://bugzilla.redhat.com/show_bug.cgi?id=866265)),
  just use [DNF](https://fedoraproject.org/wiki/DNF) (or
  [Yum](https://fedoraproject.org/wiki/Yum) for the older distributions):
  ```bash
  $ dnf -y install opentrep opentrep-doc
  ```


  * If not already specified, the following environment variables may be set:
  ```bash
  export platform="$(uname | tr '[:upper:]' '[:lower:]')"
  export architecture="$(uname -m|sed 's/x86_/amd/')"
  ```

  The GitHub repository may be cloned as following:
  ```bash
  $ mkdir -p ~/dev/geo && cd ~/dev/geo
  $ git clone https://github.com/trep/opentrep.git
  $ cd opentrep
  $ git checkout master
  ```

  GitHub generates
  [tar-balls on the fly for every tagged release](https://github.com/trep/opentrep/releases).
  For instance:
  ```bash
  $ wget https://github.com/trep/opentrep/archive/opentrep-0.07.10.tar.gz
  ```
  Note that SourceForge also stores some
  [older archived tar-balls](https://sourceforge.net/projects/opentrep/files/opentrep/).


  The following packages may be needed (Fedora/RedHat/CentOS names on the left
  hand side, Debian/Ubuntu names on the right hand side; names for other
  Linux distributions may vary):
  * `cmake` (or `cmake3` on CentOS)
  * `gcc-c++` / `gcc`, `g++`
  * `boost-devel` (or `boost169-devel` on CentOS) / `libboost-all-dev`
  * `xapian-core-devel` / `libxapian-dev`
  * `python-devel` / `python`, `libpython-dev`
  * `libicu-devel` / `libicu-dev`
  * `soci-mysql-devel`, `soci-sqlite3-devel` / SOCI needs to be installed from
    the sources on Debian, Ubuntu and MacOS (see the dedicated section below)
  * `sqlite3-devel` / `sqlite3`, `libsqlite3-dev`
  * `mariadb-devel` / `libmariadb-dev`, `libmysql++-dev`
  * `protobuf-devel`, `protobuf-compiler` / `libprotobuf-dev`, `protobuf-compiler`
  * `readline-devel` / `libreadline-dev`, `libncurses5-dev`
  * `ghostscript`
  * `doxygen`
  * (optional) `tetex-latex` / `texlive-latex-recommended`
  * (optional) `rpm-build`
  For instance, the following subsections show respective installation commands
  for a few famous Linux distributions.

  * General C++-base stack:
  ```bash
  $ dnf -y install git-all bash-completion gcc-c++ cmake boost-devel \
   xapian-core-devel soci-mysql-devel soci-sqlite3-devel readline-devel \
   sqlite-devel mariadb-devel libicu-devel protobuf-devel protobuf-compiler \
   autoconf automake libtool
  ```
  * Python development (the package names may vary; Python 2 is no longer
    supported):
  ```bash
  $ dnf -y install python-devel python-pip
  ```
  * Related Python packages (the package names may vary):
  ```bash
  $ dnf -y install python3-protobuf boost-python3-devel
  ```
  * Documentation tools:
  ```bash
  $ dnf -y install doxygen ghostscript "tex(latex)"
  ```

  * If DNF is not already installed (_e.g._, on CentOS 7):
  ```bash
  $ yum -y install dnf
  ```
  * General C++-based stack:
  ```bash
  $ dnf -y install git-all bash-completion gcc-c++ cmake boost169-devel \
   xapian-core-devel soci-mysql-devel soci-sqlite3-devel readline-devel \
   sqlite-devel mariadb-devel libicu-devel protobuf-devel protobuf-compiler \
   autoconf automake libtool
  ```
  * Related Python packages (the package names may vary):
  ```bash
  $ dnf -y install python3-protobuf boost169-python3-devel
  ```
  * Python development (the package names may vary):
  ```bash
  $ dnf -y install python39 python39-devel
  $ dnf -y install python3 python3-devel
  ```
  * Documentation tools:
  ```bash
  $ dnf -y install doxygen ghostscript "tex(latex)"
  ```

  * Various C++ and Python packages:
  ```bash
  $ apt-get -y install locales && locale-gen "en_US.UTF-8"
  $ apt-get -y install zlib1g-dev libbz2-dev lsb-release libgmp-dev \
     libgmp-dev gcc g++ clang cppcheck cmake libboost-all-dev libxapian-dev \
     graphviz libreadline-dev libncurses5-dev libczmq-dev libzmq3-dev \
     libssl-dev libffi-dev sqlite3 libsqlite3-dev libmariadb-dev \
     libmysql++-dev postgresql-server-dev-all libicu-dev \
     libprotobuf-dev protobuf-compiler
  ```
  * Python development (the package names may vary)
  ```bash
  $ apt-get -y install python3 libpython3-dev python3-pip
  ```
  * Documentation tools
  ```bash
  $ apt-get -y install doxygen ghostscript texlive-latex-recommended
  ```

  * With [Homebrew](http://brew.sh):
  ```bash
  $ brew install boost boost-python3 cmake libedit \
    xapian sqlite mysql mysql-client icu4c protobuf protobuf-c doxygen
  $ brew install homebrew/portable-ruby/portable-readline
  ```
  * Note that, as of end 2022, the Hombrew recipes for Python 3 are now
    specific up to the minor version, more specifically:
    + Python 3.11: `python@3.11` (Python 3.11.0 as of November 2022)
    + Python 3.10: `python@3.10` (Python 3.10.8 as of November 2022)
    + Python 3.9: `python@3.9` (Python 3.9.15 as of November 2022)
    + Python 3.8: `python@3.8` (Python 3.8.15 as of November 2022)
  * Previously, the default Python 3 installation was Python 3.8 (now part of
    the `python@3.8` Homebrew package).
    As a reminder, on MacOS with Homebrew, a way to get the details is:
  ```bash
  $ brew info python@3.11
  python@3.11: stable 3.11.0 (bottled)
  $ brew info python@3.10
  python@3.10: stable 3.10.8 (bottled)
  $ brew info python@3.9
  python@3.9: stable 3.9.15 (bottled)
  $ brew info python@3.8
  python@3.8: stable 3.8.15 (bottled)
  ```
  * Because of the multiple parallel installations of Python versions,
    the following setup may be necessary:
  ```bash
  $ sudo mkdir -p /usr/local/Cellar/python
  $ sudo chown -R $USER /usr/local/Cellar/python
  $ ln -s /usr/local/Cellar/python@3.11/3.11.0 /usr/local/Cellar/python/3.11.0
  $ ln -s /usr/local/Cellar/python@3.10/3.10.8 /usr/local/Cellar/python/3.10.8
  $ ln -s /usr/local/Cellar/python@3.9/3.9.15 /usr/local/Cellar/python/3.9.15
  $ ln -s /usr/local/Cellar/python@3.8/3.8.15 /usr/local/Cellar/python/3.8.15
  ```
    + Clean links on potential older versions:
  ```bash
  $ ls -lFh /usr/local/Cellar/python/
  total 0
  lrwxr-xr-x 1 user staff 34B Jan 9 21:14 3.8.11@ -> /usr/local/Cellar/python@3.8/3.8.11
  lrwxr-xr-x 1 user staff 34B Jan 9 21:14 3.9.6@ -> /usr/local/Cellar/python@3.9/3.9.6
  $ sudo unlink /usr/local/Cellar/python/3.8.7
  ```
    + Check the following links, as installed by Homebrew on MacOS:
  ```bash
  $ ls -lFh /usr/local/Frameworks/Python.framework/Versions/Current
  lrwxr-xr-x  1 user  staff    79B Oct 13 12:01 /usr/local/Frameworks/Python.framework/Versions/Current@ -> ../../../Cellar/python@3.10/3.10.8/Frameworks/Python.framework/Versions/Current
  $ ls -lFh /usr/local/Frameworks/Python.framework/Versions/3.10
  lrwxr-xr-x  1 user  staff    76B Oct 13 12:00 /usr/local/Frameworks/Python.framework/Versions/3.10@ -> ../../../Cellar/python@3.10/3.10.8/Frameworks/Python.framework/Versions/3.10
  $ ls -lFh /usr/local/Frameworks/Python.framework/Versions/3.11
  lrwxr-xr-x  1 user  staff    76B Nov 30 17:37 /usr/local/Frameworks/Python.framework/Versions/3.11@ -> ../../../Cellar/python@3.11/3.11.0/Frameworks/Python.framework/Versions/3.11
  $ ls -lFh /usr/local/Frameworks/Python.framework/Versions/3.9
  lrwxr-xr-x  1 darnaud  staff    75B Oct 13 12:01 /usr/local/Frameworks/Python.framework/Versions/3.9@ -> ../../../Cellar/python@3.9/3.9.15/Frameworks/Python.framework/Versions/3.9
  ```
    + If those links are not as expected (as of January 2022, they were correct),
      recreate them:
  ```bash
  $ sudo chown -R $USER /usr/local/Frameworks/Python.framework
  $ unlink /usr/local/Frameworks/Python.framework/Versions/3.11
  $ ln -s /usr/local/Cellar/python@3.11/3.11.0/Frameworks/Python.framework/Versions/3.11 /usr/local/Frameworks/Python.framework/Versions/3.11
  $ unlink /usr/local/Frameworks/Python.framework/Versions/Current
  $ ln -s /usr/local/Cellar/python@3.11/3.11.0/Frameworks/Python.framework/Versions/3.11 /usr/local/Frameworks/Python.framework/Versions/Current
  ```
    + Leading to:
  ```bash
  $ ls -lFh /usr/local/Cellar/python/
  total 0
  lrwxr-xr-x  1 user  admin    34B Jan  9 21:14 3.10.1@ -> /usr/local/Cellar/python@3.10/3.10.1
  lrwxr-xr-x  1 user  admin    34B Jan  9 21:14 3.9.9@ -> /usr/local/Cellar/python@3.9/3.9.9
  lrwxr-xr-x  1 user  admin    34B Jan  9 21:14 3.8.12@ -> /usr/local/Cellar/python@3.8/3.8.12
  $ ls -lFh /usr/local/Frameworks/Python.framework/Versions/
  total 0
  lrwxr-xr-x  1 user  staff    75B Jan  9 04:01 3.9@ -> ../../../Cellar/python@3.9/3.9.9/Frameworks/Python.framework/Versions/3.9
  lrwxr-xr-x  1 user  staff    79B Jan  9 04:01 Current@ -> ../../../Cellar/python@3.9/3.9.9/Frameworks/Python.framework/Versions/Current
  ```
  * Up until recently (mid-2020), Boost.Python came with a dependency on
    the `libpython` Python library. As of July 2020, it seems to no longer
    be the case. As a matter of fact, as stated in the
    [What's new documentation of Python 3.8](https://docs.python.org/3/whatsnew/3.8.html#debug-build-uses-the-same-abi-as-release-build):
  > On Unix, C extensions are no longer linked to libpython except on Android
  > and Cygwin. It is now possible for a statically linked Python to load
  > a C extension built using a shared library Python.
  > (Contributed by Victor Stinner in [bpo-21536](https://bugs.python.org/issue21536).).
  * The rationale is that most of the C extensions (including OpenTREP
    Python extension and Boost.Python) are meant to be loaded by the Python
    interpreter, which brings its own Python library (`libpython`).
    So, if the C extensions are linked against `libpython` themselves,
    it is highly probable that the versions of both those `libpython`
    libraries (the one integrated with the Python interpreter and
    the one linked with the C extension) would differ.
  * The adoption of that change (no longer linking a C extension with
    `libpython`) is progressing slowly, and highly dependent on the
    C extensions and the platforms. For instance:
    + On Fedora Linux distributions, that change was implemented only
      from Boost 1.73 on Fedora 33 (released at the end of 2020).
    + On MacOS, that change seems to have been implemented as a patch to
      Boost 1.72 package; as it can be seen below, Boost 1.72+
  	on MacOS no longer seems to be linked against `libpython`.
  ```bash
  $ brew info boost-python3
  boost-python3: stable 1.76.0 (bottled), HEAD
  /usr/local/Cellar/boost-python3/1.76.0 (472 files, 18.2MB) *
  $ ls -lFh /usr/local/Cellar/boost-python3/1.76.0/lib/libboost_python39.dylib
  -r--r--r--  1 user  staff   410K May 26 21:13 /usr/local/Cellar/boost-python3/1.76.0/lib/libboost_python39.dylib
  $ otool -L /usr/local/Cellar/boost-python3/1.76.0/lib/libboost_python39.dylib
  /usr/local/Cellar/boost-python3/1.76.0/lib/libboost_python39.dylib:
  	/usr/local/opt/boost-python3/lib/libboost_python39.dylib (compatibility version 0.0.0, current version 0.0.0)
  	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 905.6.0)
  	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)
  ```
  * The OpenTREP Python extension itself has adopted that change with
    version 0.07.7 release at the end of May 2020.
  * On some platforms, it may still happen that Boost.Python
    and the local Python are based on different versions. That may lead
    to some weird crashes not obvious to debug.

  * Install ICU with Homebrew
  ```bash
  $ brew install icu4c
  ```

  Follow the instructions on
  [Boost helper documentation on GitHub](https://github.com/cpp-projects-showcase/boost-helper)
  to install Python and Boost on some platforms, including MacOS.

  * On CentOS, the version of Boost is often outdated, for instance
    [Boost 1.53 on CentOS 7](https://git.centos.org/rpms/boost/releases).
    It may have adversarial effects, for instance on CentOS 7, where
    [Python 3 libraries have been upgraded from Python 3.4 to
    Python 3.6](https://lists.fedoraproject.org/archives/list/epel-announce@lists.fedoraproject.org/thread/EGUMKAIMPK2UD5VSHXM53BH2MBDGDWMO/),
    but where Boost 1.53 Python libraries have not been upgraded accordingly,
    leading for the least to
    [linking errors](https://bugzilla.redhat.com/show_bug.cgi?id=1702242).
  * Hopefully, [EPEL](https://fedoraproject.org/wiki/EPEL) provides
    more recent Boost releases, for instance
    [Boost 1.69 on RHEL/CentOS 7](https://src.fedoraproject.org/rpms/boost169/tree/epel7).
  * Those additional specific Boost packages may be installed in parallel
    to the official Boost packages.
    CMake has however to be made aware of that additional Boost package and,
    equally importantly, of its location on the file-system.
  * Example of additional CMake configuration variables for
    [Boost 1.69 on CentOS 7](https://src.fedoraproject.org/rpms/boost169/tree/epel7):
  ```bash
  $ cmake3 [...] \
    -DBOOST_LIBRARYDIR=/usr/lib64/boost169 \
    -DBOOST_INCLUDEDIR=/usr/include/boost169 \
    -DBoost_ADDITIONAL_VERSIONS="1.69 1.69.0" \
    [...]
  ```

  * On CentOS and Fedora, since the author of this package (OpenTREP)
    is also the official maintainer of the SOCI package, that latter
    is usually up-to-date
  * On Debian, Ubuntu and MacOS however, SOCI must be built from the sources.
    The following shows how to do that on MacOS (on Debian/Ubuntu, one can have
    a look at the part installing SOCI on the
    [C++/Python Docker files](https://github.com/cpp-projects-showcase/docker-images))
  * Download and prepare SOCI:
  ```bash
  $ sudo mkdir -p /opt/soci && sudo chown -R ${USER} /opt/soci
  $ git clone https://github.com/SOCI/soci.git /opt/soci/socigit
  ```

  ```bash
  $ mkdir -p /opt/soci/socigit/build/head
  $ pushd /opt/soci/socigit/build/head
  $ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DSOCI_CXX11=ON -DSOCI_TESTS=OFF ../..
  $ make
  $ sudo make install
  $ popd
  ```

  ```bash
  $ wget https://github.com/trep/opentrep/raw/master/ci-scripts/soci-debian-cmake.patch -O /opt/soci/soci-debian-cmake.patch
  $ pushd /opt/soci/socigit
  $ patch -p1 < ../soci-debian-cmake.patch
  $ popd
  $ mkdir -p /opt/soci/socigit/build/head
  $ pushd /opt/soci/socigit/build/head
  $ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DSOCI_CXX11=ON -DSOCI_TESTS=OFF ../..
  $ make
  $ sudo make install
  $ popd
  ```

  * Configure SOCI:
  ```bash
  $ mkdir -p /opt/soci/socigit/build/head && cd /opt/soci/socigit/build/head
  $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DCMAKE_BUILD_TYPE=Debug -DSOCI_CXX11=ON \
    -DSOCI_ASAN=ON -DCMAKE_VERBOSE_MAKEFILE=OFF \
    -DSOCI_TESTS=OFF -DSOCI_STATIC=OFF -DSOCI_DB2=OFF -DSOCI_EMPTY=ON \
    -DSOCI_FIREBIRD=OFF -DSOCI_MYSQL=ON -DSOCI_ODBC=OFF -DSOCI_ORACLE=OFF \
    -DSOCI_POSTGRESQL=ON -DSOCI_SQLITE3=ON ../..
  $ make
  $ sudo make install
  ```

  To customize OpenTREP to your environment, you can alter
  the installation directory:
  ```bash
  export INSTALL_BASEDIR="${HOME}/dev/deliveries"
  export TREP_VER="0.07.12"
  if [ -d /usr/lib64 ]; then LIBSUFFIX="64"; else LIBSUFFIX=""; fi
  export LIBSUFFIX_4_CMAKE="-DLIB_SUFFIX=$LIBSUFFIX"
  ```
  Then, as usual:
  * To configure the project, type something like:
  ```bash
  $ rm -rf build && mkdir build && cd build
  $ cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_BASEDIR}/opentrep-${TREP_VER} \
     -DCMAKE_BUILD_TYPE:STRING=Debug -DENABLE_TEST:BOOL=ON \
     -DINSTALL_DOC:BOOL=ON -DRUN_GCOV:BOOL=OFF ${LIBSUFFIX_4_CMAKE} ..
  ```
  * With a specific version of Boost, say
    [Boost 1.69](https://src.fedoraproject.org/rpms/boost169)
    installed in a parallel way (for instance, as an optional module):
  ```bash
  $ cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_BASEDIR}/opentrep-${TREP_VER} \
          -DCMAKE_BUILD_TYPE:STRING=Debug -DENABLE_TEST:BOOL=ON \
          -DBOOST_LIBRARYDIR=/usr/lib64/boost169 \
  		-DBOOST_INCLUDEDIR=/usr/include/boost169 \
          -DBoost_ADDITIONAL_VERSIONS="1.69 1.69.0" \
          -DINSTALL_DOC:BOOL=ON -DRUN_GCOV:BOOL=OFF ${LIBSUFFIX_4_CMAKE} ..
  ```
  * For an _ad hoc_ installation:
  ```bash
  INSTALL_DIR=/var/www/webapps/opentrep/trep
  cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
     -DCMAKE_BUILD_TYPE:STRING=Debug -DINSTALL_DOC:BOOL=OFF \
     -DRUN_GCOV:BOOL=OFF ${LIBSUFFIX_4_CMAKE} ..
  ```
  * On MacOS, a few software (_e.g._, ICU and Readline) are not in
  the standard place. So, the `cmake` command becomes:
  ```bash
  $ export CMAKE_CXX_FLAGS="-Wno-mismatched-new-delete"; \
    cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_BASEDIR}/opentrep-$TREP_VER \
     -DREADLINE_ROOT=/usr/local/opt/portable-readline \
     -DREADLINE_INCLUDE_DIR=/usr/local/opt/portable-readline/include \
     -DREADLINE_LIBRARY=/usr/local/opt/libedit/lib/libedit.dylib \
     -DICU_ROOT=/usr/local/opt/icu4c \
     -DCMAKE_BUILD_TYPE:STRING=Debug -DINSTALL_DOC:BOOL=ON \
     -DRUN_GCOV:BOOL=OFF ${LIBSUFFIX_4_CMAKE} ..
  ```
  * To build the project, type:
  ```bash
  $ make
  ```
  * To test the project, type:
  ```bash
  $ make check
  ```
  * To install the library (`libopentrep*.so*`) and the binary (`opentrep`),
    just type:
  ```bash
    make install
    cd ${INSTALL_BASEDIR}
    rm -f opentrep-stable && ln -s opentrep-${TREP_VER} opentrep-stable
    cd -
  ```
  * To package the source files, type:
  ```bash
  $ make dist
  ```
  * To package the binary and the documentation:
  ```bash
  $ make package
  ```
  * Install the latest
    [OpenTravelData (OPTD) POR data file](https://github.com/opentraveldata/opentraveldata/tree/master/opentraveldata/optd_por_public_all.csv).
    Note that OpenTREP no longer ships with (full) OPTD data files;
    only [test files](https://github.com/trep/opentrep/raw/master/data/por/test_optd_por_public.csv)
    are shipped.
    The OPTD POR data file (`optd_por_public_all.csv`) has therefore
    to be downloaded aside, usually renamed as `optd_por_public.csv`,
    and the OpenTREP binaries have then to be referred to the file-path
    of that POR data file.
  ```bash
  $ wget \
    https://github.com/opentraveldata/opentraveldata/raw/master/opentraveldata/optd_por_public_all.csv \
    -O ${INSTALL_BASEDIR}/share/opentrep/data/por/optd_por_public.csv
  ```
  * To run the local binary version:
  ```bash
  $ ./opentrep/opentrep-{dbmgr,indexer,searcher}
  ```
  * To run the installed version (the first following line must be done once
    per session):
  ```bash
  $ export TREP_LIB="${INSTALL_BASEDIR}/opentrep-${TREP_VER}/lib${LIBSUFFIX}"
  $ export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TREP_LIB}"
  $ ${INSTALL_BASEDIR}/opentrep-${TREP_VER}/bin/opentrep-{dbmgr,indexer,searcher}
  ```

  OpenTREP may use, if so configured, a relational database. For now,
  two database products are supported, SQLite3 and MySQL/MariaDB.
  The database accelerates the look up of POR by (IATA, ICAO, FAA) codes
  and of Geonames ID. When OpenTREP is configured to run without database,
  those codes and Geonames ID are full-text searched directly with Xapian.
  Note that the database can be managed directly, _i.e._, without the
  OpenTREP search interface on top of it, thanks to the `opentrep-dbmgr`
  utility, which is detailed below.



  Here, for clarity reason, we use the local version. It is easy (see above)
  to derive the same commands with the installed version.
  * The following command prompts a Shell:
  ```bash
  $ ./opentrep/opentrep-dbmgr -t sqlite -p ${INSTALL_BASEDIR}/share/opentrep/data/por/optd_por_public.csv
  ```
  * Then, within the `opentrep>` shell, a typical sequence for SQLite would be:
  ```bash
   info
   create_user
   fill_from_por_file
   list_nb
   list_by_iata nce
   list_by_icao lfmn
   list_by_faa afm
   list_by_geonameid 6299418
  ```
  * The following command prompts a shell:
  ```bash
  ./opentrep/opentrep-dbmgr -t mysql -p ${INSTALL_BASEDIR}/share/opentrep/data/por/optd_por_public.csv
  ```
  * Then, within the `opentrep>` shell, a typical sequence for MySQL/MariaDB
    would be:
  ```bash
   reset_connection_string db=mysql user=root password=<passwd>
   create_user
   reset_connection_string db=trep_trep user=trep password=trep
   fill_from_por_file
   list_nb
   list_by_iata nce
   list_by_icao lfmn
   list_by_faa afm
   list_by_geonameid 6299418
  ```

  By default, the Xapian indexer runs without filling any relational database,
  as that step can be performed independantly by `opentrep-dbmgr`,
  as seen above.
  * Xapian indexing without any relational database:
  ```bash
  $ ./opentrep/opentrep-indexer -p ${INSTALL_BASEDIR}/share/opentrep/data/por/optd_por_public.csv
  ```
  * Xapian indexing and filling and indexing the SQLite database:
  ```bash
  $ ./opentrep/opentrep-indexer -t sqlite -p ${INSTALL_BASEDIR}/share/opentrep/data/por/optd_por_public.csv
  ```
  * Xapian indexing and filling and indexing the MySQL/MariaDB database:
  ```bash
  $ ./opentrep/opentrep-indexer -t mysql -p ${INSTALL_BASEDIR}/share/opentrep/data/por/optd_por_public.csv
  ```
  * There is an option to not even touch Xapian at all, for instance to check
    that the
    [OpenTravelData (OPTD) POR data file](http://github.com/opentraveldata/opentraveldata/tree/master/opentraveldata/optd_por_public_all.csv)
    is well-formed:
  ```bash
  $ ./opentrep/opentrep-indexer -x 0 -p ${INSTALL_BASEDIR}/share/opentrep/data/por/optd_por_public.csv
  ```

  * Xapian indexing without any relational database:
  ```bash
  $ ./opentrep/opentrep-indexer -d /var/www/webapps/opentrep/trep/traveldb -p ${INSTALL_BASEDIR}/share/opentrep/data/por/optd_por_public.csv
  ```
  * (Optional) Filling and indexing the SQLite database:
  ```bash
  $ ./opentrep/opentrep-dbmgr -t sqlite -s /var/www/webapps/opentrep/trep/sqlite_travel.db -p ${INSTALL_BASEDIR}/share/opentrep/data/por/optd_por_public.csv
      create_user
      fill_from_por_file
      quit
  ```

  * Searching without any relational database support:
  ```bash
  $ ./opentrep/opentrep-searcher -q "nce sfo"
  ```
  * Searching with SQLite (note that it should be quicker than without a database):
  ```bash
  $ ./opentrep/opentrep-searcher -t sqlite -q "nce sfo"
  ```
  * Searching with MySQL/MariaDB:
  ```bash
  $ ./opentrep/opentrep-searcher -t mysql -q "nce sfo"
  ```
  * Searching with SQLite (with Xapian and SQLite DB in a `webapps` directory):
  ```bash
  $ ./opentrep/opentrep-searcher -d /var/www/webapps/opentrep/trep/traveldb -t sqlite -s /var/www/webapps/opentrep/trep/sqlite_travel.db -q "nce sfo"
  ```

  The idea is to have at least two pieces of infrastructure (SQL database,
  Xapian index) in parallel:
  * one is used by the production;
  * the other one used as a staging platform in order to test
    and validate a new version.
  Once the new version has been validated, the two pieces of infrastructure
  can then be interverted, ie, the production becomes the new version,
  and the older version ends up in staging.
  It means that all programs have to choose which version they want to work on.
  That version may even be toggled in live.
  That method to deploy in production through a staging process
  is even more needed by the fact that indexing a new POR data file
  takes up to 30 minutes in the worst case. So, we cannot afford 30-45 minutes
  of downtime everytime a new POR data file is released (potentially every day).
  With that staging process, it is even possible to fully automate
  the re-indexing after a new POR data file release: once the new release
  has been cleared by
  [QA (Quality Assurance)](http://en.wikipedia.org/wiki/Quality_assurance)
  on staging, it becomes production.
  The corresponding command-line option for the various programs
  (`opentrep-dbmgr`, `opentrep-indexer`, `opentrep-searcher`) is `-m`.
  * For instance, to build the Xapian index/database for deployment number 0:
  ```bash
  $ ./opentrep/opentrep-indexer -m 0 -d /var/www/webapps/opentrep/trep/traveldb
  $ chown -R apache.apache /var/www/webapps/opentrep/trep
  $ ls -laFh /var/www/webapps/opentrep/trep/
  -rw-r--r-- 1 apache apache  16M Oct 14 2018 sqlite_travel.db0
  drwxr-xr-x 2 apache apache 4.0K Oct 14 2018 traveldb0/
  ```
  * And to build the Xapian index/database for deployment number 1:
  ```bash
  $ ./opentrep/opentrep-indexer -m 1 -d /var/www/webapps/opentrep/trep/traveldb
  $ chown -R apache.apache /var/www/webapps/opentrep/trep
  $ ls -laFh /var/www/webapps/opentrep/trep/
  -rw-r--r-- 1 apache apache  16M Oct 14 2018 sqlite_travel.db1
  drwxr-xr-x 2 apache apache 4.0K Oct 14 2018 traveldb1/
  ```

  There is also a command-line option, namely `-n`, to state whether or not
  the non-IATA-referenced POR should be included/parsed and indexed.
  By default, and historically, only the POR, which are referenced by
  [IATA](http://en.wikipedia.org/wiki/IATA_airport_code)
  (ie, which have a specific IATA code), are indexed (and may be searched for)
  in OpenTREP.
  POR are also referenced by other international organizations, such as
  [ICAO](http://en.wikipedia.org/wiki/ICAO_airport_code)
  or [UN/LOCODE](http://en.wikipedia.org/wiki/UN/LOCODE),
  and may not be referenced by IATA (in which case their IATA code
  is left empty).
  As of October 2018, there are around 110,000 POR in
  [OpenTravelData (OPTD)](http://github.com/opentraveldata/opentraveldata),
  the reference data source for OpenTREP:
  *  Around 20,000 POR are referenced by IATA
  *  Around 90,000 POR are not referenced by IATA, but referenced
     by other international organizations (eg, ICAO, UN/LOCODE)
  * Indexing 20,000 POR takes already a few minutes on standard hardware.
  * Indexing 110,000 POR would take 15 to 20 minutes.
  Once indexed, all those POR become searchable. That flag is therefore
  only used at indexing time (_i.e._, by the `opentrep-dbmgr` and
  `opentrep-indexer` programs).

  All the details are explained on a
  [dedicated procedure](http://github.com/machine-learning-helpers/induction-python/tree/master/installation/virtual-env),
  which works for the major Linux distributions and on MacOS.
  The procedure first installs a specific version of Python (as of January 2022,
  3.9.9) thanks to PyEnv, then install `pipenv` thanks to the `pip` utility
  provided with that specific Python version.

  * With the standard installation:
  ```bash
  PYTHON_VERSION=$(python --version 2>&1 | cut -d' ' -f2,2 | cut -d'.' -f1,2)
  PYTHONPATH=${INSTALL_BASEDIR}/opentrep-${TREP_VER}/lib${LIBSUFFIX}:${INSTALL_BASEDIR}/opentrep-${TREP_VER}/lib${LIBSUFFIX}/python${PYTHON_VERSION}/site-packages/pyopentrep \
   python3 -c "import pyopentrep; \
   openTrepLibrary = pyopentrep.OpenTrepSearcher(); \
   initOK = openTrepLibrary.init (\"${INSTALL_BASEDIR}/opentrep-${TREP_VER}/share/opentrep/data/por/test_optd_por_public.csv\", '/tmp/opentrep/xapian_traveldb', 'sqlite', '/tmp/opentrep/sqlite_travel.db', 0, False, True, True, 'pyopentrep.log'); \
   print (openTrepLibrary.search ('S', 'los las'))"
  ```
  * With an _ad hoc_ installation:
  ```bash
  PYTHON_VERSION=$(python --version 2>&1 | cut -d' ' -f2,2 | cut -d'.' -f1,2)
  PYTHONPATH=${INSTALL_DIR}/lib${LIBSUFFIX}:${INSTALL_BASEDIR}/lib${LIBSUFFIX}/python${PYTHON_VERSION}/site-packages/pyopentrep \
   python3 -c "import pyopentrep; \
   openTrepLibrary = pyopentrep.OpenTrepSearcher(); \
   initOK = openTrepLibrary.init (\"${INSTALL_BASEDIR}/opentrep-${TREP_VER}/share/opentrep/data/por/test_optd_por_public.csv\", '/var/www/webapps/opentrep/trep/traveldb', 'mysql', 'db=trep_trep user=trep password=trep', 0, False, True, True, 'pyopentrep.log'); \
   print (openTrepLibrary.search ('S', 'los las'))"
  ```


  * On some versions of MacOS (_e.g._, with 12.0 aka Monterey or 11.1 aka Big Sur),
    there may be some strange issue related to interceptors:
  ```bash
  $ ./opentrep/python/pyopentrep -d /tmp/opentrep/xapian_traveldb "nce sfo"
  ==217==ERROR: Interceptors are not working. This may be because AddressSanitizer is loaded too late (e.g. via dlopen). Please launch the executable with:
  DYLD_INSERT_LIBRARIES=/Library/Developer/CommandLineTools/usr/lib/clang/12.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib
  "interceptors not installed" && 0Abort trap: 6
  ```
  * A work around is to explicitly use the MacOS native Python interpreter.
    The whole command-line then becomes:
  ```bash
  $ PYTHON_VERSION=$(python3 --version 2>&1 | cut -d' ' -f2,2 | cut -d'.' -f1,2)
  $ PYTHONPATH=${INSTALL_BASEDIR}/opentrep-${TREP_VER}/lib${LIBSUFFIX}:${INSTALL_BASEDIR}/opentrep-${TREP_VER}/lib${LIBSUFFIX}/python${PYTHON_VERSION}/site-packages/pyopentrep \
    DYLD_INSERT_LIBRARIES=/Library/Developer/CommandLineTools/usr/lib/clang/12.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib \
    ASAN_OPTIONS=detect_container_overflow=0 \
    /usr/local/Cellar/python/3.9.1/Frameworks/Python.framework/Versions/3.9/Resources/Python.app/Contents/MacOS/Python \
    ./opentrep/python/pyopentrep.py -d /tmp/opentrep/xapian_traveldb "nce sfo"
  OPTD-maintained list of POR (points of reference): '~/dev/deliveries/opentrep-${TREP_VER}/share/opentrep/data/por/test_optd_por_public.csv'
  Xapian-based travel database/index: '/tmp/opentrep/xapian_traveldb0'
  SQLite database: '/tmp/opentrep/sqlite_travel.db'
  searchString: nce sfo
  Compact format => recognised place (city/airport) codes:


pkgId: cb16adb3e5179375de10018dffaeadb1438fa566b41b978d4cca84f4bcc29a1f
name: python-operator-courier
arch: src
version: 2.1.11
epoch: 0
release: 1
summary: Build, verify and push operators
url: https://github.com/operator-framework/operator-courier
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6f42615b-d56b-4380-9816-dd0f5aca830b
location_href: 00004448-python-operator-courier/python-operator-courier-2.1.11-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.org/operator-framework/operator-courier.svg?branch=master)](https://travis-ci.org/operator-framework/operator-courier)
  [![Coverage Status](https://coveralls.io/repos/github/operator-framework/operator-courier/badge.svg?branch=master)](https://coveralls.io/github/operator-framework/operator-courier?branch=master)

  The Operator Courier is used to build, validate and push Operator Artifacts.

  Operator Courier is currently supported on Python 3.6 and above.



  - To install the latest version of operator-courier, just install the latest release from [PyPI](https://pypi.org/project/operator-courier/):

    ```bash
    $ pip3 install operator-courier
    ```

  - To install a specific release, use the `==` operator and specify the version. For example:

    ```bash
    $ pip3 install operator-courier==2.0.1
    ```

  - To upgrade an existing operator-courier release:

    ```bash
    $ pip3 install -U operator-courier
    ```





  Once the project is installed, you can run the `verify` command on a directory that adheres to the expected [Manifest format](https://github.com/operator-framework/operator-registry#manifest-format).

  ```bash
  $ operator-courier verify $MANIFESTS_DIR
  ```

  To push the operator manifests to a quay.io app registry just use `operator-courier push`. Just pass the directory, namespace, repository, release version and quay.io authorization token needed to push.

  ```bash
  $ operator-courier push $MANIFESTS_DIR $EXAMPLE_NAMESPACE $EXAMPLE_REPOSITORY $EXAMPLE_RELEASE "$AUTH_TOKEN"
  ```

  Once that is created, you should be able to view your pushed application on quay.io's Application page for your particular namespace, repo, and release version (https://quay.io/application/$EXAMPLE_NAMESPACE/$EXAMPLE_REPOSITORY?tab=$EXAMPLE_RELEASE)

  For more info, run help on the main program or any of the subcommands

  ```bash
  $ operator-courier -h
  $ operator-courier $SUBCOMMAND -h
  ```


  You can optionally specify the `--verbose` flag to view detailed validation information during `verify` or `push`

  ```bash
  $ operator-courier --verbose verify $MANIFESTS_DIR
  $ operator-courier --verbose push $MANIFESTS_DIR $EXAMPLE_NAMESPACE $EXAMPLE_REPOSITORY $EXAMPLE_RELEASE "$AUTH_TOKEN"
  ```

  For more information, please refer to the following docs about creating valid CSVs
  - [Building a Cluster Service Version (CSV) for the Operator Framework](https://github.com/operator-framework/operator-lifecycle-manager/blob/master/doc/design/building-your-csv.md#your-custom-resource-definitions)
  - [Required fields within your CSV](https://github.com/operator-framework/community-operators/blob/master/docs/required-fields.md#categories)



  Currently, the quay API used by the courier can only be authenticated using quay.io's basic account token authentication. In order to get this token to authenticate with quay, a request needs to be made against the login API. This requires a normal quay.io account, and takes a username and password as parameters. This will return an auth token which can be passed to the courier.

  ```bash
  $ AUTH_TOKEN=$(curl -sH "Content-Type: application/json" -XPOST https://quay.io/cnr/api/v1/users/login -d '
  {
      "user": {
          "username": "'"${QUAY_USERNAME}"'",
          "password": "'"${QUAY_PASSWORD}"'"
      }
  }' | jq -r '.token')
  ```

  Expecting future enhancements, this authentication process will change somewhat in future releases.


  To use the Operator Courier in your project, simply install the Operator Courier pip package. Then import the api module:

  ```python
  from operatorcourier import api

  def main():
      api.build_verify_and_push(NAMESPACE, RESPOSITORY, RELEASE_VERSION, AUTH_TOKEN, source_dir="./my/folder/to/manifests/")
  ```



  ```bash
  $ pip3 install --user .
  $ operator-courier
  ```



  ```sh
  $ docker build -f Dockerfile -t $TAG
  $ docker run $TAG operator-courier
  ```

  For further details, please see the [contribution guide](docs/contributing.md).





  [Install tox](https://tox.readthedocs.io/en/latest/install.html) and run:

  ```bash
  $ tox
  ```

  This will run the tests with several versions of Python 3, measure coverage,
  and run flake8 for code linting.



  Before running integration tests, you must have write access credentials to a [quay.io](https://quay.io) namespace. See the [authentication](#authentication) section for more information.

  First, build the integration docker images:

  ```sh
  $ docker build -f tests/integration/dockerfiles/integration-base.Dockerfile -t operator-courier-integration-base:latest .
  $ docker build -f tests/integration/dockerfiles/integration.Dockerfile -t operator-courier-integration:latest .
  ```

  Then run the tests inside a container using your access credentials:

  ```sh
  $ docker run \
    -e QUAY_NAMESPACE="$QUAY_NAMESPACE" \
    -e QUAY_ACCESS_TOKEN="$QUAY_ACCESS_TOKEN" \
    operator-courier-integration:latest \
    tox -e integration
  ```


pkgId: 6ebdaf3002d2ab2505df1d471526837d528e0e4729ef179510f82afcc87f0e4c
name: python-opsgenie-sdk
arch: src
version: 2.1.5
epoch: 0
release: 1
summary: Python SDK for Opsgenie REST API
url: https://github.com/opsgenie/opsgenie-python-sdk
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e6c0c5ff-3e2d-423f-93c0-cfec42229d3a
location_href: 00011635-python-opsgenie-sdk/python-opsgenie-sdk-2.1.5-1.src.rpm
checksum_type: sha256
description:
  *AccountApi* | [**get_info**](docs/AccountApi.md#get_info) | **GET** /v2/account | Get Account Info
  *AlertApi* | [**acknowledge_alert**](docs/AlertApi.md#acknowledge_alert) | **POST** /v2/alerts/{identifier}/acknowledge | Acknowledge Alert
  *AlertApi* | [**add_attachment**](docs/AlertApi.md#add_attachment) | **POST** /v2/alerts/{identifier}/attachments | Add Alert Attachment
  *AlertApi* | [**add_details**](docs/AlertApi.md#add_details) | **POST** /v2/alerts/{identifier}/details | Add Details
  *AlertApi* | [**add_note**](docs/AlertApi.md#add_note) | **POST** /v2/alerts/{identifier}/notes | Add Note
  *AlertApi* | [**add_responder**](docs/AlertApi.md#add_responder) | **POST** /v2/alerts/{identifier}/responders | Add Responder
  *AlertApi* | [**add_tags**](docs/AlertApi.md#add_tags) | **POST** /v2/alerts/{identifier}/tags | Add Tags
  *AlertApi* | [**add_team**](docs/AlertApi.md#add_team) | **POST** /v2/alerts/{identifier}/teams | Add Team
  *AlertApi* | [**assign_alert**](docs/AlertApi.md#assign_alert) | **POST** /v2/alerts/{identifier}/assign | Assign Alert
  *AlertApi* | [**close_alert**](docs/AlertApi.md#close_alert) | **POST** /v2/alerts/{identifier}/close | Close Alert
  *AlertApi* | [**count_alerts**](docs/AlertApi.md#count_alerts) | **GET** /v2/alerts/count | Count Alerts
  *AlertApi* | [**create_alert**](docs/AlertApi.md#create_alert) | **POST** /v2/alerts | Create Alert
  *AlertApi* | [**create_saved_searches**](docs/AlertApi.md#create_saved_searches) | **POST** /v2/alerts/saved-searches | Create Saved Search
  *AlertApi* | [**delete_alert**](docs/AlertApi.md#delete_alert) | **DELETE** /v2/alerts/{identifier} | Delete Alert
  *AlertApi* | [**delete_saved_search**](docs/AlertApi.md#delete_saved_search) | **DELETE** /v2/alerts/saved-searches/{identifier} | Delete Saved Search
  *AlertApi* | [**escalate_alert**](docs/AlertApi.md#escalate_alert) | **POST** /v2/alerts/{identifier}/escalate | Escalate Alert
  *AlertApi* | [**execute_custom_alert_action**](docs/AlertApi.md#execute_custom_alert_action) | **POST** /v2/alerts/{identifier}/actions/{actionName} | Custom Alert Action
  *AlertApi* | [**get_alert**](docs/AlertApi.md#get_alert) | **GET** /v2/alerts/{identifier} | Get Alert
  *AlertApi* | [**get_attachment**](docs/AlertApi.md#get_attachment) | **GET** /v2/alerts/{identifier}/attachments/{attachmentId} | Get Alert Attachment
  *AlertApi* | [**get_request_status**](docs/AlertApi.md#get_request_status) | **GET** /v2/alerts/requests/{requestId} | Get Request Status of Alert
  *AlertApi* | [**get_saved_search**](docs/AlertApi.md#get_saved_search) | **GET** /v2/alerts/saved-searches/{identifier} | Get Saved Search
  *AlertApi* | [**list_alerts**](docs/AlertApi.md#list_alerts) | **GET** /v2/alerts | List Alerts
  *AlertApi* | [**list_attachments**](docs/AlertApi.md#list_attachments) | **GET** /v2/alerts/{identifier}/attachments | List Alert Attachments
  *AlertApi* | [**list_logs**](docs/AlertApi.md#list_logs) | **GET** /v2/alerts/{identifier}/logs | List Alert Logs
  *AlertApi* | [**list_notes**](docs/AlertApi.md#list_notes) | **GET** /v2/alerts/{identifier}/notes | List Alert Notes
  *AlertApi* | [**list_recipients**](docs/AlertApi.md#list_recipients) | **GET** /v2/alerts/{identifier}/recipients | List Alert Recipients
  *AlertApi* | [**list_saved_searches**](docs/AlertApi.md#list_saved_searches) | **GET** /v2/alerts/saved-searches | Lists Saved Searches
  *AlertApi* | [**remove_attachment**](docs/AlertApi.md#remove_attachment) | **DELETE** /v2/alerts/{identifier}/attachments/{attachmentId} | Remove Alert Attachment
  *AlertApi* | [**remove_details**](docs/AlertApi.md#remove_details) | **DELETE** /v2/alerts/{identifier}/details | Remove Details
  *AlertApi* | [**remove_tags**](docs/AlertApi.md#remove_tags) | **DELETE** /v2/alerts/{identifier}/tags | Remove Tags
  *AlertApi* | [**snooze_alert**](docs/AlertApi.md#snooze_alert) | **POST** /v2/alerts/{identifier}/snooze | Snooze Alert
  *AlertApi* | [**un_acknowledge_alert**](docs/AlertApi.md#un_acknowledge_alert) | **POST** /v2/alerts/{identifier}/unacknowledge | UnAcknowledge Alert
  *AlertApi* | [**update_alert_description**](docs/AlertApi.md#update_alert_description) | **PUT** /v2/alerts/{identifier}/description | Update Alert Description
  *AlertApi* | [**update_alert_message**](docs/AlertApi.md#update_alert_message) | **PUT** /v2/alerts/{identifier}/message | Update Alert Message
  *AlertApi* | [**update_alert_priority**](docs/AlertApi.md#update_alert_priority) | **PUT** /v2/alerts/{identifier}/priority | Update Alert Priority
  *AlertApi* | [**update_saved_search**](docs/AlertApi.md#update_saved_search) | **PATCH** /v2/alerts/saved-searches/{identifier} | Update Saved Search
  *HeartbeatApi* | [**create_heartbeat**](docs/HeartbeatApi.md#create_heartbeat) | **POST** /v2/heartbeats | Create Heartbeat
  *HeartbeatApi* | [**delete_heartbeat**](docs/HeartbeatApi.md#delete_heartbeat) | **DELETE** /v2/heartbeats/{name} | Delete Heartbeat
  *HeartbeatApi* | [**disable_heartbeat**](docs/HeartbeatApi.md#disable_heartbeat) | **POST** /v2/heartbeats/{name}/disable | Disable Heartbeat
  *HeartbeatApi* | [**enable_heartbeat**](docs/HeartbeatApi.md#enable_heartbeat) | **POST** /v2/heartbeats/{name}/enable | Enable Heartbeat
  *HeartbeatApi* | [**get_heartbeat**](docs/HeartbeatApi.md#get_heartbeat) | **GET** /v2/heartbeats/{name} | Get Heartbeat
  *HeartbeatApi* | [**list_heart_beats**](docs/HeartbeatApi.md#list_heart_beats) | **GET** /v2/heartbeats | List Heartbeats
  *HeartbeatApi* | [**ping**](docs/HeartbeatApi.md#ping) | **GET** /v2/heartbeats/{name}/ping | Ping Heartbeat
  *HeartbeatApi* | [**update_heartbeat**](docs/HeartbeatApi.md#update_heartbeat) | **PATCH** /v2/heartbeats/{name} | Update Heartbeat (Partial)
  *IncidentApi* | [**close_incident**](docs/IncidentApi.md#close_incident) | **POST** /v1/incidents/{identifier}/close | Close Incident
  *IncidentApi* | [**create_incident**](docs/IncidentApi.md#create_incident) | **POST** /v1/incidents/create | Create Incident
  *IncidentApi* | [**delete_incident**](docs/IncidentApi.md#delete_incident) | **DELETE** /v1/incidents/{identifier} | Delete Incident
  *IncidentApi* | [**get_incident**](docs/IncidentApi.md#get_incident) | **GET** /v1/incidents/{identifier} | Get Incident
  *IncidentApi* | [**get_incident_request_status**](docs/IncidentApi.md#get_incident_request_status) | **GET** /v1/incidents/requests/{requestId} | Get Request Status of Incident
  *IncidentApi* | [**list_incidents**](docs/IncidentApi.md#list_incidents) | **GET** /v1/incidents/ | List incidents

   - [AccountInfo](docs/AccountInfo.md)
   - [AccountPlan](docs/AccountPlan.md)
   - [AcknowledgeAlertPayload](docs/AcknowledgeAlertPayload.md)
   - [AddDetailsToAlertPayload](docs/AddDetailsToAlertPayload.md)
   - [AddDetailsToAlertPayloadAllOf](docs/AddDetailsToAlertPayloadAllOf.md)
   - [AddNoteToAlertPayload](docs/AddNoteToAlertPayload.md)
   - [AddResponderToAlertPayload](docs/AddResponderToAlertPayload.md)
   - [AddResponderToAlertPayloadAllOf](docs/AddResponderToAlertPayloadAllOf.md)
   - [AddTagsToAlertPayload](docs/AddTagsToAlertPayload.md)
   - [AddTagsToAlertPayloadAllOf](docs/AddTagsToAlertPayloadAllOf.md)
   - [AddTeamToAlertPayload](docs/AddTeamToAlertPayload.md)
   - [AddTeamToAlertPayloadAllOf](docs/AddTeamToAlertPayloadAllOf.md)
   - [Alert](docs/Alert.md)
   - [AlertActionPayload](docs/AlertActionPayload.md)
   - [AlertAllOf](docs/AlertAllOf.md)
   - [AlertAttachment](docs/AlertAttachment.md)
   - [AlertAttachmentMeta](docs/AlertAttachmentMeta.md)
   - [AlertIntegration](docs/AlertIntegration.md)
   - [AlertLog](docs/AlertLog.md)
   - [AlertNote](docs/AlertNote.md)
   - [AlertPaging](docs/AlertPaging.md)
   - [AlertRecipient](docs/AlertRecipient.md)
   - [AlertReport](docs/AlertReport.md)
   - [AlertRequestStatus](docs/AlertRequestStatus.md)
   - [AlertTeamMeta](docs/AlertTeamMeta.md)
   - [AlertUserMeta](docs/AlertUserMeta.md)
   - [AllRecipient](docs/AllRecipient.md)
   - [AssignAlertPayload](docs/AssignAlertPayload.md)
   - [AssignAlertPayloadAllOf](docs/AssignAlertPayloadAllOf.md)
   - [BaseAlert](docs/BaseAlert.md)
   - [BaseIncident](docs/BaseIncident.md)
   - [BaseResponse](docs/BaseResponse.md)
   - [BaseResponseWithExpandable](docs/BaseResponseWithExpandable.md)
   - [BaseResponseWithExpandableAllOf](docs/BaseResponseWithExpandableAllOf.md)
   - [CloseAlertPayload](docs/CloseAlertPayload.md)
   - [CloseIncidentPayload](docs/CloseIncidentPayload.md)
   - [Condition](docs/Condition.md)
   - [CreateAlertPayload](docs/CreateAlertPayload.md)
   - [CreateAlertPayloadAllOf](docs/CreateAlertPayloadAllOf.md)
   - [CreateHeartbeatPayload](docs/CreateHeartbeatPayload.md)
   - [CreateHeartbeatPayloadAllOf](docs/CreateHeartbeatPayloadAllOf.md)
   - [CreateHeartbeatPayloadAllOfOwnerTeam](docs/CreateHeartbeatPayloadAllOfOwnerTeam.md)
   - [CreateHeartbeatResponse](docs/CreateHeartbeatResponse.md)
   - [CreateHeartbeatResponseAllOf](docs/CreateHeartbeatResponseAllOf.md)
   - [CreateIncidentPayload](docs/CreateIncidentPayload.md)
   - [CreateIncidentPayloadAllOf](docs/CreateIncidentPayloadAllOf.md)
   - [CreateSavedSearchPayload](docs/CreateSavedSearchPayload.md)
   - [CreateSavedSearchResponse](docs/CreateSavedSearchResponse.md)
   - [CreateSavedSearchResponseAllOf](docs/CreateSavedSearchResponseAllOf.md)
   - [DisableHeartbeatResponse](docs/DisableHeartbeatResponse.md)
   - [DisableHeartbeatResponseAllOf](docs/DisableHeartbeatResponseAllOf.md)
   - [Duration](docs/Duration.md)
   - [EnableHeartbeatResponse](docs/EnableHeartbeatResponse.md)
   - [ErrorResponse](docs/ErrorResponse.md)
   - [ErrorResponseAllOf](docs/ErrorResponseAllOf.md)
   - [EscalateAlertToNextPayload](docs/EscalateAlertToNextPayload.md)
   - [EscalateAlertToNextPayloadAllOf](docs/EscalateAlertToNextPayloadAllOf.md)
   - [EscalationRecipient](docs/EscalationRecipient.md)
   - [ExecuteCustomAlertActionPayload](docs/ExecuteCustomAlertActionPayload.md)
   - [Filter](docs/Filter.md)
   - [GetAccountInfoResponse](docs/GetAccountInfoResponse.md)
   - [GetAccountInfoResponseAllOf](docs/GetAccountInfoResponseAllOf.md)
   - [GetAlertAttachmentResponse](docs/GetAlertAttachmentResponse.md)
   - [GetAlertAttachmentResponseAllOf](docs/GetAlertAttachmentResponseAllOf.md)
   - [GetAlertResponse](docs/GetAlertResponse.md)
   - [GetAlertResponseAllOf](docs/GetAlertResponseAllOf.md)
   - [GetCountAlertsResponse](docs/GetCountAlertsResponse.md)
   - [GetCountAlertsResponseAllOf](docs/GetCountAlertsResponseAllOf.md)
   - [GetCountAlertsResponseAllOfData](docs/GetCountAlertsResponseAllOfData.md)
   - [GetHeartbeatResponse](docs/GetHeartbeatResponse.md)
   - [GetIncidentRequestStatusResponse](docs/GetIncidentRequestStatusResponse.md)
   - [GetIncidentRequestStatusResponseAllOf](docs/GetIncidentRequestStatusResponseAllOf.md)
   - [GetIncidentResponse](docs/GetIncidentResponse.md)
   - [GetIncidentResponseAllOf](docs/GetIncidentResponseAllOf.md)
   - [GetRequestStatusResponse](docs/GetRequestStatusResponse.md)
   - [GetRequestStatusResponseAllOf](docs/GetRequestStatusResponseAllOf.md)
   - [GetSavedSearchResponse](docs/GetSavedSearchResponse.md)
   - [GetSavedSearchResponseAllOf](docs/GetSavedSearchResponseAllOf.md)
   - [GroupRecipient](docs/GroupRecipient.md)
   - [Heartbeat](docs/Heartbeat.md)
   - [HeartbeatMeta](docs/HeartbeatMeta.md)
   - [Incident](docs/Incident.md)
   - [IncidentActionPayload](docs/IncidentActionPayload.md)
   - [IncidentAllOf](docs/IncidentAllOf.md)
   - [IncidentRequestStatus](docs/IncidentRequestStatus.md)
   - [ListAlertAttachmentsResponse](docs/ListAlertAttachmentsResponse.md)
   - [ListAlertAttachmentsResponseAllOf](docs/ListAlertAttachmentsResponseAllOf.md)
   - [ListAlertLogsResponse](docs/ListAlertLogsResponse.md)
   - [ListAlertLogsResponseAllOf](docs/ListAlertLogsResponseAllOf.md)
   - [ListAlertNotesResponse](docs/ListAlertNotesResponse.md)
   - [ListAlertNotesResponseAllOf](docs/ListAlertNotesResponseAllOf.md)
   - [ListAlertRecipientsResponse](docs/ListAlertRecipientsResponse.md)
   - [ListAlertRecipientsResponseAllOf](docs/ListAlertRecipientsResponseAllOf.md)
   - [ListAlertsResponse](docs/ListAlertsResponse.md)
   - [ListAlertsResponseAllOf](docs/ListAlertsResponseAllOf.md)
   - [ListHeartbeatResponse](docs/ListHeartbeatResponse.md)
   - [ListHeartbeatResponseAllOf](docs/ListHeartbeatResponseAllOf.md)
   - [ListHeartbeatResponseAllOfData](docs/ListHeartbeatResponseAllOfData.md)
   - [ListIncidentsResponse](docs/ListIncidentsResponse.md)
   - [ListIncidentsResponseAllOf](docs/ListIncidentsResponseAllOf.md)
   - [ListSavedSearchesResponse](docs/ListSavedSearchesResponse.md)
   - [ListSavedSearchesResponseAllOf](docs/ListSavedSearchesResponseAllOf.md)
   - [MatchAll](docs/MatchAll.md)
   - [MatchAllConditions](docs/MatchAllConditions.md)
   - [MatchAnyCondition](docs/MatchAnyCondition.md)
   - [MatchAnyConditionAllOf](docs/MatchAnyConditionAllOf.md)
   - [NoRecipient](docs/NoRecipient.md)
   - [PageDetails](docs/PageDetails.md)
   - [Recipient](docs/Recipient.md)
   - [Responder](docs/Responder.md)
   - [SavedSearch](docs/SavedSearch.md)
   - [SavedSearchEntity](docs/SavedSearchEntity.md)
   - [SavedSearchMeta](docs/SavedSearchMeta.md)
   - [ScheduleRecipient](docs/ScheduleRecipient.md)
   - [SnoozeAlertPayload](docs/SnoozeAlertPayload.md)
   - [SnoozeAlertPayloadAllOf](docs/SnoozeAlertPayloadAllOf.md)
   - [StatusPageEntry](docs/StatusPageEntry.md)
   - [StatusPageEntryAllOf](docs/StatusPageEntryAllOf.md)
   - [SuccessData](docs/SuccessData.md)
   - [SuccessResponse](docs/SuccessResponse.md)
   - [SuccessResponseAllOf](docs/SuccessResponseAllOf.md)
   - [TeamRecipient](docs/TeamRecipient.md)
   - [TeamRecipientAllOf](docs/TeamRecipientAllOf.md)
   - [TeamResponder](docs/TeamResponder.md)
   - [TimeOfDayRestriction](docs/TimeOfDayRestriction.md)
   - [TimeOfDayRestrictionInterval](docs/TimeOfDayRestrictionInterval.md)
   - [TimeOfDayRestrictionIntervalAllOf](docs/TimeOfDayRestrictionIntervalAllOf.md)
   - [TimeRestrictionInterval](docs/TimeRestrictionInterval.md)
   - [UnAcknowledgeAlertPayload](docs/UnAcknowledgeAlertPayload.md)
   - [UpdateAlertDescriptionPayload](docs/UpdateAlertDescriptionPayload.md)
   - [UpdateAlertMessagePayload](docs/UpdateAlertMessagePayload.md)
   - [UpdateAlertPriorityPayload](docs/UpdateAlertPriorityPayload.md)
   - [UpdateHeartbeatPayload](docs/UpdateHeartbeatPayload.md)
   - [UpdateHeartbeatResponse](docs/UpdateHeartbeatResponse.md)
   - [UpdateSavedSearchPayload](docs/UpdateSavedSearchPayload.md)
   - [UserRecipient](docs/UserRecipient.md)
   - [UserRecipientAllOf](docs/UserRecipientAllOf.md)
   - [UserResponder](docs/UserResponder.md)
   - [UserResponderAllOf](docs/UserResponderAllOf.md)
   - [WeekdayTimeRestriction](docs/WeekdayTimeRestriction.md)
   - [WeekdayTimeRestrictionInterval](docs/WeekdayTimeRestrictionInterval.md)
   - [WeekdayTimeRestrictionIntervalAllOf](docs/WeekdayTimeRestrictionIntervalAllOf.md)


  - **Type**: API key
  - **API key parameter name**: Authorization
  - **Location**: HTTP header

  support@opsgenie.com


pkgId: 9d66992c2a59aa733a136cec74e08be0eb5107884e4896987285d71d6065018d
name: python-optax
arch: src
version: 0.1.4
epoch: 0
release: 1
summary: A gradient processing and optimisation library in JAX.
url: https://github.com/deepmind/optax
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3fa4ee0b-5951-4ba9-a2fe-541c9cd269b7
location_href: 00009144-python-optax/python-optax-0.1.4-1.src.rpm
checksum_type: sha256
description:
  ![CI status](https://github.com/deepmind/optax/workflows/tests/badge.svg)
  [![Documentation Status](https://readthedocs.org/projects/optax/badge/?version=latest)](http://optax.readthedocs.io)
  ![pypi](https://img.shields.io/pypi/v/optax)



  Optax is a gradient processing and optimization library for JAX.

  Optax is designed to facilitate research by providing building blocks
  that can be easily recombined in custom ways.

  Our goals are to

  *   Provide simple, well-tested, efficient implementations of core components.
  *   Improve research productivity by enabling to easily combine low level
      ingredients into custom optimisers (or other gradient processing components).
  *   Accelerate adoption of new ideas by making it easy for anyone to contribute.

  We favour focusing on small composable building blocks that can be effectively
  combined into custom solutions. Others may build upon these basic components
  more complicated abstractions. Whenever reasonable, implementations prioritise
  readability and structuring code to match standard equations, over code reuse.

  An initial prototype of this library was made available in JAX's experimental
  folder as `jax.experimental.optix`. Given the wide adoption across DeepMind
  of `optix`, and after a few iterations on the API, `optix` was eventually moved
  out of `experimental` as a standalone open-source library, renamed `optax`.

  Documentation on Optax can be found at [optax.readthedocs.io](https://optax.readthedocs.io/).



  You can install the latest released version of Optax from PyPI via:

  ```sh
  pip install optax
  ```

  or you can install the latest development version from GitHub:

  ```sh
  pip install git+https://github.com/deepmind/optax.git
  ```



  Optax contains implementations of [many popular optimizers](https://optax.readthedocs.io/en/latest/api.html#Common-Optimizers) and
  [loss functions](https://optax.readthedocs.io/en/latest/api.html#common-losses).
  For example the following code snippet uses the Adam optimizer from `optax.adam`
  and the mean squared error from `optax.l2_loss`. We initialize the optimizer
  state using the `init` function and `params` of the model.

  ```python
  optimizer = optax.adam(learning_rate)

  params = {'w': jnp.ones((num_weights,))}
  opt_state = optimizer.init(params)
  ```

  To write the update loop we need a loss function that can be differentiated by
  Jax (with `jax.grad` in this
  example) to obtain the gradients.

  ```python
  compute_loss = lambda params, x, y: optax.l2_loss(params['w'].dot(x), y)
  grads = jax.grad(compute_loss)(params, xs, ys)
  ```

  The gradients are then converted via `optimizer.update` to obtain the updates
  that should be applied to the current params to obtain the new ones.
  `optax.apply_updates` is a convinience utility to do this.

  ```python
  updates, opt_state = optimizer.update(grads, opt_state)
  params = optax.apply_updates(params, updates)
  ```

  You can continue the quick start in [the Optax quickstart notebook.](https://github.com/deepmind/optax/blob/master/examples/quick_start.ipynb)




  We refer to the [docs](https://optax.readthedocs.io/en/latest/index.html)
  for a detailed list of available Optax components. Here, we highlight
  the main categories of buiilding blocks provided by Optax.



  One of the key building blocks of `optax` is a `GradientTransformation`.

  Each transformation is defined two functions:

  *   `state = init(params)`
  *   `grads, state = update(grads, state, params=None)`

  The `init` function initializes a (possibly empty) set of statistics (aka state)
  and the `update` function transforms a candidate gradient given some statistics,
  and (optionally) the current value of the parameters.

  For example:

  ```python
  tx = scale_by_rms()
  state = tx.init(params)  # init stats
  grads, state = tx.update(grads, state, params)  # transform & update stats.
  ```



  The fact that transformations take candidate gradients as input and return
  processed gradients as output (in contrast to returning the updated parameters)
  is critical to allow to combine arbitrary transformations into a custom
  optimiser / gradient processor, and also allows to combine transformations for
  different gradients that operate on a shared set of variables.

  For instance, `chain` combines them sequentially, and returns a
  new `GradientTransformation` that applies several transformations in sequence.

  For example:

  ```python
  my_optimiser = chain(
      clip_by_global_norm(max_norm),
      scale_by_adam(eps=1e-4),
      scale(-learning_rate))
  ```



  Optax also provides several wrappers that take a `GradientTransformation` as
  input and return a new `GradientTransformation` that modifies the behaviour
  of the inner transformation in a specific way.

  For instance the `flatten` wrapper flattens gradients into a single large vector
  before applying the inner GradientTransformation. The transformed updated are
  then unflattened before being returned to the user. This can be used to reduce
  the overhead of performing many calculations on lots of small variables,
  at the cost of increasing memory usage.

  For example:
  ```python
  my_optimiser = flatten(adam(learning_rate))
  ```

  Other examples of wrappers include accumulating gradients over multiple steps,
  or applying the inner transformation only to specific parameters or at
  specific steps.



  Many popular transformations use time dependent components, e.g. to anneal
  some hyper-parameter (e.g. the learning rate). Optax provides for this purpose
  `schedules` that can be used to decay scalars as a function of a `step` count.

  For example you may use a polynomial schedule (with `power=1`) to decay
  a hyper-parameter linearly over a number of steps:

  ```python
  schedule_fn = polynomial_schedule(
      init_value=1., end_value=0., power=1, transition_steps=5)

  for step_count in range(6):
    print(schedule_fn(step_count))  # [1., 0.8, 0.6, 0.4, 0.2, 0.]
  ```

  Schedules are used by certain gradient transformation, for instance:

  ```python
  schedule_fn = polynomial_schedule(
      init_value=-learning_rate, end_value=0., power=1, transition_steps=5)
  optimiser = chain(
      clip_by_global_norm(max_norm),
      scale_by_adam(eps=1e-4),
      scale_by_schedule(schedule_fn))
  ```



  In addition to the low level building blocks we also provide aliases for popular
  optimisers built using these components (e.g. RMSProp, Adam, AdamW, etc, ...).
  These are all still instances of a `GradientTransformation`, and can therefore
  be further combined with any of the individual building blocks.

  For example:

  ```python
  def adamw(learning_rate, b1, b2, eps, weight_decay):
    return chain(
        scale_by_adam(b1=b1, b2=b2, eps=eps),
        scale_and_decay(-learning_rate, weight_decay=weight_decay))
  ```



  After transforming an update using a `GradientTransformation` or any custom
  manipulation of the update, you will typically apply the update to a set
  of parameters. This can be done trivially using `tree_map`.

  For convenience, we expose an `apply_updates` function to apply updates to
  parameters. The function just adds the updates and the parameters together,
  i.e. `tree_map(lambda p, u: p + u, params, updates)`.

  ```python
  updates, state = tx.update(grads, state, params)  # transform & update stats.
  new_params = optax.apply_updates(params, updates)  # update the parameters.
  ```

  Note that separating gradient transformations from the parameter update is
  critical to support composing sequence of transformations (e.g. `chain`), as
  well as combine multiple updates to the same parameters (e.g. in multi-task
  settings where different tasks need different sets of gradient transformations).



  Optax provides a number of standard losses used in deep learning, such as
  `l2_loss`, `softmax_cross_entropy`, `cosine_distance`, etc.

  ```python
  loss = huber_loss(predictions, targets)
  ```

  The losses accept batches as inputs, however they perform no reduction across
  the batch dimension(s). This is trivial to do in JAX, for example:

  ```python
  avg_loss = jnp.mean(huber_loss(predictions, targets))
  sum_loss = jnp.sum(huber_loss(predictions, targets))
  ```



  Computing the Hessian or Fisher information matrices for neural networks is
  typically intractable due to the quadratic memory requirements. Solving for the
  diagonals of these matrices is often a better solution. The library offers
  functions for computing these diagonals with sub-quadratic memory requirements.



  Stochastic gradient estimators compute Monte Carlo estimates of gradients of
  the expectation of a function under a distribution with respect to the
  distribution's parameters.

  Unbiased estimators, such as the score function estimator (REINFORCE),
  pathwise estimator (reparameterization trick) or measure valued estimator,
  are implemented: `score_function_jacobians`, `pathwise_jacobians` and `
  measure_valued_jacobians`. Their applicability (both in terms of functions and
  distributions) is discussed in their respective documentation.

  Stochastic gradient estimators can be combined with common control variates for
  variance reduction via `control_variates_jacobians`. For provided control
  variates see `delta` and `moving_avg_baseline`.

  The result of a gradient estimator or `control_variates_jacobians` contains the
  Jacobians of the function with respect to the samples from the input
  distribution. These can then be used to update distributional parameters, or
  to assess gradient variance.

  Example of how to use the `pathwise_jacobians` estimator:

  ```python
  dist_params = [mean, log_scale]
  function = lambda x: jnp.sum(x * weights)
  jacobians = pathwise_jacobians(
        function, dist_params,
        utils.multi_normal, rng, num_samples)

  mean_grads = jnp.mean(jacobians[0], axis=0)
  log_scale_grads = jnp.mean(jacobians[1], axis=0)
  grads = [mean_grads, log_scale_grads]
  optim_update, optim_state = optim.update(grads, optim_state)
  updated_dist_params = optax.apply_updates(dist_params, optim_update)
  ```

  where `optim` is an optax optimizer.



  Optax is part of the [DeepMind JAX Ecosystem], to cite Optax please use
  the [DeepMind JAX Ecosystem citation].

  [DeepMind JAX Ecosystem]: https://deepmind.com/blog/article/using-jax-to-accelerate-our-research "DeepMind JAX Ecosystem"
  [DeepMind JAX Ecosystem citation]: https://github.com/deepmind/jax/blob/main/deepmind2020jax.txt "Citation"


pkgId: eb824536d4a42241e86c80914d21bca8d831a1471740bc99852cad8b99f106bd
name: python-optbinning
arch: src
version: 0.17.3
epoch: 0
release: 1
summary: OptBinning: The Python Optimal Binning library
url: https://github.com/guillermo-navas-palencia/optbinning
rpm_license: Apache Licence 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d3653b0a-8f54-4b28-9e16-c426ae98c182
location_href: 00010429-python-optbinning/python-optbinning-0.17.3-1.src.rpm
checksum_type: sha256
description:
  The optimal binning is the optimal discretization of a variable into bins
  given a discrete or continuous numeric target. OptBinning is a library
  written in Python implementing a rigorous and flexible mathematical
  programming formulation to solving the optimal binning problem for a binary,
  continuous and multiclass target type, incorporating constraints not
  previously addressed.

  Read the documentation at: http://gnpalencia.org/optbinning/

  OptBinning is distributed under the Apache Software License (Apache 2.0).


pkgId: 3a5902523152726562c045e32b57f0336065dd8fb71e295c7b4b88d23679de2d
name: python-ordered-set
arch: src
version: 4.1.0
epoch: 0
release: 1
summary: An OrderedSet is a custom MutableSet that remembers its order, so that every
url: https://pypi.org/project/ordered-set/
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d78cbd32-d71a-4074-b2b4-1a5f79c3095e
location_href: 00009221-python-ordered-set/python-ordered-set-4.1.0-1.src.rpm
checksum_type: sha256
description:
  [![Pypi](https://img.shields.io/pypi/v/ordered-set.svg)](https://pypi.python.org/pypi/ordered-set)

  An OrderedSet is a mutable data structure that is a hybrid of a list and a set.
  It remembers the order of its entries, and every entry has an index number that
  can be looked up.



  `ordered_set` is available on PyPI and packaged as a wheel. You can list it
  as a dependency of your project, in whatever form that takes.

  To install it into your current Python environment:

      pip install ordered-set

  To install the code for development, after checking out the repository:

      pip install flit
      flit install



  An OrderedSet is created and used like a set:

      >>> from ordered_set import OrderedSet

      >>> letters = OrderedSet('abracadabra')

      >>> letters
      OrderedSet(['a', 'b', 'r', 'c', 'd'])

      >>> 'r' in letters
      True

  It is efficient to find the index of an entry in an OrderedSet, or find an
  entry by its index. To help with this use case, the `.add()` method returns
  the index of the added item, whether it was already in the set or not.

      >>> letters.index('r')
      2

      >>> letters[2]
      'r'

      >>> letters.add('r')
      2

      >>> letters.add('x')
      5

  OrderedSets implement the union (`|`), intersection (`&`), and difference (`-`)
  operators like sets do.

      >>> letters |= OrderedSet('shazam')

      >>> letters
      OrderedSet(['a', 'b', 'r', 'c', 'd', 'x', 's', 'h', 'z', 'm'])

      >>> letters & set('aeiou')
      OrderedSet(['a'])

      >>> letters -= 'abcd'

      >>> letters
      OrderedSet(['r', 'x', 's', 'h', 'z', 'm'])

  The `__getitem__()` and `index()` methods have been extended to accept any
  iterable except a string, returning a list, to perform NumPy-like "fancy
  indexing".

      >>> letters = OrderedSet('abracadabra')

      >>> letters[[0, 2, 3]]
      ['a', 'r', 'c']

      >>> letters.index(['a', 'r', 'c'])
      [0, 2, 3]

  OrderedSet implements `__getstate__` and `__setstate__` so it can be pickled,
  and implements the abstract base classes `collections.MutableSet` and
  `collections.Sequence`.

  OrderedSet can be used as a generic collection type, similar to the collections
  in the `typing` module like List, Dict, and Set. For example, you can annotate
  a variable as having the type `OrderedSet[str]` or `OrderedSet[Tuple[int,
  str]]`.




  An OrderedSet can be used as a bi-directional mapping between a sparse
  vocabulary and dense index numbers. As of version 3.1, it accepts NumPy arrays
  of index numbers as well as lists.

  This combination of features makes OrderedSet a simple implementation of many
  of the things that `pandas.Index` is used for, and many of its operations are
  faster than the equivalent pandas operations.

  For further compatibility with pandas.Index, `get_loc` (the pandas method for
  looking up a single index) and `get_indexer` (the pandas method for fancy
  indexing in reverse) are both aliases for `index` (which handles both cases
  in OrderedSet).




  OrderedSet was implemented by Elia Robyn Lake (maiden name: Robyn Speer).
  Jon Crall contributed changes and tests to make it fit the Python set API.
  Roman Inflianskas added the original type annotations.




  The original implementation of OrderedSet was a [recipe posted to ActiveState
  Recipes][recipe] by Raymond Hettiger, released under the MIT license.

  [recipe]: https://code.activestate.com/recipes/576694-orderedset/

  Hettiger's implementation kept its content in a doubly-linked list referenced by a
  dict. As a result, looking up an item by its index was an O(N) operation, while
  deletion was O(1).

  This version makes different trade-offs for the sake of efficient lookups. Its
  content is a standard Python list instead of a doubly-linked list. This
  provides O(1) lookups by index at the expense of O(N) deletion, as well as
  slightly faster iteration.

  In Python 3.6 and later, the built-in `dict` type is inherently ordered. If you
  ignore the dictionary values, that also gives you a simple ordered set, with
  fast O(1) insertion, deletion, iteration and membership testing. However, `dict`
  does not provide the list-like random access features of OrderedSet. You
  would have to convert it to a list in O(N) to look up the index of an entry or
  look up an entry by its index.


pkgId: 7b6d5b192e31017942aa6a8ece77cdad7f6e7d88aa094368d3519d7c4c996cad
name: python-ordereddict
arch: src
version: 1.1
epoch: 0
release: 1
summary: A drop-in substitute for Py2.7's new collections.OrderedDict that works in Python 2.4-2.6.
url: UNKNOWN
rpm_license: UNKNOWN
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5ef25a0a-4697-42ea-9d27-7c1175565168
location_href: 00009812-python-ordereddict/python-ordereddict-1.1-1.src.rpm
checksum_type: sha256
description:
  Drop-in substitute for Py2.7's new collections.OrderedDict. The recipe has big-oh
  performance that matches regular dictionaries (amortized O(1)
  insertion/deletion/lookup and O(n) iteration/repr/copy/equality_testing).

  Originally based on http://code.activestate.com/recipes/576693/


pkgId: 0bfbe6553467c8fe4a8d17532cf7f3fe572ee2e5067998fe52a5ed49628f34e7
name: python-orderedmultidict
arch: src
version: 1.0.1
epoch: 0
release: 1
summary: Ordered Multivalue Dictionary
url: https://github.com/gruns/orderedmultidict
rpm_license: Unlicense
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1a0019d4-1732-4ea8-8a69-300f51585a13
location_href: 00004451-python-orderedmultidict/python-orderedmultidict-1.0.1-1.src.rpm
checksum_type: sha256
description:
  A multivalue dictionary is a dictionary that can store multiple values for the
  same key. An ordered multivalue dictionary is a multivalue dictionary that
  retains the order of insertions and deletions.

  omdict retains method parity with dict.

  Information and documentation at https://github.com/gruns/orderedmultidict.


pkgId: a81e552cc1f6dbbdcce7ada39ab6fc782a31bc552960884cc19dc8c5c4286551
name: python-oscrypto
arch: src
version: 1.3.0
epoch: 0
release: 1
url: https://github.com/wbond/oscrypto
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3b8bac26-410b-4e04-98af-c7dcc3f7efc9
location_href: 00009074-python-oscrypto/python-oscrypto-1.3.0-1.src.rpm
checksum_type: sha256
summary:
  TLS (SSL) sockets, key generation, encryption, decryption, signing, verification and KDFs using the OS crypto libraries. Does not require a compiler, and relies on the OS for patching. Works on Windows, OS X and Linux/BSD.

description:
  A compilation-free, always up-to-date encryption library for Python that works
  on Windows, OS X, Linux and BSD. Supports the following versions of Python:
  2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10 and pypy.

   - [Supported Operating Systems](#supported-operationg-systems)
   - [Features](#features)
   - [Why Another Python Crypto Library?](#why-another-python-crypto-library)
   - [Related Crypto Libraries](#related-crypto-libraries)
   - [Current Release](#current-release)
   - [Dependencies](#dependencies)
   - [Installation](#installation)
   - [License](#license)
   - [Documentation](#documentation)
   - [Continuous Integration](#continuous-integration)
   - [Testing](#testing)
   - [Development](#development)
   - [CI Tasks](#ci-tasks)

  [![GitHub Actions CI](https://github.com/wbond/oscrypto/workflows/CI/badge.svg)](https://github.com/wbond/oscrypto/actions?workflow=CI)
  [![CircleCI](https://circleci.com/gh/wbond/oscrypto.svg?style=shield)](https://circleci.com/gh/wbond/oscrypto)
  [![PyPI](https://img.shields.io/pypi/v/oscrypto.svg)](https://pypi.python.org/pypi/oscrypto)



  The library integrates with the encryption library that is part of the operating
  system. This means that a compiler is never needed, and OS security updates take
  care of patching vulnerabilities. Supported operating systems include:

   - Windows XP or newer
     - Uses:
       - [Cryptography API: Next Generation (CNG)](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376210(v=vs.85).aspx)
       - [Secure Channel](https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v=vs.85).aspx) for TLS
       - [CryptoAPI](https://msdn.microsoft.com/en-us/library/windows/desktop/aa380256(v=vs.85).aspx) for trust lists and XP support
     - Tested on:
       - Windows XP (no SNI)
       - Windows 7
       - Windows 8.1
       - Windows Server 2012
       - Windows 10
   - OS X 10.7 or newer
     - Uses:
       - [Security.framework](https://developer.apple.com/library/prerelease/mac/documentation/Security/Reference/SecurityFrameworkReference/index.html)
       - [Secure Transport](https://developer.apple.com/library/prerelease/mac/documentation/Security/Reference/secureTransportRef/index.html#//apple_ref/doc/uid/TP30000155) for TLS
       - [CommonCrypto](http://www.opensource.apple.com/source/CommonCrypto/CommonCrypto-55010/CommonCrypto/) for PBKDF2
       - OpenSSL (or LibreSSL on macOS 10.13) for the PKCS #12 KDF
     - Tested on:
       - OS X 10.7
       - OS X 10.8
       - OS X 10.9
       - OS X 10.10
       - OS X 10.11
       - OS X 10.11 with OpenSSL 1.1.0
       - macOS 10.12
       - macOS 10.13 with LibreSSL 2.2.7
       - macOS 10.14
       - macOS 10.15
       - macOS 10.15 with OpenSSL 3.0
       - macOS 11
       - macOS 12
   - Linux or BSD
     - Uses one of:
       - [OpenSSL 0.9.8](https://www.openssl.org/docs/man0.9.8/)
       - [OpenSSL 1.0.x](https://www.openssl.org/docs/man1.0.0/)
       - [OpenSSL 1.1.0](https://www.openssl.org/docs/man1.1.0/)
       - [OpenSSL 3.0](https://www.openssl.org/docs/man3.0/)
       - [LibreSSL](http://www.libressl.org/)
     - Tested on:
       - Arch Linux with OpenSSL 1.0.2
       - OpenBSD 5.7 with LibreSSL
       - Ubuntu 10.04 with OpenSSL 0.9.8
       - Ubuntu 12.04 with OpenSSL 1.0.1
       - Ubuntu 15.04 with OpenSSL 1.0.1
       - Ubuntu 16.04 with OpenSSL 1.0.2 on Raspberry Pi 3 (armhf)
       - Ubuntu 18.04 with OpenSSL 1.1.x (amd64, arm64, ppc64el)
       - Ubuntu 22.04 with OpenSSL 3.0 (amd64)

  *OS X 10.6 will not be supported due to a lack of available
  cryptographic primitives and due to lack of vendor support.*



  Currently the following features are implemented. Many of these should only be
  used for integration with existing/legacy systems. If you don't know which you
  should, or should not use, please see [Learning](docs/readme.md#learning).

   - [TLSv1.x socket wrappers](docs/tls.md)
     - Certificate verification performed by OS trust roots
     - Custom CA certificate support
     - SNI support (except Windows XP)
     - Session reuse via IDs/tickets
     - Modern cipher suites (RC4, DES, anon and NULL ciphers disabled)
     - Weak DH parameters and certificate signatures rejected
     - SSLv3 disabled by default, SSLv2 unimplemented
     - CRL/OCSP revocation checks consistenty disabled
   - [Exporting OS trust roots](docs/trust_list.md)
     - PEM-formatted CA certs from the OS for OpenSSL-based code
   - [Encryption/decryption](docs/symmetric.md)
     - AES (128, 192, 256), CBC mode, PKCS7 padding
     - AES (128, 192, 256), CBC mode, no padding
     - TripleDES 3-key, CBC mode, PKCS5 padding
     - TripleDes 2-key, CBC mode, PKCS5 padding
     - DES, CBC mode, PKCS5 padding
     - RC2 (40-128), CBC mode, PKCS5 padding
     - RC4 (40-128)
     - RSA PKCSv1.5
     - RSA OAEP (SHA1 only)
   - [Generating public/private key pairs](docs/asymmetric.md)
     - RSA (1024, 2048, 3072, 4096 bit)
     - DSA (1024 bit on all platforms - 2048, 3072 bit with OpenSSL 1.x or
       Windows 8)
     - EC (secp256r1, secp384r1, secp521r1 curves)
   - [Generating DH parameters](docs/asymmetric.md)
   - [Signing and verification](docs/asymmetric.md)
     - RSA PKCSv1.5
     - RSA PSS
     - DSA
     - EC
   - [Loading and normalizing DER and PEM formatted keys](docs/keys.md)
     - RSA public and private keys
     - DSA public and private keys
     - EC public and private keys
     - X.509 Certificates
     - PKCS#12 archives (`.pfx`/`.p12`)
   - [Key derivation](docs/kdf.md)
     - PBKDF2
     - PBKDF1
     - PKCS#12 KDF
   - [Random byte generation](docs/util.md)

  The feature set was largely driven by the technologies used related to
  generating and validating X.509 certificates. The various CBC encryption schemes
  and KDFs are used to load encrypted private keys, and the various RSA padding
  schemes are part of X.509 signatures.

  For modern cryptography not tied to an existing system, please see the
  [Modern Cryptography](docs/readme.md#modern-cryptography) section of the docs.

  *Please note that this library does not include modern block modes such as CTR
  and GCM due to lack of support from both OS X and OpenSSL 0.9.8.*



  In short, the existing cryptography libraries for Python didn't fit the needs of
  a couple of projects I was working on. Primarily these are applications
  distributed to end-users who aren't programmers, that need to handle TLS and
  various technologies related to X.509 certificates.

  If your system is not tied to AES, TLS, X.509, or related technologies, you
  probably want [more modern cryptography](docs/readme.md#modern-cryptography).

  Depending on your needs, the [cryptography](https://cryptography.io) package may
  be a good (or better) fit.

  Some things that make oscrypto unique:

   - No compiler needed, ever. No need to pre-compile shared libraries. Just
     distribute the Python source files, any way you want.
   - Uses the operating system's crypto library - does not require OpenSSL on
     Windows or OS X.
   - Relies on the operating system for security patching. You don't need to
     rebuild all of your apps every time there is a new TLS vulnerability.
   - Intentionally limited in scope to crypto primitives. Other libraries
     built upon it deal with certificate path validation, creating certificates
     and CSRs, constructing CMS structures.
   - Built on top of a fast, pure-Python ASN.1 parser,
     [asn1crypto](https://github.com/wbond/asn1crypto).
   - TLS functionality uses the operating system's trust list/CA certs and is
     pre-configured with sane defaults
   - Public APIs are simple and use strict type checks to avoid errors

  Some downsides include:

   - Does not currently implement:
     - standalone DH key exchange
     - various encryption modes such as GCM, CCM, CTR, CFB, OFB, ECB
     - key wrapping
     - CMAC
     - HKDF
   - Non-TLS functionality is architected for dealing with data that fits in
     memory and is available all at once
   - Developed by a single developer



  *oscrypto* is part of the modularcrypto family of Python packages:

   - [asn1crypto](https://github.com/wbond/asn1crypto)
   - [oscrypto](https://github.com/wbond/oscrypto)
   - [csrbuilder](https://github.com/wbond/csrbuilder)
   - [certbuilder](https://github.com/wbond/certbuilder)
   - [crlbuilder](https://github.com/wbond/crlbuilder)
   - [ocspbuilder](https://github.com/wbond/ocspbuilder)
   - [certvalidator](https://github.com/wbond/certvalidator)



  1.2.1 - [changelog](changelog.md)



   - [*asn1crypto*](https://github.com/wbond/asn1crypto)
   - Python 2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10 or pypy
   - OpenSSL/LibreSSL if on Linux¹

  *¹ On Linux, `ctypes.util.find_library()` is used to located OpenSSL. Alpine Linux does not have an appropriate install by default for `find_library()` to work properly. Instead, `oscrypto.use_openssl()` must be called with the path to the OpenSSL shared libraries.*



  ```bash
  pip install oscrypto
  ```



  *oscrypto* is licensed under the terms of the MIT license. See the
  [LICENSE](LICENSE) file for the exact license text.



  [*oscrypto* documentation](docs/readme.md)



  Various combinations of platforms and versions of Python are tested via:

   - [macOS, Linux, Windows](https://github.com/wbond/oscrypto/actions/workflows/ci.yml) via GitHub Actions
   - [arm64](https://circleci.com/gh/wbond/oscrypto) via CircleCI



  Tests are written using `unittest` and require no third-party packages.

  Depending on what type of source is available for the package, the following
  commands can be used to run the test suite.



  When working within a Git working copy, or an archive of the Git repository,
  the full test suite is run via:

  ```bash
  python run.py tests
  ```

  To run only some tests, pass a regular expression as a parameter to `tests`.

  ```bash
  python run.py tests aes
  ```

  To run tests multiple times, in order to catch edge-case bugs, pass an integer
  to `tests`. If combined with a regular expression for filtering, pass the
  repeat count after the regular expression.

  ```bash
  python run.py tests 20
  python run.py tests aes 20
  ```



  To run tests using a custom build of OpenSSL, or to use OpenSSL on Windows or
  Mac, add `use_openssl` after `run.py`, like:

  ```bash
  python run.py use_openssl=/path/to/libcrypto.so,/path/to/libssl.so tests
  ```

  To run tests forcing the use of ctypes, even if cffi is installed, add
  `use_ctypes` after `run.py`:

  ```bash
  python run.py use_ctypes=true tests
  ```

  To run tests using the legacy Windows crypto functions on Windows 7+, add
  `use_winlegacy` after `run.py`:

  ```bash
  python run.py use_winlegacy=true tests
  ```



  To skip tests that require an internet connection, add `skip_internet` after
  `run.py`:

  ```bash
  python run.py skip_internet=true tests
  ```



  When working within an extracted source distribution (aka `.tar.gz`) from
  PyPi, the full test suite is run via:

  ```bash
  python setup.py test
  ```



  The following env vars can control aspects of running tests:



  Setting the env var `OSCRYPTO_USE_OPENSSL` to a string in the form:

  ```
  /path/to/libcrypto.so,/path/to/libssl.so
  ```

  will force use of specific OpenSSL shared libraries.

  This also works on Mac and Windows to force use of OpenSSL instead of using
  native crypto libraries.



  By default, oscrypto will use the `cffi` module for FFI if it is installed.

  To use the slightly slower, but more widely-tested, `ctypes` FFI layer, set
  the env var `OPENSSL_USE_CTYPES=true`.



  On Windows 7 and newer, oscrypto will use the CNG backend by default.

  To force use of the older CryptoAPI, set the env var
  `OPENSSL_USE_WINLEGACY=true`.



  Some of the TLS tests require an active internet connection to ensure that
  various "bad" server certificates are rejected.

  To skip tests requiring an internet connection, set the env var
  `OPENSSL_SKIP_INTERNET_TESTS=true`.



  When the package has been installed via pip (or another method), the package
  `oscrypto_tests` may be installed and invoked to run the full test suite:

  ```bash
  pip install oscrypto_tests
  python -m oscrypto_tests
  ```



  To install the package used for linting, execute:

  ```bash
  pip install --user -r requires/lint
  ```

  The following command will run the linter:

  ```bash
  python run.py lint
  ```

  Support for code coverage can be installed via:

  ```bash
  pip install --user -r requires/coverage
  ```

  Coverage is measured by running:

  ```bash
  python run.py coverage
  ```

  To install the packages requires to generate the API documentation, run:

  ```bash
  pip install --user -r requires/api_docs
  ```

  The documentation can then be generated by running:

  ```bash
  python run.py api_docs
  ```

  To install the necessary packages for releasing a new version on PyPI, run:

  ```bash
  pip install --user -r requires/release
  ```

  Releases are created by:

   - Making a git tag in [semver](http://semver.org/) format
   - Running the command:

     ```bash
     python run.py release
     ```

  Existing releases can be found at https://pypi.python.org/pypi/oscrypto.



  A task named `deps` exists to download and stage all necessary testing
  dependencies. On posix platforms, `curl` is used for downloads and on Windows
  PowerShell with `Net.WebClient` is used. This configuration sidesteps issues
  related to getting pip to work properly and messing with `site-packages` for
  the version of Python being used.

  The `ci` task runs `lint` (if flake8 is available for the version of Python) and
  `coverage` (or `tests` if coverage is not available for the version of Python).
  If the current directory is a clean git working copy, the coverage data is
  submitted to codecov.io.

  ```bash
  python run.py deps
  python run.py ci
  ```


pkgId: 66b74b30a977253c1af2d4e654ef82edac2f2b2e16c79ea98935af991ad6f498
name: python-oslo.sphinx
arch: src
version: 1.1
epoch: 0
release: 1
summary: OpenStack Sphinx Extensions
url: http://www.openstack.org/
rpm_license: None
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a897ea1d-836d-4067-a123-f1689a9e9411
location_href: 00004472-python-oslo-sphinx/python-oslo.sphinx-1.1-1.src.rpm
checksum_type: sha256
description:
  Theme and extension support for Sphinx documentation from the
  OpenStack project.
  To use the theme, add ``'oslo.sphinx'`` to the ``extensions`` list in
  the ``conf.py`` file in your Sphinx project.


pkgId: 1bc43109aa5459be9cb7db2f7a4f67e2a82ca748756030547fa0104ca4738e11
name: python-osmnx
arch: src
version: 1.3.0
epoch: 0
release: 1
summary: Retrieve, model, analyze, and visualize OpenStreetMap street networks and other spatial data
url: https://github.com/gboeing/osmnx
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-42d88aa5-4413-41fe-89fb-2398d85984a3
location_href: 00012716-python-osmnx/python-osmnx-1.3.0-1.src.rpm
checksum_type: sha256
description:
  **OSMnx** is a Python package that lets you download spatial data and
  model, project, visualize, and analyze real-world street networks from
  OpenStreetMap's APIs. Users can download and model walkable, drivable, or
  bikeable urban networks with a single line of Python code, and then easily
  analyze and visualize them. You can just as easily download and work with
  amenities/points of interest, building footprints, elevation data, street
  bearings/orientations, speed/travel time, and network routing.

  Citation info: Boeing, G. 2017. `OSMnx: New Methods for Acquiring,
  Constructing, Analyzing, and Visualizing Complex Street Networks`_.
  *Computers, Environment and Urban Systems* 65, 126-139.
  doi:10.1016/j.compenvurbsys.2017.05.004

  Read the `docs`_ or see usage examples and demos on `GitHub`_.

  .. _GitHub: https://github.com/gboeing/osmnx-examples
  .. _docs: https://osmnx.readthedocs.io
  .. _OSMnx\: New Methods for Acquiring, Constructing, Analyzing, and Visualizing Complex Street Networks: http://geoffboeing.com/publications/osmnx-complex-street-networks/


pkgId: 834ac8043ece9bf13fc84aad9d65239d622a90870fdaafe49028817f5c35d1a3
name: python-ouimeaux
arch: src
version: 0.8.2
epoch: 0
release: 1
summary: Open source control for Belkin WeMo devices
url: https://github.com/iancmcc/ouimeaux
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d6133595-9285-4ee5-b5e5-9a2deeecd82e
location_href: 00004479-python-ouimeaux/python-ouimeaux-0.8.2-1.src.rpm
checksum_type: sha256
description:
  Release 0.8.0 (July 30, 2016)
  +++++++++++++++++++++++++++++
  - Randomize subscription ports to enable simultaneous ouimeaux scripts (thanks @bennytheshap)
  - Fix for WeMo LED Light support (thanks @sstangle73)
  - #32: Removed address cache, broke server out into optional feature
  - Fix for Maker state reporting (thanks @pavoni)
  - Filter by SSDP location, fixing case where multiple devices respond from the same IP (thanks @szakharchenko)
  - Fix Maker event handlers, which were being passed as bridges (thanks @maxlazarov)
  - Work around gevent-socketio bug by explicitly casting header value as string
  - Fix for inconsistent Light state (thanks @canduuk)
  - StateChange signals are now a separate class and do not fire if value is unchanged (thanks @esecules)
  - Python 3 support (thanks to @drock371)
  Release 0.7.9 (March 17, 2015)
  ++++++++++++++++++++++++++++++
  - Command line support for WeMo LED Light (thanks @fritz-fritz)
  - Command line support for WeMo Maker (thanks @logjames)
  - Support for 2.0.0 firmware (thanks @fritz-fritz)
  - Bug fixes
  Release 0.7.3 (August 10, 2014)
  ++++++++++++++++++++++++++++++++
  - Fixed #18: Error when run as root
  - Fixed #26: Evict devices from cache when unreachable
  - Fixed #29: GetPower stopped working for Insight devices
  - Fixed #31: Add blink method on switches, include in REST API
  - Fixed #33, #37: Handle invalid devices without dying
  - Fixed #35: Require requests >= 2.3.0
  - Fixed #40: Retry requests in the event of failure
  - Fixed #47: Don't choke on invalid newlines in XML returned by switches
               (thanks to @fingon)
  Release 0.7.2 (January 28, 2014)
  ++++++++++++++++++++++++++++++++
  - Fix a bug with using query parameters on /api/device
  Release 0.7 (January 27, 2014)
  ++++++++++++++++++++++++++++++
  - Added REST API
  - Added Web app
  Release 0.6 (January 25, 2014)
  ++++++++++++++++++++++++++++++++
  - Added signals framework
  - Fixed #16, #19, #22: Defensively resubscribe to events when device responds with an error
  - Fixed #15: Signals framework includes relevant device when sending signal
  - Refactored structure, added Sphinx docs
  Release 0.5.3 (January 25, 2014)
  ++++++++++++++++++++++++++++++++
  - Fixed #20: Allow timeout in environment.wait()
  - Fixed #21: Add Insight support
  Release 0.5.2 (November 23, 2013)
  +++++++++++++++++++++++++++++++++
  - Fixed #14: Indicate Connection:close header to avoid logging when WeMo sends
    invalid HTTP response.
  Release 0.5.1 (November 9, 2013)
  ++++++++++++++++++++++++++++++++
  - Fixed #10: Updated subscriber listener to use more reliable method of
    retrieving non-loopback IP address; updated docs to fix typo in listener
    registration example (thanks to @benhoyle, @francxk)
  - Fixed #11: Remove instancemethod objects before attempting to pickle devices
    in the cache (thanks @piperde, @JonPenner, @tomtomau, @masilu77)
  Release 0.5 (October 14, 2013)
  +++++++++++++++++++++++++++++++
  - Added fuzzy matching of device name when searching/toggling from command line
  - Added ``status`` mode to print status for all devices
  - Added ``switch status`` mode to print status for specific device
  - Added flags for all command-line options
  - Fixed #9: Removed unused fcntl import that precluded Windows usage (thanks to
    @deepseven)
  Release 0.4.3 (August 31, 2013)
  +++++++++++++++++++++++++++++++
  - Used new method of obtaining local IP for discovery that is less likely to
    return loopback
  - Exit with failure and instructions for solution if loopback IP is used
  - Updated installation docs to include python-dev and pip instructions (patch
    by @fnaard)
  - Fixed README inclusion bug that occasionally broke installation via pip.
  - Added ``--debug`` option to enable debug logging to stdout
  Release 0.4 (August 17, 2013)
  +++++++++++++++++++++++++++++
  - Fixed #7: Added support for light switch devices (patch by nschrenk).
  - Fixed #6: Added "wemo clear" command to clear the device cache.
  Release 0.3 (May 25, 2013)
  ++++++++++++++++++++++++++
  - Fixed #4: Added ability to specify ip:port for discovery server binding. Removed
    documentation describing need to disable SSDP service on Windows.
  - Fixed #5: Added device cache for faster results.
  - Added configuration file.
  - Added ability to configure aliases for devices to avoid quoting strings on
    the command line.
  - Added 'toggle' command to command line switch control.
  Release 0.2 (April 21, 2013)
  ++++++++++++++++++++++++++++++
  - Fixed #1: Added ability to subscribe to motion and switch state change events.
  - Added Windows installation details to README (patch by @brianpeiris)
  - Cleaned up UDP server lifecycle so rediscovery doesn't try to start it back up.
  Release 0.1 (February 2, 2013)
  ++++++++++++++++++++++++++++++
  - Initial release.
  * First release on PyPI.


pkgId: 3b5ad732e5c1b23a647e848a93b6afb8451dc129564fc716e7afbd4d5d4b3834
name: python-outcome
arch: src
version: 1.2.0
epoch: 0
release: 1
summary: Capture the outcome of Python function calls.
url: https://github.com/python-trio/outcome
rpm_license: MIT OR Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c00480f3-6f01-495f-8ad7-6d60c76c42f4
location_href: 00004480-python-outcome/python-outcome-1.2.0-1.src.rpm
checksum_type: sha256
description:
  Welcome to `outcome <https://github.com/python-trio/outcome>`__!
  Capture the outcome of Python function calls. Extracted from the
  `Trio <https://github.com/python-trio/trio>`__ project.
  License: Your choice of MIT or Apache License 2.0


pkgId: 53fc11d85b9e100e5e277820dfa2726f062b39778b4f1e25e30f1f3628cd745b
name: python-outdated
arch: src
version: 0.2.2
epoch: 0
release: 1
summary: Check if a version of a PyPI package is outdated
url: http://github.com/alexmojaki/outdated
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e02aef51-886e-4e7a-be6e-27224aa3068e
location_href: 00004481-python-outdated/python-outdated-0.2.2-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.org/alexmojaki/outdated.svg?branch=master)](https://travis-ci.org/alexmojaki/outdated) [![Coverage Status](https://coveralls.io/repos/github/alexmojaki/outdated/badge.svg?branch=master&uncache)](https://coveralls.io/github/alexmojaki/outdated?branch=master) [![Supports Python versions 2.7 and 3.5+](https://img.shields.io/pypi/pyversions/outdated.svg)](https://pypi.python.org/pypi/outdated)

  This is a mini-library which, given a package name and a version, checks if it's the latest version available on PyPI.

  To install:

      pip install outdated



      from outdated import warn_if_outdated

      warn_if_outdated('my-package-name', '1.2.3')

  This will:

  - Show a warning if the given version is not the latest. The warning includes the package name, the given version, and the latest version.
  - Perform the check in a background thread (so it doesn't delay anything)
  - Make at most one HTTP call (unless there is an HTTP error, in which case it will try 3 times) to the PyPI server for that specific package
  - Cache the result of the HTTP call on disk for 24 hours
  - Show a warning if any exception occurs during the check

  This will *not* check what version is currently installed, it will only use the given version. Library authors must make sure that the version in their `setup.py` matches the version here.

  The package name argument must be exactly the name used on PyPI, so that e.g. https://pypi.python.org/pypi/my-package-name is a valid URL.

  Optional arguments:

  - `background` (default `True`): run the check in a separate thread. Set to `False` to run immediately.
  - `raise_exceptions` (default: `False`): if `True`, allow exceptions to bubble to the top. Otherwise, show a warning including the exception message. If `background` is `True` and this is `True` then this will result in a full traceback showing but the process continuing.



      from outdated import check_outdated

      is_outdated, latest_version = check_outdated('my-package-name', '1.2.3')

  `is_outdated` is a boolean which is True if the given version is earlier than the latest version, which is the string `latest_version`.

  Optional arguments:

  - `repository_url` (default `https://pypi.python.org/pypi/%s/json`): a `%` style format string to use a different repository PyPI repository URL, e.g. test.pypi.org or a private repository. The string is formatted with the package name.

  This still makes the HTTP call with retries and caches the result on disk. It doesn't use a separate thread or emit any warnings (unless there is an exception specifically while using the cache, in which case the check will be done without the cache).



  To disable all warnings from this library, set the environment variable `OUTDATED_IGNORE` to any non-empty value.

  To always raise exceptions instead of converting them to warnings (both in general in `warn_if_outdated` and more specifically when there's a caching problem) set the environment variable `OUTDATED_RAISE_EXCEPTION=1`.

  The warnings are also categorised so that you can easily control them with standard [warning filters](https://docs.python.org/3/library/warnings.html#the-warnings-filter). The classes are [here](https://github.com/alexmojaki/outdated/blob/master/outdated/mywarnings.py) and can be imported directly from the `outdated` module.



  This library works by fetching a URL such as [this](https://pypi.python.org/pypi/requests/json) - the time it takes to visit that link is essentially the speed of the library. This is much faster than the command `pip list --outdated` or any equivalent code.


pkgId: 0a9b242114b2c7b96dc49124b08ba7078d87aecd8950e40c9af711140548415f
name: python-overrides
arch: src
version: 7.3.1
epoch: 0
release: 1
summary: A decorator to automatically detect mismatch when overriding a method.
url: https://github.com/mkorpela/overrides
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e80ab9d4-7436-47eb-8567-dd09bb0642bb
location_href: 00010488-python-overrides/python-overrides-7.3.1-1.src.rpm
checksum_type: sha256
description:
  A decorator ``@override`` that verifies that a method that should override an inherited method actually does it.
  Copies the docstring of the inherited method to the overridden method.
  Since signature validation and docstring inheritance are performed on class creation and not on class instantiation,
  this library significantly improves the safety and experience of creating class hierarchies in
  Python without significantly impacting performance. See https://stackoverflow.com/q/1167617 for the
  initial inspiration for this library.


pkgId: 4aa9d20fb18a9d516ceb3256cf9b0ca8df3bb39d4c09a94565ddc4c0976c5ed7
name: python-oyaml
arch: src
version: 1.0
epoch: 0
release: 1
summary: Ordered YAML: drop-in replacement for PyYAML which preserves dict ordering
url: https://github.com/wimglenn/oyaml
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-397adda5-02eb-46fc-a087-447d14c396e9
location_href: 00009574-python-oyaml/python-oyaml-1.0-1.src.rpm
checksum_type: sha256
description:
  oyaml is a drop-in replacement for `PyYAML <http://pyyaml.org/wiki/PyYAML>`_ which preserves dict ordering.  Both Python 2 and Python 3 are supported. Just ``pip install oyaml``, and import as shown below:
     import oyaml as yaml
  You'll no longer be annoyed by screwed-up mappings when dumping/loading.


pkgId: db87d451377317ab0899afd9a8f3a894ff66c3cc855b05a166362dd149e012bd
name: python-packit
arch: src
version: 0.30.0
epoch: 0
release: 1
summary: Python packaging in declarative way (wrapping pbr to make it flexible)
url: https://pypi.python.org/pypi/packit
rpm_license: Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-551f1020-10f5-4e8f-ac58-9227586b3075
location_href: 00004483-python-packit/python-packit-0.30.0-1.src.rpm
checksum_type: sha256
description:
  _Contents:_
  - [Rationale](#rationale)
  - [Overview](#overview)
  - [Usage](#usage)
  - [Facilities](#facilities)
  - [Including Files Other than Python Libraries](#including-files)
  - [Further Development](#development)

  <a name="rationale"></a>


  Creating python packages is routine operation that involves a lot of
  actions that could be automated. Although there are petty good tools
  like [pbr](http://docs.openstack.org/developer/pbr/) for that purpose,
  they miss some features and lack flexibility by trying to enforce some
  strongly opinionated decisions upon you. PacKit tries to solve this by
  providing a simple, convenient, and flexible way to create and build
  packages while aiming for following goals:

    - simple declarative way to configure your package through `setup.cfg`
      following [distutils2 setup.cfg
      syntax](http://alexis.notmyidea.org/distutils2/setupcfg.html)
    - reasonable defaults
    - open for extension

  <a name="overview"></a>


  PacKit is wrapper around [pbr](http://docs.openstack.org/developer/pbr/)
  though it only uses it for interaction with setuptools/distutils through
  simplified interface. None of
  [pbr](http://docs.openstack.org/developer/pbr/) functions are exposed
  but instead PacKit provides its own interface.



  Here's a brief overview of currently implemented facilities and the list
  will be extended as new ones will be added.

    - **auto-version** - set package version depending on selected
      versioning strategy.
    - **auto-description** - set package long description
    - **auto-license** - include license file into distribution
    - **auto-dependencies** - populate `install_requires` and
      *test\_requires* from requirement files
    - **auto-packages** - discover packages to include in distribution.
    - **auto-extra-meta** - add useful options to the metadata config
      section
    - **auto-package-data** - include all files tracked by `git` from
      package dirs only.
    - **auto-tests** - make `python setup.py test` run tests with `tox` or
      `pytest` (depending on `tox.ini` presence).

  On top of that PacKit forces easy\_install to honor following [PIP's
  fetch
  directives](https://pip.pypa.io/en/latest/user_guide.html#configuration):

    - index\_url
    - find\_links



    - **auto-plate** - integration with
      [platter](http://platter.pocoo.org/)
    - **auto-license** - fill out license information
    - **auto-pep8** - produce style-check reports
    - **auto-docs** - API docs generation
    - **auto-clean** - configurable clean jobs
    - **auto-coverage** (?) - produce coverage reports while running tests

  If you don't see desired facilities or have cool features in mind feel
  free to contact us and tell about your ideas.

  <a name="usage"></a>


  Create a `setup.py` in your project dir: :

      from setuptools import setup

      setup(setup_requires='packit', packit=True)

  That was the first and the last time you touched that file for your
  project.

  Now let's create a `setup.cfg` that you will use in order to configure
  your package:

      [metadata]
      name = cool-package

  And... if you're not doing anything tricky in your package then that's
  enough\! And if you do, take a look at the section below.

  <a name="facilities"></a>


  Currently all available facilities are enabled by default. Though you
  can easily turn them off by using `facilities` section in your
  `setup.cfg`:

      [facilities]
      auto-version = 0
      auto-dependencies = f
      auto-packages = false
      auto-package-data = n
      auto-tests = no

  If facility is explicitly disabled it won't be used even if
  facility-specific configuration section is present.

  Facility-specific defaults and configuration options described below.



  When enabled, `auto-version` will generate and set package version
  according to selected versioning strategy.

  Versioning strategy can be selected using `type` field under
  `auto-version` section within `setup.cfg`. The default is:

      [auto-version]
      type = git-pep440
      output = src/templates/version.html

  You can use `output` field to ask PacKit to write generated version
  value into specified filename. The specified filename do not need to
  exist but the parent directories should exist. Provided path should
  always use forward slashes.



  Generate [PEP440](https://www.python.org/dev/peps/pep-0440/)-compliant
  version from **annotated** `git` tags. It's expected that you are using
  git tags that follow [public version
  identifier](https://www.python.org/dev/peps/pep-0440/#public-version-identifiers)
  description and `git-pep440` will just append number of commits since
  tag was applied to your tag value (the `N` in [public version
  identifier](https://www.python.org/dev/peps/pep-0440/#public-version-identifiers)
  description).

  If number of commits since tag equal to 0 (your building the tagged
  version) the `N` value won't be appended. Otherwise, it will be appended
  and [local version
  identifier](https://www.python.org/dev/peps/pep-0440/#local-version-identifiers)
  equal to first 7 chars of commit hash will be also added.

  Please note: you must create an **annotated** tag, otherwise it will be
  ignored.

  Example: 1. \<git tag -a 1.2.3.dev -m "dev release 1.2.3.dev"\> -\>
  version is `1.2.3.dev`

  2.  \<git commit\> -\> version is `1.2.3.dev.post1`
  3.  \<git commit\> -\> version is `1.2.3.dev.post2`
  4.  \<git tag -a 1.2.3.a -m "Release 1.2.3.a"\> -\> version is `1.2.3.a`
  5.  \<git commit\> -\> version is `1.2.3.a.post1`
  6.  \<git tag -a 1.2.3 -m "Release 1.2.3"\> -\> version is `1.2.3`
  7.  \<git commit\> -\> version is `1.2.3.post1`
  8.  \<git commit\> -\> version is `1.2.3.post2`



  Use value specified in `value` (it's required when this strategy is
  used) under `auto-version` section in `setup.cfg`:

      [auto-version]
      type = fixed
      value = 3.3



  Read a line using UTF-8 encoding from the file specified in `value`
  (it's required when this strategy is used) under `auto-version` section
  in `setup.cfg`, strip it and use as a version.

      [auto-version]
      type = file
      value = VERSION.txt



  Execute command specified in `value` (it's required when this strategy
  is used) under `auto-version` section in `setup.cfg`, read a line from
  `stdout`, strip it and use as a version



  The most advanced version strategy designed for special cases. It allows
  you to generate complex version values based on other version
  strategies. The usage is pretty simple though:

      [auto-version]
      type = composite
      value = {foo}.{bar}+{git}
      output = main.version

      [auto-version:foo]
      type = fixed
      value = 42
      output = 1st.version

      [auto-version:bar]
      type = shell
      value = echo $RANDOM

      [auto-version:git]
      type = git-pep440
      output = 3rd.version

  The `value` field in composite version strategy should be a valid
  [string format
  expression](https://docs.python.org/2/library/string.html#string-formatting).

  Please note that `output` directives used here only for reference (to
  show that they can be used anywhere) and are not required.

  It's OK to define 'extra' version components and not use them but it's
  an error to not define any of components mentioned in composite version
  template.



  When enabled will fill out `long_description` for package from a readme.

  The `readme` file name could be specified with `file` field under
  `auto-description` section.

  If no file name provided, it will be discovered automatically by trying
  following list of files:

    - README
    - readme
    - CHANGELOG
    - changelog

  Each of these files will be tried with following extensions:

    - \<without extension\>
    - .md
    - .markdown
    - .mkdn
    - .text
    - .rst
    - .txt

  The readme file will be included in the package data.



  When enabled will include the license file into the distribution.

  The license file name could be specified by the `file` field within
  `auto-license` section.

  If license file name is not provided the facility will try to discover
  it in the current dir trying following file names:

    - LICENSE
    - license

  Each of these files will be tried with following extensions:

    - \<without extension\>
    - .md
    - .markdown
    - .mkdn
    - .text
    - .rst
    - .txt



  When enabled will fill `install_requires` and `test_requires` from
  requirement files.

  Requirement files could be specified by `install` and `test` fields
  under the `auto-dependencies` section of the `setup.cfg`.

  If requirements file names not provided then the facility will try to
  discover them automatically.

  For installation requirements following paths will be tried:

    - requires
    - requirements
    - requirements/prod
    - requirements/release
    - requirements/install
    - requirements/main
    - requirements/base

  For testing requirements following paths will be tried:

    - test-requires
    - test\_requires
    - test-requirements
    - test\_requirements
    - requirements\_test
    - requirements-test
    - requirements/test

  For each path following extensions will be tried

    - \<without extension\>
    - .pip
    - .txt

  Once a file is found, PacKit stops looking for more files.

  **You can use vcs project urls and/or archive urls/paths** as described
  in [pip
  usage](https://pip.pypa.io/en/latest/reference/pip_install.html#usage) -
  they will be split in dependency links and package names during package
  creation and will be properly handled by pip/easyinstall during
  installation. Remember that you can also make "includes" relationships
  between `requirements.txt` files by including a line like `-r
  other-requires-file.txt`.



  When enabled and no packages provided in `setup.cfg` through `packages`
  option under `files` section will try to automatically find out all
  packages in current dir recursively.

  It operates using `exclude` and `include` values that can be specified
  under `auto-packages` section within `setup.cfg`.

  If `exclude` not provided the following defaults will be used: `test`,
  `docs`, `.tox` and `env`.

  If `include` not provided, `auto-packages` will try the following steps
  in order to generate it:

  1.  If `packages_root` value provided under `files` section in
      `setup.cfg`, it will be used.
  2.  Otherwise the current working dir will be scanned for any python
      packages (dirs with \_\_init\_\_.py) while honoring exclude `value`.
      *This packages also will be included into the resulting list of
      packages.*

  Once `include` value is determined, the resulting packages list will be
  generated using following algorithm:

      for path in include:
          found_packages |= set(find_packages(path, exclude))



  When enabled, adds a number of additional options to 'metadata' section.

  Right now, only 1 extra option supported:

    - **is\_pure** - allows you to override 'purity' flag for
      distribution, i.e. you can explicitly say whether your distribution
      is platform-specific or no.



  Has no additional configuration options \[yet\].

  When enabled, the `python setup.py test` is equal to running:

    - **tox** if `tox.ini` is present
    - **pytest** with
      [pytest-gitignore](https://pypi.python.org/pypi/pytest-gitignore/)
      and
      [teamcity-messages](https://pypi.python.org/pypi/teamcity-messages/)
      plugins enabled by default otherwise (if you need any other plugins
      just add them to test requirements) and activate them with
      additional options (see below)

  The facility automatically downloads underlying test framework and
  install it - you don't need to worry about it.

  You can pass additional parameters to the underlying test framework with
  '-a' or '--additional-test-args='.



  See the next section.

  <a name="including-files"></a>


  Often, you need to include a data file, or another program, or some
  other kind of file, with your Python package. Here are a number of
  common situations, and how to accomplish them using packit:



  The default is that the `auto-package-data` facility is enabled. In this
  configuration, you can include data files for your python library very
  easily by just:

    - Placing them inside a Python package directory (so next to an `__init__.py`
      or in a subdirectory), and
    - Adding them to git version control.

  ```
  setup.cfg
  src/
  src/nicelib/
  src/nicelib/__init__.py
  src/nicelib/things.py
  src/nicelib/somedata.csv
  ```

  __No change in setup.cfg is required.__ Putting the files here will cause the
  packaging system to notice them and install them in the same arrangement next
  to your Python files, but inside the virtualenv where your package is
  installed.

  Once this is done, you have several easy options for accessing them, and all of
  these should work the same way in development and once installed:
  * The least magical way is `pathlib.Path(__file__).parent / 'somedata.csv'`,
    or some equivalent with `os.path` calls.  This makes your package non-zip-safe,
    so it can't be used in a `pex` or `zipapp` application.
  * The new hotness is `importlib.resources.open_text('nicelib',
    'somedata.csv')` and [related
    functions](https://docs.python.org/3/library/importlib.html#module-importlib.resources),
    available in the stdlib in Python 3.7+ or as a backport in the
    `importlib_resources` PyPI package.  One limitation is this does *not*
    support putting resources deeper in subdirectories.
  * The previous standard has been `pkg_resources.resource_stream('nicelib',
    'somedata.csv')` and [related
    functions](https://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access).
    This supports deeper subdirectories, but is *much* slower than
    `importlib.resources`.  You shouldn't need to install `pkg_resources`,
    it's part of `setuptools`, which is always available these days.

  You can turn off the `auto-package-data` facility if you **don't** want this
  file inclusion mechanism to happen:

      [facilities]
      auto-package-data = no

  `auto-package-data` will not work if your Python package is not at the
  root of your git repository (`setup.py` is not next to `.git`).



  You can also place files relative to the virtualenv, rather than inside
  the package hierarchy (which would be in
  `virtualenv/lib/python*/site-packages/something`). This is often used
  for things like static files in a Django project, so that they are easy
  to find for an external web server. The syntax for this is:

      [files]
      data_files =
          dest_dir = src_dir/**
          dest_dir = file_to_put_there

  In this example, `dest_dir` will be created within the top level of the
  virtualenv. The contents of `src_dir` will be placed inside it, along
  with `file_to_put_there`.

  If you need to include a **compiled executable file** in your package, this
  is a convenient way to do it - include `bin = bin/**` for example. See
  the `fastatools` package for an example of this.  There is also a
  [confluence page with more details on including compiled
  programs](https://confluence.ncbi.nlm.nih.gov/x/TVA0Aw).



  Scripts need to be treated specially, and not just dropped into `bin`
  using `data_files`, because Python changes the shebang (`#!`) line to
  match the virtualenv's python interpreter. This means you can directly
  run a script without activating a virtualenv - e.g. `env/bin/pip install
  attrs` will work even if `env` isn't activated.\[1\]

  If you have some scripts already, the easiest thing is to collect them
  in one directory, then use `scripts`:

      [files]
      scripts =
        bin/*

  Alternatively, setuptools has a special way to directly invoke a Python
  function from the command line, called the `console_scripts` entry
  point. `pull-sp-sub` is an internal package that uses this:

      [entry_points]
      console_scripts =
        pull-sp-sub = pull_sp_sub:main

  To explain that last line, it's *name-of-the-script* `=`
  *dotted-path-of-the-python-module*`:`*name-of-the-python-function*. So
  with this configuration, once the package is installed, setuptools
  creates a script at `$VIRTUAL_ENV/bin/pull-sp-sub` which activates the
  virtualenv and then calls the `main` function in the `pull_sp_sub`
  module.

  Scripts created this way are slightly slower to start up than scripts
  that directly run a Python file. Also, setuptools seems to do more
  dependency checking when starting a script like this, so if you
  regularly live with broken dependencies inside your virtualenv, this
  will be frustrating for you. On the other hand, scripts made this way
  will work better on Windows, if that's one of your target environments.



  This works because the NCBI Python/Linux environment is so homogeneous,
  but it does cause problems - these compiled items are linux- and
  architecture-specific, but this doesn't tell Python's packaging system
  about that.  So for example if you run `pip install applog` on a Mac,
  it will claim to succeed, but the library won't work.  See the next
  section for how to do this in a more robust way.

  This includes things that use the C++ Toolkit (see `python-applog` and
  `cpp-toolkit-validators` for examples). These `.so` files should get
  placed inside the python package hierarchy. Presumably, if you're
  compiling them, they are build artifacts that won't be tracked by git,
  so they won't be included automatically by `auto-package-data`. Instead,
  once they are there, use `extra_files` to have the packaging system
  notice them:

      [files]
      extra_files =
          ncbilog/libclog.so
          ncbilog/libclog.version

  If your packages live inside a `src` directory, you do need to include
  that in the `extra_files` path:

      [files]
      extra_files =
          src/mypkg/do_something_quickly.so

  Notice that `extra_files` is different from `data_files` which we used
  above.



  Packit can coexist with setuptools's support for C extensions. Here is
  an [example with a C file that will be compiled on the user's
  system](https://bitbucket.ncbi.nlm.nih.gov/projects/PY/repos/is_xml_encodable/browse/setup.py).
  In that particular package, the author chose to require Cython for
  developers but not for end users, so the distribution and the git repo
  include both the `.pyx` file and the `.c` file it's translated to.



    - If your Python package is not in the root of your Git repository (so
      `setup.py` is not in the same directory as `.git`), then
      `auto-package-data` will not work.
    - The `auto-package-data` section has configuration options, but they
      don't do anything right now
      ([PY-504](https://jira.ncbi.nlm.nih.gov/browse/PY-504)).

  <a name="development"></a>


    - Add tests
    - Improve docs
    - More configuration options for existing facilities
    - New facilities
    - Allow extension through entry points

  <!-- end list -->

  1.  Unlike `source env/bin/activate`, this does not change the `$PATH`
      or set `$VIRTUAL_ENV`, so there are a few rare circumstances where
      it's not good enough: if your script needs to start another script
      using `subprocess` or `popen`, or if it tries to access data using a
      path relative to `$VIRTUAL_ENV`. Take a look at
      `env/bin/activate_this.py` if you encounter this problem.


pkgId: 4e5ef5c8383145bab9ef8392e27dcce46b44f98690b393a6d278b25714fd359d
name: python-pagure-messages
arch: src
version: 0.0.6
epoch: 0
release: 1
summary: A schema package for messages sent by pagure
url: https://pagure.io/pagure
rpm_license: GPLv2+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-731bd713-6526-4cca-9d3a-a4d10803fdd9
location_href: 00004485-python-pagure-messages/python-pagure-messages-0.0.6-1.src.rpm
checksum_type: sha256
description:
  A schema package for [pagure](https://pagure.io/pagure).

  See the [detailed documentation](https://fedora-messaging.readthedocs.io/en/latest/messages.html) on packaging your schemas.


pkgId: 746b342c675350ba997afc7bf389919987e99e3f64c5ec385d2f6ff89c792f0d
name: python-paho-mqtt
arch: src
version: 1.6.1
epoch: 0
release: 1
summary: MQTT version 5.0/3.1.1 client class
url: http://eclipse.org/paho
rpm_license: Eclipse Public License v2.0 / Eclipse Distribution License v1.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-22628f7b-f132-4ce8-bfb2-3e37e1c72583
location_href: 00004486-python-paho-mqtt/python-paho-mqtt-1.6.1-1.src.rpm
checksum_type: sha256
description:
  This document describes the source code for the `Eclipse Paho <http://eclipse.org/paho/>`_ MQTT Python client library, which implements versions 5.0, 3.1.1, and 3.1 of the MQTT protocol.
  This code provides a client class which enable applications to connect to an `MQTT <http://mqtt.org/>`_ broker to publish messages, and to subscribe to topics and receive published messages. It also provides some helper functions to make publishing one off messages to an MQTT server very straightforward.
  It supports Python 2.7.9+ or 3.6+.
  The MQTT protocol is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. Designed as an extremely lightweight publish/subscribe messaging transport, it is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium.
  Paho is an `Eclipse Foundation <https://www.eclipse.org/org/foundation/>`_ project.


pkgId: ff2dfe4969ae33ec0e6f59045f6a66d72956b8d92732e44bc366f35866bb87bb
name: python-pamela
arch: src
version: 1.0.0
epoch: 0
release: 1
summary: PAM interface using ctypes
url: https://github.com/minrk/pamela
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d5b4645d-b518-4991-a86b-283eff01d9ea
location_href: 00004488-python-pamela/python-pamela-1.0.0-1.src.rpm
checksum_type: sha256
description:
  There seems to be a glut of Python wrappers for PAM that have since been abandoned.
  This repo merges two separate efforts:

  - [gnosek/python-pam](https://github.com/gnosek/python-pam)
    - adds wrappers for a few more calls, e.g. opening sessions
    - raises PamError on failure instead of returning False, with informative error messages
  - [simplepam](https://github.com/leonnnn/python3-simplepam)
    - adds Python 3 support
    - resets credentials after authentication, apparently for kerberos users



  Both projects appear to be abandoned, with no response to issues or pull requests in at least a year, and I need it for [JupyterHub](https://github.com/jupyter/jupyterhub).



  Install:

      pip install pamela

  Test:

      python -m pamela -a `whoami`


pkgId: 501b1127014c9231ffa9a1eac5839a141f9eea79ed17167d1f46f40a57e3b149
name: python-pampy
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: The Pattern Matching for Python you always dreamed of
url: https://github.com/santinic/pampy
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-66e0d256-550f-4200-b22a-b66bfb12bf0d
location_href: 00012337-python-pampy/python-pampy-0.3.0-1.src.rpm
checksum_type: sha256
description:
  ![Pampy in Star Wars](https://raw.githubusercontent.com/santinic/pampy/master/imgs/pampy.png "Pampy in Star Wars")


  [![License MIT](https://go-shields.herokuapp.com/license-MIT-blue.png)]()
  [![Travis-CI Status](https://api.travis-ci.org/santinic/pampy.svg?branch=master)](https://travis-ci.org/santinic/pampy)
  [![Coverage Status](https://coveralls.io/repos/github/santinic/pampy/badge.svg?branch=master)](https://coveralls.io/github/santinic/pampy?branch=master)
  [![PyPI version](https://badge.fury.io/py/pampy.svg)](https://badge.fury.io/py/pampy)

  Pampy is pretty small (150 lines), reasonably fast, and often makes your code more readable
  and hence easier to reason about. [There is also a JavaScript version, called Pampy.js](https://github.com/santinic/pampy.js).

  <kbd>
    <img src="https://raw.githubusercontent.com/santinic/pampy/master/imgs/slide1.png" width="700">
  </kbd>



  Patterns are evaluated in the order they appear.

  <kbd>
    <img src="https://raw.githubusercontent.com/santinic/pampy/master/imgs/slide2.png" width="700">
  </kbd>



  The operator _ means "any other case I didn't think of".

  ```python
  from pampy import match, _

  def fibonacci(n):
      return match(n,
          1, 1,
          2, 1,
          _, lambda x: fibonacci(x-1) + fibonacci(x-2)
      )
  ```



  ```python
  from pampy import match, REST, _

  def lisp(exp):
      return match(exp,
          int,                lambda x: x,
          callable,           lambda x: x,
          (callable, REST),   lambda f, rest: f(*map(lisp, rest)),
          tuple,              lambda t: list(map(lisp, t)),
      )

  plus = lambda a, b: a + b
  minus = lambda a, b: a - b
  from functools import reduce

  lisp((plus, 1, 2))                 	# => 3
  lisp((plus, 1, (minus, 4, 2)))     	# => 3
  lisp((reduce, plus, (range, 10)))       # => 45
  ```



  ```python
  match(x,
      3,              "this matches the number 3",

      int,            "matches any integer",

      (str, int),     lambda a, b: "a tuple (a, b) you can use in a function",

      [1, 2, _],      "any list of 3 elements that begins with [1, 2]",

      {'x': _},       "any dict with a key 'x' and any value associated",

      _,              "anything else"
  )
  ```



  ```python
  from pampy import match, HEAD, TAIL, _

  x = [1, 2, 3]

  match(x, [1, TAIL],     lambda t: t)            # => [2, 3]

  match(x, [HEAD, TAIL],  lambda h, t: (h, t))    # => (1, [2, 3])

  ```
  `TAIL` and `REST` actually mean the same thing.



  ```python
  from pampy import match, _

  x = [1, [2, 3], 4]

  match(x, [1, [_, 3], _], lambda a, b: [1, [a, 3], b])           # => [1, [2, 3], 4]
  ```



  ```python

  pet = { 'type': 'dog', 'details': { 'age': 3 } }

  match(pet, { 'details': { 'age': _ } }, lambda age: age)        # => 3

  match(pet, { _ : { 'age': _ } },        lambda a, b: (a, b))    # => ('details', 3)
  ```

  It feels like putting multiple _ inside dicts shouldn't work. Isn't ordering in dicts not guaranteed ?
  But it does because
  [in Python 3.7, dict maintains insertion key order by default](https://mail.python.org/pipermail/python-dev/2017-December/151283.html)



  ```python
  class Pet:          pass
  class Dog(Pet):     pass
  class Cat(Pet):     pass
  class Hamster(Pet): pass

  def what_is(x):
      return match(x,
          Dog, 		'dog',
          Cat, 		'cat',
          Pet, 		'any other pet',
            _, 		'this is not a pet at all',
      )

  what_is(Cat())      # => 'cat'
  what_is(Dog())      # => 'dog'
  what_is(Hamster())  # => 'any other pet'
  what_is(Pet())      # => 'any other pet'
  what_is(42)         # => 'this is not a pet at all'
  ```


  Pampy supports Python 3.7 dataclasses. You can pass the operator `_` as arguments and it will match those fields.

  ```python
  @dataclass
  class Pet:
      name: str
      age: int

  pet = Pet('rover', 7)

  match(pet, Pet('rover', _), lambda age: age)                    # => 7
  match(pet, Pet(_, 7), lambda name: name)                        # => 'rover'
  match(pet, Pet(_, _), lambda name, age: (name, age))            # => ('rover', 7)
  ```


  Pampy supports typing annotations.

  ```python

  class Pet:          pass
  class Dog(Pet):     pass
  class Cat(Pet):     pass
  class Hamster(Pet): pass

  timestamp = NewType("year", Union[int, float])

  def annotated(a: Tuple[int, float], b: str, c: E) -> timestamp:
      pass

  match((1, 2), Tuple[int, int], lambda a, b: (a, b))             # => (1, 2)
  match(1, Union[str, int], lambda x: x)                          # => 1
  match('a', Union[str, int], lambda x: x)                        # => 'a'
  match('a', Optional[str], lambda x: x)                          # => 'a'
  match(None, Optional[str], lambda x: x)                         # => None
  match(Pet, Type[Pet], lambda x: x)                              # => Pet
  match(Cat, Type[Pet], lambda x: x)                              # => Cat
  match(Dog, Any, lambda x: x)                                    # => Dog
  match(Dog, Type[Any], lambda x: x)                              # => Dog
  match(15, timestamp, lambda x: x)                               # => 15
  match(10.0, timestamp, lambda x: x)                             # => 10.0
  match([1, 2, 3], List[int], lambda x: x)                        # => [1, 2, 3]
  match({'a': 1, 'b': 2}, Dict[str, int], lambda x: x)            # => {'a': 1, 'b': 2}
  match(annotated,
      Callable[[Tuple[int, float], str, Pet], timestamp], lambda x: x
  )                                                               # => annotated
  ```
  For iterable generics actual type of value is guessed based on the first element.
  ```python
  match([1, 2, 3], List[int], lambda x: x)                        # => [1, 2, 3]
  match([1, "b", "a"], List[int], lambda x: x)                    # => [1, "b", "a"]
  match(["a", "b", "c"], List[int], lambda x: x)                  # raises MatchError
  match(["a", "b", "c"], List[Union[str, int]], lambda x: x)      # ["a", "b", "c"]

  match({"a": 1, "b": 2}, Dict[str, int], lambda x: x)            # {"a": 1, "b": 2}
  match({"a": 1, "b": "dog"}, Dict[str, int], lambda x: x)        # {"a": 1, "b": "dog"}
  match({"a": 1, 1: 2}, Dict[str, int], lambda x: x)              # {"a": 1, 1: 2}
  match({2: 1, 1: 2}, Dict[str, int], lambda x: x)                # raises MatchError
  match({2: 1, 1: 2}, Dict[Union[str, int], int], lambda x: x)    # {2: 1, 1: 2}
  ```
  Iterable generics also match with any of their subtypes.
  ```python
  match([1, 2, 3], Iterable[int], lambda x: x)                     # => [1, 2, 3]
  match({1, 2, 3}, Iterable[int], lambda x: x)                     # => {1, 2, 3}
  match(range(10), Iterable[int], lambda x: x)                     # => range(10)

  match([1, 2, 3], List[int], lambda x: x)                         # => [1, 2, 3]
  match({1, 2, 3}, List[int], lambda x: x)                         # => raises MatchError
  match(range(10), List[int], lambda x: x)                         # => raises MatchError

  match([1, 2, 3], Set[int], lambda x: x)                          # => raises MatchError
  match({1, 2, 3}, Set[int], lambda x: x)                          # => {1, 2, 3}
  match(range(10), Set[int], lambda x: x)                          # => raises MatchError
  ```
  For Callable any arg without annotation treated as Any.
  ```python
  def annotated(a: int, b: int) -> float:
      pass

  def not_annotated(a, b):
      pass

  def partially_annotated(a, b: float):
      pass

  match(annotated, Callable[[int, int], float], lambda x: x)     # => annotated
  match(not_annotated, Callable[[int, int], float], lambda x: x) # => raises MatchError
  match(not_annotated, Callable[[Any, Any], Any], lambda x: x)   # => not_annotated
  match(annotated, Callable[[Any, Any], Any], lambda x: x)       # => raises MatchError
  match(partially_annotated,
      Callable[[Any, float], Any], lambda x: x
  )                                                              # => partially_annotated
  ```
  TypeVar is not supported.



  As Pattern you can use any Python type, any class, or any Python value.

  The operator `_` and built-in types like `int` or `str`, extract variables that are passed to functions.

  Types and Classes are matched via `instanceof(value, pattern)`.

  `Iterable` Patterns match recursively through all their elements.  The same goes for dictionaries.

  | Pattern Example | What it means | Matched Example |  Arguments Passed to function | NOT Matched Example |
  | --------------- | --------------| --------------- | ----------------------------- | ------------------ |
  | `"hello"` |  only the string `"hello"` matches | `"hello"` | nothing | any other value |
  | `None` | only `None` | `None` | nothing | any other value |
  | `int` | Any integer | `42` | `42` | any other value |
  | `float` | Any float number | `2.35` | `2.35` | any other value |
  | `str` | Any string | `"hello"` | `"hello"` | any other value |
  | `tuple` | Any tuple | `(1, 2)` | `(1, 2)` | any other value |
  | `list` | Any list | `[1, 2]` | `[1, 2]` | any other value |
  | `MyClass` | Any instance of MyClass. **And any object that extends MyClass.** | `MyClass()` | that instance | any other object |
  | `_` | Any object (even None) |  | that value | |
  | `ANY` | The same as `_` | | that value | |
  | `(int, int)` | A tuple made of any two integers | `(1, 2)` | `1` and `2` | (True, False) |
  | `[1, 2, _]`  | A list that starts with 1, 2 and ends with any value | `[1, 2, 3]` | `3` | `[1, 2, 3, 4]` |
  | `[1, 2, TAIL]` | A list that start with 1, 2 and ends with any sequence | `[1, 2, 3, 4]`| `[3, 4]` | `[1, 7, 7, 7]` |
  | `{'type':'dog', age: _ }` | Any dict with `type: "dog"` and with an age | `{"type":"dog", "age": 3}` | `3` | `{"type":"cat", "age":2}` |
  | `{'type':'dog', age: int }` | Any dict with `type: "dog"` and with an `int` age | `{"type":"dog", "age": 3}` | `3` | `{"type":"dog", "age":2.3}` |
  | `re.compile('(\w+)-(\w+)-cat$')` | Any string that matches that regular expression expr | `"my-fuffy-cat"` | `"my"` and `"puffy"` | `"fuffy-dog"` |
  | `Pet(name=_, age=7)` | Any Pet dataclass with `age == 7` | `Pet('rover', 7)` | `['rover']` | `Pet('rover', 8)` |
  | `Any` | The same as `_` | | that value | |
  | `Union[int, float, None]` | Any integer or float number or None | `2.35` | `2.35` | any other value |
  | `Optional[int]` | The same as `Union[int, None]` | `2` | `2` | any other value |
  | `Type[MyClass]` | Any subclass of MyClass. **And any class that extends MyClass.** | `MyClass` | that class | any other object |
  | `Callable[[int], float]` | Any callable with exactly that signature | `def a(q:int) -> float: ...` | that function | `def a(q) -> float: ...` |
  | `Tuple[MyClass, int, float]` | The same as `(MyClass, int, float)` | | | |
  | `Mapping[str, int]` Any subtype of `Mapping` acceptable too | any mapping or subtype of mapping with string keys and integer values | `{'a': 2, 'b': 3}` | that dict | `{'a': 'b', 'b': 'c'}` |
  | `Iterable[int]` Any subtype of `Iterable` acceptable too | any iterable or subtype of iterable with integer values | `range(10)` and `[1, 2, 3]` | that iterable | `['a', 'b', 'v']` |




  By default `match()` is strict. If no pattern matches, it raises a `MatchError`.

  You can instead provide a fallback value using `default` to be used when nothing matches.

  ```
  >>> match([1, 2], [1, 2, 3], "whatever")
  MatchError: '_' not provided. This case is not handled: [1, 2]

  >>> match([1, 2], [1, 2, 3], "whatever", default=False)
  False
  ```


  Pampy supports Python's Regex. You can pass a compiled regex as pattern, and Pampy is going to run `patter.search()`, and then pass to the action function the result of `.groups()`.

  ```python
  def what_is(pet):
      return match(pet,
          re.compile('(\w+)-(\w+)-cat$'),     lambda name, my: 'cat '+name,
          re.compile('(\w+)-(\w+)-dog$'),     lambda name, my: 'dog '+name,
          _,                                  "something else"
      )

  what_is('fuffy-my-dog')     # => 'dog fuffy'
  what_is('puffy-her-dog')    # => 'dog puffy'
  what_is('carla-your-cat')   # => 'cat carla'
  what_is('roger-my-hamster') # => 'something else'
  ```



  Pampy works in Python >= 3.6 [Because dict matching can work only in the latest Pythons](https://mail.python.org/pipermail/python-dev/2017-December/151283.html).

  To install it:

  ```$ pip install pampy```

  or
  ```$ pip3 install pampy```


  Pampy is Python3-first, but you can use most of its features in Python2 via [this backport](https://pypi.org/project/backports.pampy/) by Manuel Barkhau:

  ```pip install backports.pampy```

  ```python
  from backports.pampy import match, HEAD, TAIL, _
  ```


pkgId: 3c00401baad5d05210d487bc8cfec8dbc45b9c283271cd8a5932f58ea96c09c3
name: python-pamqp
arch: src
version: 3.2.1
epoch: 0
release: 1
summary: RabbitMQ Focused AMQP low-level library
url: https://github.com/gmr/pamqp
rpm_license: BSD 3-Clause License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ef6f61f2-c26e-4f55-a4f2-dfe0bea42c7c
location_href: 00009831-python-pamqp/python-pamqp-3.2.1-1.src.rpm
checksum_type: sha256
description:
  pamqp is a low level AMQP 0-9-1 frame encoding and decoding library for Python 3.
  pamqp is not a end-user client library for talking to RabbitMQ but rather is
  used by client libraries for marshaling and unmarshaling AMQP frames.
  |Version| |Status| |Coverage| |License| |Maintainability| |Downloads|


pkgId: 7b64d6381d5a18d7f33b758c28b1bbf6f8da574bc83568999abb5f2cbdf219ea
name: python-pandarallel
arch: src
version: 1.6.4
epoch: 0
release: 1
summary: An easy to use library to speed up computation (by parallelizing on multi CPUs) with pandas.
url: https://nalepae.github.io/pandarallel
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-97c9743b-5353-48b4-b937-f3fab2d55673
location_href: 00010849-python-pandarallel/python-pandarallel-1.6.4-1.src.rpm
checksum_type: sha256
description:
  [![PyPI version fury.io](https://badge.fury.io/py/pandarallel.svg)](https://pypi.python.org/pypi/pandarallel/)
  [![PyPI license](https://img.shields.io/pypi/l/pandarallel.svg)](https://pypi.python.org/pypi/pandarallel/)
  [![PyPI download month](https://img.shields.io/pypi/dm/pandarallel.svg)](https://pypi.python.org/pypi/pandarallel/)

  | Without parallelization  | ![Without Pandarallel](https://github.com/nalepae/pandarallel/blob/master/docs/progress_apply.gif?raw=true)       |
  | :----------------------: | ----------------------------------------------------------------------------------------------------------------- |
  | **With parallelization** | ![With Pandarallel](https://github.com/nalepae/pandarallel/blob/master/docs/progress_parallel_apply.gif?raw=true) |

  **Pandaral.lel** provides a simple way to parallelize your pandas operations on all your
  CPUs by changing only one line of code. It also displays progress bars.


  - [Manu NALEPA](https://github.com/nalepae/)
  - [till-m](https://github.com/till-m)



  ```bash
  pip install pandarallel [--upgrade] [--user]
  ```



  ```python
  from pandarallel import pandarallel

  pandarallel.initialize(progress_bar=True)


  df.parallel_apply(func)
  ```



  Be sure to check out the [documentation](https://nalepae.github.io/pandarallel).



  An example of each available `pandas` API is available:

  - For [Mac & Linux](https://github.com/nalepae/pandarallel/blob/master/docs/examples_mac_linux.ipynb)
  - For [Windows](https://github.com/nalepae/pandarallel/blob/master/docs/examples_windows.ipynb)


pkgId: eecdd7c3ecf1fdfa0048d8e1fadc09efbad0346f4aaa4c859ddffbb3d42f3111
name: python-pandas-datareader
arch: src
version: 0.10.0
epoch: 0
release: 1
summary: Data readers extracted from the pandas codebase,should be compatible with recent pandas versions
url: https://github.com/pydata/pandas-datareader
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-330f7fd3-3432-440c-b5eb-cc0c5a004721
location_href: 00004489-python-pandas-datareader/python-pandas-datareader-0.10.0-1.src.rpm
checksum_type: sha256
description:
  Up to date remote data access for pandas, works for multiple versions of
  pandas.

  [![image](https://img.shields.io/pypi/v/pandas-datareader.svg)](https://pypi.python.org/pypi/pandas-datareader/)
  [![image](https://codecov.io/gh/pydata/pandas-datareader/branch/master/graph/badge.svg)](https://codecov.io/gh/pydata/pandas-datareader)
  [![image](https://readthedocs.org/projects/pandas-datareader/badge/?version=latest)](https://pandas-datareader.readthedocs.io/en/latest/)
  [![image](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![License](https://img.shields.io/pypi/l/pandas-datareader)](https://pypi.org/project/pandas-datareader/)



  Install using `pip`

  ``` shell
  pip install pandas-datareader
  ```



  ``` python
  import pandas_datareader as pdr
  pdr.get_data_fred('GS10')
  ```



  [Stable documentation](https://pydata.github.io/pandas-datareader/) is available on
  [github.io](https://pydata.github.io/pandas-datareader/). A second copy of the stable
  documentation is hosted on [read the docs](https://pandas-datareader.readthedocs.io/)
  for more details.

  [Development documentation](https://pydata.github.io/pandas-datareader/devel/) is available
  for the latest changes in master.



  Using pandas datareader requires the following packages:

  -   pandas>=1.0
  -   lxml
  -   requests>=2.19.0

  Building the documentation additionally requires:

  -   matplotlib
  -   ipython
  -   requests_cache
  -   sphinx
  -   pydata_sphinx_theme

  Development and testing additionally requires:

  -   black
  -   coverage
  -   codecov
  -   coveralls
  -   flake8
  -   pytest
  -   pytest-cov
  -   wrapt



  ``` shell
  python -m pip install git+https://github.com/pydata/pandas-datareader.git
  ```

  or

  ``` shell
  git clone https://github.com/pydata/pandas-datareader.git
  cd pandas-datareader
  python setup.py install
  ```


pkgId: 2db211d762629e56e8a95f72fa4a0545b4a03c0f86355870bb32d45ac6863c67
name: python-pandas-flavor
arch: src
version: 0.5.0
epoch: 0
release: 1
summary: The easy way to write your own Pandas flavor.
url: https://github.com/Zsailer/pandas_flavor
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4d81fcb5-3c0c-4e2a-9e4a-38f0743e2bc8
location_href: 00004490-python-pandas_flavor/python-pandas-flavor-0.5.0-1.src.rpm
checksum_type: sha256
description:
  **The easy way to write your own flavor of Pandas**

  Pandas 0.23 added a (simple) API for registering accessors with Pandas objects.

  Pandas-flavor extends Pandas' extension API by:
  1. adding support for registering methods as well.
  2. making each of these functions backwards compatible with older versions of Pandas.

  ***What does this mean?***

  It is now simpler to add custom functionality to Pandas DataFrames and Series.

  Import this package. Write a simple python function. Register the function using one of the following decorators.

  ***Why?***

  Pandas is super handy. Its general purpose is to be a "flexible and powerful data analysis/manipulation library".

  **Pandas Flavor** allows you add functionality that tailors Pandas to specific fields or use cases.

  Maybe you want to add new write methods to the Pandas DataFrame? Maybe you want custom plot functionality? Maybe something else?



  Accessors (in pandas) are objects attached to a attribute on the Pandas DataFrame/Series
  that provide extra, specific functionality. For example, `pandas.DataFrame.plot` is an
  accessor that provides plotting functionality.

  Add an accessor by registering the function with the following decorator
  and passing the decorator an accessor name.


  ```python


  import pandas_flavor as pf

  @pf.register_dataframe_accessor('my_flavor')
  class MyFlavor(object):

    def __init__(self, data):
      self._data = data

    def row_by_value(self, col, value):
      """Slice out row from DataFrame by a value."""
      return self._data[self._data[col] == value].squeeze()

  ```

  Every dataframe now has this accessor as an attribute.
  ```python
  import my_flavor


  df = pd.DataFrame(data={
    "x": [10, 20, 25],
    "y": [0, 2, 5]
  })


  print(df)







  df.my_flavor.row_by_value('x', 10)




  ```

  To see this in action, check out [pdvega](https://github.com/jakevdp/pdvega),
  [PhyloPandas](https://github.com/Zsailer/phylopandas), and [pyjanitor](https://github.com/ericmjl/pyjanitor)!




  Using this package, you can attach functions directly to Pandas objects. No
  intermediate accessor is needed.

  ```python


  import pandas_flavor as pf

  @pf.register_dataframe_method
  def row_by_value(df, col, value):
      """Slice out row from DataFrame by a value."""
      return df[df[col] == value].squeeze()

  ```

  ```python
  import pandas as pd
  import my_flavor


  df = pd.DataFrame(data={
    "x": [10, 20, 25],
    "y": [0, 2, 5]
  })


  print(df)







  df.row_by_value('x', 10)




  ```



  - **register_dataframe_method**: register a method directly with a pandas DataFrame.
  - **register_dataframe_accessor**: register an accessor (and it's methods) with a pandas DataFrame.
  - **register_series_method**: register a methods directly with a pandas Series.
  - **register_series_accessor**: register an accessor (and it's methods) with a pandas Series.



  You can install using **pip**:
  ```
  pip install pandas_flavor
  ```
  or conda (thanks @ericmjl)!
  ```
  conda install -c conda-forge pandas-flavor
  ```



  Pull requests are always welcome! If you find a bug, don't hestitate to open an issue or submit a PR. If you're not sure how to do that, check out this [simple guide](https://github.com/Zsailer/guide-to-working-as-team-on-github).

  If you have a feature request, please open an issue or submit a PR!



  Pandas 0.23 introduced a simpler API for [extending Pandas](https://pandas.pydata.org/pandas-docs/stable/development/extending.html#extending-pandas). This API provided two key decorators, `register_dataframe_accessor` and `register_series_accessor`, that enable users to register **accessors** with Pandas DataFrames and Series.

  Pandas Flavor originated as a library to backport these decorators to older versions of Pandas (<0.23). While doing the backporting, it became clear that registering **methods** directly to Pandas objects might be a desired feature as well.[*](#footnote)

  <a name="footnote">*</a>*It is likely that Pandas deliberately chose not implement to this feature. If everyone starts monkeypatching DataFrames with their custom methods, it could lead to confusion in the Pandas community. The preferred Pandas approach is to namespace your methods by registering an accessor that contains your custom methods.*

  **So how does method registration work?**

  When you register a method, Pandas flavor actually creates and registers a (this is subtle, but important) **custom accessor class that mimics** the behavior of a method by:
  1. inheriting the docstring of your function
  2. overriding the `__call__` method to call your function.


pkgId: dff1b7cbfe7040a439f60578bc4f0306286065f5bfe3a2932889896d44c58745
name: python-pandas-profiling
arch: src
version: 3.6.6
epoch: 0
release: 1
summary: Deprecated 'pandas-profiling' package, use 'ydata-profiling' instead
url: https://github.com/ydataai/pandas-profiling
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3cd28a65-0b61-4386-a290-f73ae7318897
location_href: 00009194-python-pandas-profiling/python-pandas-profiling-3.6.6-1.src.rpm
checksum_type: sha256
description:
  ⚠️ **`pandas-profiling` package naming was changed. To continue profiling data use [`ydata-profiling`](https://github.com/ydataai/ydata-profiling) instead!**


pkgId: b637c7de79d8adcffa695edfdb0a825793046c58d7240d5d49ef56596185bf7e
name: python-pandevice
arch: src
version: 0.14.0
epoch: 0
release: 1
summary: Framework for interacting with Palo Alto Networks devices via API
url: https://github.com/PaloAltoNetworks/pandevice
rpm_license: ISC
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e2e1aa6a-31eb-45ac-9056-2e76d9de18f0
location_href: 00014045-python-pandevice/python-pandevice-0.14.0-1.src.rpm
checksum_type: sha256
description:
  The Palo Alto Networks Device Framework is a way to interact with Palo Alto Networks devices (including Next-generation Firewalls and Panorama) using the device API that is object oriented and conceptually similar to interaction with the device via the GUI or CLI.


pkgId: 1c7cfc5d3c7d9b15aed8c49feebbfad9ddc48b29cc948ae5f053b795ebe93dee
name: python-papermill
arch: src
version: 2.4.0
epoch: 0
release: 1
summary: Parametrize and run Jupyter and nteract Notebooks
url: https://github.com/nteract/papermill
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-514f1997-e240-41d8-b2db-3afd00f1aeb0
location_href: 00010093-python-papermill/python-papermill-2.4.0-1.src.rpm
checksum_type: sha256
description:
  <!---(binder links generated at https://mybinder.readthedocs.io/en/latest/howto/badges.html and compressed at https://tinyurl.com) -->
  [![CI](https://github.com/nteract/papermill/actions/workflows/ci.yml/badge.svg)](https://github.com/nteract/papermill/actions/workflows/ci.yml)
  [![CI](https://github.com/nteract/papermill/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/nteract/papermill/actions/workflows/ci.yml)
  [![image](https://codecov.io/github/nteract/papermill/coverage.svg?branch=main)](https://codecov.io/github/nteract/papermill?branch=main)
  [![Documentation Status](https://readthedocs.org/projects/papermill/badge/?version=latest)](http://papermill.readthedocs.io/en/latest/?badge=latest)
  [![badge](https://tinyurl.com/ybwovtw2)](https://mybinder.org/v2/gh/nteract/papermill/main?filepath=binder%2Fprocess_highlight_dates.ipynb)
  [![badge](https://tinyurl.com/y7uz2eh9)](https://mybinder.org/v2/gh/nteract/papermill/main?)
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/papermill)](https://pypi.org/project/papermill/)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
  [![papermill](https://snyk.io/advisor/python/papermill/badge.svg)](https://snyk.io/advisor/python/papermill)
  [![Anaconda-Server Badge](https://anaconda.org/conda-forge/papermill/badges/downloads.svg)](https://anaconda.org/conda-forge/papermill)
  **papermill** is a tool for parameterizing, executing, and analyzing
  Jupyter Notebooks.
  Papermill lets you:
  -   **parameterize** notebooks
  -   **execute** notebooks
  This opens up new opportunities for how notebooks can be used. For
  example:
  -   Perhaps you have a financial report that you wish to run with
      different values on the first or last day of a month or at the
      beginning or end of the year, **using parameters** makes this task
      easier.
  -   Do you want to run a notebook and depending on its results, choose a
      particular notebook to run next? You can now programmatically
      **execute a workflow** without having to copy and paste from
      notebook to notebook manually.
  Papermill takes an *opinionated* approach to notebook parameterization and
  execution based on our experiences using notebooks at scale in data
  pipelines.

  From the command line:
  ``` {.sourceCode .bash}
  pip install papermill
  ```
  For all optional io dependencies, you can specify individual bundles
  like `s3`, or `azure` -- or use `all`. To use Black to format parameters you can add as an extra requires ['black'].
  ``` {.sourceCode .bash}
  pip install papermill[all]
  ```

  This library currently supports Python 3.7+ versions. As minor Python
  versions are officially sunset by the Python org papermill will similarly
  drop support in the future.


  To parameterize your notebook designate a cell with the tag ``parameters``.
  ![enable parameters in Jupyter](docs/img/enable_parameters.gif)
  Papermill looks for the ``parameters`` cell and treats this cell as defaults for the parameters passed in at execution time. Papermill will add a new cell tagged with ``injected-parameters`` with input parameters in order to overwrite the values in ``parameters``. If no cell is tagged with ``parameters`` the injected cell will be inserted at the top of the notebook.
  Additionally, if you rerun notebooks through papermill and it will reuse the ``injected-parameters`` cell from the prior run. In this case Papermill will replace the old ``injected-parameters`` cell with the new run's inputs.
  ![image](docs/img/parameters.png)

  The two ways to execute the notebook with parameters are: (1) through
  the Python API and (2) through the command line interface.

  ``` {.sourceCode .python}
  import papermill as pm
  pm.execute_notebook(
     'path/to/input.ipynb',
     'path/to/output.ipynb',
     parameters = dict(alpha=0.6, ratio=0.1)
  )
  ```

  Here's an example of a local notebook being executed and output to an
  Amazon S3 account:
  ``` {.sourceCode .bash}
  $ papermill local/input.ipynb s3://bkt/output.ipynb -p alpha 0.6 -p l1_ratio 0.1
  ```
  **NOTE:**
  If you use multiple AWS accounts, and you have [properly configured your AWS  credentials](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html), then you can specify which account to use by setting the `AWS_PROFILE` environment variable at the command-line. For example:
  ``` {.sourceCode .bash}
  $ AWS_PROFILE=dev_account papermill local/input.ipynb s3://bkt/output.ipynb -p alpha 0.6 -p l1_ratio 0.1
  ```
  In the above example, two parameters are set: ``alpha`` and ``l1_ratio`` using ``-p`` (``--parameters`` also works). Parameter values that look like booleans or numbers will be interpreted as such. Here are the different ways users may set parameters:
  ``` {.sourceCode .bash}
  $ papermill local/input.ipynb s3://bkt/output.ipynb -r version 1.0
  ```
  Using ``-r`` or ``--parameters_raw``, users can set parameters one by one. However, unlike ``-p``, the parameter will remain a string, even if it may be interpreted as a number or boolean.
  ``` {.sourceCode .bash}
  $ papermill local/input.ipynb s3://bkt/output.ipynb -f parameters.yaml
  ```
  Using ``-f`` or ``--parameters_file``, users can provide a YAML file from which parameter values should be read.
  ``` {.sourceCode .bash}
  $ papermill local/input.ipynb s3://bkt/output.ipynb -y "
  alpha: 0.6
  l1_ratio: 0.1"
  ```
  Using ``-y`` or ``--parameters_yaml``, users can directly provide a YAML string containing parameter values.
  ``` {.sourceCode .bash}
  $ papermill local/input.ipynb s3://bkt/output.ipynb -b YWxwaGE6IDAuNgpsMV9yYXRpbzogMC4xCg==
  ```
  Using ``-b`` or ``--parameters_base64``, users can provide a YAML string, base64-encoded, containing parameter values.
  When using YAML to pass arguments, through ``-y``, ``-b`` or ``-f``, parameter values can be arrays or dictionaries:
  ``` {.sourceCode .bash}
  $ papermill local/input.ipynb s3://bkt/output.ipynb -y "
  x:
      - 0.0
      - 1.0
      - 2.0
      - 3.0
  linear_function:
      slope: 3.0
      intercept: 1.0"
  ```

  Papermill supports the following name handlers for input and output paths during execution:
   * Local file system: `local`
   * HTTP, HTTPS protocol:  `http://, https://`
   * Amazon Web Services: [AWS S3](https://aws.amazon.com/s3/) `s3://`
   * Azure: [Azure DataLake Store](https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-overview), [Azure Blob Store](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-overview) `adl://, abs://`
   * Google Cloud: [Google Cloud Storage](https://cloud.google.com/storage/) `gs://`


pkgId: f864cfe6fcd7ec3ab096a7d44fac4f13b572b8a29a9488ea112ffa203f3304a8
name: python-paperwork
arch: src
version: 2.1.2
epoch: 0
release: 1
summary: Using scanner and OCR to grep dead trees the easy way
url: https://gitlab.gnome.org/World/OpenPaperwork/paperwork
rpm_license: GPLv3+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ca55cc65-1523-4ac4-95b1-207b3062b4b8
location_href: 00004492-python-paperwork/python-paperwork-2.1.2-1.src.rpm
checksum_type: sha256
description:
  Paperwork is a tool to make papers searchable.

  The basic idea behind Paperwork is "scan & forget" : You should be able to
  just scan a new document and forget about it until the day you need it
  again.
  Let the machine do most of the work.

  Main features are:
  - Scan
  - Automatic orientation detection
  - OCR
  - Indexing
  - Document labels
  - Automatic guessing of the labels to apply on new documents
  - Search
  - Keyword suggestions
  - Quick edit of scans
  - PDF support


pkgId: 0f9d9d5cf261fcdc738614c7046f735b356f8582a92fe105fd1e4f2bcbbb4ff2
name: python-paperwork-backend
arch: src
version: 2.1.2
epoch: 0
release: 1
summary: Paperwork's backend
url: https://gitlab.gnome.org/World/OpenPaperwork/paperwork/tree/master/paperwork-backend
rpm_license: GPLv3+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f756b9c4-1a14-47f9-8aff-26d055fe798d
location_href: 00004493-python-paperwork-backend/python-paperwork-backend-2.1.2-1.src.rpm
checksum_type: sha256
description:
  Paperwork is a GUI to make papers searchable.

  This is the backend part of Paperwork. It manages:
  - The work directory / Access to the documents
  - Indexing
  - Searching
  - Suggestions
  - Import
  - Export

  There is no GUI here. The GUI is
  <https://gitlab.gnome.org/World/OpenPaperwork/paperwork>.


pkgId: 9f32167880a4f53d9d397b7f553e258b16393646a78d2c66b8a6285468d8ba15
name: python-param
arch: src
version: 1.13.0
epoch: 0
release: 1
summary: Make your Python code clearer and more reliable by declaring Parameters.
url: http://param.holoviz.org/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-bf0245d1-32f6-480a-a452-f403706c6ad6
location_href: 00010233-python-param/python-param-1.13.0-1.src.rpm
checksum_type: sha256
description:
  <img src="https://raw.githubusercontent.com/holoviz/param/main/doc/_static/logo_horizontal.png" width=250>

  |    |    |
  | --- | --- |
  | Build Status | [![Linux/MacOS/Windows Build Status](https://github.com/holoviz/param/workflows/pytest/badge.svg)](https://github.com/holoviz/param/actions/workflows/test.yml)
  | Coverage | [![codecov](https://codecov.io/gh/holoviz/param/branch/main/graph/badge.svg)](https://codecov.io/gh/holoviz/param) ||
  | Latest dev release | [![Github tag](https://img.shields.io/github/v/tag/holoviz/param.svg?label=tag&colorB=11ccbb)](https://github.com/holoviz/param/tags) [![dev-site](https://img.shields.io/website-up-down-green-red/https/pyviz-dev.github.io/param.svg?label=dev%20website)](https://pyviz-dev.github.io/param/) |
  | Latest release | [![Github release](https://img.shields.io/github/release/holoviz/param.svg?label=tag&colorB=11ccbb)](https://github.com/holoviz/param/releases) [![PyPI version](https://img.shields.io/pypi/v/param.svg?colorB=cc77dd)](https://pypi.python.org/pypi/param) [![param version](https://img.shields.io/conda/v/pyviz/param.svg?colorB=4488ff&style=flat)](https://anaconda.org/pyviz/param) [![conda-forge version](https://img.shields.io/conda/v/conda-forge/param.svg?label=conda%7Cconda-forge&colorB=4488ff)](https://anaconda.org/conda-forge/param) [![defaults version](https://img.shields.io/conda/v/anaconda/param.svg?label=conda%7Cdefaults&style=flat&colorB=4488ff)](https://anaconda.org/anaconda/param) |
  | Python | [![Python support](https://img.shields.io/pypi/pyversions/param.svg)](https://pypi.org/project/param/)
  | Docs | [![gh-pages](https://img.shields.io/github/last-commit/holoviz/param/gh-pages.svg)](https://github.com/holoviz/param/tree/gh-pages) [![site](https://img.shields.io/website-up-down-green-red/https/param.holoviz.org.svg)](https://param.holoviz.org) |
  | Binder | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/holoviz/param/main?labpath=examples) |
  | Support | [![Discourse](https://img.shields.io/discourse/status?server=https%3A%2F%2Fdiscourse.holoviz.org)](https://discourse.holoviz.org/) |

  Param is a library providing Parameters: Python attributes extended to have features such as type and range checking, dynamically generated values, documentation strings, default values, etc., each of which is inherited from parent classes if not specified in a subclass.

  Param contains only two required Python files, with no external dependencies, and is provided freely for both non-commercial and commercial use under a BSD license, so that it can easily be included as part of other projects.

  Please see [param's website](https://param.holoviz.org) for official releases, installation instructions, documentation, and examples.


pkgId: 949403a4fc3321b2aa16ee8edd08fd3670780c146f9c05d89398dd3c072fc176
name: python-paramiko
arch: src
version: 3.1.0
epoch: 0
release: 1
summary: SSH2 protocol library
url: https://paramiko.org
rpm_license: LGPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-499b179a-a4b4-49f8-b569-27f62fdb60cd
location_href: 00009003-python-paramiko/python-paramiko-3.1.0-1.src.rpm
checksum_type: sha256
description:
  Paramiko is a pure-Python [#]_ (3.6+) implementation of the SSHv2 protocol
  [#]_, providing both client and server functionality. It provides the
  foundation for the high-level SSH library `Fabric <https://fabfile.org>`_,
  which is what we recommend you use for common client use-cases such as running
  remote shell commands or transferring files.
  Direct use of Paramiko itself is only intended for users who need
  advanced/low-level primitives or want to run an in-Python sshd.
  For installation information, changelogs, FAQs and similar, please visit `our
  main project website <https://paramiko.org>`_; for API details, see `the
  versioned docs <https://docs.paramiko.org>`_. Additionally, the project
  maintainer keeps a `roadmap <http://bitprophet.org/projects#roadmap>`_ on his
  personal site.
      Paramiko relies on `cryptography <https://cryptography.io>`_ for crypto
      functionality, which makes use of C and Rust extensions but has many
      precompiled options available. See `our installation page
      <https://www.paramiko.org/installing.html>`_ for details.
      SSH is defined in :rfc-reference:`4251`, :rfc-reference:`4252`,
      implementation of the protocol is the `OpenSSH project
      <http://openssh.org>`_.  Paramiko implements a large portion of the SSH
      feature set, but there are occasional gaps.


pkgId: 64dffedb5a9d91eeb58f84dfebaec1b9e9cf9cfa72c8776291cef86cd70b0989
name: python-paramiko-ng
arch: src
version: 2.8.10
epoch: 0
release: 1
summary: SSH2 protocol library
url: https://github.com/ploxiln/paramiko-ng/
rpm_license: LGPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-59ffadb0-a208-47c1-bc89-46e5c9a8ca37
location_href: 00010726-python-paramiko-ng/python-paramiko-ng-2.8.10-1.src.rpm
checksum_type: sha256
description:
  *paramiko-ng* is a fork of `paramiko <https://pypi.org/project/paramiko/>`_
  for more active maintenance.

  For changes in releases of this fork, see https://github.com/ploxiln/paramiko-ng/releases

  This is a library for making SSH2 connections (client or server).
  Emphasis is on using SSH2 as an alternative to SSL for making secure
  connections between python scripts.  All major ciphers and hash methods
  are supported.  SFTP client and server mode are both supported too.

  Required packages:
      Cryptography

  The import name is still just ``paramiko``. Make sure the original *paramiko*
  is not installed before installing *paramiko-ng* - otherwise pip may report
  success even though *paramiko-ng* was not correctly installed.

  To install the development version::

      pip install -e git+https://github.com/ploxiln/paramiko-ng/#egg=paramiko-ng

  You can also install under the original "paramiko" pip-package-name,
  in order to satisfy requirements for other packages::

      PARAMIKO_REPLACE=1 pip install https://github.com/ploxiln/paramiko-ng/archive/2.7.4.tar.gz#egg=paramiko

  Replace "2.7.4" with the desired recent version, or for latest development version do::

      PARAMIKO_REPLACE=1 pip install git+https://github.com/ploxiln/paramiko-ng/#egg=paramiko


pkgId: 3137a0916863ba9a67395426a61692feb715fac5239741fa93b874b11c35ea61
name: python-parmap
arch: src
version: 1.6.0
epoch: 0
release: 1
summary: map and starmap implementations passing additional arguments and parallelizing if possible
url: https://github.com/zeehio/parmap
rpm_license: APACHE-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-21bcd62e-8289-4f4b-9b7b-7bfab92f85d9
location_href: 00011685-python-parmap/python-parmap-1.6.0-1.src.rpm
checksum_type: sha256
description:
  This small python module implements four functions: ``map`` and
  ``starmap``, and their async versions ``map_async`` and ``starmap_async``.


pkgId: fedf57b7cc530831ea1b98aa35a5734a5732ea8782b50a29d44b88dd12d13cc9
name: python-parquet-metadata
arch: src
version: 0.0.1
epoch: 0
release: 1
summary: A tool to show metadata about a Parquet file
url: https://github.com/cldellow/parquet-metadata
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3f48c094-f0d4-4655-8e85-009147e49c1a
location_href: 00009999-python-parquet-metadata/python-parquet-metadata-0.0.1-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.org/cldellow/parquet-metadata.svg?branch=master)](https://travis-ci.org/cldellow/parquet-metadata)

  Dump metadata about a Parquet file. You may also be interested in [csv2parquet](https://github.com/cldellow/csv2parquet).

  ```
  sudo pip install parquet-metadata
  parquet-metadata parquet.file
  ```

  Sample output:

  ```
  file	created_by	parquet-cpp version 1.4.1-SNAPSHOT
  file	columns	9
  file	row_groups	1
  file	rows	2
  row_group	0		size	634
  row_group	0		rows	2
  row_group	0		columns	9
  row_group	0	bool	type	BOOLEAN
  row_group	0	bool	num_values	2
  row_group	0	bool	compression	SNAPPY
  row_group	0	bool	encodings	PLAIN,RLE
  row_group	0	bool	compressed_size	36
  row_group	0	bool	uncompressed_size	34
  row_group	0	bool	stats:min	False
  row_group	0	bool	stats:max	True
  row_group	0	float32	type	FLOAT
  row_group	0	float32	num_values	2
  row_group	0	float32	compression	SNAPPY
  row_group	0	float32	encodings	PLAIN_DICTIONARY,PLAIN,RLE
  row_group	0	float32	compressed_size	68
  row_group	0	float32	uncompressed_size	64
  row_group	0	float32	stats:min	0.5
  row_group	0	float32	stats:max	0.6
  [...]
  ```


pkgId: dee84b4015971c4fe740a7dc4d1e5019036998cdb24113d97d7d5685ffec366d
name: python-parse
arch: src
version: 1.19.0
epoch: 0
release: 1
summary: parse() is the opposite of format()
url: https://github.com/r1chardj0n3s/parse
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7a158a45-11f5-45c1-8219-425604437966
location_href: 00009387-python-parse/python-parse-1.19.0-1.src.rpm
checksum_type: sha256
description:
  A basic version of the `Format String Syntax`_ is supported with anonymous
  (fixed-position), named and formatted fields::
     {[field name]:[format spec]}
  Field names must be a valid Python identifiers, including dotted names;
  element indexes imply dictionaries (see below for example).
  Numbered fields are also not supported: the result of parsing will include
  the parsed fields in the order they are parsed.
  The conversion of fields to types other than strings is done based on the
  type in the format specification, which mirrors the ``format()`` behaviour.
  There are no "!" field conversions like ``format()`` has.
  Some simple parse() format string examples:
      >>> parse("Bring me a {}", "Bring me a shrubbery")
      <Result ('shrubbery',) {}>
      >>> r = parse("The {} who {} {}", "The knights who say Ni!")
      >>> print(r)
      <Result ('knights', 'say', 'Ni!') {}>
      >>> print(r.fixed)
      ('knights', 'say', 'Ni!')
      >>> print(r[0])
      knights
      >>> print(r[1:])
      ('say', 'Ni!')
      >>> r = parse("Bring out the holy {item}", "Bring out the holy hand grenade")
      >>> print(r)
      <Result () {'item': 'hand grenade'}>
      >>> print(r.named)
      {'item': 'hand grenade'}
      >>> print(r['item'])
      hand grenade
      >>> 'item' in r
      True
  Note that `in` only works if you have named fields.
  Dotted names and indexes are possible with some limits. Only word identifiers
  are supported (ie. no numeric indexes) and the application must make additional
  sense of the result:
      >>> r = parse("Mmm, {food.type}, I love it!", "Mmm, spam, I love it!")
      >>> print(r)
      <Result () {'food.type': 'spam'}>
      >>> print(r.named)
      {'food.type': 'spam'}
      >>> print(r['food.type'])
      spam
      >>> r = parse("My quest is {quest[name]}", "My quest is to seek the holy grail!")
      >>> print(r)
      <Result () {'quest': {'name': 'to seek the holy grail!'}}>
      >>> print(r['quest'])
      {'name': 'to seek the holy grail!'}
      >>> print(r['quest']['name'])
      to seek the holy grail!
  If the text you're matching has braces in it you can match those by including
  a double-brace ``{{`` or ``}}`` in your format string, just like format() does.


pkgId: edc9b8361d8bcaa45ca9726a2442c24656ea7b1041518a31a5940a1771ed46d0
name: python-parsedatetime
arch: src
version: 2.6
epoch: 0
release: 1
summary: Parse human-readable date/time text.
url: https://github.com/bear/parsedatetime
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-dccbf4bf-bcff-416f-90e0-d1a1a90282c3
location_href: 00004495-python-parsedatetime/python-parsedatetime-2.6-1.src.rpm
checksum_type: sha256
description:
  Parse human-readable date/time strings.
  Python 2.6 or greater is required for parsedatetime version 1.0 or greater.


pkgId: db995eb06c8e00e65b4efdfeca9a30aa7e2589a276d86ef66b031aaaa53c00c3
name: python-parso
arch: src
version: 0.8.3
epoch: 0
release: 1
summary: A Python Parser
url: https://github.com/davidhalter/parso
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-46165d4e-32f6-49c1-9c53-31a474956581
location_href: 00004498-python-parso/python-parso-0.8.3-1.src.rpm
checksum_type: sha256
description:
  - `Testing <https://parso.readthedocs.io/en/latest/docs/development.html#testing>`_
  - `PyPI <https://pypi.python.org/pypi/parso>`_
  - `Docs <https://parso.readthedocs.org/en/latest/>`_
  - Uses `semantic versioning <https://semver.org/>`_


pkgId: 9b4c0aa4c63d55552fd61da8d7dffb02b4023e914adc5eafa8f08179b3d55e78
name: python-partd
arch: src
version: 1.3.0
epoch: 0
release: 1
summary: Appendable key-value storage
url: http://github.com/dask/partd/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9ef80f25-998d-45dd-b956-2a280e2a0d10
location_href: 00004499-python-partd/python-partd-1.3.0-1.src.rpm
checksum_type: sha256
description:
  |Build Status| |Version Status|
  Key-value byte store with appendable values
      Partd stores key-value pairs.
      Values are raw bytes.
      We append on old values.
  Partd excels at shuffling operations.


pkgId: dd80c8cd5e79147f27450bc8ed7267f1f34fc8f58f1f900861502c5aefb43ce3
name: python-passlib
arch: src
version: 1.7.4
epoch: 0
release: 1
summary: comprehensive password hashing framework supporting over 30 schemes
url: https://passlib.readthedocs.io
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-77ff7f77-e512-4511-910b-52730ea79543
location_href: 00009359-python-passlib/python-passlib-1.7.4-1.src.rpm
checksum_type: sha256
description:
  Passlib is a password hashing library for Python 2 & 3, which provides
  cross-platform implementations of over 30 password hashing algorithms, as well
  as a framework for managing existing password hashes. It's designed to be useful
  for a wide range of tasks, from verifying a hash found in /etc/shadow, to
  providing full-strength password hashing for multi-user applications.

  * See the `documentation <https://passlib.readthedocs.io>`_
    for details, installation instructions, and examples.

  * See the `homepage <https://foss.heptapod.net/python-libs/passlib/wikis/home>`_
    for the latest news and more information.

  * See the `changelog <https://passlib.readthedocs.io/en/stable/history>`_
    for a description of what's new in Passlib.

  All releases are signed with the gpg key
  `4D8592DF4CE1ED31 <http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x4D8592DF4CE1ED31>`_.


pkgId: 026726918c5221c0af9e075a47603d9765e2e6b65da2b6ead5b1cfd63427e069
name: python-pastel
arch: src
version: 0.2.1
epoch: 0
release: 1
summary: Bring colors to your terminal.
url: https://github.com/sdispater/pastel
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8c439ecc-138c-46e6-af35-7ae8c021e585
location_href: 00004503-python-pastel/python-pastel-0.2.1-1.src.rpm
checksum_type: sha256
description:
  * Use predefined styles or add you own.
  * Disable colors all together by calling ``with_colors(False)``.
  * Automatically disables colors if the output is not a TTY.
  * Used in `cleo <https://github.com/sdispater/cleo>`_.
  * Supports Python **2.7+**, **3.5+** and **PyPy**.


pkgId: 6d6b323e077e3cc16c1265f061f13a8754fdc4f293e89770b35c21ecdf986c25
name: python-patch-ng
arch: src
version: 1.17.4
epoch: 0
release: 1
summary: Library to parse and apply unified diffs.
url: https://github.com/conan-io/python-patch
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b71aca46-982a-4ad4-b3d9-98e9f4f6ab1a
location_href: 00004504-python-patch-ng/python-patch-ng-1.17.4-1.src.rpm
checksum_type: sha256
description:
  [![Build Status Travis CI](https://travis-ci.org/conan-io/python-patch-ng.svg?branch=master)](https://travis-ci.org/conan-io/python-patch-ng)
  [![Build status Appveyor](https://ci.appveyor.com/api/projects/status/i4r6lf62slvx82db?svg=true)](https://ci.appveyor.com/project/ConanCIintegration/python-patch-ng)
  [![PyPI](https://img.shields.io/pypi/v/patch-ng)](https://pypi.python.org/pypi/patch-ng)







  This project is a fork from the original [python-patch](https://github.com/techtonik/python-patch) project.

  As any other project, bugs are common during the development process, the combination of issues + pull requests are
  able to keep the constant improvement of a project. However, both community and author need to be aligned. When users,
  developers, the community, needs a fix which are important for their projects, but there is no answer from the author,
  or the time for response is not enough, then the most plausible way is forking and continuing a parallel development.

  That's way we forked the original and accepted most of PRs waiting for review since jun/2019 (5 months from now).



   * Python 2 and 3 compatible
   * Automatic correction of
     * Linefeeds according to patched file
     * Diffs broken by stripping trailing whitespace
     * a/ and b/ prefixes
   * Single file, which is a command line tool and a library
   * No dependencies outside Python stdlib
   * Patch format detection (SVN, HG, GIT)
   * Nice diffstat histogram
   * Linux / Windows / OS X
   * Test coverage

  Things that don't work out of the box:

   * File renaming, creation and removal
   * Directory tree operations
   * Version control specific properties
   * Non-unified diff formats




  Download **patch_ng.py** and run it with Python. It is a self-contained
  module without external dependencies.

      patch_ng.py diff.patch

  You can also run the .zip file.

      python patch-ng-1.17.zip diff.patch



  **patch_ng.py** is self sufficient. You can copy it into your repository
  and use it from here. This setup will always be repeatable. But if
  you need to add `patch` module as a dependency, make sure to use strict
  specifiers to avoid hitting an API break when version 2 is released:

      pip install "patch-ng"




  * [CHANGES](doc/CHANGES.md)
  * [LICENSE: MIT](LICENSE)
  * [CREDITS](doc/CREDITS)


pkgId: a6a2e51bf10387eb682765475ce615149d29c3afefa96f17d07369c73a2db181
name: python-pathlib
arch: src
version: 1.0.1
epoch: 0
release: 1
summary: Object-oriented filesystem paths
url: https://pathlib.readthedocs.org/
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-41b12880-25da-4984-b0ba-31b112993c92
location_href: 00009369-python-pathlib/python-pathlib-1.0.1-1.src.rpm
checksum_type: sha256
description:
  pathlib offers a set of classes to handle filesystem paths.  It offers the
  following advantages over using string objects:
  * No more cumbersome use of os and os.path functions.  Everything can be
    done easily through operators, attribute accesses, and method calls.
  * Embodies the semantics of different path types.  For example, comparing
    Windows paths ignores casing.
  * Well-defined semantics, eliminating any warts or ambiguities (forward vs.
    backward slashes, etc.).


pkgId: a157a0e781ebd2312efd83e124ad005423228c7f9a8400aab1b5588b506b8de0
name: python-pathspec
arch: src
version: 0.11.1
epoch: 0
release: 1
summary: Utility library for gitignore style pattern matching of file paths.
url: https://pypi.org/project/pathspec/
rpm_license: Mozilla Public License 2.0 (MPL 2.0)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-412c5de8-833f-47a6-8826-1617fba2e96b
location_href: 00009010-python-pathspec/python-pathspec-0.11.1-1.src.rpm
checksum_type: sha256
description:
  *pathspec* is a utility library for pattern matching of file paths. So
  far this only includes Git's wildmatch pattern matching which itself is
  derived from Rsync's wildmatch. Git uses wildmatch for its `gitignore`_
  files.


pkgId: 1a907d491a5c52c45b989aa5cf6ac52dea2ac6c7e4ca3b7cfabcf0f5213245eb
name: python-pathvalidate
arch: src
version: 2.5.2
epoch: 0
release: 1
summary: pathvalidate is a Python library to sanitize/validate a string such as filenames/file-paths/etc.
url: https://github.com/thombashi/pathvalidate
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-977ba61e-fa6f-45d5-8805-42b12a2949b2
location_href: 00010183-python-pathvalidate/python-pathvalidate-2.5.2-1.src.rpm
checksum_type: sha256
description:
  `pathvalidate <https://github.com/thombashi/pathvalidate>`__ is a Python library to sanitize/validate a string such as filenames/file-paths/etc.


pkgId: 81ac0ff23f7a034a10033f9675f70eb9f0ec547bf2638a9bcf598108e91a3640
name: python-pathy
arch: src
version: 0.10.1
epoch: 0
release: 1
summary: pathlib.Path subclasses for local and cloud bucket storage
url: https://github.com/justindujardin/pathy
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6d927cbb-8d86-4d4a-8d06-282996cf864c
location_href: 00009406-python-pathy/python-pathy-0.10.1-1.src.rpm
checksum_type: sha256
description:
  [![Build](https://github.com/justindujardin/pathy/actions/workflows/python-package.yml/badge.svg)](https://github.com/justindujardin/pathy/actions/workflows/python-package.yml)
  [![codecov](https://codecov.io/gh/justindujardin/pathy/branch/master/graph/badge.svg)](https://codecov.io/gh/justindujardin/pathy)
  [![Pypi version](https://badgen.net/pypi/v/pathy)](https://pypi.org/project/pathy/)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)

  Pathy is a python package (_with type annotations_) for working with Cloud Bucket storage providers using a pathlib interface. It provides an easy-to-use API bundled with a CLI app for basic file operations between local files and remote buckets. It enables a smooth developer experience by letting developers work against the local file system during development and only switch over to live APIs for deployment. It also makes converting bucket blobs into local files a snap with optional local file caching.



  You can install `pathy` from pip:

  ```bash
  pip install pathy
  ```

  The package exports the `Pathy` class and utilities for configuring the bucket storage provider to use.

  ```python
  from pathy import Pathy, use_fs

  use_fs()

  Pathy("gs://my_bucket").mkdir(exist_ok=True)

  greeting = Pathy(f"gs://my_bucket/greeting.txt")

  assert not greeting.exists()

  greeting.write_text("Hello World!")

  assert greeting.exists()

  greeting.unlink()

  assert not greeting.exists()
  ```



  The table below details the supported cloud provider APIs.

  | Cloud Service        | Support |       Install Extras       |
  | :------------------- | :-----: | :------------------------: |
  | Google Cloud Storage |   ✅    |  `pip install pathy[gcs]`  |
  | Amazon S3            |   ✅    |  `pip install pathy[s3]`   |
  | Azure                |   ✅    | `pip install pathy[azure]` |



  Google recommends using a JSON credentials file, which you can specify by path:

  ```python
  from google.oauth2 import service_account
  from pathy import set_client_params

  credentials = service_account.Credentials.from_service_account_file("./my-creds.json")
  set_client_params("gs", credentials=credentials)
  ```



  S3 uses a JSON credentials file, which you can specify by path:

  ```python
  from pathy import set_client_params

  set_client_params("s3", key_id="YOUR_ACCESS_KEY_ID", key_secret="YOUR_ACCESS_SECRET")
  ```



  Azure blob storage can be passed a `connection_string`:

  ```python
  from pathy import set_client_params

  set_client_params("azure", connection_string="YOUR_CONNECTION_STRING")
  ```

  or a `BlobServiceClient` instance:

  ```python
  from azure.storage.blob import BlobServiceClient
  from pathy import set_client_params

  service: BlobServiceClient = BlobServiceClient.from_connection_string(
      "YOUR_CONNECTION_STRING"
  )
  set_client_params("azure", service=service)
  ```



  Before Pathy reaches v1.0 the project is not guaranteed to have a consistent API, which means that types and classes may move around or be removed. That said, we try to be predictable when it comes to breaking changes, so the project uses semantic versioning to help users avoid breakage.

  Specifically, new releases increase the `patch` semver component for new features and fixes, and the `minor` component when there are breaking changes. If you don't know much about semver strings, they're usually formatted `{major}.{minor}.{patch}` so increasing the `patch` component means incrementing the last number.

  Consider a few examples:

  | From Version | To Version | Changes are Breaking |
  | :----------: | :--------: | :------------------: |
  |    0.2.0     |   0.2.1    |          No          |
  |    0.3.2     |   0.3.6    |          No          |
  |    0.3.1     |   0.3.17   |          No          |
  |    0.2.2     |   0.3.0    |         Yes          |

  If you are concerned about breaking changes, you can pin the version in your requirements so that it does not go beyond the current semver `minor` component, for example if the current version was `0.1.37`:

  ```
  pathy>=0.1.37,<0.2.0
  ```



  <!-- NOTE: The below code is auto-generated. Update source files to change API documentation. -->
  <!-- AUTO_DOCZ_START -->



  ```python (doc)
  Pathy(self, args, kwargs)
  ```

  Subclass of `pathlib.Path` that works with bucket APIs.



  ```python (doc)
  Pathy.exists(self) -> bool
  ```

  Returns True if the path points to an existing bucket, blob, or prefix.



  ```python (doc)
  Pathy.fluid(
      path_candidate: Union[str, Pathy, BasePath],
  ) -> Union[Pathy, BasePath]
  ```

  Infer either a Pathy or pathlib.Path from an input path or string.

  The returned type is a union of the potential `FluidPath` types and will
  type-check correctly against the minimum overlapping APIs of all the input
  types.

  If you need to use specific implementation details of a type, "narrow" the
  return of this function to the desired type, e.g.

  ```python
  from pathy import FluidPath, Pathy

  fluid_path: FluidPath = Pathy.fluid("gs://my_bucket/foo.txt")

  assert isinstance(fluid_path, Pathy), "must be Pathy"

  assert fluid_path.prefix == "foo.txt/"
  ```



  ```python (doc)
  Pathy.from_bucket(bucket_name: str, scheme: str = 'gs') -> 'Pathy'
  ```

  Initialize a Pathy from a bucket name. This helper adds a trailing slash and
  the appropriate prefix.

  ```python
  from pathy import Pathy

  assert str(Pathy.from_bucket("one")) == "gs://one/"
  assert str(Pathy.from_bucket("two")) == "gs://two/"
  ```



  ```python (doc)
  Pathy.glob(
      self: 'Pathy',
      pattern: str,
  ) -> Generator[Pathy, NoneType, NoneType]
  ```

  Perform a glob match relative to this Pathy instance, yielding all matched
  blobs.



  ```python (doc)
  Pathy.is_dir(self: 'Pathy') -> bool
  ```

  Determine if the path points to a bucket or a prefix of a given blob
  in the bucket.

  Returns True if the path points to a bucket or a blob prefix.
  Returns False if it points to a blob or the path doesn't exist.



  ```python (doc)
  Pathy.is_file(self: 'Pathy') -> bool
  ```

  Determine if the path points to a blob in the bucket.

  Returns True if the path points to a blob.
  Returns False if it points to a bucket or blob prefix, or if the path doesn’t
  exist.



  ```python (doc)
  Pathy.iterdir(
      self: 'Pathy',
  ) -> Generator[Pathy, NoneType, NoneType]
  ```

  Iterate over the blobs found in the given bucket or blob prefix path.



  ```python (doc)
  Pathy.ls(self: 'Pathy') -> Generator[BlobStat, NoneType, NoneType]
  ```

  List blob names with stat information under the given path.

  This is considerably faster than using iterdir if you also need
  the stat information for the enumerated blobs.

  Yields BlobStat objects for each found blob.



  ```python (doc)
  Pathy.mkdir(
      self,
      mode: int = 511,
      parents: bool = False,
      exist_ok: bool = False,
  ) -> None
  ```

  Create a bucket from the given path. Since bucket APIs only have implicit
  folder structures (determined by the existence of a blob with an overlapping
  prefix) this does nothing other than create buckets.

  If parents is False, the bucket will only be created if the path points to
  exactly the bucket and nothing else. If parents is true the bucket will be
  created even if the path points to a specific blob.

  The mode param is ignored.

  Raises FileExistsError if exist_ok is false and the bucket already exists.



  ```python (doc)
  Pathy.open(
      self: 'Pathy',
      mode: str = 'r',
      buffering: int = 8192,
      encoding: Optional[str] = None,
      errors: Optional[str] = None,
      newline: Optional[str] = None,
  ) -> IO[Any]
  ```

  Open the given blob for streaming. This delegates to the `smart_open`
  library that handles large file streaming for a number of bucket API
  providers.



  ```python (doc)
  Pathy.owner(self: 'Pathy') -> Optional[str]
  ```

  Returns the name of the user that owns the bucket or blob
  this path points to. Returns None if the owner is unknown or
  not supported by the bucket API provider.



  ```python (doc)
  Pathy.rename(self: 'Pathy', target: Union[str, pathlib.PurePath]) -> 'Pathy'
  ```

  Rename this path to the given target.

  If the target exists and is a file, it will be replaced silently if the user
  has permission.

  If path is a blob prefix, it will replace all the blobs with the same prefix
  to match the target prefix.



  ```python (doc)
  Pathy.replace(self: 'Pathy', target: Union[str, pathlib.PurePath]) -> 'Pathy'
  ```

  Renames this path to the given target.

  If target points to an existing path, it will be replaced.



  ```python (doc)
  Pathy.resolve(self, strict: bool = False) -> 'Pathy'
  ```

  Resolve the given path to remove any relative path specifiers.

  ```python
  from pathy import Pathy

  path = Pathy("gs://my_bucket/folder/../blob")
  assert path.resolve() == Pathy("gs://my_bucket/blob")
  ```



  ```python (doc)
  Pathy.rglob(
      self: 'Pathy',
      pattern: str,
  ) -> Generator[Pathy, NoneType, NoneType]
  ```

  Perform a recursive glob match relative to this Pathy instance, yielding
  all matched blobs. Imagine adding "\*\*/" before a call to glob.



  ```python (doc)
  Pathy.rmdir(self: 'Pathy') -> None
  ```

  Removes this bucket or blob prefix. It must be empty.



  ```python (doc)
  Pathy.samefile(
      self: 'Pathy',
      other_path: Union[str, bytes, int, pathlib.Path],
  ) -> bool
  ```

  Determine if this path points to the same location as other_path.



  ```python (doc)
  Pathy.stat(self: 'Pathy') -> pathy.BlobStat
  ```

  Returns information about this bucket path.



  ```python (doc)
  Pathy.to_local(
      blob_path: Union[Pathy, str],
      recurse: bool = True,
  ) -> pathlib.Path
  ```

  Download and cache either a blob or a set of blobs matching a prefix.

  The cache is sensitive to the file updated time, and downloads new blobs
  as their updated timestamps change.



  ```python (doc)
  Pathy.touch(self: 'Pathy', mode: int = 438, exist_ok: bool = True) -> None
  ```

  Create a blob at this path.

  If the blob already exists, the function succeeds if exist_ok is true
  (and its modification time is updated to the current time), otherwise
  FileExistsError is raised.



  ```python (doc)
  BlobStat(
      self,
      name: str,
      size: Optional[int],
      last_modified: Optional[int],
  ) -> None
  ```

  Stat for a bucket item



  ```python (doc)
  use_fs(
      root: Optional[str, pathlib.Path, bool] = None,
  ) -> Optional[pathy.BucketClientFS]
  ```

  Use a path in the local file-system to store blobs and buckets.

  This is useful for development and testing situations, and for embedded
  applications.



  ```python (doc)
  get_fs_client() -> Optional[pathy.BucketClientFS]
  ```

  Get the file-system client (or None)



  ```python (doc)
  use_fs_cache(
      root: Optional[str, pathlib.Path, bool] = None,
  ) -> Optional[pathlib.Path]
  ```

  Use a path in the local file-system to cache blobs and buckets.

  This is useful for when you want to avoid fetching large blobs multiple
  times, or need to pass a local file path to a third-party library.



  ```python (doc)
  get_fs_cache() -> Optional[pathlib.Path]
  ```

  Get the folder that holds file-system cached blobs and timestamps.



  ```python (doc)
  set_client_params(scheme: str, kwargs: Any) -> None
  ```

  Specify args to pass when instantiating a service-specific Client
  object. This allows for passing credentials in whatever way your underlying
  client library prefers.



  Pathy command line interface. (v0.5.2)

  **Usage**:

  ```console
  $ [OPTIONS] COMMAND [ARGS]...
  ```

  **Options**:

  - `--install-completion`: Install completion for the current shell.
  - `--show-completion`: Show completion for the current shell, to copy it or customize the installation.
  - `--help`: Show this message and exit.

  **Commands**:

  - `cp`: Copy a blob or folder of blobs from one...
  - `ls`: List the blobs that exist at a given...
  - `mv`: Move a blob or folder of blobs from one path...
  - `rm`: Remove a blob or folder of blobs from a given...



  Copy a blob or folder of blobs from one bucket to another.

  **Usage**:

  ```console
  $ cp [OPTIONS] FROM_LOCATION TO_LOCATION
  ```

  **Arguments**:

  - `FROM_LOCATION`: [required]
  - `TO_LOCATION`: [required]

  **Options**:

  - `--help`: Show this message and exit.



  List the blobs that exist at a given location.

  **Usage**:

  ```console
  $ ls [OPTIONS] LOCATION
  ```

  **Arguments**:

  - `LOCATION`: [required]

  **Options**:

  - `-l, --long`: Print long style entries with updated time and size shown. [default: False]
  - `--help`: Show this message and exit.



  Move a blob or folder of blobs from one path to another.

  **Usage**:

  ```console
  $ mv [OPTIONS] FROM_LOCATION TO_LOCATION
  ```

  **Arguments**:

  - `FROM_LOCATION`: [required]
  - `TO_LOCATION`: [required]

  **Options**:

  - `--help`: Show this message and exit.



  Remove a blob or folder of blobs from a given location.

  **Usage**:

  ```console
  $ rm [OPTIONS] LOCATION
  ```

  **Arguments**:

  - `LOCATION`: [required]

  **Options**:

  - `-r, --recursive`: Recursively remove files and folders. [default: False]
  - `-v, --verbose`: Print removed files and folders. [default: False]
  - `--help`: Show this message and exit.

  <!-- AUTO_DOCZ_END -->



  Pathy is originally based on the [S3Path](https://github.com/liormizr/s3path) project, which provides a Path interface for S3 buckets.


pkgId: 953ad9c382cd8a85c65b20f27897ea6d7b68c09f5c5d39ec2451479b7a93565f
name: python-patiencediff
arch: src
version: 0.2.13
epoch: 0
release: 1
summary: Python implementation of the patiencediff algorithm
url: https://pypi.org/project/patiencediff/
rpm_license: GNU GPLv2 or later
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-432ace9d-07ab-4401-bdc3-48effe4c797c
location_href: 00004506-python-patiencediff/python-patiencediff-0.2.13-1.src.rpm
checksum_type: sha256
description:
  To invoke patiencediff from the command-line::
      python -m patiencediff file_a file_b
  Or from Python:
       >>> import patiencediff


pkgId: 8d02624a0eb2a0b669b14898466f9a607c2eabb544c91dc0954e166dea0a43ce
name: python-patiencediff-debuginfo
arch: x86_64
version: 0.2.13
epoch: 0
release: 1
summary: Debug information for package python-patiencediff
url: https://pypi.org/project/patiencediff/
rpm_license: GNU GPLv2 or later
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-432ace9d-07ab-4401-bdc3-48effe4c797c
rpm_sourcerpm: python-patiencediff-0.2.13-1.src.rpm
location_href: 00004506-python-patiencediff/python-patiencediff-debuginfo-0.2.13-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-patiencediff.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 27694869db31e61d8745addb8ae5f59c36e5396d3ae5eeeb8e97059144b62c5d
name: python-patiencediff-debugsource
arch: x86_64
version: 0.2.13
epoch: 0
release: 1
summary: Debug sources for package python-patiencediff
url: https://pypi.org/project/patiencediff/
rpm_license: GNU GPLv2 or later
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-432ace9d-07ab-4401-bdc3-48effe4c797c
rpm_sourcerpm: python-patiencediff-0.2.13-1.src.rpm
location_href: 00004506-python-patiencediff/python-patiencediff-debugsource-0.2.13-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-patiencediff.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 594c1579364dd00e6641c2e9b98c23fcb71bcb6d9758526ebfd8630c5776fbe4
name: python-patool
arch: src
version: 1.12
epoch: 0
release: 1
summary: portable archive file manager
url: http://wummel.github.io/patool/
rpm_license: GPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7acc0291-1d84-4124-ad30-b56327458384
location_href: 00004507-python-patool/python-patool-1.12-1.src.rpm
checksum_type: sha256
description:
  Various archive formats can be created, extracted, tested, listed,
  searched, compared and repacked by patool. The advantage of patool
  is its simplicity in handling archive files without having to remember
  a myriad of programs and options.

  The archive format is determined by the file(1) program and as a
  fallback by the archive file extension.

  patool supports 7z (.7z), ACE (.ace), ADF (.adf), ALZIP (.alz), APE (.ape),
  AR (.a), ARC (.arc), ARJ (.arj), BZIP2 (.bz2),
  CAB (.cab), COMPRESS (.Z), CPIO (.cpio),
  DEB (.deb), DMS (.dms), FLAC (.flac), GZIP (.gz), ISO (.iso), LRZIP (.lrz),
  LZH (.lha, .lzh), LZIP (.lz), LZMA (.lzma), LZOP (.lzo), RPM (.rpm),
  RAR (.rar), RZIP (.rz), SHN (.shn), TAR (.tar), XZ (.xz), ZIP (.zip, .jar),
  ZOO (.zoo) and ZPAQ (.zpaq) formats.
  It relies on helper applications to handle those archive formats
  (for example bzip2 for BZIP2 archives).

  The archive formats TAR, ZIP, BZIP2 and GZIP
  are supported natively and do not require helper applications to be
  installed.


pkgId: 14538f6f00bbb8f51134c448fcee1836855eca9b404e56bec22eeee7d6397838
name: python-patsy
arch: src
version: 0.5.3
epoch: 0
release: 1
summary: A Python package for describing statistical models and for building design matrices.
url: https://github.com/pydata/patsy
rpm_license: 2-clause BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-aad56325-0a53-444c-ab22-639ff8128d0e
location_href: 00004508-python-patsy/python-patsy-0.5.3-1.src.rpm
checksum_type: sha256
description:
  Patsy is a Python library for describing statistical models
  (especially linear models, or models that have a linear component) and
  building design matrices. Patsy brings the convenience of [R](http://www.r-project.org/) "formulas" to Python.
  [![PyPI - Version](https://img.shields.io/pypi/v/patsy.svg)](https://pypi.org/project/spec-classes/)
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/patsy.svg)
  ![https://patsy.readthedocs.io/](https://img.shields.io/badge/docs-read%20now-blue.svg)
  ![PyPI - Status](https://img.shields.io/pypi/status/patsy.svg)
  ![https://travis-ci.org/pydata/patsy](https://travis-ci.org/pydata/patsy.png?branch=master)
  ![https://coveralls.io/r/pydata/patsy?branch=master](https://coveralls.io/repos/pydata/patsy/badge.png?branch=master)
  ![https://doi.org/10.5281/zenodo.592075](https://zenodo.org/badge/DOI/10.5281/zenodo.592075.svg)
  - **Documentation:** <https://patsy.readthedocs.io/>
  - **Downloads:** <http://pypi.python.org/pypi/patsy/>
  - **Code and issues:** <https://github.com/pydata/patsy>
  - **Mailing list:** <pydata@googlegroups.com> (<http://groups.google.com/group/pydata>)

    * Python (2.6, 2.7, or 3.3+)
    * six
    * numpy
    * Optional:
      * pytest/pytest-cov: needed to run tests
      * scipy: needed for spline-related functions like ``bs``

    ``pip install patsy`` (or, for traditionalists: ``python setup.py install``)

  2-clause BSD, see LICENSE.txt for details.


pkgId: f8b8934e38a0b63c545526566d2b27d59f0419f1c84205c00e6b274e76b6d711
name: python-pbkdf2
arch: src
version: 1.3
epoch: 0
release: 1
summary: PKCS#5 v2.0 PBKDF2 Module
url: http://www.dlitz.net/software/python-pbkdf2/
rpm_license: UNKNOWN
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-caa1953b-6cbe-41a7-9075-e4852d730272
location_href: 00011061-python-pbkdf2/python-pbkdf2-1.3-1.src.rpm
checksum_type: sha256
description:
  This module implements the password-based key derivation function, PBKDF2, specified in RSA PKCS#5 v2.0.


pkgId: 11dd09f972d83462e66c8881730c7127476d0b955839afc503fd1749fdc08fd8
name: python-pcapy
arch: src
version: 0.11.4
epoch: 0
release: 1
summary: Python pcap extension
url: https://github.com/CoreSecurity/pcapy
rpm_license: Apache modified
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-dcaef2fc-86d2-415b-ad32-1dcdc26d6171
location_href: 00004510-python-pcapy/python-pcapy-0.11.4-1.src.rpm
checksum_type: sha256
description:
  Pcapy is a Python extension module that enables software written in
  Python to access the routines from the pcap packet capture library.
  From libpcap's documentation: "Libpcap is a system-independent
  interface for user-level packet capture. Libpcap provides a portable
  framework for low-level network monitoring. Applications include
  network statistics collection, security monitoring, network debugging,
  etc."


pkgId: 3921e10288079f9384f1a2bc249865ef105077c8f022629aae49b59ade07c9cd
name: python-pcodedmp
arch: src
version: 1.2.6
epoch: 0
release: 1
summary: A VBA p-code disassembler
url: https://github.com/bontchev/pcodedmp
rpm_license: GPL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a2a515b2-cff2-4c61-a82f-9c80ec36927d
location_href: 00007855-python-pcodedmp/python-pcodedmp-1.2.6-1.src.rpm
checksum_type: sha256
description:
  Module streams:
  Macros/VBA/ThisDocument - 1517 bytes
  Line #0:
          FuncDefn (Private Sub Document_Open())
  Line #1:
          LitStr 0x001D "This could have been a virus!"
          Ld vbOKOnly
          Ld vbInformation
          Add
          LitStr 0x0006 "Virus!"
          ArgsCall MsgBox 0x0003
  Line #2:
          LitStr 0x0008 "calc.exe"
          Paren
          ArgsCall Shell 0x0001
  Line #3:
          EndSub
  ```
  For reference, it is the result of compiling the following VBA code:
  ```vba
  Private Sub Document_Open()
      MsgBox "This could have been a virus!", vbOKOnly + vbInformation, "Virus!"
      Shell("calc.exe")
  End Sub
  ```

  - Office 2016 64-bit only: When disassembling variables declared as being of custom type (e.g., `Dim SomeVar As SomeType`), the type (`As SomeType`) is not disassembled.
  - Office 2016 64-bit only: The `Private` property of `Sub`, `Function` and `Property` declarations is not disassembled.
  - Office 2016 64-bit only: The `Declare` part of external function declarations (e.g., `Private Declare PtrSafe Function SomeFunc Lib "SomeLib" Alias "SomeName" () As Long`) is not disassembled.
  - Office 2000 and higher: The type of a subroutine or function argument of type `ParamArray` is not disassembled correctly. For instance, `Sub Foo (ParamArray arg())` will be disassembled as `Sub Foo (arg)`.
  - All versions of Office: The `Alias "SomeName"` part of external function declarations (e.g., `Private Declare PtrSafe Function SomeFunc Lib "SomeLib" Alias "SomeName" () As Long`) is not disassembled.
  - All versions of Office: The `Public` property of custom type definitions (e.g., `Public Type SomeType`) is not disassembled.
  - All versions of Office: The custom type of a subroutine or function argument is not disassembled correctly and `CustomType` is used instead. For instance, `Sub Foo (arg As Bar)` will be disassembled as `Sub Foo (arg As CustomType)`.
  - If the output of the program is sent to a file, instead of to the console (either by using the `-o` option or by redirecting `stdout`), any non-ASCII strings (like module names, texsts used in the macros, etc.) might not be properly encoded.
  I do not have access to 64-bit Office 2016 and the few samples of documents, generated by this version of Office, that I have, have been insufficient for me to figure out where the corresponding information resides. I know where it resides in the other versions of Office, but it has been moved elsewhere in 64-bit Office 2016 and the old algorithms no longer work.

  - Implement support of VBA3 (Excel95).
  - While the script should support documents created by MacOffice, this has not been tested (and you know how well untested code usually works). This should be tested and any bugs related to it should be fixed.
  - I am not an experienced Python programmer and the code is ugly. Somebody more familiar with Python than me should probably rewrite the script and make it look better.

  Version 1.2.6:
  - Changed it not to require the `win_unicode_console` module when it is not available - e.g., when not running on a Windows machine or when running under the PyPy implementation of Python, thanks to [Philippe Lagadec](https://github.com/decalage2).
  Version 1.2.5:
  - Added a sanity check to avoid errors when parsing object declarations
  - The functions that produce output now have the output file (default is `stdout`) as a parameter, for better integration with other tools, thanks to [Philippe Lagadec](https://github.com/decalage2).
  Version 1.2.4:
  - Implemented support for module names with non-ASCII characters in their names. Thanks to [Philippe Lagadec](https://github.com/decalage2) for helping me with that.
  - Fixed a parsing error when disassembling object declarations.
  - Removed some unused variables.
  - Improved the documentation a bit.
  Version 1.2.3:
  - Fixed a few crashes and documented better some disassembly failures.
  - Converted the script into a package that can be installed with ``pip``. Use the command ``pip install pcodedmp``.
  Version 1.2.2:
  - Implemented handling of documents saved in Open XML format (which is the default format of Office 2007 and higher) - `.docm`, `.xlsm`, `.pptm`.
  Version 1.2.1:
  - Now runs under Python 3.x too.
  - Improved support of 64-bit Office documents.
  - Implemented support of some VBA7-specific features (`Friend`, `PtrSafe`, `LongPtr`).
  - Improved the disassembling of `Dim` declarations.
  Version 1.2.0:
  - Disassembling the various declarations (`New`, `Type`, `Dim`, `ReDim`, `Sub`, `Function`, `Property`).
  Version 1.1.0:
  - Storing the opcodes in a more efficient manner.
  - Implemented VBA7 support.
  - Implemented support for documents created by the 64-bit version of Office.
  Version 1.0.0:
  - Initial version.


pkgId: cf89fa86b23a1b43bf3d6ca872507d7a3af905865d4fd2c3b36a8eeefa09e1db
name: python-pdf2image
arch: src
version: 1.16.3
epoch: 0
release: 1
summary: A wrapper around the pdftoppm and pdftocairo command line tools to convert PDF to a PIL Image list.
url: https://github.com/Belval/pdf2image
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-57aa7785-c28f-4c93-a8c9-c700123d96e6
location_href: 00009967-python-pdf2image/python-pdf2image-1.16.3-1.src.rpm
checksum_type: sha256
description:
  [![CircleCI](https://circleci.com/gh/Belval/pdf2image/tree/master.svg?style=svg)](https://circleci.com/gh/Belval/pdf2image/tree/master) [![PyPI version](https://badge.fury.io/py/pdf2image.svg)](https://badge.fury.io/py/pdf2image) [![codecov](https://codecov.io/gh/Belval/pdf2image/branch/master/graph/badge.svg)](https://codecov.io/gh/Belval/pdf2image) [![Downloads](https://pepy.tech/badge/pdf2image/month)](https://pepy.tech/project/pdf2image) [![GitHub CI](https://github.com/Belval/pdf2image/actions/workflows/documentation.yml/badge.svg)](https://belval.github.io/pdf2image)

  A python (3.7+) module that wraps pdftoppm and pdftocairo to convert PDF to a PIL Image object



  `pip install pdf2image`



  Windows users will have to build or download poppler for Windows. I recommend [@oschwartz10612 version](https://github.com/oschwartz10612/poppler-windows/releases/) which is the most up-to-date. You will then have to add the `bin/` folder to [PATH](https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/) or use `poppler_path = r"C:\path\to\poppler-xx\bin" as an argument` in `convert_from_path`.



  Mac users will have to install [poppler](https://poppler.freedesktop.org/).

  Installing using [Brew](https://brew.sh/):

  ```
  brew install poppler
  ```



  Most distros ship with `pdftoppm` and `pdftocairo`. If they are not installed, refer to your package manager to install `poppler-utils`



  1. Install poppler: `conda install -c conda-forge poppler`
  2. Install pdf2image: `pip install pdf2image`



  `from pdf2image import convert_from_path, convert_from_bytes`

  ```py
  from pdf2image.exceptions import (
      PDFInfoNotInstalledError,
      PDFPageCountError,
      PDFSyntaxError
  )
  ```

  Then simply do:

  ```py
  images = convert_from_path('/home/belval/example.pdf')
  ```

  OR

  ```py
  images = convert_from_bytes(open('/home/belval/example.pdf', 'rb').read())
  ```

  OR better yet

  ```py
  import tempfile

  with tempfile.TemporaryDirectory() as path:
      images_from_path = convert_from_path('/home/belval/example.pdf', output_folder=path)
      
  ```

  `images` will be a list of PIL Image representing each page of the PDF document.

  Here are the definitions:

  `convert_from_path(pdf_path, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', jpegopt=None, thread_count=1, userpw=None, use_cropbox=False, strict=False, transparent=False, single_file=False, output_file=str(uuid.uuid4()), poppler_path=None, grayscale=False, size=None, paths_only=False, use_pdftocairo=False, timeout=600, hide_attributes=False)`

  `convert_from_bytes(pdf_file, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', jpegopt=None, thread_count=1, userpw=None, use_cropbox=False, strict=False, transparent=False, single_file=False, output_file=str(uuid.uuid4()), poppler_path=None, grayscale=False, size=None, paths_only=False, use_pdftocairo=False, timeout=600, hide_attributes=False)`



  - Allow users to hide attributes when using pdftoppm with `hide_attributes` (Thank you @StaticRocket)
  - Fix console opening on Windows (Thank you @OhMyAgnes!)
  - Add `timeout` parameter which raises `PDFPopplerTimeoutError` after the given number of seconds.
  - Add `use_pdftocairo` parameter which forces `pdf2image` to use `pdftocairo`. Should improve performance.
  - Fixed a bug where using `pdf2image` with multiple threads (but not multiple processes) would cause and exception
  - `jpegopt` parameter allows for tuning of the output JPEG when using `fmt="jpeg"` (`-jpegopt` in pdftoppm CLI) (Thank you @abieler)
  - `pdfinfo_from_path` and `pdfinfo_from_bytes` which expose the output of the pdfinfo CLI
  - `paths_only` parameter will return image paths instead of Image objects, to prevent OOM when converting a big PDF
  - `size` parameter allows you to define the shape of the resulting images (`-scale-to` in pdftoppm CLI)
      - `size=400` will fit the image to a 400x400 box, preserving aspect ratio
      - `size=(400, None)` will make the image 400 pixels wide, preserving aspect ratio
      - `size=(500, 500)` will resize the image to 500x500 pixels, not preserving aspect ratio
  - `grayscale` parameter allows you to convert images to grayscale (`-gray` in pdftoppm CLI)
  - `single_file` parameter allows you to convert the first PDF page only, without adding digits at the end of the `output_file`
  - Allow the user to specify poppler's installation path with `poppler_path`



  - Using an output folder is significantly faster if you are using an SSD. Otherwise i/o usually becomes the bottleneck.
  - Using multiple threads can give you some gains but avoid more than 4 as this will cause i/o bottleneck (even on my NVMe SSD!).
  - If i/o is your bottleneck, using the JPEG format can lead to significant gains.
  - PNG format is pretty slow, this is because of the compression.
  - If you want to know the best settings (most settings will be fine anyway) you can clone the project and run `python tests.py` to get timings.



  - A relatively big PDF will use up all your memory and cause the process to be killed (unless you use an output folder)
  - Sometimes fail read pdf signed using DocuSign, [Solution for DocuSign issue.](docs/installation.md)


pkgId: 68213877aaf202c94d6bc1404ad2febcdca42b0093c1bdd346116d35962dcccc
name: python-pdfkit
arch: src
version: 1.0.0
epoch: 0
release: 1
summary: Wkhtmltopdf python wrapper to convert html to pdf using the webkit rendering engine and qt
url: https://pypi.org/project/pdfkit/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8fb005cd-55e7-4d87-a5f7-09748a998da9
location_href: 00004513-python-pdfkit/python-pdfkit-1.0.0-1.src.rpm
checksum_type: sha256
description:
  Python 2 and 3 wrapper for wkhtmltopdf utility to convert HTML to PDF using Webkit.
  This is adapted version of `ruby PDFKit <https://github.com/pdfkit/pdfkit>`_ library, so big thanks to them!


pkgId: 4fe3912bad4594349000ee826de119471db943466746ad6058efe3f99b5af835
name: python-pdfminer
arch: src
version: 20191125
epoch: 0
release: 1
summary: PDF parser and analyzer
url: http://github.com/euske/pdfminer
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f12a6957-310b-494e-bceb-a258db23894c
location_href: 00004514-python-pdfminer/python-pdfminer-20191125-1.src.rpm
checksum_type: sha256
description:
  PDFMiner is a text extraction tool for PDF documents.

  [![Build Status](https://travis-ci.org/euske/pdfminer.svg?branch=master)](https://travis-ci.org/euske/pdfminer)
  [![PyPI](https://img.shields.io/pypi/v/pdfminer)](https://pypi.org/project/pdfminer/)

  **Warning**: Starting from version 20191010, PDFMiner supports **Python 3 only**.
  For Python 2 support, check out
  <a href="https://github.com/pdfminer/pdfminer.six">pdfminer.six</a>.



    * Pure Python (3.6 or above).
    * Supports PDF-1.7. (well, almost)
    * Obtains the exact location of text as well as other layout information (fonts, etc.).
    * Performs automatic layout analysis.
    * Can convert PDF into other formats (HTML/XML).
    * Can extract an outline (TOC).
    * Can extract tagged contents.
    * Supports basic encryption (RC4 and AES).
    * Supports various font types (Type1, TrueType, Type3, and CID).
    * Supports CJK languages and vertical writing scripts.
    * Has an extensible PDF parser that can be used for other purposes.




    1. `> pip install pdfminer`
    1. `> pdf2txt.py samples/simple1.pdf`






  pdf2txt.py extracts all the texts that are rendered programmatically.
  It also extracts the corresponding locations, font names, font sizes,
  writing direction (horizontal or vertical) for each text segment.  It
  does not recognize text in images. A password needs to be provided for
  restricted PDF documents.

      > pdf2txt.py [-P password] [-o output] [-t text|html|xml|tag]
                   [-O output_dir] [-c encoding] [-s scale] [-R rotation]
                   [-Y normal|loose|exact] [-p pagenos] [-m maxpages]
                   [-S] [-C] [-n] [-A] [-V]
                   [-M char_margin] [-L line_margin] [-W word_margin]
                   [-F boxes_flow] [-d]
                   input.pdf ...

    * `-P password` : PDF password.
    * `-o output` : Output file name.
    * `-t text|html|xml|tag` : Output type. (default: automatically inferred from the output file name.)
    * `-O output_dir` : Output directory for extracted images.
    * `-c encoding` : Output encoding. (default: utf-8)
    * `-s scale` : Output scale.
    * `-R rotation` : Rotates the page in degree.
    * `-Y normal|loose|exact` : Specifies the layout mode. (only for HTML output.)
    * `-p pagenos` : Processes certain pages only.
    * `-m maxpages` : Limits the number of maximum pages to process.
    * `-S` : Strips control characters.
    * `-C` : Disables resource caching.
    * `-n` : Disables layout analysis.
    * `-A` : Applies layout analysis for all texts including figures.
    * `-V` : Automatically detects vertical writing.
    * `-M char_margin` : Speficies the char margin.
    * `-W word_margin` : Speficies the word margin.
    * `-L line_margin` : Speficies the line margin.
    * `-F boxes_flow` : Speficies the box flow ratio.
    * `-d` : Turns on Debug output.



  dumppdf.py is used for debugging PDFs.
  It dumps all the internal contents in pseudo-XML format.

      > dumppdf.py [-P password] [-a] [-p pageid] [-i objid]
                   [-o output] [-r|-b|-t] [-T] [-O directory] [-d]
                   input.pdf ...

    * `-P password` : PDF password.
    * `-a` : Extracts all objects.
    * `-p pageid` : Extracts a Page object.
    * `-i objid` : Extracts a certain object.
    * `-o output` : Output file name.
    * `-r` : Raw mode. Dumps the raw compressed/encoded streams.
    * `-b` : Binary mode. Dumps the uncompressed/decoded streams.
    * `-t` : Text mode. Dumps the streams in text format.
    * `-T` : Tagged mode. Dumps the tagged contents.
    * `-O output_dir` : Output directory for extracted streams.



    * Replace STRICT variable with something better.
    * Improve the debugging functions.
    * Use logging module instead of sys.stderr.
    * Proper test cases.
    * PEP-8 and PEP-257 conformance.
    * Better documentation.
    * Crypto stream filter support.




    * <a href="http://pybrary.net/pyPdf/">pyPdf</a>
    * <a href="http://www.foolabs.com/xpdf/">xpdf</a>
    * <a href="http://pdfbox.apache.org/">pdfbox</a>
    * <a href="http://mupdf.com/">mupdf</a>


pkgId: d2413c08f444d817991131bee27f019f1819a57ae8b9d66611a7c8e0fae05272
name: python-pdfminer.six
arch: src
version: 20221105
epoch: 0
release: 1
summary: PDF parser and analyzer
url: https://github.com/pdfminer/pdfminer.six
rpm_license: MIT/X
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e07f1746-ced5-4c4b-be27-031b14b0581d
location_href: 00009865-python-pdfminer-six/python-pdfminer.six-20221105-1.src.rpm
checksum_type: sha256
description:
  [![Continuous integration](https://github.com/pdfminer/pdfminer.six/actions/workflows/actions.yml/badge.svg)](https://github.com/pdfminer/pdfminer.six/actions/workflows/actions.yml)
  [![PyPI version](https://img.shields.io/pypi/v/pdfminer.six.svg)](https://pypi.python.org/pypi/pdfminer.six/)
  [![gitter](https://badges.gitter.im/pdfminer-six/Lobby.svg)](https://gitter.im/pdfminer-six/Lobby?utm_source=badge&utm_medium)
  *We fathom PDF*
  Pdfminer.six is a community maintained fork of the original PDFMiner. It is a tool for extracting information from PDF
  documents. It focuses on getting and analyzing text data. Pdfminer.six extracts the text from a page directly from the
  sourcecode of the PDF. It can also be used to get the exact location, font or color of the text.
  It is built in a modular way such that each component of pdfminer.six can be replaced easily. You can implement your own
  interpreter or rendering device that uses the power of pdfminer.six for other purposes than text analysis.
  Check out the full documentation on
  [Read the Docs](https://pdfminersix.readthedocs.io).


pkgId: 930039bc692d47a520f4bd9bf93779e6e820181ba9aad9bd3b5107f5caf403ee
name: python-pdoc3
arch: src
version: 0.10.0
epoch: 0
release: 1
summary: Auto-generate API documentation for Python projects.
url: https://pdoc3.github.io/pdoc/
rpm_license: AGPL-3.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-dda483a9-f23c-490f-b5c2-66a46b245834
location_href: 00010702-python-pdoc3/python-pdoc3-0.10.0-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://img.shields.io/github/workflow/status/pdoc3/pdoc/CI?style=for-the-badge)](https://github.com/pdoc3/pdoc/actions)
  [![Code Coverage](https://img.shields.io/codecov/c/gh/pdoc3/pdoc.svg?style=for-the-badge)](https://codecov.io/gh/pdoc3/pdoc)
  [![pdoc3 on PyPI](https://img.shields.io/pypi/v/pdoc3.svg?color=blue&style=for-the-badge)](https://pypi.org/project/pdoc3)
  [![package downloads](https://img.shields.io/pypi/dm/pdoc3.svg?color=skyblue&style=for-the-badge)](https://pypi.org/project/pdoc3)
  [![GitHub Sponsors](https://img.shields.io/github/sponsors/kernc?color=pink&style=for-the-badge)](https://github.com/sponsors/kernc)
  Auto-generate API documentation for Python projects.
  [**Project website**](https://pdoc3.github.io/pdoc/)
  [Documentation]
  [Documentation]: https://pdoc3.github.io/pdoc/doc/pdoc/


pkgId: ebfff262ee65b54ecfa87568c6d8b3980d1f15c6264ca27156298a92d40ea505
name: python-pecan-notario
arch: src
version: 0.0.3
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/alfredodeza/pecan-notario
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-40413127-59e8-4d5f-8aec-86787de049d8
location_href: 00004518-python-pecan-notario/python-pecan-notario-0.0.3-1.src.rpm
checksum_type: sha256
description:
  JSON validation for Pecan with Notario (http://notario.cafepais.com).
  In its simplest form, you need to define a schema and decorate the
  controller method, like::
      schema = ('foo', True)
      @expose()
      @validate(schema)
      def some_controller(self, **kw):
          return dict()
  The above controller method, using a Notario schema, will require a ``foo``
  key and a ``True`` value otherwise it will (by default) set the HTTP response
  to a ``400`` (invalid request) and add the validation error to ``request.pecan['schema'].errors``.


pkgId: 2f56d1e16189cdd18821ca83b843757b4aee7b844e60e9117fbdb599001f8171
name: python-peewee
arch: src
version: 3.16.0
epoch: 0
release: 1
summary: a little orm
url: https://github.com/coleifer/peewee/
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0fdf0fbd-4c4e-41a0-bfcb-d9d172eea8b4
location_href: 00004519-python-peewee/python-peewee-3.16.0-1.src.rpm
checksum_type: sha256
description:
  Peewee is a simple and small ORM. It has few (but expressive) concepts, making it easy to learn and intuitive to use.
  * a small, expressive ORM
  * python 2.7+ and 3.4+
  * supports sqlite, mysql, postgresql and cockroachdb
  * tons of `extensions <http://docs.peewee-orm.com/en/latest/peewee/playhouse.html>`_
  New to peewee? These may help:
  * `Quickstart <http://docs.peewee-orm.com/en/latest/peewee/quickstart.html#quickstart>`_
  * `Example twitter app <http://docs.peewee-orm.com/en/latest/peewee/example.html>`_
  * `Using peewee interactively <http://docs.peewee-orm.com/en/latest/peewee/interactive.html>`_
  * `Models and fields <http://docs.peewee-orm.com/en/latest/peewee/models.html>`_
  * `Querying <http://docs.peewee-orm.com/en/latest/peewee/querying.html>`_
  * `Relationships and joins <http://docs.peewee-orm.com/en/latest/peewee/relationships.html>`_


pkgId: 0b13442f0a5946fb56d76604cd7b278bede9a303488fdfeba146501729c106d6
name: python-pefile
arch: src
version: 2023.2.7
epoch: 0
release: 1
summary: Python PE parsing module
url: https://github.com/erocarrera/pefile
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e406c2fd-96fc-4428-94af-d15350495498
location_href: 00004520-python-pefile/python-pefile-2023.2.7-1.src.rpm
checksum_type: sha256
description:
  pefile, Portable Executable reader module

  All the PE file basic structures are available with their default names as
  attributes of the instance returned.

  Processed elements such as the import table are made available with lowercase
  names, to differentiate them from the upper case basic structure names.

  pefile has been tested against many edge cases such as corrupted and malformed
  PEs as well as malware, which often attempts to abuse the format way beyond its
  standard use. To the best of my knowledge most of the abuse is handled
  gracefully.

  Copyright (c) 2005-2023 Ero Carrera <ero.carrera@gmail.com>


pkgId: 64db0e0e8707f88c89a52a1652250b498f80188dfa781952a84fb473bafd147b
name: python-pelican
arch: src
version: 4.8.0
epoch: 0
release: 1
summary: Static site generator supporting Markdown and reStructuredText
url: https://getpelican.com
rpm_license: AGPLv3
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-791d50ba-d217-474c-8063-4fd1d45fb308
location_href: 00004521-python-pelican/python-pelican-4.8.0-1.src.rpm
checksum_type: sha256
description:
  Pelican is a static site generator, written in Python_.
  * Compose content in Markdown_ or reStructuredText_ using your editor of choice
  * Simple command-line tool (re)generates HTML, CSS, and JS from your source content
  * Easy to interface with version control systems and web hooks
  * Completely static output is simple to host anywhere


pkgId: 5fc1d98c04535faf0e1da1d3abc0fcdee7044ef08a299da36cf88a2ee9ee9667
name: python-pem
arch: src
version: 21.2.0
epoch: 0
release: 1
summary: Easy PEM file parsing in Python.
url: https://pem.readthedocs.io/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f3b28022-5578-45df-97d7-ed01769336c4
location_href: 00010844-python-pem/python-pem-21.2.0-1.src.rpm
checksum_type: sha256
description:
  *pem* is an MIT_-licensed Python module for parsing and splitting of `PEM files`_, i.e. Base64-encoded DER keys and certificates.
  It runs on Python 2.7, and 3.5+, has no dependencies, and does not attempt to interpret the certificate data in any way.
  It’s born from the need to load keys, certificates, trust chains, and DH parameters from various certificate deployments: some servers (like Apache_) expect them to be a separate file, others (like nginx_) expect them concatenated to the server certificate and finally some (like HAProxy_) expect key, certificate, and chain to be in one file.
  With *pem*, your Python application can cope with all of those scenarios:
     >>> import pem
     >>> certs = pem.parse_file("chain.pem")
     >>> certs
     [<Certificate(PEM string with SHA-1 digest '...')>, <Certificate(PEM string with SHA-1 digest '...')>]
     >>> str(certs[0])
     '-----BEGIN CERTIFICATE-----\n...'
  Additionally to the vanilla parsing code, *pem* also contains helpers for Twisted_ that save a lot of boilerplate code.
  *pem* is available from `PyPI <https://pypi.org/project/pem/>`_, its documentation lives at `Read the Docs <https://pem.readthedocs.io/>`_, the code on `GitHub <https://github.com/hynek/pem>`_.


pkgId: 7bc602eedca18dc38114e39ee6ec2c9bfb6f3c69c44f4a6b43083a008bfd3962
name: python-pendulum
arch: src
version: 2.1.2
epoch: 0
release: 1
summary: Python datetimes made easy
url: https://pendulum.eustace.io
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-db037f22-58ee-4f6b-9dd5-b180a7a9a0b9
location_href: 00004522-python-pendulum/python-pendulum-2.1.2-1.src.rpm
checksum_type: sha256
description:
  Native ``datetime`` instances are enough for basic cases but when you face more complex use-cases
  they often show limitations and are not so intuitive to work with.
  ``Pendulum`` provides a cleaner and more easy to use API while still relying on the standard library.
  So it's still ``datetime`` but better.
  Unlike other datetime libraries for Python, Pendulum is a drop-in replacement
  for the standard ``datetime`` class (it inherits from it), so, basically, you can replace all your ``datetime``
  instances by ``DateTime`` instances in you code (exceptions exist for libraries that check
  the type of the objects by using the ``type`` function like ``sqlite3`` or ``PyMySQL`` for instance).
  It also removes the notion of naive datetimes: each ``Pendulum`` instance is timezone-aware
  and by default in ``UTC`` for ease of use.
  Pendulum also improves the standard ``timedelta`` class by providing more intuitive methods and properties.


pkgId: 70105c17a2397e17789f521681ff7aa8ad2e1e48a8b89ef70f112333240785e5
name: python-pep562
arch: src
version: 1.1
epoch: 0
release: 1
summary: Backport of PEP 562.
url: https://github.com/facelessuser/pep562
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-47d41725-ad96-46db-9764-3238c4a88de1
location_href: 00010148-python-pep562/python-pep562-1.1-1.src.rpm
checksum_type: sha256
description:
  [![Donate via PayPal][donate-image]][donate-link]
  [![Discord][discord-image]][discord-link]
  [![Build][github-ci-image]][github-ci-link]
  [![Coverage Status][codecov-image]][codecov-link]
  [![PyPI Version][pypi-image]][pypi-link]
  [![PyPI - Python Version][python-image]][pypi-link]
  ![License][license-image-mit]





  A backport of PEP 562. Allows controlling a module's `__dir__` and `__getattr__`. Useful for deprecating attributes.
  Works for Python 2.7+. And while it works on Python 3.7, it is recommended to use the official Python 3.7 implementation
  where applicable.

  This module can be installed and used as a dependency, or if desired, it is easy to vendor as the license is quite
  permissible, and the code is contained in a single file.

  Once Python 3.6 is end of life, this module will be irrelevant and will no longer receive active support.



  Installation is done with `pip`:

  ```
  pip install pep562
  ```



  Simply copy the file `pep562/__init__.py` to your project and rename to `pep562`.  Import and use as needed.



  Here is a simple example where we deprecate the attribute `version` for the more standardized `__version__`.

  ```py
  from pep562 import pep562
  import warnings

  __version__ = (1, 0, 0)
  __all__ = ("__version__",)
  __deprecated__ = {
      "version": ("__version__", __version__)
  }

  PY37 = sys.version_info >= (3, 7)


  def __getattr__(name):
      """Get attribute."""

      deprecated = __deprecated__.get(name)
      if deprecated:
          stacklevel = 3 if PY37 else 4
          warnings.warn(
              "'{}' is deprecated. Use '{}' instead.".format(name, deprecated[0]),
              category=DeprecationWarning,
              stacklevel=stacklevel
          )
          return deprecated[1]
      raise AttributeError("module '{}' has no attribute '{}'".format(__name__, name))


  def __dir__():
      """Module directory."""

      return sorted(list(__all__) + list(__deprecated__.keys()))


  pep562(__name__)
  ```



  MIT License

  Copyright (c) 2018 - 2021 Isaac Muse <isaacmuse@gmail.com>

  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.

  [github-ci-image]: https://github.com/facelessuser/pep562/workflows/build/badge.svg?branch=master&event=push
  [github-ci-link]: https://github.com/facelessuser/pep562/actions?query=workflow%3Abuild+branch%3Amaster
  [discord-image]: https://img.shields.io/discord/678289859768745989?logo=discord&logoColor=aaaaaa&color=mediumpurple&labelColor=333333
  [discord-link]:https://discord.gg/TWs8Tgr
  [codecov-image]: https://img.shields.io/codecov/c/github/facelessuser/pep562/master.svg?logo=codecov&logoColor=aaaaaa&labelColor=333333
  [codecov-link]: https://codecov.io/github/facelessuser/pep562
  [pypi-image]: https://img.shields.io/pypi/v/pep562.svg?logo=pypi&logoColor=aaaaaa&labelColor=333333
  [pypi-link]: https://pypi.python.org/pypi/pep562
  [python-image]: https://img.shields.io/pypi/pyversions/pep562?logo=python&logoColor=aaaaaa&labelColor=333333
  [license-image-mit]: https://img.shields.io/badge/license-MIT-blue.svg?labelColor=333333
  [donate-image]: https://img.shields.io/badge/Donate-PayPal-3fabd1?logo=paypal
  [donate-link]: https://www.paypal.me/facelessuser


pkgId: 87af9dc81454acaff7cf1dd1f84668b64c8c8f1f905db70d934fd521f0471b39
name: python-pep8-naming
arch: src
version: 0.13.3
epoch: 0
release: 1
summary: Check PEP-8 naming conventions, plugin for flake8
url: https://github.com/PyCQA/pep8-naming
rpm_license: Expat license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4736064f-31da-40f0-a61f-df9605d50ba6
location_href: 00004524-python-pep8-naming/python-pep8-naming-0.13.3-1.src.rpm
checksum_type: sha256
description:
  Check your code against `PEP 8 <https://www.python.org/dev/peps/pep-0008/>`_
  naming conventions.
  This module provides a plugin for ``flake8``, the Python code checker.
  (It replaces the plugin ``flint-naming`` for the ``flint`` checker.)


pkgId: 4e68eb93601dccae03177380f1940cb1e3392627ad9c1bf2cea110bd7ed844f8
name: python-peppercorn
arch: src
version: 0.6
epoch: 0
release: 1
summary: A library for converting a token stream into a data structure for use in web form posts
url: https://docs.pylonsproject.org/projects/peppercorn/en/latest/
rpm_license: BSD-derived (http://www.repoze.org/LICENSE.txt)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e3af1fa8-99ad-4284-a02d-c6be948bfeb6
location_href: 00010712-python-peppercorn/python-peppercorn-0.6-1.src.rpm
checksum_type: sha256
description:
  A library for converting a token stream into a data structure comprised of
  sequences, mappings, and scalars, developed primarily for converting HTTP form
  post data into a richer data structure.  It runs on Python 2.7, 3.4, 3.5, 3.6
  and 3.7.
  Please see https://docs.pylonsproject.org/projects/peppercorn/en/latest/
  for the documentation.
  See https://github.com/Pylons/peppercorn for in-development version.


pkgId: 8d8c6bdd270c054b833e73c60f6bdc76abeaf28dc7ffc2fed1cdd48a00942427
name: python-persist-queue
arch: src
version: 0.8.0
epoch: 0
release: 1
summary: A thread-safe disk based persistent queue in Python.
url: http://github.com/peter-wangxu/persist-queue
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4168c9f1-2d7e-4785-9029-9c4bc764b127
location_href: 00004526-python-persist-queue/python-persist-queue-0.8.0-1.src.rpm
checksum_type: sha256
description:
  ``persist-queue`` implements a file-based queue and a serial of sqlite3-based queues. The goals is to achieve following requirements:
  * Disk-based: each queued item should be stored in disk in case of any crash.
  * Thread-safe: can be used by multi-threaded producers and multi-threaded consumers.
  * Recoverable: Items can be read after process restart.
  * Green-compatible: can be used in ``greenlet`` or ``eventlet`` environment.
  While *queuelib* and *python-pqueue* cannot fulfil all of above. After some try, I found it's hard to achieve based on their current
  implementation without huge code change. this is the motivation to start this project.
  By default, *persist-queue* use *pickle* object serialization module to support object instances.
  Most built-in type, like `int`, `dict`, `list` are able to be persisted by `persist-queue` directly, to support customized objects,
  please refer to `Pickling and unpickling extension types(Python2) <https://docs.python.org/2/library/pickle.html#pickling-and-unpickling-normal-class-instances>`_
  and `Pickling Class Instances(Python3) <https://docs.python.org/3/library/pickle.html#pickling-class-instances>`_
  This project is based on the achievements of `python-pqueue <https://github.com/balena/python-pqueue>`_
  and `queuelib <https://github.com/scrapy/queuelib>`_
  Slack channels
  ^^^^^^^^^^^^^^
  Join `persist-queue <https://join.slack
  .com/t/persist-queue/shared_invite
  /enQtOTM0MDgzNTQ0MDg3LTNmN2IzYjQ1MDc0MDYzMjI4OGJmNmVkNWE3ZDBjYzg5MDc0OWUzZDJkYTkwODdkZmYwODdjNjUzMTk3MWExNDE>`_ channel


pkgId: 6fd56e1426e392eaf2ecfd7667c825486f574db885207fd3f0324adfc21a8672
name: python-persisting-theory
arch: src
version: 1.0
epoch: 0
release: 1
summary: Registries that can autodiscover values accross your project apps
url: https://code.agate.blue/agate/persisting-theory
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-431357bc-2d76-4395-85e2-fdc8b4a6a9c6
location_href: 00013711-python-persisting-theory/python-persisting-theory-1.0-1.src.rpm
checksum_type: sha256
description:
  Persisting-theory is a small python utility designed to automate data discovering and access inside a list of packages. Use case: you are building an application that will have pluggable components. You want to allow these components to register data so it can be accessed by any other component of your app.
  If you ever used Django framework, you may remember this:
      from django.contrib import admin
      admin.autodiscover()
  Basically, persisting-theory will do the same, except that it let you declare what you want to autodiscover.
  Okay, I'm bad at explaining things, and english is not my mother tongue. Let's build a simple example.


pkgId: fc1e69921c8fdcb0a66af07a7dfcf29480527ed7178652cb4144ac3939505f0d
name: python-pexpect
arch: src
version: 4.8.0
epoch: 0
release: 1
summary: Pexpect allows easy control of interactive console applications.
url: https://pexpect.readthedocs.io/
rpm_license: ISC license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-13cfca48-77a1-475e-b779-9f76bfd522ad
location_href: 00008975-python-pexpect/python-pexpect-4.8.0-1.src.rpm
checksum_type: sha256
description:
  Pexpect is a pure Python module for spawning child applications; controlling
  them; and responding to expected patterns in their output. Pexpect works like
  Don Libes' Expect. Pexpect allows your script to spawn a child application and
  control it as if a human were typing commands.

  Pexpect can be used for automating interactive applications such as ssh, ftp,
  passwd, telnet, etc. It can be used to a automate setup scripts for duplicating
  software package installations on different servers. It can be used for
  automated software testing. Pexpect is in the spirit of Don Libes' Expect, but
  Pexpect is pure Python.

  The main features of Pexpect require the pty module in the Python standard
  library, which is only available on Unix-like systems. Some features—waiting
  for patterns from file descriptors or subprocesses—are also available on
  Windows.


pkgId: 850b5614725d4c8376721555c3686f9523f0b0d2e533005bb3149e8d6c668ed1
name: python-pgeocode
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: Approximate geocoding
url: https://pypi.org/project/pgeocode/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3cae0770-0d86-4335-a9fc-1db4cab71219
location_href: 00010948-python-pgeocode/python-pgeocode-0.4.0-1.src.rpm
checksum_type: sha256
description:
  |pypi| |condaforge| |rdfd| |GHactions|
  Postal code geocoding and distance calculations
  pgeocode is a Python library for high performance off-line querying of GPS coordinates, region name and municipality name
  from postal codes. Distances between postal codes as well as general
  distance queries are also supported.
  The used `GeoNames <http://download.geonames.org/export/zip/>`_ database includes postal codes for 83 countries.
  Currently, only queries within the same country are supported.
  For additional documentation see `pgeocode.readthedocs.io <https://pgeocode.readthedocs.io>`_.


pkgId: 08157f920fd0bf855adc55e86b1d9ab7dca5de8f189a5a1af345fbffc1c923e1
name: python-pgmpy
arch: src
version: 0.1.22
epoch: 0
release: 1
summary: A library for Probabilistic Graphical Models
url: https://github.com/pgmpy/pgmpy
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2e984920-79d8-4b67-a5dc-fc34a6e375fc
location_href: 00012260-python-pgmpy/python-pgmpy-0.1.22-1.src.rpm
checksum_type: sha256
description:
  ![Build](https://github.com/pgmpy/pgmpy/actions/workflows/ci.yml/badge.svg?branch=dev)
  [![codecov](https://codecov.io/gh/pgmpy/pgmpy/branch/dev/graph/badge.svg)](https://codecov.io/gh/pgmpy/pgmpy)
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/78a8256c90654c6892627f6d8bbcea14)](https://www.codacy.com/gh/pgmpy/pgmpy?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=pgmpy/pgmpy&amp;utm_campaign=Badge_Grade)
  [![Downloads](https://img.shields.io/pypi/dm/pgmpy.svg)](https://pypistats.org/packages/pgmpy)
  [![Join the chat at https://gitter.im/pgmpy/pgmpy](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/pgmpy/pgmpy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
  [![asv](http://img.shields.io/badge/benchmarked%20by-asv-blue.svg?style=flat)](http://pgmpy.org/pgmpy-benchmarks/)
  pgmpy is a python library for working with Probabilistic Graphical Models.
  Documentation  and list of algorithms supported is at our official site http://pgmpy.org/
  Examples on using pgmpy: https://github.com/pgmpy/pgmpy/tree/dev/examples
  Basic tutorial on Probabilistic Graphical models using pgmpy: https://github.com/pgmpy/pgmpy_notebook
  Our mailing list is at https://groups.google.com/forum/#!forum/pgmpy .
  We have our community chat at [gitter](https://gitter.im/pgmpy/pgmpy).


pkgId: 804ff0973d553e40fbf51457b7a3427679d8d280d78bfe8871f99d56320e7a10
name: python-pgpdump
arch: src
version: 1.5
epoch: 0
release: 1
summary: PGP packet parser library
url: https://github.com/toofishes/python-pgpdump
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-242b72d3-e014-4afc-88d3-d169df2a223f
location_href: 00004534-python-pgpdump/python-pgpdump-1.5-1.src.rpm
checksum_type: sha256
description:
  This is based on the C version published at:
  http://www.mew.org/~kazu/proj/pgpdump/

  The intent here is not on completeness, as we don't currently decode every
  packet type, but on being able to do what people actually have to 95% of the
  time. Currently supported things include:

  * Signature packets
  * Public key packets
  * Secret key packets
  * Trust, user ID, and user attribute packets
  * ASCII-armor decoding and CRC check

  A single codebase with dependencies on only the standard python library is
  compatible across Python 2.6, 2.7, and 3.2+, as well as with PyPy 1.8+.


pkgId: 063bdaf5e30197133279c3e50cd8278cb0efc412c076dc0e63471f75d7b78e9c
name: python-pgsanity
arch: src
version: 0.2.9
epoch: 0
release: 1
summary: Check syntax of sql for PostgreSQL
url: http://github.com/markdrago/pgsanity
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ffbc55f9-3955-4f8d-b0f5-5a7c20a8a8b1
location_href: 00013022-python-pgsanity/python-pgsanity-0.2.9-1.src.rpm
checksum_type: sha256
description:
  **PgSanity checks the syntax of Postgresql SQL files.**

  It does this by leveraging the ecpg command which is traditionally
  used for preparing C files with embedded sql for compilation.
  However, as part of that preparation, ecpg checks the embedded SQL
  statements for syntax errors using the exact same parser that is
  in PostgreSQL.

  So the approach that PgSanity takes is to take a file that has a
  list of bare SQL in it, make that file look like a C file with
  embedded SQL, run it through ecpg and let ecpg report on the syntax
  errors of the SQL.


pkgId: e628c354f82b5ece25bde6875ee3d1870c025d0825663fcb86f3d2e4d2c252d5
name: python-pgspecial
arch: src
version: 2.0.1
epoch: 0
release: 1
summary: Meta-commands handler for Postgres Database.
url: https://www.dbcli.com
rpm_license: LICENSE.txt
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-94ef6d2f-8d44-4e82-b9d7-cfc9e6637dec
location_href: 00004535-python-pgspecial/python-pgspecial-2.0.1-1.src.rpm
checksum_type: sha256
description:
  |Build Status|  |PyPI|
  This package provides an API to execute meta-commands (AKA "special", or
  "backslash commands") on PostgreSQL.


pkgId: d43a14cc55388b39bbce123225b09963f3e842cb24c3922d0192826bff084a53
name: python-phonenumbers
arch: src
version: 8.13.7
epoch: 0
release: 1
url: https://github.com/daviddrysdale/python-phonenumbers
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-44ce2978-666f-4598-964b-a612b3007215
location_href: 00004537-python-phonenumbers/python-phonenumbers-8.13.7-1.src.rpm
checksum_type: sha256
summary:
  Python version of Google's common library for parsing, formatting, storing and validating international phone numbers.

description:
  [![Coverage Status](https://coveralls.io/repos/daviddrysdale/python-phonenumbers/badge.svg?branch=dev&service=github)](https://coveralls.io/github/daviddrysdale/python-phonenumbers?branch=dev)
  This is a Python port of [Google's libphonenumber library](https://github.com/google/libphonenumber)
  It supports Python 2.5-2.7 and Python 3.x (in the same codebase, with no
  [2to3](http://docs.python.org/2/library/2to3.html) conversion needed).
  Original Java code is Copyright (C) 2009-2015 The Libphonenumber Authors.
  Release [HISTORY](https://github.com/daviddrysdale/python-phonenumbers/blob/dev/python/HISTORY.md),
  derived from [upstream release notes](https://github.com/google/libphonenumber/blob/master/release_notes.txt).


pkgId: 1bfb44ea9afc46a7f9ef5453c9cd4d7b2d4e8c4d26743c8bba712bffe20660a0
name: python-phpserialize
arch: src
version: 1.3
epoch: 0
release: 1
summary: a port of the serialize and unserialize functions of php to python.
url: http://github.com/mitsuhiko/phpserialize
rpm_license: UNKNOWN
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d95518ec-edeb-400b-a422-12b672401d16
location_href: 00004539-python-phpserialize/python-phpserialize-1.3-1.src.rpm
checksum_type: sha256
description:
  >>> from phpserialize import *
  >>> obj = dumps("Hello World")
  >>> loads(obj)
  'Hello World'
  Due to the fact that PHP doesn't know the concept of lists, lists
  are serialized like hash-maps in PHP.  As a matter of fact the
  reverse value of a serialized list is a dict:
  >>> loads(dumps(range(2)))
  {0: 0, 1: 1}
  If you want to have a list again, you can use the `dict_to_list`
  helper function:
  >>> dict_to_list(loads(dumps(range(2))))
  [0, 1]
  It's also possible to convert into a tuple by using the `dict_to_tuple`
  function:
  >>> dict_to_tuple(loads(dumps((1, 2, 3))))
  (1, 2, 3)
  Another problem are unicode strings.  By default unicode strings are
  encoded to 'utf-8' but not decoded on `unserialize`.  The reason for
  this is that phpserialize can't guess if you have binary or text data
  in the strings:
  >>> loads(dumps(u'Hello W\xf6rld'))
  'Hello W\xc3\xb6rld'
  If you know that you have only text data of a known charset in the result
  you can decode strings by setting `decode_strings` to True when calling
  loads:
  >>> loads(dumps(u'Hello W\xf6rld'), decode_strings=True)
  u'Hello W\xf6rld'
  Dictionary keys are limited to strings and integers.  `None` is converted
  into an empty string and floats and booleans into integers for PHP
  compatibility:
  >>> loads(dumps({None: 14, 42.23: 'foo', True: [1, 2, 3]}))
  {'': 14, 1: {0: 1, 1: 2, 2: 3}, 42: 'foo'}
  It also provides functions to read from file-like objects:
  >>> from StringIO import StringIO
  >>> stream = StringIO('a:2:{i:0;i:1;i:1;i:2;}')
  >>> dict_to_list(load(stream))
  [1, 2]
  And to write to those:
  >>> stream = StringIO()
  >>> dump([1, 2], stream)
  >>> stream.getvalue()
  'a:2:{i:0;i:1;i:1;i:2;}'
  Like `pickle` chaining of objects is supported:
  >>> stream = StringIO()
  >>> dump([1, 2], stream)
  >>> dump("foo", stream)
  >>> stream.seek(0)
  >>> load(stream)
  {0: 1, 1: 2}
  >>> load(stream)
  'foo'
  This feature however is not supported in PHP.  PHP will only unserialize
  the first object.


pkgId: cbfdc7a97037c51bcdb32473a3ba11ef7fc7f807f0da99283d06f1533fe2e06f
name: python-phx-class-registry
arch: src
version: 4.0.6
epoch: 0
release: 1
summary: Factory+Registry pattern for Python classes
url: https://pypi.org/project/phx-class-registry/
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-03055cc4-ae8a-4dc9-8d3f-e7cc52e89be4
location_href: 00012839-python-phx-class-registry/python-phx-class-registry-4.0.6-1.src.rpm
checksum_type: sha256
description:
  At the intersection of the Registry and Factory patterns lies the
  ``ClassRegistry``:
  - Define global factories that generate new class instances based on
    configurable keys.
  - Seamlessly create powerful service registries.
  - Integrate with setuptools's ``entry_points`` system to make your registries
    infinitely extensible by 3rd-party libraries!
  - And more!

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


pkgId: 821dd79778b9b4cc7da508fc1e0bc3daac0984db1fa19e030afce00f7bbd9222
name: python-pick
arch: src
version: 2.2.0
epoch: 0
release: 1
summary: Pick an option in the terminal with a simple GUI
url: https://github.com/wong2/pick
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4e6d13d9-ee51-43a1-933c-fdd094ef29a5
location_href: 00013582-python-pick/python-pick-2.2.0-1.src.rpm
checksum_type: sha256
description:
  [![image](https://github.com/wong2/pick/actions/workflows/ci.yml/badge.svg)](https://github.com/wong2/pick/actions/workflows/ci.yml)
  [![PyPI](https://img.shields.io/pypi/v/pick.svg)](https://pypi.python.org/pypi/pick)
  [![PyPI](https://img.shields.io/pypi/dm/pick)](https://pypi.python.org/pypi/pick)

  **pick** is a small python library to help you create curses based
  interactive selection list in the terminal.

  |         Basic          |         Multiselect          |
  | :--------------------: | :--------------------------: |
  | ![](example/basic.gif) | ![](example/multiselect.gif) |



      $ pip install pick



  **pick** comes with a simple api:

      >>> from pick import pick

      >>> title = 'Please choose your favorite programming language: '
      >>> options = ['Java', 'JavaScript', 'Python', 'PHP', 'C++', 'Erlang', 'Haskell']
      >>> option, index = pick(options, title)
      >>> print(option)
      >>> print(index)

  **outputs**:

      >>> C++
      >>> 4

  **pick** multiselect example:

      >>> from pick import pick

      >>> title = 'Please choose your favorite programming language (press SPACE to mark, ENTER to continue): '
      >>> options = ['Java', 'JavaScript', 'Python', 'PHP', 'C++', 'Erlang', 'Haskell']
      >>> selected = pick(options, title, multiselect=True, min_selection_count=1)
      >>> print(selected)

  **outputs**:

      >>> [('Java', 0), ('C++', 4)]



  - `options`: a list of options to choose from
  - `title`: (optional) a title above options list
  - `indicator`: (optional) custom the selection indicator, defaults to `*`
  - `default_index`: (optional) set this if the default selected option
    is not the first one
  - `multiselect`: (optional), if set to True its possible to select
    multiple items by hitting SPACE
  - `min_selection_count`: (optional) for multi select feature to
    dictate a minimum of selected items before continuing
  - `screen`: (optional), if you are using `pick` within an existing curses application set this to your existing `screen` object.  It is assumed this has initialised in the standard way (e.g. via `curses.wrapper()`, or `curses.noecho(); curses.cbreak(); screen.kepad(True)`)



  [pickpack](https://github.com/anafvana/pickpack): A fork of `pick` to select tree data.


pkgId: 3d124cd8dc2c94ec93c54ec6f7826b21aab8ae224b24d7c5a4f880c3d2d5eb41
name: python-pickle5-debuginfo
arch: x86_64
version: 0.0.12
epoch: 0
release: 1
summary: Debug information for package python-pickle5
url: https://github.com/pitrou/pickle5-backport
rpm_license: Python Software Foundation License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-6aabcf27-f002-4efe-a67e-7889a979f02c
rpm_sourcerpm: python-pickle5-0.0.12-1.src.rpm
location_href: 00010623-python-pickle5/python-pickle5-debuginfo-0.0.12-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pickle5.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 3d93d5b475565c085a66050f2d351187f2b31232e96f883dc29400d82acf3608
name: python-pickle5-debugsource
arch: x86_64
version: 0.0.12
epoch: 0
release: 1
summary: Debug sources for package python-pickle5
url: https://github.com/pitrou/pickle5-backport
rpm_license: Python Software Foundation License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-6aabcf27-f002-4efe-a67e-7889a979f02c
rpm_sourcerpm: python-pickle5-0.0.12-1.src.rpm
location_href: 00010623-python-pickle5/python-pickle5-debugsource-0.0.12-1.x86_64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pickle5.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: a22ce3a81ae76e2a1e3ecbbd2c21cf748df9cd6154bd3b8b16f9a583f0d37b37
name: python-pickleshare
arch: src
version: 0.7.5
epoch: 0
release: 1
summary: Tiny 'shelve'-like database with concurrency support
url: https://github.com/pickleshare/pickleshare
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d758155f-41fe-429a-9648-4c333eaa826b
location_href: 00004541-python-pickleshare/python-pickleshare-0.7.5-1.src.rpm
checksum_type: sha256
description:
  PickleShare - a small 'shelve' like datastore with concurrency support

  Like shelve, a PickleShareDB object acts like a normal dictionary. Unlike shelve,
  many processes can access the database simultaneously. Changing a value in
  database is immediately visible to other processes accessing the same database.

  Concurrency is possible because the values are stored in separate files. Hence
  the "database" is a directory where *all* files are governed by PickleShare.

  Example usage::

      from pickleshare import *
      db = PickleShareDB('~/testpickleshare')
      db.clear()
      print("Should be empty:",db.items())
      db['hello'] = 15
      db['aku ankka'] = [1,2,313]
      db['paths/are/ok/key'] = [1,(5,46)]
      print(db.keys())

  This module is certainly not ZODB, but can be used for low-load
  (non-mission-critical) situations where tiny code size trumps the
  advanced features of a "real" object database.

  Installation guide: pip install pickleshare


pkgId: 6e5bee4617ae2349ceb682739d5e12f03560baa46348287903b1464c2f966f7f
name: python-pid
arch: src
version: 3.0.4
epoch: 0
release: 1
url: https://github.com/trbs/pid/
rpm_license: ASL
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b1183bf6-0d92-4223-a7cd-e4d14a0a050b
location_href: 00012623-python-pid/python-pid-3.0.4-1.src.rpm
checksum_type: sha256
summary:
  Pidfile featuring stale detection and file-locking, can also be used as context-manager or decorator

description:
  PidFile class featuring:
   - stale detection
   - pidfile locking (fcntl)
   - chmod (default is 0o644)
   - chown
   - custom exceptions


pkgId: 7af10c2fe0a3112e3fa9367d58a61a06af2054154856ca60ef112288f9e9c4fe
name: python-piexif
arch: src
version: 1.1.3
epoch: 0
release: 1
summary: To simplify exif manipulations with python. Writing, reading, and more...
url: https://github.com/hMatoba/Piexif
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9bee8bdd-54cb-4505-98a0-f02e2095b0c9
location_href: 00004542-python-piexif/python-piexif-1.1.3-1.src.rpm
checksum_type: sha256
description:
  |Build Status| |Windows Build| |Coverage Status| |docs|
  To simplify exif manipulations with Python. Writing, reading, and more... Piexif is pure Python. To everywhere with Python.
  Document: http://piexif.readthedocs.org/en/latest/
  Online demo: http://piexif-demo.appspot.com/demo


pkgId: ebb58a2e55bcf7f05feabd6a6e199e3536e9a19a5405efa00ab148db9b692631
name: python-pika
arch: src
version: 1.3.1
epoch: 0
release: 1
summary: Pika Python AMQP Client Library
url: https://pika.readthedocs.io
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-97512a62-701b-4ca3-bc09-ac566e842f6c
location_href: 00004545-python-pika/python-pika-1.3.1-1.src.rpm
checksum_type: sha256
description:
  Pika is a RabbitMQ (AMQP 0-9-1) client library for Python.
  |Version| |Python versions| |Actions Status| |Coverage| |License| |Docs|


pkgId: 8bfc7ae79125328f43d048061db12904c75d5ef2fcad70306bc32439913f65be
name: python-pikepdf
arch: src
version: 7.1.1
epoch: 0
release: 1
summary: Read and write PDFs with Python, powered by qpdf
url: https://pypi.org/project/pikepdf/
rpm_license: MPL-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6894e52c-494d-4210-8204-f7cbeb7791f6
location_href: 00004547-python-pikepdf/python-pikepdf-7.1.1-1.src.rpm
checksum_type: sha256
description:
  **pikepdf** is a Python library for reading and writing PDF files.
  [![Build Status](https://github.com/pikepdf/pikepdf/actions/workflows/build.yml/badge.svg)](https://github.com/pikepdf/pikepdf/actions/workflows/build.yml) [![PyPI](https://img.shields.io/pypi/v/pikepdf.svg)](https://pypi.org/project/pikepdf/) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pikepdf) ![PyPy](https://img.shields.io/badge/PyPy-3.8%20|%203.9-blue) ![PyPI - License](https://img.shields.io/pypi/l/pikepdf) ![PyPI - Downloads](https://img.shields.io/pypi/dm/pikepdf)  [![codecov](https://codecov.io/gh/pikepdf/pikepdf/branch/master/graph/badge.svg?token=8FJ755317J)](https://codecov.io/gh/pikepdf/pikepdf)
  pikepdf is based on [QPDF](https://github.com/qpdf/qpdf), a powerful PDF manipulation and repair library.
  Python + QPDF = "py" + "qpdf" = "pyqpdf", which looks like a dyslexia test. Say it out loud, and it sounds like "pikepdf".
  ```python

  with pikepdf.open('input.pdf') as pdf:
      num_pages = len(pdf.pages)
      del pdf.pages[-1]
      pdf.save('output.pdf')
  ```
  **To install:**
  ```bash
  pip install pikepdf
  ```
  For users who want to build from source, see [installation](https://pikepdf.readthedocs.io/en/latest/index.html).
  pikepdf is [documented](https://pikepdf.readthedocs.io/en/latest/index.html) and actively maintained. Binary wheels are available for all common platforms, both x86-64 and ARM64/Apple Silicon.
  Commercial support is available.


pkgId: ed6241bd5e7324186eab8241b966692f8f14deefc30105abba529e8b7541dca6
name: python-pil-compat
arch: src
version: 1.0.0
epoch: 0
release: 1
summary: Compatibility modules, bridging PIL -> Pillow
url: http://github.com/prophile/pil-compat
rpm_license: UNKNOWN
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-4c037ea8-78b7-4d15-b528-088142cd825c
location_href: 00013487-python-pil-compat/python-pil-compat-1.0.0-1.src.rpm
checksum_type: sha256
description:
               _ _                                       _
           _ __ (_) |       ___ ___  _ __ ___  _ __   __ _| |_
          | '_ \| | |_____ / __/ _ \| '_ ` _ \| '_ \ / _` | __|
          | |_) | | |_____| (_| (_) | | | | | | |_) | (_| | |_
          | .__/|_|_|      \___\___/|_| |_| |_| .__/ \__,_|\__|
          |_|                                 |_|


  pillow has modules named PIL.Image*. PIL has them as Image.*.

  This is a package which shims between the two.

  Run `materialise.py` to generate the Image* modules in source, and `setup.py`
  can then generate your wheel or sdist.

  Email me if you have confusion: alistair@alynn.co.uk


pkgId: 3695897359e2b7cfc7723fae42d7b3e4132c249f77ef040fbda4b9b287ca054c
name: python-pinkboto
arch: src
version: 0.0.45
epoch: 0
release: 1
summary: A Colorful AWS SDK wrapper for Python
url: https://github.com/Hotmart-Org/pinkboto
rpm_license: GNU General Public License v3 (GPLv3)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b12c89a8-77af-462a-a03c-f3b10be10cc7
location_href: 00011321-python-pinkboto/python-pinkboto-0.0.45-1.src.rpm
checksum_type: sha256
description:
  A Colorful AWS SDK wrapper for Python

  [![Current version at PyPI](https://img.shields.io/pypi/v/pinkboto.svg)](https://pypi.python.org/pypi/pinkboto)
  ![Supported Python Versions](https://img.shields.io/pypi/pyversions/pinkboto.svg)
  ![Software status](https://img.shields.io/pypi/status/pinkboto.svg)
  ![PyPI - Downloads](https://img.shields.io/pypi/dd/pinkboto)



  ```bash
  pip install pinkboto
  ```



  ```python
  import pinkboto
  aws = pinkboto.aws(profile='production', region='us-east-1')
  selector = {'resource': 'aws_db_instance'}
  projection = ['DBInstanceIdentifier', 'Endpoint']
  rds = aws.find(selector, projection)
  ```



  By default, pinkboto caching all requests with 120 seconds lifespan.

  To disable:

  ```python
  aws = pinkboto.aws(profile='production', region='us-east-1', cache=False)
  ```

  To modify lifespan to 1 hour:

  ```python
  aws = pinkboto.aws(profile='production', region='us-east-1', cache=3600)
  ```



  You can access a subfield in projection. For example 'Endpoint.Address' in rds

  ```python
  rds = aws.find({'resource': 'aws_db_instance'}, ['Endpoint.Address', 'AvailabilityZone'])
  ```



  ```python
  pinkboto.to_csv(rds, 'result.csv')
  ```



  ```bash
  update setup.py version.
  python3 setup.py sdist
  twine upload dist/pinkboto-${new-version}.tar.gz
  ```



  Pull requests for new features, bug fixes, and suggestions are welcome!



  GNU General Public License v3 (GPLv3)



  ```bash
  pre-commit install
  ```


pkgId: 0f8e0701063a096574d59a1ce78c2fcea64ad11a25424b9dec8f18d50a4d140d
name: python-pip
arch: src
version: 23.0.1
epoch: 0
release: 1
summary: The PyPA recommended tool for installing Python packages.
url: https://pip.pypa.io/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b1e5d00b-1105-4dbb-96e0-25674f87b9ad
location_href: 00008894-python-pip/python-pip-23.0.1-1.src.rpm
checksum_type: sha256
description:
  pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes.
  Please take a look at our documentation for how to install and use pip:
  * `Installation`_
  * `Usage`_
  We release updates regularly, with a new version every 3 months. Find more details in our documentation:
  * `Release notes`_
  * `Release process`_
  In pip 20.3, we've `made a big improvement to the heart of pip`_; `learn more`_. We want your input, so `sign up for our user experience research studies`_ to help us do it right.
  **Note**: pip 21.0, in January 2021, removed Python 2 support, per pip's `Python 2 support policy`_. Please migrate to Python 3.
  If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms:
  * `Issue tracking`_
  * `Discourse channel`_
  * `User IRC`_
  If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms:
  * `GitHub page`_
  * `Development documentation`_
  * `Development IRC`_


pkgId: f2e2d96a2a9898fe102b28cee2a42f148b495a531ca84b38527f86b2c46c0419
name: python-pip-api
arch: src
version: 0.0.30
epoch: 0
release: 1
summary: An unofficial, importable pip API
url: http://github.com/di/pip-api
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-269bf035-7b86-45c6-85fd-02b7029f4594
location_href: 00010981-python-pip-api/python-pip-api-0.0.30-1.src.rpm
checksum_type: sha256
description:
  <!--- BADGES: START --->
  [![GitHub - License](https://img.shields.io/github/license/di/pip-api?logo=github&style=flat&color=green)][#github-license]
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pip-api?logo=pypi&style=flat&color=blue)][#pypi-package]
  [![PyPI - Package Version](https://img.shields.io/pypi/v/pip-api?logo=pypi&style=flat&color=orange)][#pypi-package]
  [![Conda - Platform](https://img.shields.io/conda/pn/conda-forge/pip-api?logo=anaconda&style=flat)][#conda-forge-package]
  [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/pip-api?logo=anaconda&style=flat&color=orange)][#conda-forge-package]
  [![Conda Recipe](https://img.shields.io/static/v1?logo=conda-forge&style=flat&color=green&label=recipe&message=pip-api)][#conda-forge-feedstock]

  [#github-license]: https://github.com/di/pip-api/blob/master/LICENSE
  [#pypi-package]: https://pypi.org/project/pip-api/
  [#conda-forge-package]: https://anaconda.org/conda-forge/pip-api
  [#conda-forge-feedstock]: https://github.com/conda-forge/pip-api-feedstock
  <!--- BADGES: END --->

  Since [`pip`](https://pypi.org/p/pip) is a command-line-tool, [it does not have
  an official, supported, _importable_
  API](https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program).

  However, this does not mean that people haven't tried to `import pip`, usually
  to end up with much headache when `pip`'s maintainers do routine refactoring.


  The goal of this project is to provide an importable `pip` API, which is _fully
  compliant_ with the recommended method of using `pip` from your program.

  How? By providing an importable API that wraps command-line calls to `pip`,
  this library can be used as a drop-in replacement for existing uses of `pip`'s
  internal API.


  This goal means that any new API added here must have the following
  equivalents:

  - some internal `pip` API (or combination of internal APIs)
  - some CLI calls (or combination of CLI calls)

  Any functionality that is not currently possible from internal `pip` API or
  CLI calls is out of scope.



  You can install `pip-api` with either `pip` or with `conda`.

  **With pip**:

  ```sh
  python -m pip install pip-api
  ```

  **With conda**:

  ```sh
  conda install -c conda-forge pip-api
  ```



  Not all commands are supported in all versions of `pip` and on all platforms.
  If the command you are trying to use is not compatible, `pip_api` will raise a
  `pip_api.exceptions.Incompatible` exception for your program to catch.


  * `pip_api.version()`
    > Returns the `pip` version as a string, e.g. `"9.0.1"`

  * `pip_api.installed_distributions(local=False)`
    > Returns a list of all installed distributions as a `Distribution` object with the following attributes:
    > * `Distribution.name` (`string`): The name of the installed distribution
    > * `Distribution.version` ([`packaging.version.Version`](https://packaging.pypa.io/en/latest/version/#packaging.version.Version)): The version of the installed distribution
    > * `Distribution.location` (`string`): The location of the installed distribution
    > * `Distribution.editable` (`bool`): Whether the distribution is editable or not
    > Optionally takes a `local` parameter to filter out globally-installed packages

  * `pip_api.parse_requirements(filename, options=None, include_invalid=False, strict_hashes=False)`
    > Takes a path to a filename of a Requirements file. Returns a mapping from package name to a `pip_api.Requirement` object (subclass of [`packaging.requirements.Requirement`](https://packaging.pypa.io/en/latest/requirements/#packaging.requirements.Requirement)) with the following attributes:
    > * `Requirement.name` (`string`): The name of the requirement.
    > * `Requirement.extras` (`set`): A set of extras that the requirement specifies.
    > * `Requirement.specifier` ([`packaging.specifiers.SpecifierSet`](https://packaging.pypa.io/en/latest/specifiers/#packaging.specifiers.SpecifierSet)): A `SpecifierSet` of the version specified by the requirement.
    > * `Requirement.marker` ([`packaging.markers.Marker`](https://packaging.pypa.io/en/latest/markers/#packaging.markers.Marker)): A `Marker` of the marker for the requirement. Can be `None`.
    > * `Requirement.hashes` (`dict`): A mapping of hashes for the requirement, corresponding to `--hash=...` options.
    > * `Requirement.editable` (`bool`): Whether the requirement is editable, corresponding to `-e ...`
    > * `Requirement.filename` (`str`): The filename that the requirement originates from.
    > * `Requirement.lineno` (`int`): The source line that the requirement was parsed from.
    >
    > Optionally takes an `options` parameter to override the regex used to skip requirements lines.
    > Optionally takes an `include_invalid` parameter to return an `UnparsedRequirement` in the event that a requirement cannot be parsed correctly.
    > Optionally takes a `strict_hashes` parameter to require that all requirements have associated hashes.


  * `pip_api.hash(filename, algorithm='sha256')`
    > Returns the resulting as a string.
    > Valid `algorithm` parameters are `'sha256'`, `'sha384'`, and `'sha512'`


  * `pip_api.installed_distributions(local=False, paths=[])`
    > As described above, but with an extra optional `paths` parameter to provide a list of locations to look for installed distributions. Attempting to use the `paths` parameter with `pip<19.2` will result in a `PipError`.


  This library is in use by a number of other tools, including:
  * [`pip-audit`](https://pypi.org/project/pip-audit/), to analyze dependencies for known vulnerabilities
  * [`pytest-reqs`](https://pypi.org/project/pytest-reqs), to compare requirements files with test dependencies
  * [`hashin`](https://pypi.org/project/hashin/), to add hash pinning to requirements files
  * ...and many more.


pkgId: 23c7d23b8bb3ec37d6198bb2dd7f3389a87259721b4719660dece7ca08418d37
name: python-pipefish
arch: src
version: 0.4.2
epoch: 0
release: 1
summary: Process JUnit XML and Cobertura coverage XML reports into Markdown
url: https://github.com/pytest-buildkite/pipefish
rpm_license: GPLv3+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-235f3904-3e2f-47a0-8279-f8c4235f8143
location_href: 00011512-python-pipefish/python-pipefish-0.4.2-1.src.rpm
checksum_type: sha256
description:
  Process JUnit XML and Cobertura coverage XML reports into Markdown


  * [News](https://github.com/pytest-buildkite/pipefish/blob/master/NEWS.rst).
  * [Code of Conduct](https://github.com/pytest-buildkite/pipefish/blob/master/CODE_OF_CONDUCT.md).
  * [Contribution Guidelines](https://github.com/pytest-buildkite/pipefish/blob/master/CONTRIBUTING.md).


pkgId: a8b08f6dd825f8d1139d90e84e15c2ee2b009d758215a0386153a3d066901a32
name: python-pipelinewise-singer-python
arch: src
version: 2.0.1
epoch: 0
release: 1
summary: Singer.io utility library - PipelineWise compatible
url: https://github.com/transferwise/pipelinewise-singer-python
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b8e279c2-2947-4302-bc27-a5f86c08d32f
location_href: 00011110-python-pipelinewise-singer-python/python-pipelinewise-singer-python-2.0.1-1.src.rpm
checksum_type: sha256
description:
  [![PyPI version](https://badge.fury.io/py/pipelinewise-singer-python.svg)](https://badge.fury.io/py/pipelinewise-singer-python)
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pipelinewise-singer-python.svg)](https://pypi.org/project/pipelinewise-singer-python/)
  [![License: MIT](https://img.shields.io/badge/License-Apache2-yellow.svg)](https://opensource.org/licenses/Apache-2.0)
  Writes the Singer format from Python.
  This is a fork of [Singer's singer-python](https://github.com/singer-io/singer-python) made for [PipelineWise](https://transferwise.github.io/pipelinewise).


pkgId: 7cdcc3d153e9c1a6acf5102628282807623cb5572ffd2d7ec79c68b5a84ba58b
name: python-pipelinewise-singer-python-help
arch: noarch
version: 2.0.1
epoch: 0
release: 1
summary: Development documents and examples for pipelinewise-singer-python
url: https://github.com/transferwise/pipelinewise-singer-python
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b8e279c2-2947-4302-bc27-a5f86c08d32f
rpm_sourcerpm: python-pipelinewise-singer-python-2.0.1-1.src.rpm
checksum_type: sha256
description:
  [![PyPI version](https://badge.fury.io/py/pipelinewise-singer-python.svg)](https://badge.fury.io/py/pipelinewise-singer-python)
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pipelinewise-singer-python.svg)](https://pypi.org/project/pipelinewise-singer-python/)
  [![License: MIT](https://img.shields.io/badge/License-Apache2-yellow.svg)](https://opensource.org/licenses/Apache-2.0)
  Writes the Singer format from Python.
  This is a fork of [Singer's singer-python](https://github.com/singer-io/singer-python) made for [PipelineWise](https://transferwise.github.io/pipelinewise).

location_href:
  00011110-python-pipelinewise-singer-python/python-pipelinewise-singer-python-help-2.0.1-1.noarch.rpm


pkgId: 417fa844e6829111d40ce2586978410fca7407307f6a45bdc8c8658205da9d4c
name: python-pipenv
arch: src
version: 2023.3.20
epoch: 0
release: 1
summary: Python Development Workflow for Humans.
url: https://github.com/pypa/pipenv
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9d0b790e-45cb-4392-8117-967d049d6562
location_href: 00009198-python-pipenv/python-pipenv-2023.3.20-1.src.rpm
checksum_type: sha256
description:
  [![image](https://img.shields.io/pypi/v/pipenv.svg)](https://python.org/pypi/pipenv)
  [![image](https://img.shields.io/pypi/l/pipenv.svg)](https://python.org/pypi/pipenv)
  [![CI](https://github.com/pypa/pipenv/actions/workflows/ci.yaml/badge.svg)](https://github.com/pypa/pipenv/actions/workflows/ci.yaml)
  [![image](https://img.shields.io/pypi/pyversions/pipenv.svg)](https://python.org/pypi/pipenv)


pkgId: 93f70599c99893e942a4d1cf26f531864b9be5bd23f6bb7b7430da193c32e9cb
name: python-pipfile
arch: src
version: 0.0.2
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/pypa/pipfile
rpm_license: BSD or Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fb881cd2-d328-4cf0-b61a-238bff401fba
location_href: 00010996-python-pipfile/python-pipfile-0.0.2-1.src.rpm
checksum_type: sha256
description:
  ``Pipfile`` and its sister ``Pipfile.lock`` are a replacement for the existing standard `pip`_'s ``requirements.txt`` file.
      WARNING: This project is under active design and development. Nothing is set in stone at this point of time.
  This repository contains the design specification of the ``Pipfile`` format, as well as (soon) an implementation of a parser for the specification which can be used by `pip`_ and any other consumer, once the design (including the form of a ``Pipfile`` itself) has been built out and finalized.


pkgId: 2b37d32a563663412c2c14b8f2c62236ad93ec46a3fe1283a974df225d65e302
name: python-pixelmatch
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: A pixel-level image comparison library.
url: https://github.com/whtsky/pixelmatch-py
rpm_license: ISC
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5754085b-3692-450d-9aa8-484171d0ec1a
location_href: 00013293-python-pixelmatch/python-pixelmatch-0.3.0-1.src.rpm
checksum_type: sha256
description:
  A fast pixel-level image comparison library, originally created to compare screenshots in tests.
  Now with additional support of PIL.Image instances
  Python port of https://github.com/mapbox/pixelmatch.

  Features accurate **anti-aliased pixels detection**
  and **perceptual color difference metrics**.

  ```python
  from pixelmatch import pixelmatch

  num_diff_pixels = pixelmatch(img1, img2, 800, 600, diff, threshold=0.1)
  ```

  Implements ideas from the following papers:

  - [Measuring perceived color difference using YIQ NTSC transmission color space in mobile applications](https://pdfs.semanticscholar.org/cb71/56034b6e427ddc9b5da1a4f5fcb10831c9fd.pdf) (2010, Yuriy Kotsarenko, Fernando Ramos)
  - [Anti-aliased pixel and intensity slope detector](https://www.researchgate.net/publication/234126755_Anti-aliased_Pixel_and_Intensity_Slope_Detector) (2009, Vytautas Vyšniauskas)



  ```bash
  python -m pip install pixelmatch
  ```





  ```python
  from PIL import Image

  from pixelmatch.contrib.PIL import pixelmatch

  img_a = Image.open("a.png")
  img_b = Image.open("b.png")
  img_diff = Image.new("RGBA", img_a.size)


  mismatch = pixelmatch(img_a, img_b, img_diff, includeAA=True)

  img_diff.save("diff.png")
  ```



  ```python
  from pixelmatch import pixelmatch

  width, height = 1920, 1080
  img_a = [R1, G1, B1, A1, R2, B2, G2, A2, ...]
  img_b = [R1, G1, B1, A1, R2, B2, G2, A2, ...]

  data_diff = [0] * len(img_a)

  mismatch = pixelmatch(img_a, img_b, width, height, data_diff, includeAA=True)
  ```





  - `img1`, `img2` — RGBA Image data of the images to compare. **Note:** image dimensions must be equal.
  - `width`, `height` — Width and height of the images.
  - `output` — Image data to write the diff to, or `None` if don't need a diff image. Note that _all three images_ need to have the same dimensions.
  - `threshold` — Matching threshold, ranges from `0` to `1`. Smaller values make the comparison more sensitive. `0.1` by default.
  - `includeAA` — If `true`, disables detecting and ignoring anti-aliased pixels. `false` by default.
  - `alpha` — Blending factor of unchanged pixels in the diff output. Ranges from `0` for pure white to `1` for original brightness. `0.1` by default.
  - `aa_color` — The color of anti-aliased pixels in the diff output in `[R, G, B]` format. `[255, 255, 0]` by default.
  - `diff_color` — The color of differing pixels in the diff output in `[R, G, B]` format. `[255, 0, 0]` by default.
  - `diff_mask` — Draw the diff over a transparent background (a mask), rather than over the original image. Will not draw anti-aliased pixels (if detected).
  - `fail_fast` - If true, will return after first different pixel.

  Compares two images, writes the output diff and returns the number of mismatched pixels.



  Compares two images, writes the output diff and returns the number of mismatched pixels. Exact same API as `pixelmatch.pixelmatch` except for the important fact that it takes instances of PIL.Image for image parameters (`img1`, `img2`, and `output`) and the width/size need not be specified.



  | expected                                                                                                                                  | actual                                                                                                                                    | diff                                                                            |
  | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
  | ![https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/4a.png](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/4a.png) | ![https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/4b.png](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/4b.png) | ![1diff](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/4diff.png) |
  | ![https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/3a.png](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/3a.png) | ![https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/3b.png](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/3b.png) | ![1diff](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/3diff.png) |
  | ![https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/6a.png](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/6a.png) | ![https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/6b.png](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/6b.png) | ![1diff](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/6diff.png) |
  | ![https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/7a.png](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/7a.png) | ![https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/7b.png](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/7b.png) | ![1diff](https://github.com/whtsky/pixelmatch-py/raw/master/fixtures/7diff.png) |





  - feat: add fail_fast option [#144](https://github.com/whtsky/pixelmatch-py/pull/144)

  - type: fix typing issues
  - chore: test Python 3.10



  - feat: make package comply with PEP-561



  - typing: use `Sequence` instead of `List` for `RGBTuple`
  - build: switch to `poetry_core` [#81](https://github.com/whtsky/pixelmatch-py/pull/81)



  - feat: add function to compare PIL.Image instances through contrib.PIL.pixelmatch [#42](https://github.com/whtsky/pixelmatch-py/pull/42)



  - BREAKING CHANGE: remove `options` parameter [#38](https://github.com/whtsky/pixelmatch-py/pull/38)
  - docs: use absolute url for images in README



  - fix: fix bug in fast path [#18](https://github.com/whtsky/pixelmatch-py/pull/18)



  - Initial release


pkgId: 573b0c7cc21598f945d9241dc3f34e9270b3ccc37d25d62c0ac44bea0702308e
name: python-pkgconfig
arch: src
version: 1.5.5
epoch: 0
release: 1
summary: Interface Python with pkg-config
url: https://github.com/matze/pkgconfig
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3091bd8c-4fa7-4aa9-853a-909d6169a9f3
location_href: 00009553-python-pkgconfig/python-pkgconfig-1.5.5-1.src.rpm
checksum_type: sha256
description:
  ``pkgconfig`` is a Python module to interface with the ``pkg-config``
  command line tool for Python 3.3+.
  It can be used to
  -  find all pkg-config packages ::
         >>> packages = pkgconfig.list_all()
  -  check if a package exists ::
         >>> pkgconfig.exists('glib-2.0')
         True
  -  check if a package meets certain version requirements ::
         >>> pkgconfig.installed('glib-2.0', '< 2.26')
         False
  -  return the version ::
         >>> pkgconfig.modversion('glib-2.0')
         '2.56.3'
  -  query CFLAGS and LDFLAGS ::
         >>> pkgconfig.cflags('glib-2.0')
         '-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include'
         >>> pkgconfig.libs('glib-2.0')
         '-lglib-2.0'
  -  get all variables defined for a package::
          >>> pkgconfig.variables('glib-2.0')
          {u'exec_prefix': u'/usr'}
  -  parse the output to build extensions with setup.py ::
         >>> d = pkgconfig.parse('glib-2.0 gtk+-2.0')
         >>> d['libraries']
         [u'gtk+-2.0', u'glib-2.0']
     or ::
         >>> ext = Extension('foo', ['foo.c'])
         >>> # sets extension attributes as needed
         >>> pkgconfig.configure_extension(ext, 'glib-2.0 gtk+-2.0')
     The ``pkgconfig.parse`` function returns a dictonary of lists.
     The lists returned are accurate representations of the equivalent
     ``pkg-config`` call's result, both in content and order.
  If ``pkg-config`` is not on the path, raises ``EnvironmentError``.
  The ``pkgconfig`` module is licensed under the MIT license.


pkgId: 25f7742b316a6686562b7f30e9e47f64ef1a3059fadd254c9a54155e44c56267
name: python-pkginfo
arch: src
version: 1.9.6
epoch: 0
release: 1
summary: Query metadata from sdists / bdists / installed packages.
url: https://code.launchpad.net/~tseaver/pkginfo/trunk
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1dbbb9d7-64bf-4d9b-b048-08b38493a513
location_href: 00004557-python-pkginfo/python-pkginfo-1.9.6-1.src.rpm
checksum_type: sha256
description:
  This package provides an API for querying the distutils metadata written in
  the ``PKG-INFO`` file inside a source distribution (an ``sdist``) or a
  binary distribution (e.g., created by running ``bdist_egg``).  It can
  also query the ``EGG-INFO`` directory of an installed distribution, and
  the ``*.egg-info`` stored in a "development checkout"
  (e.g, created by running ``setup.py develop``).
  Please see the `pkginfo docs <http://packages.python.org/pkginfo>`_
  for detailed documentation.


pkgId: 5e3fdca029a07d7cd7e55d444f56fe955c6378fc7b1c31ff49d302f88bf64312
name: python-pkgwat.api
arch: src
version: 0.13
epoch: 0
release: 1
summary: Python API for querying the fedora packages webapp
url: http://github.com/fedora-infra/pkgwat.api
rpm_license: LGPLv2+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9b0f64b9-18f1-49cf-bc4b-5fe2f3691ddd
location_href: 00004559-python-pkgwat-api/python-pkgwat.api-0.13-1.src.rpm
checksum_type: sha256
description:
  Make sure you have ``virtualenv`` installed and create a new venv::
    $ virtualenv env
    $ source env/bin/activate
    $ pip install -e .


pkgId: 0b854ec2140292556a019dcf3a2ea42d4ab72f8326a83a1d72f27dd40cf3c195
name: python-plac
arch: src
version: 1.3.5
epoch: 0
release: 1
summary: The smartest command line arguments parser in the world
url: https://github.com/ialbert/plac
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-cbcecc3e-7874-4b41-9df0-796bd3ed5609
location_href: 00009502-python-plac/python-plac-1.3.5-1.src.rpm
checksum_type: sha256
description:
  `plac` is a Python package that can generate command line parameters
  from function signatures.

  `plac` works on Python 2.6 through all versions of Python 3.

  `plac` has no dependencies beyond modules already present in the Python
  standard library.

  `plac` implements most of its functionality in a single file that may be
  included in your source code.



  Here is how to turn a script that does some processing on a database
  table into a full, command-line enabled program:

  ```python

  from datetime import datetime

  def main(dsn, table='product', today=datetime.today()):
      "Do something on the database"
      print(dsn, table, today)

  if __name__ == '__main__':
      import plac
      plac.call(main)
  ```

  Here is the help message automatically generated by plac:

  ```
  python updatedb.py -h
  ```

  prints:

  ```
  usage: updatedb.py [-h] dsn [table] [today]

  Do something on the database

  positional arguments:
    dsn
    table       [product]
    today       [2019-07-28 07:18:20.054708]

  optional arguments:
     -h, --help  show this help message and exit
  ```



  The automatic inference takes us only so far, usually we need more
  control over the parameters. `plac` offers simple decorator helpers for
  positional, option and flag type parameters:

  ```python
  import plac

  from pathlib import Path

  @plac.pos('model', "Model name", choices=['A', 'B', 'C'])
  @plac.opt('output_dir', "Optional output directory", type=Path)
  @plac.opt('n_iter', "Number of training iterations", type=int)
  @plac.flg('debug', "Enable debug mode")
  def main(model, output_dir='.', n_iter=100, debug=False):
      """A script for machine learning"""
      pass

  if __name__ == '__main__':
      plac.call(main)
  ```

  Running the script with `$ python example.py -h` will give you the
  following help message: :

  ```
  usage: example.py [-h] [-o .] [-n 100] [-d] {A,B,C}

  A script for machine learning

  positional arguments:
    {A,B,C}               Model name

  optional arguments:
    -h, --help            show this help message and exit
    -o ., --output-dir .  Optional output directory
    -n 100, --n-iter 100  Number of training iterations
    -d, --debug           Enable debug mode
  ```



  The following decorator reference helps you recall what parameters are
  valid for each decorator type:

  ```python

  def pos(arg, help=None, type=None, choices=None, metavar=None):


  def opt(arg, help=None, type=None, abbrev=None, choices=None, metavar=None):


  def flg(arg, help=None, abbrev=None):
  ```

  Notably, the main functionality of `plac` is implemented in a single
  module called `plac_core.py` that, if necessary, may be included and
  distributed with your source code thus reducing external dependencies in
  your code.



  Python syntax, or your variable naming may impose constraints on what
  words may be used as parameters. To circumvent that limitation append a
  trailing underscore to the name. `plac` will strip that underscore from
  the command line parameter name:

  ```python
  import plac

  @plac.flg('list_')  # avoid clash with builtin
  @plac.flg('yield_')  # avoid clash with keyword
  @plac.opt('sys_')  # avoid clash with a very common name
  def main(list_, yield_=False, sys_=100):
      print(list_)
      print(yield_)
      print(sys_)

  if __name__ == '__main__':
      plac.call(main)
  ```

  produces the usage:

  ```
  usage: example13.py [-h] [-l] [-y] [-s 100]

  optional arguments:
    -h, --help         show this help message and exit
    -l, --list
    -y, --yield        [False]
    -s 100, --sys 100  [100]
  ```




  Your `plac` enabled program may accept multiple positional arguments and even additional key=value pairs:

  ```python
  import plac

  @plac.pos('args', help="words")
  @plac.opt('kwds', help="key=value", )
  def main(*args, **kwds):
      print(args)
      print(kwds)

  if __name__ == '__main__':
      plac.call(main)
  ```

  the usage will be:

  ```
  usage: example15.py [-h] [args ...] [kwds ...]

  positional arguments:
    args        words
    kwds        key=value

  optional arguments:
    -h, --help  show this help message and exit
  ```

  when running it as:

      python example15.py A B x=10 y=20

  the program prints:

      ('A', 'B')
      {'x': '10', 'y': '20'}



  In addition, plac can do a lot more, up to the creation of
  domain-specific languages(!). See the full documentation for more
  details.

  -   <https://plac.readthedocs.io/en/latest/>



  If you wish to install the package do

      pip install plac

  If you prefer to install the full distribution from source, including
  the documentation, download the
  [tarball](https://pypi.org/project/plac/#files), unpack it and run

      python setup.py install



  Run

      python doc/test_plac.py

  You will see several apparent errors, but this is right, since the tests
  are checking for several error conditions. The important thing is that
  you get at the a line like

  `Executed XX tests OK`



  -   <https://github.com/ialbert/plac>

  Author: Michele Simionato, <michele.simionato@gmail.com>

  Maintainer: Istvan Albert, <istvan.albert@gmail.com>



  -   <https://github.com/ialbert/plac/issues>



  BSD License


pkgId: db92a333bdfbcca1c4331b24a656af2b2d26fd1e7a57182b7bf671d6d626947d
name: python-placebo
arch: src
version: 0.10.0
epoch: 0
release: 1
summary: Make boto3 calls that look real but have no effect
url: https://github.com/garnaat/placebo
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-6da919d2-73c7-4dee-a0f1-d7765da87955
location_href: 00011354-python-placebo/python-placebo-0.10.0-1.src.rpm
checksum_type: sha256
description:
  [![codecov](https://codecov.io/gh/garnaat/placebo/branch/develop/graph/badge.svg?token=ukrsVmWxwv)](https://codecov.io/gh/garnaat/placebo)
  Placebo allows you to mock boto3 calls that look just like normal calls but
  actually have no effect at all.  It does this by allowing you to record a set
  of calls and save them to a data file and then replay those calls later
  (e.g. in a unit test) without ever hitting the AWS endpoints.


pkgId: b6774b23ea52948ef5b1174bfb3a3e023129a22e46ecb4ab21b344489301ecff
name: python-placekey
arch: src
version: 0.0.12
epoch: 0
release: 1
summary: Utilities for working with Placekeys
url: https://github.com/Placekey/placekey-py
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7fa2fb89-a798-4505-9a2b-bb8be041d237
location_href: 00013228-python-placekey/python-placekey-0.0.12-1.src.rpm
checksum_type: sha256
description:
  [![PyPI version](https://badge.fury.io/py/placekey.svg)](https://badge.fury.io/py/placekey)
  [![PyPI downloads](https://img.shields.io/pypi/dm/placekey)](https://pypistats.org/packages/placekey)
  [![version](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)

  A Python library for working with [Placekeys](https://placekey.io). Documentation for this package can be found [here](https://placekey.github.io/placekey-py/), and documentation for the Placekey service API can be found [here](https://docs.placekey.io/). The Plackey design specification is available [here](https://docs.placekey.io/Placekey_Technical_White_Paper.pdf). The details in Placekey encoding is [here](https://docs.placekey.io/Placekey_Encoding_Specification%20White_Paper.pdf). We welcome your feedback.



  This package can be installed from [PyPI](https://pypi.org/project/placekey/) by

  ```shell script
  pip install placekey
  ```

  MacOS Big Sur may need to run `brew install geos` if the installation of the `shapely` dependency fails.



  The basic functionality of the Placekey library is conversion between Placekeys and latitude-longitude coordinates.

  ```python
  >>> import placekey as pk
  >>> lat, long = 0.0, 0.0
  >>> pk.geo_to_placekey(lat, long)
  '@dvt-smp-tvz'
  ```

  ```python
  >>> pk.placekey_to_geo('@dvt-smp-tvz')
  (0.00018033323813810344, -0.00018985758738881587)
  ```

  The library also allows for conversion between Placekeys and [H3 indices](https://github.com/uber/h3-py).

  ```python
  >>> pk.placekey_to_h3('@dvt-smp-tvz')
  '8a754e64992ffff'
  ```

  ```python
  >>> pk.h3_to_placekey('8a754e64992ffff')
  '@dvt-smp-tvz'
  ```

  The distance in meters between two Placekeys can be found with the following function.

  ```python
  >>> pk.placekey_distance('@dvt-smp-tvz', '@5vg-7gq-tjv')
  12795124.895573696
  ```

  An upper bound on the maximal distance in meters between two Placekeys based on the length of their shared prefix is provided by `placekey.get_prefix_distance_dict()`.

  ```python
  >>> pk.get_prefix_distance_dict()
  {0: 20040000.0,
   1: 20040000.0,
   2: 2777000.0,
   3: 1065000.0,
   4: 152400.0,
   5: 21770.0,
   6: 8227.0,
   7: 1176.0,
   8: 444.3,
   9: 63.47}
  ```

  Placekeys found in a data set can be partially validated by

  ```python
  >>> pk.placekey_format_is_valid('222-227@dvt-smp-tvz')
  True
  ```

  ```python
  >>> pk.placekey_format_is_valid('@123-456-789')
  False
  ```



  This package also includes a client for the Placekey API. The methods in the client are automatically rate limited.

  ```python
  >>> from placekey.api import PlacekeyAPI
  >>> placekey_api_key = "..."
  >>> pk_api = PlacekeyAPI(placekey_api_key)
  ```

  The `PlacekeyAPI.lookup_placekey` method can be used to lookup the Placekey for a single place.

  ```python
  >>> pk_api.lookup_placekey(latitude=37.7371, longitude=-122.44283)
  {'query_id': '0', 'placekey': '@5vg-82n-kzz'}
  ```

  ```python
  >>> place = {
  >>>   "street_address": "598 Portola Dr",
  >>>   "city": "San Francisco",
  >>>   "region": "CA",
  >>>   "postal_code": "94131",
  >>>   "iso_country_code": "US"
  >>> }
  >>> pk_api.lookup_placekey(**place, strict_address_match=True)
  {'query_id': '0', 'placekey': '227@5vg-82n-pgk'}
  ```

  The `PlacekeyAPI.lookup_placekeys` method can be used to lookup Placekeys for multiple places.

  ```python
  >>> places = [
  >>>   {
  >>>     "street_address": "1543 Mission Street, Floor 3",
  >>>     "city": "San Francisco",
  >>>     "region": "CA",
  >>>     "postal_code": "94105",
  >>>     "iso_country_code": "US"
  >>>   },
  >>>   {
  >>>     "query_id": "thisqueryidaloneiscustom",
  >>>     "location_name": "Twin Peaks Petroleum",
  >>>     "street_address": "598 Portola Dr",
  >>>     "city": "San Francisco",
  >>>     "region": "CA",
  >>>     "postal_code": "94131",
  >>>     "iso_country_code": "US"
  >>>   },
  >>>   {
  >>>     "latitude": 37.7371,
  >>>     "longitude": -122.44283
  >>>   }
  >>> ]
  >>> pk_api.lookup_placekeys(places)
  [{'query_id': 'place_0', 'placekey': '226@5vg-7gq-5mk'},
   {'query_id': 'thisqueryidaloneiscustom', 'placekey': '227-222@5vg-82n-pgk'},
   {'query_id': 'place_2', 'placekey': '@5vg-82n-kzz'}]
  ```

  Full details on how to query the API and how to get an API key can be found [here](https://docs.placekey.io/).



  Jupyter notebooks demonstrating various Placekey functionality are contained in the [placekey-notebooks](https://github.com/Placekey/placekey-notebooks) repository.



  This package runs on Python 3.


pkgId: 03ea5f70e43f206234f387b365949e9ba4b9fc9cba50197ad15612171a6daf9e
name: python-player
arch: src
version: 0.6.1
epoch: 0
release: 1
summary: Pyramid view layers
url: https://github.com/fafhrd91/player/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-99343d56-a876-4092-b98d-108600e3b8d7
location_href: 00004564-python-player/python-player-0.6.1-1.src.rpm
checksum_type: sha256
description:
  player allows to address templates with two parameters,
  category and name. Also it is possible to use set of directories
  for each layer, in that case `player` searches templates
  in each directory. It allows to override templates without changing
  code. For example form library can define layer `field`::
       >> ls ./fields/
  In your application you can override any of this template by defining
  new layer for `field` category::
       >> ls ./myproject/fields/
  Usually top level directory is a category and file in directory is template.
  For example 'form:view.lt'::
      `form` - layer category
      `view` - template name
      `.lt`  - custom pyramid renderer factory
  Layer can to be defined with `add_layer` config directive:
      >> config = Configurator()
  `form` directory can contain any template:
      >> ./form/
  It is possible to use any of this templates as pyramid renderer path:
      >> config.add_view(
  or :
      >> config.add_view(
  It is possible to run python code before rendering template.
  There are `add_tmpl_filter` directive and `player.tmpl_filter`
  decorator:
      >> def form_actions(context, request):
      >> config.add_tmpl_filter('form:actions', form_action, name='custom')
  or:
      >> import player
      >> @player.tmpl_filter('form:actions', name='custom')
  `form_actions` function gets call just before rendering template.
  Layer has to be defined with `add_layer` directve before registering
  template filter function.


pkgId: 4febdd43f6c442a4afd7ba2d2a8f1ce61215870fdfe1babfe15e0b2266c6325e
name: python-plotnine
arch: src
version: 0.10.1
epoch: 0
release: 1
summary: A grammar of graphics for python
url: https://plotnine.readthedocs.io/en/stable
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ec3a368e-14c8-4a1b-ab72-f161c2e676d3
location_href: 00010830-python-plotnine/python-plotnine-0.10.1-1.src.rpm
checksum_type: sha256
description:
  Plotnine has tests that generate images which are compared to baseline images known
  to be correct. To generate images that are consistent across all systems you have
  to install matplotlib from source. You can do that with ``pip`` using the command.
  ```console
  $ pip install matplotlib --no-binary matplotlib
  ```
  Otherwise there may be small differences in the text rendering that throw off the
  image comparisons.


pkgId: 4e9c62141c9b1cb7189edd51169801df253763098b9e1f561e4f1741ec187935
name: python-pluginbase
arch: src
version: 1.0.1
epoch: 0
release: 1
url: http://github.com/mitsuhiko/pluginbase
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-613442e0-acf9-4c78-a8e5-8a774c15c4ba
location_href: 00004566-python-pluginbase/python-pluginbase-1.0.1-1.src.rpm
checksum_type: sha256
summary:
  PluginBase is a module for Python that enables the development of flexible plugin systems in Python.

description:
  PluginBase is a module for Python that enables the development of flexible plugin systems in Python.
  Step 1:
     from pluginbase import PluginBase
     plugin_base = PluginBase(package='yourapplication.plugins')
  Step 2:
     plugin_source = plugin_base.make_plugin_source(
         searchpath=['./path/to/plugins', './path/to/more/plugins'])
  Step 3:
     with plugin_source:
         from yourapplication.plugins import my_plugin
     my_plugin.do_something_cool()
  Or alternatively:
     my_plugin = plugin_source.load_plugin('my_plugin')
     my_plugin.do_something_cool()


pkgId: 637152a32a031510b4460972927fda6e0cbf660b730bcfb4189b55bed251d38e
name: python-plugnplay
arch: src
version: 0.5.4
epoch: 0
release: 1
summary: A Generic plug-in system for python
url: http://github.com/daltonmatos/plugnplay
rpm_license: GPLv2
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0606043c-8898-47e6-9751-0f23524f0071
location_href: 00004568-python-plugnplay/python-plugnplay-0.5.4-1.src.rpm
checksum_type: sha256
description:
  Plug n' Play
  ************

  Plug n' PLay (PnP) is a Generic plug-in system inspired by Trac's (http://trac.edgewall.org)
  internal component management. With PnP you can turn any program into a pluggable software very easily.

  You just have to define the Interfaces and let others implement them. When your code is running
  you can dynamically retrieve who are the classes that implement a certain Interface, and call
  the specific methods.

  A simple example
  ****************

  Think this way: You have e very simple program that just copy files around.

  Say you want to check if the copy was OK by calculating the MD5 hash of the
  two files (the original and the copy). You can do this implementing the MD5 check
  inside your main code, that's OK too, but when you need to add another check
  (e.g. calculate the SHA-1 of the files) you will have to modify your code so
  it can call two methods, the MD5 checker and the SHA-1 checker.

  With PnP you write only the main piece of the program, the part that does only the copying,
  and the hash checkers you can implement whenever you want, *without* any modification
  to the main code.

  PnP is roughly a implementation of the Observer pattern (http://en.wikipedia.org/wiki/Observer_pattern).

  The code for this example
  *************************

  Ok, too much talk, now some code. A pseudo-code to the example above would be:

  ::

       class CopyListener(Interface):
          def copy_finished(self, original_file, new_file):
            pass



  The main code would be:

  ::

     PnP.load_plugins("/some/path/with/python/files") # egg files in the future?.
     copy_file(file1, file2)

     
     
     copy_listeners = CopyListener.implementors()

     
     for listener in copy_listeners:
       listener.copy_finished(file1, file2)


  And an example of one such observer would be:

  ::

     from myproject.interfaces import CopyListener

     class MD5Check(Plugin):
       implements = [CopyListener,]

       def copy_finished(self, file1, file2):
          md5_1 = hash.md5(file1.read()).hexdigest()
          md5_2 = hash.md5(file2.read()).hexdigest()
          if md5_1 is not md5_2:
            


  Conclusion
  **********

  Did you like this project? Very nice, so help me write it! Fork the repo and
  send me some pull requests! Or talk to me directly if you have some great ideas to implement!


  Thanks,

  Dalton Barreto


pkgId: 0b36a54f695b08fa0da87ab9703534853cd733b3c0fa9056bb25d7e2f00183ee
name: python-ply
arch: src
version: 3.11
epoch: 0
release: 1
summary: Python Lex & Yacc
url: http://www.dabeaz.com/ply/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b730b94c-9f80-4d46-9d6b-18302e6e03c4
location_href: 00004570-python-ply/python-ply-3.11-1.src.rpm
checksum_type: sha256
description:
  PLY is yet another implementation of lex and yacc for Python. Some notable
  features include the fact that its implemented entirely in Python and it
  uses LALR(1) parsing which is efficient and well suited for larger grammars.

  PLY provides most of the standard lex/yacc features including support for empty
  productions, precedence rules, error recovery, and support for ambiguous grammars.

  PLY is extremely easy to use and provides very extensive error checking.
  It is compatible with both Python 2 and Python 3.


pkgId: 5a8c659a5415982bc5008661aecce82b4c010bc13a7f659e06e90123f88288db
name: python-plyer
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: Platform-independent wrapper for platform-dependent APIs
url: https://plyer.readthedocs.org/en/latest/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9ea2b9f9-cefc-4b56-86e9-05533dd5150a
location_href: 00013876-python-plyer/python-plyer-2.1.0-1.src.rpm
checksum_type: sha256
description:
  Plyer is a platform-independent api to use features commonly found on various
  platforms, notably mobile ones, in Python.

  [![coverage](https://coveralls.io/repos/kivy/plyer/badge.svg?branch=master)](https://coveralls.io/r/kivy/plyer?branch=master)
  [![Backers on Open Collective](https://opencollective.com/kivy/backers/badge.svg)](#backers)
  [![Sponsors on Open Collective](https://opencollective.com/kivy/sponsors/badge.svg)](#sponsors)
  ![Continuous Integration with Ubuntu](https://github.com/kivy/plyer/workflows/Continuous%20Integration%20with%20Ubuntu/badge.svg)
  ![Continuous Integration with OSX](https://github.com/kivy/plyer/workflows/Continuous%20Integration%20with%20OSX/badge.svg)
  ![Continuous Integration with Windows](https://github.com/kivy/plyer/workflows/Continuous%20Integration%20with%20Windows/badge.svg)
  ![Deploy to PyPI](https://github.com/kivy/plyer/workflows/Deploy%20to%20PyPI/badge.svg)




  Plyer tries not to reinvent the wheel, and will call for external libraries to
  implement the api in the easiest way, depending on the current platform.

  - On Android(python-for-android), pyjnius is used
  - On iOS(kivy-ios), pyobjus is used
  - On windows/mac/linux, commonly found libraries and programs will be used




  | Platform                       | Android | iOS | Windows | OS X | Linux |
  | ------------------------------ | ------- | --- | ------- | ---- | ----- |
  | Accelerometer                  | ✔       | ✔   |         | ✔    | ✔     |
  | Audio recording                | ✔       |     | ✔       | ✔    |       |
  | Barometer                      | ✔       | ✔   |         |      |       |
  | Battery                        | ✔       | ✔   | ✔       | ✔    | ✔     |
  | Bluetooth                      | ✔       |     |         | ✔    |       |
  | Brightness                     | ✔       | ✔   |         |      | ✔     |
  | Call                           | ✔       | ✔   |         |      |       |
  | Camera (taking picture)        | ✔       | ✔   |         |      |       |
  | Compass                        | ✔       | ✔   |         |      |       |
  | CPU count                      |         |     | ✔       | ✔    | ✔     |
  | Devicename                     | ✔       |     | ✔       | ✔    | ✔     |
  | Email (open mail client)       | ✔       | ✔   | ✔       | ✔    | ✔     |
  | Flash                          | ✔       | ✔   |         |      |       |
  | GPS                            | ✔       | ✔   |         |      |       |
  | Gravity                        | ✔       | ✔   |         |      |       |
  | Gyroscope                      | ✔       | ✔   |         |      |       |
  | Humidity                       | ✔       |     |         |      |       |
  | IR Blaster                     | ✔       |     |         |      |       |
  | Keystore                       | ✔       | ✔   | ✔       | ✔    | ✔     |
  | Light                          | ✔       |     |         |      |       |
  | Native file chooser            | ✔       | ✔   | ✔       | ✔    | ✔     |
  | Notifications                  | ✔       |     | ✔       | ✔    | ✔     |
  | Orientation                    | ✔       |     |         |      | ✔     |
  | Proximity                      | ✔       |     |         |      |       |
  | Screenshot                     |         |     | ✔       | ✔    | ✔     |
  | SMS (send messages)            | ✔       | ✔   |         |      |       |
  | Spatial Orientation            | ✔       | ✔   |         |      |       |
  | Speech to text                 | ✔       |     |         |      |       |
  | Storage Path                   | ✔       | ✔   | ✔       | ✔    | ✔     |
  | Temperature                    | ✔       |     |         |      |       |
  | Text to speech                 | ✔       | ✔   | ✔       | ✔    | ✔     |
  | Unique ID                      | ✔       | ✔   | ✔       | ✔    | ✔     |
  | Vibrator                       | ✔       | ✔   |         |      |       |
  | Wifi                           |         |     | ✔       | ✔    | ✔     |




  To use on desktop: `pip install plyer`
  To use in python-for-android/kivy-ios: add `plyer` to your requirements if needed.



  If you need assistance, you can ask for help on our mailing list:

  * User Group : https://groups.google.com/group/kivy-users
  * Email      : kivy-users@googlegroups.com

  Discord channel:

  * Server     : https://chat.kivy.org
  * Channel    : #dev




  We love pull requests and discussing novel ideas. Check out our
  [contribution guide](http://kivy.org/docs/contribute.html) and
  feel free to improve Plyer.

  The following mailing list and IRC channel are used exclusively for
  discussions about developing the Kivy framework and its sister projects:

  * Dev Group : https://groups.google.com/group/kivy-dev
  * Email     : kivy-dev@googlegroups.com

  IRC channel:

  * Server  : irc.freenode.net
  * Port    : 6667, 6697 (SSL only)
  * Channel : #kivy-dev




  Plyer is released under the terms of the MIT License. Please refer to the
  LICENSE file.



  This project exists thanks to all the people who contribute. [[Contribute](http://kivy.org/docs/contribute.html)].

  <a href="https://github.com/kivy/plyer/graphs/contributors"><img src="https://contrib.rocks/image?repo=kivy/plyer"/></a>



  Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/kivy#backer)]

  <a href="https://opencollective.com/kivy#backers" target="_blank"><img src="https://opencollective.com/kivy/backers.svg?width=890"></a>




  Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/kivy#sponsor)]

  <a href="https://opencollective.com/kivy/sponsor/0/website" target="_blank"><img src="https://opencollective.com/kivy/sponsor/0/avatar.svg"></a>
  <a href="https://opencollective.com/kivy/sponsor/1/website" target="_blank"><img src="https://opencollective.com/kivy/sponsor/1/avatar.svg"></a>
  <a href="https://opencollective.com/kivy/sponsor/2/website" target="_blank"><img src="https://opencollective.com/kivy/sponsor/2/avatar.svg"></a>
  <a href="https://opencollective.com/kivy/sponsor/3/website" target="_blank"><img src="https://opencollective.com/kivy/sponsor/3/avatar.svg"></a>
  <a href="https://opencollective.com/kivy/sponsor/4/website" target="_blank"><img src="https://opencollective.com/kivy/sponsor/4/avatar.svg"></a>
  <a href="https://opencollective.com/kivy/sponsor/5/website" target="_blank"><img src="https://opencollective.com/kivy/sponsor/5/avatar.svg"></a>
  <a href="https://opencollective.com/kivy/sponsor/6/website" target="_blank"><img src="https://opencollective.com/kivy/sponsor/6/avatar.svg"></a>
  <a href="https://opencollective.com/kivy/sponsor/7/website" target="_blank"><img src="https://opencollective.com/kivy/sponsor/7/avatar.svg"></a>
  <a href="https://opencollective.com/kivy/sponsor/8/website" target="_blank"><img src="https://opencollective.com/kivy/sponsor/8/avatar.svg"></a>
  <a href="https://opencollective.com/kivy/sponsor/9/website" target="_blank"><img src="https://opencollective.com/kivy/sponsor/9/avatar.svg"></a>






  [Full Changelog](https://github.com/kivy/plyer/compare/2.0.0...2.1.0)

  **Implemented enhancements:**

  - Use xdg-desktop-portal for Notification inside Flatpak [\#680](https://github.com/kivy/plyer/pull/680) ([JakobDev](https://github.com/JakobDev))

  **Closed issues:**

  - Exception is thrown on try to play recorded audio clip [\#713](https://github.com/kivy/plyer/issues/713)
  - iOS: filechooser - multiple files selection is not working [\#707](https://github.com/kivy/plyer/issues/707)
  - Speech to text is not working with api 30 or more [\#693](https://github.com/kivy/plyer/issues/693)
  - Traceback \(most recent call last\):
     File "jnius/jnius\_proxy.pxi", line 50, in jnius.jnius.PythonJavaClass.invoke
     File "jnius/jnius\_proxy.pxi", line 74, in jnius.jnius.PythonJavaClass.\_invoke
   NotImplementedError: The method \('onLocationChanged', \('V', \('Ljava/util/List;',\)\)\) is not implemented [\#687](https://github.com/kivy/plyer/issues/687)
  - Notify on Windows but without archiving notifications [\#684](https://github.com/kivy/plyer/issues/684)
  - Notification icon as base64 instead of path [\#679](https://github.com/kivy/plyer/issues/679)
  - plyer's last release was ~2 years ago, the number of open PRs is absurd, and the last meaningful commit was months ago [\#674](https://github.com/kivy/plyer/issues/674)
  - iOS Filechooser that picks all document types \(UIDocumentPickerViewController\) [\#673](https://github.com/kivy/plyer/issues/673)
  - Python dbus error on Linux when sending notification [\#658](https://github.com/kivy/plyer/issues/658)
  - Is that project dead? [\#650](https://github.com/kivy/plyer/issues/650)
  - Notification for android not working \[ Drawable.icon \] [\#647](https://github.com/kivy/plyer/issues/647)
  - audio don't work on android [\#644](https://github.com/kivy/plyer/issues/644)
  - Unittests are failing on new clone [\#637](https://github.com/kivy/plyer/issues/637)
  - Proposing a PR to fix a few small typos [\#622](https://github.com/kivy/plyer/issues/622)
  - Remove python2 mentions from setup.py [\#608](https://github.com/kivy/plyer/issues/608)
  - vibrator on android 10 java.lang.SecurityException [\#606](https://github.com/kivy/plyer/issues/606)
  - How to change prompt input to upper or lower case in JS? [\#603](https://github.com/kivy/plyer/issues/603)
  - Does this repo is maintained? [\#592](https://github.com/kivy/plyer/issues/592)
  - Plyer notification not working on android [\#591](https://github.com/kivy/plyer/issues/591)
  - Feature Request: Add Intent to Android Gallery\(for Pictures\) [\#588](https://github.com/kivy/plyer/issues/588)
  - plyer.filechooser.save\_file doesn't work on macOS X Catalina [\#578](https://github.com/kivy/plyer/issues/578)
  - macOS notification NSUserNotificationCenter is deprecated + missing Info.plist [\#449](https://github.com/kivy/plyer/issues/449)

  **Merged pull requests:**

  - action-gh-release now uses `github.token` [\#724](https://github.com/kivy/plyer/pull/724) ([misl6](https://github.com/misl6))
  - Bump version to 2.1.0 for release [\#723](https://github.com/kivy/plyer/pull/723) ([misl6](https://github.com/misl6))
  - Bump action-gh-release to a newer version [\#721](https://github.com/kivy/plyer/pull/721) ([misl6](https://github.com/misl6))
  - Update supported Python versions [\#720](https://github.com/kivy/plyer/pull/720) ([misl6](https://github.com/misl6))
  - Fixes some E275. + other minor PEP8 fixes [\#711](https://github.com/kivy/plyer/pull/711) ([misl6](https://github.com/misl6))
  - Document linux support for orientation [\#709](https://github.com/kivy/plyer/pull/709) ([rshah713](https://github.com/rshah713))
  - Document supported platforms for humidity [\#704](https://github.com/kivy/plyer/pull/704) ([rshah713](https://github.com/rshah713))
  - Keyword should only hold name of license [\#701](https://github.com/kivy/plyer/pull/701) ([rshah713](https://github.com/rshah713))
  - Document supported platforms in native filechooser [\#700](https://github.com/kivy/plyer/pull/700) ([rshah713](https://github.com/rshah713))
  - Fix Keystore comment to point at correct class [\#697](https://github.com/kivy/plyer/pull/697) ([rshah713](https://github.com/rshah713))
  - Add missing platform for barometer [\#695](https://github.com/kivy/plyer/pull/695) ([rshah713](https://github.com/rshah713))
  - Add missing platforms in audio [\#694](https://github.com/kivy/plyer/pull/694) ([rshah713](https://github.com/rshah713))
  - Fixes a failing test for notification [\#692](https://github.com/kivy/plyer/pull/692) ([misl6](https://github.com/misl6))
  - Fixes style check [\#691](https://github.com/kivy/plyer/pull/691) ([misl6](https://github.com/misl6))
  - Clear documentation for Processors [\#689](https://github.com/kivy/plyer/pull/689) ([rshah713](https://github.com/rshah713))
  - Create clear documentation for Keystore [\#688](https://github.com/kivy/plyer/pull/688) ([rshah713](https://github.com/rshah713))
  - Added tick in ios native file chooser row [\#685](https://github.com/kivy/plyer/pull/685) ([Neizvestnyj](https://github.com/Neizvestnyj))
  - :zap: Fix pep8 violations [\#678](https://github.com/kivy/plyer/pull/678) ([Zen-CODE](https://github.com/Zen-CODE))
  - :hammer: Fix pep 8 failure for CICD [\#677](https://github.com/kivy/plyer/pull/677) ([Zen-CODE](https://github.com/Zen-CODE))
  - fix some errors in readme file [\#676](https://github.com/kivy/plyer/pull/676) ([AdamMusa](https://github.com/AdamMusa))
  - android 11+ compatibility Documents folder [\#672](https://github.com/kivy/plyer/pull/672) ([moonpyx](https://github.com/moonpyx))
  - Use sys.getandroidapilevel for more robust Android detection [\#670](https://github.com/kivy/plyer/pull/670) ([rdb](https://github.com/rdb))
  - More robust way to get application icon on Android for notification [\#669](https://github.com/kivy/plyer/pull/669) ([rdb](https://github.com/rdb))
  - Added the ability to track the closure of the file manager without selecting content [\#667](https://github.com/kivy/plyer/pull/667) ([Neizvestnyj](https://github.com/Neizvestnyj))
  - Fix bug, when user canceled filechooser, `on_selection` does not dispatched [\#666](https://github.com/kivy/plyer/pull/666) ([Neizvestnyj](https://github.com/Neizvestnyj))
  - Bigger buffer, allows large selection [\#655](https://github.com/kivy/plyer/pull/655) ([akshayaurora](https://github.com/akshayaurora))
  - fix: fix filechooser save dialog for the KDE [\#652](https://github.com/kivy/plyer/pull/652) ([psyrykh](https://github.com/psyrykh))
  - Change R$drawable to R$mipmap in notification.py for android platform [\#648](https://github.com/kivy/plyer/pull/648) ([masterjoseph914](https://github.com/masterjoseph914))
  - linux/storagepath: fixup a host of issues [\#646](https://github.com/kivy/plyer/pull/646) ([rski](https://github.com/rski))
  - Change `PythonActivity` java class [\#642](https://github.com/kivy/plyer/pull/642) ([Neizvestnyj](https://github.com/Neizvestnyj))
  - Enabled transient notifications on Linux [\#639](https://github.com/kivy/plyer/pull/639) ([olumidesan](https://github.com/olumidesan))
  - updated-device-name-implementation-for-backward-compatibility [\#634](https://github.com/kivy/plyer/pull/634) ([ljnath](https://github.com/ljnath))
  - Added contributors in readme.md file [\#633](https://github.com/kivy/plyer/pull/633) ([ljnath](https://github.com/ljnath))
  - Fixed pep8 errors [\#632](https://github.com/kivy/plyer/pull/632) ([ljnath](https://github.com/ljnath))
  - Removed python2.6|7 reference and added reference for python 3.6|7|8  [\#631](https://github.com/kivy/plyer/pull/631) ([ljnath](https://github.com/ljnath))
  - Support to get android device name or hostname for linux and windows [\#630](https://github.com/kivy/plyer/pull/630) ([ljnath](https://github.com/ljnath))
  - \#611 add filters for file chooser on android [\#624](https://github.com/kivy/plyer/pull/624) ([akshayaurora](https://github.com/akshayaurora))
  - docs: fix a few simple typos [\#623](https://github.com/kivy/plyer/pull/623) ([akshayaurora](https://github.com/akshayaurora))
  - Add check for Trinity Desktop Environment [\#620](https://github.com/kivy/plyer/pull/620) ([akshayaurora](https://github.com/akshayaurora))
  - FileChooser: MacOS: Use objectAtIndex\_ to get multiple items [\#618](https://github.com/kivy/plyer/pull/618) ([akshayaurora](https://github.com/akshayaurora))
  - add installation section in README.md [\#563](https://github.com/kivy/plyer/pull/563) ([tshirtman](https://github.com/tshirtman))



  [Full Changelog](https://github.com/kivy/plyer/compare/1.4.3...2.0.0)

  **Closed issues:**

  - Macox notification - AttributeError: 'NoneType' object has no attribute 'setDelegate\_' [\#586](https://github.com/kivy/plyer/issues/586)
  - Can't display notifications with Plyer [\#582](https://github.com/kivy/plyer/issues/582)
  - Unable to set app orientation [\#579](https://github.com/kivy/plyer/issues/579)
  - Does plyer allow you to open another app? [\#577](https://github.com/kivy/plyer/issues/577)
  - Calling notification.notify\(\) raises "No Usable Implementation Found!" Error on Android [\#575](https://github.com/kivy/plyer/issues/575)
  - tts is not working [\#572](https://github.com/kivy/plyer/issues/572)
  - bluetooth for Android [\#571](https://github.com/kivy/plyer/issues/571)
  - raise NotImplementedError\(\)  NotImplementedError when I use tts  [\#567](https://github.com/kivy/plyer/issues/567)
  - Filter variable may be uninitialized in MacOSX filechooser [\#566](https://github.com/kivy/plyer/issues/566)
  - Plyer camera cannot save image to the IOS phone [\#561](https://github.com/kivy/plyer/issues/561)
  - How to turn on gps  ?? [\#556](https://github.com/kivy/plyer/issues/556)
  - How to disable mock location \(fake gps\) in kivy  [\#555](https://github.com/kivy/plyer/issues/555)
  - Release notes for v 1.4.3? [\#550](https://github.com/kivy/plyer/issues/550)
  - battery.status isCharging always shows false in WINDOWS [\#541](https://github.com/kivy/plyer/issues/541)
  - Filechooser on mac: using path, crashes python [\#524](https://github.com/kivy/plyer/issues/524)
  - Android Filechooser not working [\#512](https://github.com/kivy/plyer/issues/512)

  **Merged pull requests:**

  - Some APIs are only available for open panels. [\#590](https://github.com/kivy/plyer/pull/590) ([matham](https://github.com/matham))
  - Fix uninitialized variable in MacOSX filechooser. [\#568](https://github.com/kivy/plyer/pull/568) ([Mulugruntz](https://github.com/Mulugruntz))
  - Fixing crash on MacOSX filechooser [\#565](https://github.com/kivy/plyer/pull/565) ([Mulugruntz](https://github.com/Mulugruntz))
  - Uses Python 3 syntax [\#554](https://github.com/kivy/plyer/pull/554) ([AndreMiras](https://github.com/AndreMiras))
  - Feature/drop python2 [\#553](https://github.com/kivy/plyer/pull/553) ([AndreMiras](https://github.com/AndreMiras))
  - Fixes linter errors [\#552](https://github.com/kivy/plyer/pull/552) ([AndreMiras](https://github.com/AndreMiras))
  - Remove unused linters [\#548](https://github.com/kivy/plyer/pull/548) ([ghost](https://github.com/ghost))
  - Fix linter warnings [\#547](https://github.com/kivy/plyer/pull/547) ([ghost](https://github.com/ghost))
  - Modification of Status isCharging in windows [\#546](https://github.com/kivy/plyer/pull/546) ([irm19](https://github.com/irm19))



  [Full Changelog](https://github.com/kivy/plyer/compare/1.4.2...1.4.3)

  **Closed issues:**

  - IOS - GPS : 'IosGPS' object has no attribute '\_location\_manager' [\#538](https://github.com/kivy/plyer/issues/538)
  - Android FileChooser crashes when back button pressed [\#534](https://github.com/kivy/plyer/issues/534)
  - Notification not working on android [\#533](https://github.com/kivy/plyer/issues/533)
  - FileChooser on Android: "on selection" fires multiple times. [\#530](https://github.com/kivy/plyer/issues/530)
  - KIVY cannot access the android camera.. [\#521](https://github.com/kivy/plyer/issues/521)
  - No notification icons on Linux \(Gnome\) [\#514](https://github.com/kivy/plyer/issues/514)
  - Vibrator is not working on Android [\#509](https://github.com/kivy/plyer/issues/509)
  - notification.notify crashes Android Pie devices [\#504](https://github.com/kivy/plyer/issues/504)
  - Vibrate revision in api 26 [\#501](https://github.com/kivy/plyer/issues/501)

  **Merged pull requests:**

  - Fix linter warnings in examples/gps/main.py [\#545](https://github.com/kivy/plyer/pull/545) ([ghost](https://github.com/ghost))
  - Switch to GitHub actions [\#544](https://github.com/kivy/plyer/pull/544) ([ghost](https://github.com/ghost))
  - Fix crash in Android Notification \(SDK\_INT \>= 26\) [\#543](https://github.com/kivy/plyer/pull/543) ([ghost](https://github.com/ghost))
  - Add native iOS FileBrowser [\#542](https://github.com/kivy/plyer/pull/542) ([Zen-CODE](https://github.com/Zen-CODE))
  - Prevent crash when cancelling filechooser [\#536](https://github.com/kivy/plyer/pull/536) ([Zen-CODE](https://github.com/Zen-CODE))
  - Make win filechooser use modern windows browser and fix small issues. [\#535](https://github.com/kivy/plyer/pull/535) ([matham](https://github.com/matham))
  - Prevent re-binding of callback on each call [\#532](https://github.com/kivy/plyer/pull/532) ([Zen-CODE](https://github.com/Zen-CODE))
  - Add permission request to plyer GPS example [\#529](https://github.com/kivy/plyer/pull/529) ([Zen-CODE](https://github.com/Zen-CODE))
  - Handle absence of LinuxFileChooser backend [\#526](https://github.com/kivy/plyer/pull/526) ([Cheaterman](https://github.com/Cheaterman))
  - Fix vibrator, which was not working on Android devices. [\#523](https://github.com/kivy/plyer/pull/523) ([ghost](https://github.com/ghost))
  - Added logic to support the `on_status` method of the gps facade for i… [\#519](https://github.com/kivy/plyer/pull/519) ([Dirk-Sandberg](https://github.com/Dirk-Sandberg))
  - Fix default audio file\_path assignment error, file\_path change for Py3 [\#518](https://github.com/kivy/plyer/pull/518) ([Nephyx](https://github.com/Nephyx))
  - Add Windows applications storage path [\#517](https://github.com/kivy/plyer/pull/517) ([magnusvmt](https://github.com/magnusvmt))
  - fix typo in supported API list [\#516](https://github.com/kivy/plyer/pull/516) ([holdbar](https://github.com/holdbar))
  - fix the issue that tts.speak\(\) crashes on android [\#511](https://github.com/kivy/plyer/pull/511) ([Chao-Jen](https://github.com/Chao-Jen))
  - Addresses plyer issue \#240. [\#502](https://github.com/kivy/plyer/pull/502) ([Dirk-Sandberg](https://github.com/Dirk-Sandberg))
  - Update README.md to add opencollective [\#499](https://github.com/kivy/plyer/pull/499) ([tito](https://github.com/tito))
  - Bump to 1.4.0 for release [\#496](https://github.com/kivy/plyer/pull/496) ([KeyWeeUsr](https://github.com/KeyWeeUsr))



  [Full Changelog](https://github.com/kivy/plyer/compare/1.4.1...1.4.2)



  [Full Changelog](https://github.com/kivy/plyer/compare/1.4.0...1.4.1)

  **Closed issues:**

  - I'll be Working on Linux audio [\#497](https://github.com/kivy/plyer/issues/497)
  - Notification and service [\#494](https://github.com/kivy/plyer/issues/494)
  - Windows notification - NotImplementedError: No usable implementation found! [\#485](https://github.com/kivy/plyer/issues/485)
  - macOS notification NSUserNotificationCenter is deprecated + missing Info.plist [\#449](https://github.com/kivy/plyer/issues/449)



  [Full Changelog](https://github.com/kivy/plyer/compare/1.3.2...1.4.0)

  **Implemented enhancements:**

  - Windows microphone support [\#179](https://github.com/kivy/plyer/issues/179)

  **Closed issues:**

  - jnius.jnius.JavaException: Class not found 'android/content/INTENT' [\#479](https://github.com/kivy/plyer/issues/479)
  - macOS storagepath uses non-standard path for get\_home\_dir\(\) [\#450](https://github.com/kivy/plyer/issues/450)
  - Example Applications break down on a real device [\#338](https://github.com/kivy/plyer/issues/338)
  - Feature request: Accelerometer on Linux \(computers\) [\#9](https://github.com/kivy/plyer/issues/9)
  - Linux wifi implementation via rockymeza/wifi is broken [\#487](https://github.com/kivy/plyer/issues/487)
  - Hardcoded 'wlan0' does not work on all devices [\#477](https://github.com/kivy/plyer/issues/477)
  - GNU/Linux wifi disconnect\(\) not working on Ubuntu 15.04+ [\#452](https://github.com/kivy/plyer/issues/452)
  - Plyer Email [\#420](https://github.com/kivy/plyer/issues/420)
  - notification not working on android [\#402](https://github.com/kivy/plyer/issues/402)
  - plyer.accelerometer not working with Kivy Launcher [\#401](https://github.com/kivy/plyer/issues/401)
  - New PyPI release after 1.3.0 [\#400](https://github.com/kivy/plyer/issues/400)
  - plyer.notify.notification doesn't show ticker in Android [\#378](https://github.com/kivy/plyer/issues/378)
  - plyer.uniqueid.id causes crash on Android with sdl2 [\#245](https://github.com/kivy/plyer/issues/245)
  - audio: JVM exception occurred: setAudioSource failed. [\#210](https://github.com/kivy/plyer/issues/210)
  - Something wrong with encoding in AndroidNotification [\#175](https://github.com/kivy/plyer/issues/175)

  **Merged pull requests:**

  - Implement WiFi for Linux with nmcli [\#495](https://github.com/kivy/plyer/pull/495) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Enhance Android notifications with toast and big icons [\#493](https://github.com/kivy/plyer/pull/493) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix android notifications missing channel on Oreo and later [\#492](https://github.com/kivy/plyer/pull/492) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add Android Native filechooser and external SD card path to StoragePath [\#491](https://github.com/kivy/plyer/pull/491) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix OSX builds on Travis [\#490](https://github.com/kivy/plyer/pull/490) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add audio recording and playing for Windows [\#489](https://github.com/kivy/plyer/pull/489) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add support for interfaces in Linux WiFi [\#488](https://github.com/kivy/plyer/pull/488) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - macOS tests - audio, battery, bluetooth, storagepath [\#482](https://github.com/kivy/plyer/pull/482) ([Nephyx](https://github.com/Nephyx))
  - Change 'Speech' to 'STT' [\#484](https://github.com/kivy/plyer/pull/484) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - New extended CPU details implementation [\#483](https://github.com/kivy/plyer/pull/483) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix uniqueid for linux platform [\#481](https://github.com/kivy/plyer/pull/481) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix CI jobs reporting wrong coverage \(non-imported modules ignored\) [\#480](https://github.com/kivy/plyer/pull/480) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - thegrymek: Android speech recognition [\#471](https://github.com/kivy/plyer/pull/471) ([KeyWeeUsr](https://github.com/KeyWeeUsr))



  [Full Changelog](https://github.com/kivy/plyer/compare/1.3.1...1.3.2)

  **Implemented enhancements:**

  - \[Feature Request\] Termux support [\#360](https://github.com/kivy/plyer/issues/360)
  - storage path support [\#152](https://github.com/kivy/plyer/issues/152)
  - unicode broken in notifications on windows 8. [\#17](https://github.com/kivy/plyer/issues/17)
  - Feature Request: Add adjustable tooltip text to Windows notification [\#14](https://github.com/kivy/plyer/issues/14)

  **Closed issues:**

  - plyer notifications raising NotImplementedError on android [\#467](https://github.com/kivy/plyer/issues/467)
  - TypeError when running examples in Python 3 [\#392](https://github.com/kivy/plyer/issues/392)
  - when i use buildozer and python3crystax to build apk  it not work ? [\#380](https://github.com/kivy/plyer/issues/380)
  - Windows filechooser crash [\#375](https://github.com/kivy/plyer/issues/375)
  - Using the camera crashes the app [\#369](https://github.com/kivy/plyer/issues/369)
  - after calling an plyer audio function from an accelerometer function, App crashes. [\#361](https://github.com/kivy/plyer/issues/361)
  - uniqueid.id fails under android and windows7 32bit python2.7 [\#277](https://github.com/kivy/plyer/issues/277)
  - Strange string returned by filechooser on Windows [\#177](https://github.com/kivy/plyer/issues/177)
  - Email Support for OSX [\#32](https://github.com/kivy/plyer/issues/32)
  - GPS Support for iOS [\#22](https://github.com/kivy/plyer/issues/22)
  - Camera Support for iOS [\#21](https://github.com/kivy/plyer/issues/21)
  - Example app for Camera facade [\#16](https://github.com/kivy/plyer/issues/16)

  **Merged pull requests:**

  - Move TODO item to a separate issue [\#478](https://github.com/kivy/plyer/pull/478) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add @deprecated decorator [\#476](https://github.com/kivy/plyer/pull/476) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fixed macOS using non-standard path for get\_home\_dir\(\) [\#475](https://github.com/kivy/plyer/pull/475) ([Nephyx](https://github.com/Nephyx))
  - Removed unnecessary grep dependency [\#474](https://github.com/kivy/plyer/pull/474) ([Nephyx](https://github.com/Nephyx))
  - Add enable & disable WiFi for Linux and MacOS [\#473](https://github.com/kivy/plyer/pull/473) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Cleaning the plyer root directory and CI scripts [\#468](https://github.com/kivy/plyer/pull/468) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add more distros via Docker images [\#466](https://github.com/kivy/plyer/pull/466) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add Linux Screenshot with X11's X Window Dump [\#463](https://github.com/kivy/plyer/pull/463) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Revert uppercase on autoclass values [\#462](https://github.com/kivy/plyer/pull/462) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fixing Java class name [\#461](https://github.com/kivy/plyer/pull/461) ([clevermindgames](https://github.com/clevermindgames))
  - Increase timeout for notification test [\#460](https://github.com/kivy/plyer/pull/460) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add Windows Screenshot with ctypes+pywin32 [\#459](https://github.com/kivy/plyer/pull/459) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add screenshot test for OSX [\#458](https://github.com/kivy/plyer/pull/458) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - OSX Screenshot \(Rebased PR \#324\) [\#457](https://github.com/kivy/plyer/pull/457) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Rebased PR \#239 + fixes [\#455](https://github.com/kivy/plyer/pull/455) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Bump to 1.3.2.dev0 [\#446](https://github.com/kivy/plyer/pull/446) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Bump to 1.3.1 [\#445](https://github.com/kivy/plyer/pull/445) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add extra options for installation via setuptools [\#438](https://github.com/kivy/plyer/pull/438) ([KeyWeeUsr](https://github.com/KeyWeeUsr))



  [Full Changelog](https://github.com/kivy/plyer/compare/1.3.0...1.3.1)

  **Implemented enhancements:**

  - Audio recording for macOS [\#428](https://github.com/kivy/plyer/pull/428) ([Nephyx](https://github.com/Nephyx))

  **Closed issues:**

  - plyer.wifi.is\_enabled\(\) always return false running in python3 [\#436](https://github.com/kivy/plyer/issues/436)
  - kivy-ios fails to build plyer [\#417](https://github.com/kivy/plyer/issues/417)
  - Python 3 TabError [\#398](https://github.com/kivy/plyer/issues/398)
  - is there a way of using the front camera instead of back  [\#391](https://github.com/kivy/plyer/issues/391)
  - storagepath.py  \_get\_application\_dir: NotImplementedError [\#389](https://github.com/kivy/plyer/issues/389)
  - plyer app crashes on android [\#387](https://github.com/kivy/plyer/issues/387)
  - Can't pip install plyer through git [\#385](https://github.com/kivy/plyer/issues/385)
  - speech to text [\#382](https://github.com/kivy/plyer/issues/382)
  - text2speech doesn't work on platform Linux [\#372](https://github.com/kivy/plyer/issues/372)
  - Changing file\_path in audio.py example is not working [\#356](https://github.com/kivy/plyer/issues/356)
  - How to change file\_path of audio in plyer? [\#355](https://github.com/kivy/plyer/issues/355)
  - Accelerometer in plyer [\#354](https://github.com/kivy/plyer/issues/354)
  - iOS Gyroscope crashes [\#352](https://github.com/kivy/plyer/issues/352)
  - Need keystore for storing user credentials  [\#350](https://github.com/kivy/plyer/issues/350)
  - plyer examples app always crashes in android phones, It says "Unfortunately "Name of app" has stopped working." [\#349](https://github.com/kivy/plyer/issues/349)
  - Notification not working on Windows [\#333](https://github.com/kivy/plyer/issues/333)
  - Accelerometer not working on linux [\#327](https://github.com/kivy/plyer/issues/327)
  - 1.3.0 broke notifications on Windows [\#318](https://github.com/kivy/plyer/issues/318)
  - No encoding and °C causes SyntaxError [\#312](https://github.com/kivy/plyer/issues/312)
  - GPS double output on output return value [\#302](https://github.com/kivy/plyer/issues/302)
  - Cannot import wifi module in windows [\#272](https://github.com/kivy/plyer/issues/272)

  **Merged pull requests:**

  - Add note about Windows icon format [\#444](https://github.com/kivy/plyer/pull/444) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Mark new audio recording feature in README.rst [\#443](https://github.com/kivy/plyer/pull/443) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix not decoding bytes in Linux orientation.py [\#442](https://github.com/kivy/plyer/pull/442) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix b' embedded in the path string for Windows' choose\_dir\(\) [\#441](https://github.com/kivy/plyer/pull/441) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add missing parameter for Windows' WlanCloseHandle\(\) [\#440](https://github.com/kivy/plyer/pull/440) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Revert facades/wifi.py change from PR \#301 [\#439](https://github.com/kivy/plyer/pull/439) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Update wifi.py [\#437](https://github.com/kivy/plyer/pull/437) ([Vibhu-Agarwal](https://github.com/Vibhu-Agarwal))
  - Remove notification webhook from travis [\#434](https://github.com/kivy/plyer/pull/434) ([dessant](https://github.com/dessant))
  - Fix Travis build for pull requests [\#432](https://github.com/kivy/plyer/pull/432) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Changed OSX storage path from ctypes to pyobjus [\#431](https://github.com/kivy/plyer/pull/431) ([Nephyx](https://github.com/Nephyx))
  - Fix Pylint errors W0150, W0511, W0601, W0603, W0610 [\#430](https://github.com/kivy/plyer/pull/430) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix Pylint errors W0611, W0612, W0622, W0702, W0703 [\#427](https://github.com/kivy/plyer/pull/427) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Disable all Pylint errors to fix red jobs [\#426](https://github.com/kivy/plyer/pull/426) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Downgrade Travis due to missing docker service on Ubuntu Bionic [\#425](https://github.com/kivy/plyer/pull/425) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Switch from Ubuntu Trusty to Ubuntu Bionic LTS [\#424](https://github.com/kivy/plyer/pull/424) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix style issues in utils, compat and setup.py [\#423](https://github.com/kivy/plyer/pull/423) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Clickable notifications, fixes \#154 [\#422](https://github.com/kivy/plyer/pull/422) ([AndreMiras](https://github.com/AndreMiras))
  - Fix style in test\_facade.py [\#418](https://github.com/kivy/plyer/pull/418) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix pep8 issues in files [\#416](https://github.com/kivy/plyer/pull/416) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add script for CI deployment to PyPI [\#413](https://github.com/kivy/plyer/pull/413) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix travis to use real branch instead of detached HEAD [\#412](https://github.com/kivy/plyer/pull/412) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add linux battery from sysclass [\#411](https://github.com/kivy/plyer/pull/411) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Switch to unicode in macosx battery.py [\#410](https://github.com/kivy/plyer/pull/410) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix test\_facade failing for Py3 by switching to Mocks [\#409](https://github.com/kivy/plyer/pull/409) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Add Dockerfiles for testing, fix tests and style [\#408](https://github.com/kivy/plyer/pull/408) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Implemented storagepath in linux [\#407](https://github.com/kivy/plyer/pull/407) ([Sires0](https://github.com/Sires0))
  - Improve messages for missing dependencies [\#406](https://github.com/kivy/plyer/pull/406) ([dolang](https://github.com/dolang))
  - Updates README.rst, removes dup in supported API [\#403](https://github.com/kivy/plyer/pull/403) ([AndreMiras](https://github.com/AndreMiras))
  - why should decode 'l' again and again [\#396](https://github.com/kivy/plyer/pull/396) ([xhimanshuz](https://github.com/xhimanshuz))
  - Correcting issue https://github.com/kivy/plyer/issues/392 for linux p… [\#395](https://github.com/kivy/plyer/pull/395) ([ghost](https://github.com/ghost))
  - Number Of Processors for Linux Platform [\#394](https://github.com/kivy/plyer/pull/394) ([salil-gtm](https://github.com/salil-gtm))
  - enhancement: bluetooth status [\#388](https://github.com/kivy/plyer/pull/388) ([kapilnayar](https://github.com/kapilnayar))
  - Show that bluetooth is not supported [\#379](https://github.com/kivy/plyer/pull/379) ([zerox1212](https://github.com/zerox1212))
  - Arrange APIs table in alphabetical order [\#377](https://github.com/kivy/plyer/pull/377) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Add list of supported platforms to facade [\#376](https://github.com/kivy/plyer/pull/376) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Add iOS api for storage path [\#374](https://github.com/kivy/plyer/pull/374) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - update readme [\#373](https://github.com/kivy/plyer/pull/373) ([sandeepsajan0](https://github.com/sandeepsajan0))
  - Update buildozer.spec [\#370](https://github.com/kivy/plyer/pull/370) ([sandeepsajan0](https://github.com/sandeepsajan0))
  - Warn instead stder.write for linux notif errors [\#368](https://github.com/kivy/plyer/pull/368) ([sametmax](https://github.com/sametmax))
  - Add coveralls.io report [\#367](https://github.com/kivy/plyer/pull/367) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix pep8 in plyer [\#366](https://github.com/kivy/plyer/pull/366) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - iOS Barometer API [\#363](https://github.com/kivy/plyer/pull/363) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Fix iOS Gyroscope crash issue [\#353](https://github.com/kivy/plyer/pull/353) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Keystore implementation. [\#351](https://github.com/kivy/plyer/pull/351) ([brentpicasso](https://github.com/brentpicasso))
  - iOS Spatial orientation [\#348](https://github.com/kivy/plyer/pull/348) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - iOS Gravity sensor  [\#347](https://github.com/kivy/plyer/pull/347) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Linux Brightness API [\#346](https://github.com/kivy/plyer/pull/346) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Brightness API [\#344](https://github.com/kivy/plyer/pull/344) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Fix bug in WindowsBalloonTip [\#343](https://github.com/kivy/plyer/pull/343) ([Chronial](https://github.com/Chronial))
  - Storage path API [\#342](https://github.com/kivy/plyer/pull/342) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Compass uncalibrated [\#341](https://github.com/kivy/plyer/pull/341) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Gyroscope uncalibrated sensor [\#337](https://github.com/kivy/plyer/pull/337) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Spatial Orientation for android [\#336](https://github.com/kivy/plyer/pull/336) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Update win\_api\_defs.py [\#335](https://github.com/kivy/plyer/pull/335) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Add some tests + Appveyor [\#329](https://github.com/kivy/plyer/pull/329) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Fix notification ticker error + pep8 [\#328](https://github.com/kivy/plyer/pull/328) ([KeyWeeUsr](https://github.com/KeyWeeUsr))
  - Pep8 fix in temperature.py [\#322](https://github.com/kivy/plyer/pull/322) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Example for Unique ID facade [\#321](https://github.com/kivy/plyer/pull/321) ([sumitmadhwani](https://github.com/sumitmadhwani))
  - Android Humidity [\#301](https://github.com/kivy/plyer/pull/301) ([bhaveshAn](https://github.com/bhaveshAn))
  - fix handling of notifications' timeout on Linux [\#297](https://github.com/kivy/plyer/pull/297) ([benoit-pierre](https://github.com/benoit-pierre))
  - Facade Wifi [\#290](https://github.com/kivy/plyer/pull/290) ([bhaveshAn](https://github.com/bhaveshAn))
  - orientation feature for linux [\#273](https://github.com/kivy/plyer/pull/273) ([susmit](https://github.com/susmit))
  - Fix wifi module. [\#244](https://github.com/kivy/plyer/pull/244) ([account-login](https://github.com/account-login))


  [Full Changelog](https://github.com/kivy/plyer/compare/v1.2.4...1.3.0)

  **Implemented enhancements:**

  - Feature Request: Alarms [\#8](https://github.com/kivy/plyer/issues/8)

  **Closed issues:**

  - Notification.notify crashes android app  [\#296](https://github.com/kivy/plyer/issues/296)
  - GPS android crash on launch [\#288](https://github.com/kivy/plyer/issues/288)
  - Send SMS feature not working [\#261](https://github.com/kivy/plyer/issues/261)
  - gps.configure\(\) results in exception [\#257](https://github.com/kivy/plyer/issues/257)
  - v1.2.4 archive not available via github [\#234](https://github.com/kivy/plyer/issues/234)
  - SyntaxError in wifi.py for Linux [\#230](https://github.com/kivy/plyer/issues/230)
  - New PyPi release please, to fix static jfieldID not valid for class java.lang.Class\<org.renpy.android.PythonActivity\> [\#229](https://github.com/kivy/plyer/issues/229)
  - Drag-and-drop: originate in Kivy, drop in some external app [\#228](https://github.com/kivy/plyer/issues/228)
  - GPS Issue after in iOS after last changes in plyer [\#224](https://github.com/kivy/plyer/issues/224)
  - battery.status isCharging always shows false [\#221](https://github.com/kivy/plyer/issues/221)
  - GPS example only updating location once [\#217](https://github.com/kivy/plyer/issues/217)
  - uniqueid.id raises exception on Windows [\#212](https://github.com/kivy/plyer/issues/212)
  - Redundant libs folder [\#209](https://github.com/kivy/plyer/issues/209)
  - accelerometer on Android with Kivy Launcher 1.9.0 not working [\#206](https://github.com/kivy/plyer/issues/206)
  - Camera on android doesn't return to app [\#200](https://github.com/kivy/plyer/issues/200)
  - android compass suggestion [\#195](https://github.com/kivy/plyer/issues/195)
  - more example code to the docs [\#166](https://github.com/kivy/plyer/issues/166)
  - Mail API on linux raises error NameError: name 'Email' is not defined [\#131](https://github.com/kivy/plyer/issues/131)
  - native gui widgets [\#124](https://github.com/kivy/plyer/issues/124)
  - android: using gps app cannot resume from pause [\#112](https://github.com/kivy/plyer/issues/112)
  - Please upgrade pypi ! [\#94](https://github.com/kivy/plyer/issues/94)
  - UniqueID using OpenID [\#83](https://github.com/kivy/plyer/issues/83)
  - Display the notification in the right places [\#78](https://github.com/kivy/plyer/issues/78)
  - Python3 All The Plyer! [\#12](https://github.com/kivy/plyer/issues/12)

  **Merged pull requests:**

  - Modify readme [\#308](https://github.com/kivy/plyer/pull/308) ([malverick](https://github.com/malverick))
  - Add version tags in light and temperature facade [\#307](https://github.com/kivy/plyer/pull/307) ([malverick](https://github.com/malverick))
  - Android ambient temperature sensor [\#293](https://github.com/kivy/plyer/pull/293) ([malverick](https://github.com/malverick))
  - Android light sensor [\#292](https://github.com/kivy/plyer/pull/292) ([malverick](https://github.com/malverick))
  - Plyer android proximity sensor [\#287](https://github.com/kivy/plyer/pull/287) ([malverick](https://github.com/malverick))
  - Plyer android pressure sensor [\#286](https://github.com/kivy/plyer/pull/286) ([malverick](https://github.com/malverick))
  - Update readme and plyer/\_\_init\_\_.py [\#285](https://github.com/kivy/plyer/pull/285) ([malverick](https://github.com/malverick))
  - Plyer android gravity sensor [\#283](https://github.com/kivy/plyer/pull/283) ([malverick](https://github.com/malverick))
  - Add on\_pause function [\#274](https://github.com/kivy/plyer/pull/274) ([malverick](https://github.com/malverick))
  - uniqueid\_facade [\#270](https://github.com/kivy/plyer/pull/270) ([bhaveshAn](https://github.com/bhaveshAn))
  - add bin and .buildozer directory to .gitignore [\#259](https://github.com/kivy/plyer/pull/259) ([malverick](https://github.com/malverick))
  - pep8 fixes [\#250](https://github.com/kivy/plyer/pull/250) ([malverick](https://github.com/malverick))
  - update code [\#249](https://github.com/kivy/plyer/pull/249) ([kiok46](https://github.com/kiok46))
  - Adding small examples in facade files [\#237](https://github.com/kivy/plyer/pull/237) ([kiok46](https://github.com/kiok46))
  - Fix TypeError if `LANG` is not set in on osx [\#232](https://github.com/kivy/plyer/pull/232) ([ForeverWintr](https://github.com/ForeverWintr))
  - fix \#230 [\#231](https://github.com/kivy/plyer/pull/231) ([kiok46](https://github.com/kiok46))
  - fix gps issue for ios [\#225](https://github.com/kivy/plyer/pull/225) ([kiok46](https://github.com/kiok46))
  - Fixed issue \#221 [\#223](https://github.com/kivy/plyer/pull/223) ([Warlord77](https://github.com/Warlord77))
  - Add flash example [\#219](https://github.com/kivy/plyer/pull/219) ([kiok46](https://github.com/kiok46))
  - Make gps request parameters configurable [\#218](https://github.com/kivy/plyer/pull/218) ([kiok46](https://github.com/kiok46))
  - Wifi Facade. OSX, Windows, Linux [\#213](https://github.com/kivy/plyer/pull/213) ([kiok46](https://github.com/kiok46))
  - add sms for ios [\#203](https://github.com/kivy/plyer/pull/203) ([kiok46](https://github.com/kiok46))
  - check android for namespace, otherwise use renpy [\#199](https://github.com/kivy/plyer/pull/199) ([kived](https://github.com/kived))
  - fix p4a revamp [\#198](https://github.com/kivy/plyer/pull/198) ([kived](https://github.com/kived))
  - Rewrite notification on Mac using PyOBJus [\#192](https://github.com/kivy/plyer/pull/192) ([andong777](https://github.com/andong777))
  - Call for ios [\#191](https://github.com/kivy/plyer/pull/191) ([kiok46](https://github.com/kiok46))
  - Note on requirements for iOS [\#187](https://github.com/kivy/plyer/pull/187) ([doratoa](https://github.com/doratoa))
  - Adding battery example, notification ticker and gps example update [\#183](https://github.com/kivy/plyer/pull/183) ([kiok46](https://github.com/kiok46))
  - Call and dial for android [\#181](https://github.com/kivy/plyer/pull/181) ([kiok46](https://github.com/kiok46))
  - Dial or Call for android [\#180](https://github.com/kivy/plyer/pull/180) ([kiok46](https://github.com/kiok46))
  - Added accuracy argument to on\_location call. [\#174](https://github.com/kivy/plyer/pull/174) ([lipi](https://github.com/lipi))
  - Introduce camera access for ios and a example. [\#167](https://github.com/kivy/plyer/pull/167) ([akshayaurora](https://github.com/akshayaurora))
  - macosx: fix incorrect method name in filechooser [\#165](https://github.com/kivy/plyer/pull/165) ([kived](https://github.com/kived))
  - linux email import fix [\#151](https://github.com/kivy/plyer/pull/151) ([thegrymek](https://github.com/thegrymek))
  - Merge android columns [\#148](https://github.com/kivy/plyer/pull/148) ([dessant](https://github.com/dessant))
  - Camera example [\#41](https://github.com/kivy/plyer/pull/41) ([trivedigaurav](https://github.com/trivedigaurav))


  [Full Changelog](https://github.com/kivy/plyer/compare/1.2.3...v1.2.4)

  **Implemented enhancements:**

  - Update platform check code [\#109](https://github.com/kivy/plyer/issues/109)

  **Closed issues:**

  - webhook test [\#142](https://github.com/kivy/plyer/issues/142)
  - Sync style check updates from the Kivy repo [\#141](https://github.com/kivy/plyer/issues/141)
  - GPS on android doesn't work \(a strange error\) [\#136](https://github.com/kivy/plyer/issues/136)
  - Create toast notification facade for Android and iOS [\#126](https://github.com/kivy/plyer/issues/126)
  - uniqueid.id empty on linux. [\#114](https://github.com/kivy/plyer/issues/114)
  - Gyroscope Support for iOS [\#111](https://github.com/kivy/plyer/issues/111)
  - AndroidUniqueID doesn't use Android ID [\#107](https://github.com/kivy/plyer/issues/107)
  - OverflowError: Python int too large to convert to C long \[android lollipop\] [\#103](https://github.com/kivy/plyer/issues/103)
  - Feature request: ability to open browser to a particular page [\#98](https://github.com/kivy/plyer/issues/98)
  - AndroidGPS list GPS Provider but use hardcoded "gps" [\#54](https://github.com/kivy/plyer/issues/54)
  - Email Support for Android \< 4.0 [\#42](https://github.com/kivy/plyer/issues/42)

  **Merged pull requests:**

  - style fixes [\#147](https://github.com/kivy/plyer/pull/147) ([dessant](https://github.com/dessant))
  - add pydev files to gitignore [\#146](https://github.com/kivy/plyer/pull/146) ([dessant](https://github.com/dessant))
  - Plyer style guide update [\#145](https://github.com/kivy/plyer/pull/145) ([thegrymek](https://github.com/thegrymek))
  - Plyer audio for android with facade and example [\#144](https://github.com/kivy/plyer/pull/144) ([thegrymek](https://github.com/thegrymek))
  - fix versionchanged tag [\#143](https://github.com/kivy/plyer/pull/143) ([dessant](https://github.com/dessant))
  - update info about support email for android\<4.0 [\#140](https://github.com/kivy/plyer/pull/140) ([thegrymek](https://github.com/thegrymek))
  - added plyer.facade to setuptools package [\#139](https://github.com/kivy/plyer/pull/139) ([thegrymek](https://github.com/thegrymek))
  - splitted facades [\#138](https://github.com/kivy/plyer/pull/138) ([thegrymek](https://github.com/thegrymek))
  - Inclement orientation [\#135](https://github.com/kivy/plyer/pull/135) ([thegrymek](https://github.com/thegrymek))
  - remove unused variables [\#134](https://github.com/kivy/plyer/pull/134) ([thegrymek](https://github.com/thegrymek))
  - fix \#107 - Use Android\_ID instead of IMEI [\#133](https://github.com/kivy/plyer/pull/133) ([aron-bordin](https://github.com/aron-bordin))
  - vibrator for android v \< 4.0 [\#129](https://github.com/kivy/plyer/pull/129) ([thegrymek](https://github.com/thegrymek))
  - PEP8 and typo fixes in MacOS X file chooser. [\#123](https://github.com/kivy/plyer/pull/123) ([robertjerovsek](https://github.com/robertjerovsek))
  - pep8 - removed unused imports and variables [\#122](https://github.com/kivy/plyer/pull/122) ([thegrymek](https://github.com/thegrymek))
  - Pep8 fix [\#121](https://github.com/kivy/plyer/pull/121) ([laltin](https://github.com/laltin))
  - add video recoding to Camera facade and camera.py [\#120](https://github.com/kivy/plyer/pull/120) ([pspchucky](https://github.com/pspchucky))
  - Use environ to change LANG to 'C' while calling shell processes [\#119](https://github.com/kivy/plyer/pull/119) ([trivedigaurav](https://github.com/trivedigaurav))
  - add IrBlaster facade and Android implementation [\#118](https://github.com/kivy/plyer/pull/118) ([kived](https://github.com/kived))
  - Android gps.py: fixed location provider cycling [\#117](https://github.com/kivy/plyer/pull/117) ([JimmyStavros](https://github.com/JimmyStavros))
  - iOS GPS support [\#116](https://github.com/kivy/plyer/pull/116) ([laltin](https://github.com/laltin))
  - use environ to change LANG to 'C' while calling lshw [\#115](https://github.com/kivy/plyer/pull/115) ([tshirtman](https://github.com/tshirtman))
  - responds to issue 109 https://github.com/kivy/plyer/issues/109 [\#110](https://github.com/kivy/plyer/pull/110) ([AlbericC](https://github.com/AlbericC))
  - Add file chooser facade and support for Linux and Windows [\#106](https://github.com/kivy/plyer/pull/106) ([Depaulicious](https://github.com/Depaulicious))


  [Full Changelog](https://github.com/kivy/plyer/compare/1.2.2...1.2.3)


  [Full Changelog](https://github.com/kivy/plyer/compare/1.2.1...1.2.2)

  **Closed issues:**

  - NotImplementedError: No usable implementation found! whith usable implementations on the system.  [\#108](https://github.com/kivy/plyer/issues/108)
  - Gyro example [\#101](https://github.com/kivy/plyer/issues/101)
  - Notification is not working in android [\#93](https://github.com/kivy/plyer/issues/93)
  - plyer.notification.notfy\(\) raises NotImplementedError under Python 3.3 in Linux but not Python 2.7 [\#58](https://github.com/kivy/plyer/issues/58)

  **Merged pull requests:**

  - Linux platform check made compatible with python 3.3+ \(Fixes \#58\) [\#102](https://github.com/kivy/plyer/pull/102) ([helenst](https://github.com/helenst))


  [Full Changelog](https://github.com/kivy/plyer/compare/1.2.0...1.2.1)

  **Implemented enhancements:**

  - Feature Request: codec-independent sound player [\#2](https://github.com/kivy/plyer/issues/2)

  **Closed issues:**

  - Battery status connected is actually isCharging [\#84](https://github.com/kivy/plyer/issues/84)
  - Email Support for Windows [\#36](https://github.com/kivy/plyer/issues/36)
  - Accelerometer Support for OSX [\#29](https://github.com/kivy/plyer/issues/29)
  - Email Support for Linux [\#28](https://github.com/kivy/plyer/issues/28)
  - Email Support for iOS [\#25](https://github.com/kivy/plyer/issues/25)
  - TextToSpeech Support for iOS [\#24](https://github.com/kivy/plyer/issues/24)

  **Merged pull requests:**

  - fix print statement [\#92](https://github.com/kivy/plyer/pull/92) ([dessant](https://github.com/dessant))
  - iOS UUID facade [\#90](https://github.com/kivy/plyer/pull/90) ([trivedigaurav](https://github.com/trivedigaurav))
  - Removing build\_ext from plyer [\#89](https://github.com/kivy/plyer/pull/89) ([trivedigaurav](https://github.com/trivedigaurav))
  - iOS Email Facade [\#88](https://github.com/kivy/plyer/pull/88) ([trivedigaurav](https://github.com/trivedigaurav))
  - iOS Battery [\#86](https://github.com/kivy/plyer/pull/86) ([trivedigaurav](https://github.com/trivedigaurav))
  - Change connected to isCharging [\#85](https://github.com/kivy/plyer/pull/85) ([trivedigaurav](https://github.com/trivedigaurav))
  - Return None until sensor data is available [\#82](https://github.com/kivy/plyer/pull/82) ([trivedigaurav](https://github.com/trivedigaurav))
  - Update compass.py [\#80](https://github.com/kivy/plyer/pull/80) ([ChrisCole42](https://github.com/ChrisCole42))
  - Use whereis\_exe to check for binaries [\#79](https://github.com/kivy/plyer/pull/79) ([trivedigaurav](https://github.com/trivedigaurav))
  - Update compass.py [\#77](https://github.com/kivy/plyer/pull/77) ([ChrisCole42](https://github.com/ChrisCole42))
  - Maintenance [\#75](https://github.com/kivy/plyer/pull/75) ([trivedigaurav](https://github.com/trivedigaurav))
  - facade docstring revision [\#74](https://github.com/kivy/plyer/pull/74) ([dessant](https://github.com/dessant))
  - Query Battery info/status [\#73](https://github.com/kivy/plyer/pull/73) ([trivedigaurav](https://github.com/trivedigaurav))
  - Revert "Activity was imported twice" [\#71](https://github.com/kivy/plyer/pull/71) ([trivedigaurav](https://github.com/trivedigaurav))
  - Fix tabbing [\#70](https://github.com/kivy/plyer/pull/70) ([trivedigaurav](https://github.com/trivedigaurav))
  - Gyroscope facade proxy declarations [\#69](https://github.com/kivy/plyer/pull/69) ([trivedigaurav](https://github.com/trivedigaurav))
  - Linux accelerometer facade [\#68](https://github.com/kivy/plyer/pull/68) ([trivedigaurav](https://github.com/trivedigaurav))
  - Update README.rst [\#67](https://github.com/kivy/plyer/pull/67) ([trivedigaurav](https://github.com/trivedigaurav))


  **Implemented enhancements:**

  - Feature Request: Add adjustable timeout option to Windows notification [\#13](https://github.com/kivy/plyer/issues/13)
  - Changes notify to use ctypes instead of win32gui so we could use unicode. [\#18](https://github.com/kivy/plyer/pull/18) ([matham](https://github.com/matham))
  - User-specified icon support for Windows notifications [\#11](https://github.com/kivy/plyer/pull/11) ([brousch](https://github.com/brousch))
  - Added Vibrator facade and android implementation [\#6](https://github.com/kivy/plyer/pull/6) ([inclement](https://github.com/inclement))

  **Closed issues:**

  - GPS example crashes [\#40](https://github.com/kivy/plyer/issues/40)
  - TextToSpeech Example App [\#20](https://github.com/kivy/plyer/issues/20)
  - Accelerometer Example App [\#19](https://github.com/kivy/plyer/issues/19)

  **Merged pull requests:**

  - Plyer Unique ID facade [\#66](https://github.com/kivy/plyer/pull/66) ([trivedigaurav](https://github.com/trivedigaurav))
  - Switched to pyjnius [\#63](https://github.com/kivy/plyer/pull/63) ([trivedigaurav](https://github.com/trivedigaurav))
  - Update README [\#62](https://github.com/kivy/plyer/pull/62) ([trivedigaurav](https://github.com/trivedigaurav))
  - Gyroscope Facades [\#60](https://github.com/kivy/plyer/pull/60) ([trivedigaurav](https://github.com/trivedigaurav))
  - Ios compass [\#59](https://github.com/kivy/plyer/pull/59) ([trivedigaurav](https://github.com/trivedigaurav))
  - Plyer compass facade [\#57](https://github.com/kivy/plyer/pull/57) ([trivedigaurav](https://github.com/trivedigaurav))
  - Update README [\#56](https://github.com/kivy/plyer/pull/56) ([trivedigaurav](https://github.com/trivedigaurav))
  - Using sudden motion sensor as accelerometer on OSX [\#55](https://github.com/kivy/plyer/pull/55) ([trivedigaurav](https://github.com/trivedigaurav))
  - Added sms facade, example and android implementation [\#52](https://github.com/kivy/plyer/pull/52) ([mihaineacsu](https://github.com/mihaineacsu))
  - add Mac OS X email support [\#49](https://github.com/kivy/plyer/pull/49) ([Depaulicious](https://github.com/Depaulicious))
  - add Windows email support [\#48](https://github.com/kivy/plyer/pull/48) ([Depaulicious](https://github.com/Depaulicious))
  - added Linux email support [\#47](https://github.com/kivy/plyer/pull/47) ([Depaulicious](https://github.com/Depaulicious))
  - Add compat module, remove decoding of strings in notification [\#46](https://github.com/kivy/plyer/pull/46) ([matham](https://github.com/matham))
  - Created an accelerometer example. Uses garden graph to plot the values [\#39](https://github.com/kivy/plyer/pull/39) ([trivedigaurav](https://github.com/trivedigaurav))
  - Shows an error popup if there is no TTS [\#38](https://github.com/kivy/plyer/pull/38) ([trivedigaurav](https://github.com/trivedigaurav))
  - Text to Speech Example [\#37](https://github.com/kivy/plyer/pull/37) ([trivedigaurav](https://github.com/trivedigaurav))
  - readme typo corrected [\#15](https://github.com/kivy/plyer/pull/15) ([ghost](https://github.com/ghost))
  - Introduce dbus notification [\#10](https://github.com/kivy/plyer/pull/10) ([akshayaurora](https://github.com/akshayaurora))
  - Added an email facade and basic android implementation [\#5](https://github.com/kivy/plyer/pull/5) ([inclement](https://github.com/inclement))
  - Tts [\#1](https://github.com/kivy/plyer/pull/1) ([brousch](https://github.com/brousch))



  \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*


