# packages

pkgId: 6780d521b1a5b0c828fce9b0715ac51f3f42a8e663fdd7b393b6c18f9d548ad5
name: python-botocore
arch: src
version: 1.29.109
epoch: 0
release: 1
summary: Low-level, data-driven core of boto 3.
url: https://github.com/boto/botocore
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-872ce681-9fe6-497b-9d88-ed82cbfb645b
location_href: 00008874-python-botocore/python-botocore-1.29.109-1.src.rpm
checksum_type: sha256
description:
  |Version| |Python| |License|
  A low-level interface to a growing number of Amazon Web Services. The
  botocore package is the foundation for the
  `AWS CLI <https://github.com/aws/aws-cli>`__ as well as
  `boto3 <https://github.com/boto/boto3>`__.
  Botocore is maintained and published by `Amazon Web Services`_.


pkgId: d848fa5d3efa7879937b84f11144ed3142ee3a0637086dbeba48900e38bc0c51
name: python-botorch
arch: src
version: 0.8.3
epoch: 0
release: 1
summary: Bayesian Optimization in PyTorch
url: https://botorch.org
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ddc64577-9792-45c2-b456-d93817c13b32
location_href: 00011090-python-botorch/python-botorch-0.8.3-1.src.rpm
checksum_type: sha256
description:
  <a href="https://botorch.org">
    <img width="350" src="https://botorch.org/img/botorch_logo_lockup.png" alt="BoTorch Logo" />
  </a>

  <hr/>

  [![Support Ukraine](https://img.shields.io/badge/Support-Ukraine-FFD500?style=flat&labelColor=005BBB)](https://opensource.fb.com/support-ukraine)
  [![Lint](https://github.com/pytorch/botorch/workflows/Lint/badge.svg)](https://github.com/pytorch/botorch/actions?query=workflow%3ALint)
  [![Test](https://github.com/pytorch/botorch/workflows/Test/badge.svg)](https://github.com/pytorch/botorch/actions?query=workflow%3ATest)
  [![Docs](https://github.com/pytorch/botorch/workflows/Docs/badge.svg)](https://github.com/pytorch/botorch/actions?query=workflow%3ADocs)
  [![Tutorials](https://github.com/pytorch/botorch/workflows/Tutorials/badge.svg)](https://github.com/pytorch/botorch/actions?query=workflow%3ATutorials)
  [![Codecov](https://img.shields.io/codecov/c/github/pytorch/botorch.svg)](https://codecov.io/github/pytorch/botorch)

  [![Conda](https://img.shields.io/conda/v/pytorch/botorch.svg)](https://anaconda.org/pytorch/botorch)
  [![PyPI](https://img.shields.io/pypi/v/botorch.svg)](https://pypi.org/project/botorch)
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)


  BoTorch is a library for Bayesian Optimization built on PyTorch.

  *BoTorch is currently in beta and under active development!*



  BoTorch
  * Provides a modular and easily extensible interface for composing Bayesian
    optimization primitives, including probabilistic models, acquisition functions,
    and optimizers.
  * Harnesses the power of PyTorch, including auto-differentiation, native support
    for highly parallelized modern hardware (e.g. GPUs) using device-agnostic code,
    and a dynamic computation graph.
  * Supports Monte Carlo-based acquisition functions via the
    [reparameterization trick](https://arxiv.org/abs/1312.6114), which makes it
    straightforward to implement new ideas without having to impose restrictive
    assumptions about the underlying model.
  * Enables seamless integration with deep and/or convolutional architectures in PyTorch.
  * Has first-class support for state-of-the art probabilistic models in
    [GPyTorch](http://www.gpytorch.ai/), including support for multi-task Gaussian
    Processes (GPs) deep kernel learning, deep GPs, and approximate inference.




  The primary audience for hands-on use of BoTorch are researchers and
  sophisticated practitioners in Bayesian Optimization and AI.
  We recommend using BoTorch as a low-level API for implementing new algorithms
  for [Ax](https://ax.dev). Ax has been designed to be an easy-to-use platform
  for end-users, which at the same time is flexible enough for Bayesian
  Optimization researchers to plug into for handling of feature transformations,
  (meta-)data management, storage, etc.
  We recommend that end-users who are not actively doing research on Bayesian
  Optimization simply use Ax.




  **Installation Requirements**
  - Python >= 3.8
  - PyTorch >= 1.12
  - gpytorch == 1.9.1
  - linear_operator == 0.3.0
  - pyro-ppl >= 1.8.4
  - scipy
  - multiple-dispatch


  Before installing BoTorch, we recommend first manually installing PyTorch, a required dependency of
  BoTorch. Installing it according to the [PyTorch installation instructions](https://pytorch.org/get-started/locally/)
  ensures that it is properly linked against MKL, a library that optimizes mathematical computation for Intel processors.
  This will result in up to an order-of-magnitude speed-up for Bayesian optimization, as at the moment,
  installing PyTorch from pip does not link against MKL.

  The PyTorch installation instructions currently recommend:
  1. Install [Anaconda](https://www.anaconda.com/distribution/#download-section). Note that there are different installers for Intel and M1 Macs.
  2. Install PyTorch following the [PyTorch installation instructions](https://pytorch.org/get-started/locally/).
  Currently, this suggests running `conda install pytorch torchvision -c pytorch`.

  If you want to customize your installation, please follow the [PyTorch installation instructions](https://pytorch.org/get-started/locally/) to build from source.



  The latest release of BoTorch is easily installed either via
  [Anaconda](https://www.anaconda.com/distribution/#download-section) (recommended) or pip.

  **To install BoTorch from Anaconda**, run
  ```bash
  conda install botorch -c pytorch -c gpytorch -c conda-forge
  ```
  The above command installs BoTorch and any needed dependencies. ` -c pytorch -c gpytorch -c conda-forge` means that the most preferred source to install from is the PyTorch channel, the next most preferred is the GPyTorch channel,
  and the least preferred is conda-forge.

  **Alternatively, to install with `pip`**, do
  ```bash
  pip install botorch
  ```

  _Note_: Make sure the `pip` being used is actually the one from the newly created Conda environment. If you're using a Unix-based OS, you can use `which pip` to check.



  If you would like to try our bleeding edge features (and don't mind potentially
  running into the occasional bug here or there), you can install the latest
  development version directly from GitHub. If you want to also install the
  current `gpytorch` and `linear_operator` development versions, you will need
  to ensure that the `ALLOW_LATEST_GPYTORCH_LINOP` environment variable is set:
  ```bash
  pip install --upgrade git+https://github.com/cornellius-gp/linear_operator.git
  pip install --upgrade git+https://github.com/cornellius-gp/gpytorch.git
  export ALLOW_LATEST_GPYTORCH_LINOP=true
  pip install --upgrade git+https://github.com/pytorch/botorch.git
  ```



  If you want to [contribute](CONTRIBUTING.md) to BoTorch, you will want to install editably so that you can change files and have the
  changes reflected in your local install.

  If you want to install the current `gpytorch` and `linear_operator` development versions, as in Option 2, do that
  before proceeding.



  ```bash
  git clone https://github.com/pytorch/botorch.git
  cd botorch
  pip install -e .
  ```



  ```bash
  git clone https://github.com/pytorch/botorch.git
  cd botorch
  export ALLOW_BOTORCH_LATEST=true
  pip install -e ".[dev, tutorials]"
  ```

  * `dev`: Specifies tools necessary for development
    (testing, linting, docs building; see [Contributing](#contributing) below).
  * `tutorials`: Also installs all packages necessary for running the tutorial notebooks.
  * You can also install either the dev or tutorials dependencies without installing both, e.g. by changing the last command to `pip install -e ".[dev]"`.



  Here's a quick run down of the main components of a Bayesian optimization loop.
  For more details see our [Documentation](https://botorch.org/docs/introduction) and the
  [Tutorials](https://botorch.org/tutorials).

  1. Fit a Gaussian Process model to data
    ```python
    import torch
    from botorch.models import SingleTaskGP
    from botorch.fit import fit_gpytorch_mll
    from gpytorch.mlls import ExactMarginalLogLikelihood

    train_X = torch.rand(10, 2)
    Y = 1 - (train_X - 0.5).norm(dim=-1, keepdim=True)  # explicit output dimension
    Y += 0.1 * torch.rand_like(Y)
    train_Y = (Y - Y.mean()) / Y.std()

    gp = SingleTaskGP(train_X, train_Y)
    mll = ExactMarginalLogLikelihood(gp.likelihood, gp)
    fit_gpytorch_mll(mll)
    ```

  2. Construct an acquisition function
    ```python
    from botorch.acquisition import UpperConfidenceBound

    UCB = UpperConfidenceBound(gp, beta=0.1)
    ```

  3. Optimize the acquisition function
    ```python
    from botorch.optim import optimize_acqf

    bounds = torch.stack([torch.zeros(2), torch.ones(2)])
    candidate, acq_value = optimize_acqf(
        UCB, bounds=bounds, q=1, num_restarts=5, raw_samples=20,
    )
    ```




  If you use BoTorch, please cite the following paper:
  > [M. Balandat, B. Karrer, D. R. Jiang, S. Daulton, B. Letham, A. G. Wilson, and E. Bakshy. BoTorch: A Framework for Efficient Monte-Carlo Bayesian Optimization. Advances in Neural Information Processing Systems 33, 2020.](https://arxiv.org/abs/1910.06403)

  ```
  @inproceedings{balandat2020botorch,
    title={{BoTorch: A Framework for Efficient Monte-Carlo Bayesian Optimization}},
    author={Balandat, Maximilian and Karrer, Brian and Jiang, Daniel R. and Daulton, Samuel and Letham, Benjamin and Wilson, Andrew Gordon and Bakshy, Eytan},
    booktitle = {Advances in Neural Information Processing Systems 33},
    year={2020},
    url = {http://arxiv.org/abs/1910.06403}
  }
  ```

  See [here](https://botorch.org/docs/papers) for an incomplete selection of peer-reviewed papers that build off of BoTorch.



  See the [CONTRIBUTING](CONTRIBUTING.md) file for how to help out.



  BoTorch is MIT licensed, as found in the [LICENSE](LICENSE) file.


pkgId: 52e0d98b28000d33324528392adb36aee7f596c5d23a033498085d1bef46f2bb
name: python-bottle
arch: src
version: 0.12.25
epoch: 0
release: 1
summary: Fast and simple WSGI-framework for small web-applications.
url: http://bottlepy.org/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-dbaad303-e1ff-4687-a896-04f152ff41ec
location_href: 00009455-python-bottle/python-bottle-0.12.25-1.src.rpm
checksum_type: sha256
description:
  Bottle is a fast and simple micro-framework for small web applications. It
  offers request dispatching (Routes) with url parameter support, templates,
  a built-in HTTP Server and adapters for many third party WSGI/HTTP-server and
  template engines - all in a single file and with no dependencies other than the
  Python Standard Library.

  Homepage and documentation: http://bottlepy.org/

  Copyright (c) 2016, Marcel Hellkamp.
  License: MIT (see LICENSE for details)


pkgId: 7d8694a9e75dec4f19165b4fa9a4bfe1f8b9478b5ecc61d6fab722a74cc41e33
name: python-bottle-session
arch: src
version: 1.0
epoch: 0
release: 1
summary: Redis based sessions for bottle.
url: https://bitbucket.org/devries/bottle-session
rpm_license: Artistic
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3af7a630-9489-4242-9657-3afa478fe921
location_href: 00013922-python-bottle-session/python-bottle-session-1.0-1.src.rpm
checksum_type: sha256
description:
  Bottle_session is a session manager for the Bottle microframework that
  uses a cookie to maintain your web session and stores a hash associated
  with that cookie using the redis key-value store. It is designed as a
  simple Bottle plugin.


pkgId: 4c7ebf3d4f7dee73d70e171bc461a8ee8c69d5156231f1a9e1e129ea1b526ca0
name: python-bottle-sqlite
arch: src
version: 0.2.0
epoch: 0
release: 1
summary: SQLite3 integration for Bottle.
url: https://github.com/bottlepy/bottle-sqlite
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-cb6f6280-59b3-44fb-a129-543c976c2bfa
location_href: 00003142-python-bottle-sqlite/python-bottle-sqlite-0.2.0-1.src.rpm
checksum_type: sha256
description:
  Bottle-sqlite is a plugin that integrates SQLite3 with your Bottle
  application. It automatically connects to a database at the beginning of a
  request, passes the database handle to the route callback and closes the
  connection afterwards.

  To automatically detect routes that need a database connection, the plugin
  searches for route callbacks that require a `db` keyword argument
  (configurable) and skips routes that do not. This removes any overhead for
  routes that don't need a database connection.

  Usage Example::

      import bottle
      from bottle.ext import sqlite

      app = bottle.Bottle()
      plugin = sqlite.Plugin(dbfile='/tmp/test.db')
      app.install(plugin)

      @app.route('/show/:item')
      def show(item, db):
          row = db.execute('SELECT * from items where name=?', item).fetchone()
          if row:
              return template('showitem', page=row)
          return HTTPError(404, "Page not found")


pkgId: f15daa05119ec6ff460177070bf967872935d32f486cae6fbc85478fdd7e9746
name: python-bottle-websocket
arch: src
version: 0.2.9
epoch: 0
release: 1
summary: WebSockets for bottle
url: https://github.com/zeekay/bottle-websocket
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-17fcdf33-f6a9-4745-ab22-337368626e9e
location_href: 00013675-python-bottle-websocket/python-bottle-websocket-0.2.9-1.src.rpm
checksum_type: sha256
description:
  This project adds websocket capabilities to [bottle](http://bottlepy.org), leveraging [gevent-websocket](http://www.gelens.org/code/gevent-websocket/) and [gevent](http://www.gevent.org/).


  Use `pip` or `easy_install`:

      pip install bottle-websocket


  Usage is pretty straight-forward, just import the server and plugin:

      from bottle.ext.websocket import GeventWebSocketServer
      from bottle.ext.websocket import websocket

  You can use the websocket plugin to turn routes websocket handlers, the websocket is passed to the route as the first argument:

      @get('/websocket', apply=[websocket])
      def echo(ws):
          while True:
              msg = ws.receive()
              if msg is not None:
                  ws.send(msg)
              else: break

  And then use the provided server:

      run(host='127.0.0.1', port=8080, server=GeventWebSocketServer)


  - [zeekay](https://github.com/zeekay)
  - [xeross](https://github.com/xeross)


pkgId: fbbd11c800148d50cf2c62f5a7a470c0db4dc1583f9b611b9e95be0a7b3f8e72
name: python-bowler
arch: src
version: 0.9.0
epoch: 0
release: 1
summary: Safe code refactoring for modern Python projects
url: https://github.com/facebookincubator/bowler
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ca34eb9f-4d14-48de-b238-31831823510f
location_href: 00003146-python-bowler/python-bowler-0.9.0-1.src.rpm
checksum_type: sha256
description:
  Bowler is a refactoring tool for manipulating Python at the syntax tree level. It enables
  safe, large scale code modifications while guaranteeing that the resulting code compiles
  and runs. It provides both a simple command line interface and a fluent API in Python for
  generating complex code modifications in code.
  Bowler uses a "fluent" `Query` API to build refactoring scripts through a series
  of selectors, filters, and modifiers.  Many simple modifications are already possible
  using the existing API, but you can also provide custom selectors, filters, and
  modifiers as needed to build more complex or custom refactorings.  See the
  [Query Reference](https://pybowler.io/docs/api-query) for more details.
  Using the query API to rename a single function, and generate an interactive diff from
  the results, would look something like this:
  ```python
  query = (
      Query(<paths to modify>)
      .select_function("old_name")
      .rename("new_name")
      .diff(interactive=True)
  )
  ```
  For more details or documentation, check out https://pybowler.io


pkgId: 78ee90d92e78a349ec2d757e23fd724ae0f4b10e4c649b02ee2697992d2860b8
name: python-boxsdk
arch: src
version: 3.6.2
epoch: 0
release: 1
summary: Official Box Python SDK
url: https://github.com/box/box-python-sdk
rpm_license: Apache Software License, Version 2.0, http://www.apache.org/licenses/LICENSE-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-83f4d2e4-2abb-4d85-831e-a14b952f9145
location_href: 00003149-python-boxsdk/python-boxsdk-3.6.2-1.src.rpm
checksum_type: sha256
description:
  [![image](http://opensource.box.com/badges/active.svg)](http://opensource.box.com/badges)
  [![Documentation Status](https://readthedocs.org/projects/box-python-sdk/badge/?version=latest)](http://box-python-sdk.readthedocs.org/en/latest)
  [![image](https://github.com/box/box-python-sdk/workflows/build/badge.svg)](https://github.com/box/box-python-sdk/actions)
  [![image](https://img.shields.io/pypi/v/boxsdk.svg)](https://pypi.python.org/pypi/boxsdk)
  [![image](https://img.shields.io/pypi/dm/boxsdk.svg)](https://pypi.python.org/pypi/boxsdk)
  [![image](https://coveralls.io/repos/github/box/box-python-sdk/badge.svg?branch=main)](https://coveralls.io/github/box/box-python-sdk?branch=main)

  Getting Started Docs: <https://developer.box.com/guides/tooling/sdks/python/>

  <!-- START doctoc generated TOC please keep comment here to allow auto update -->
  <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->

  - [Versions](#versions)
    - [Supported Version](#supported-version)
    - [Version schedule](#version-schedule)
  - [Installing](#installing)
  - [Getting Started](#getting-started)
  - [Authorization](#authorization)
    - [Server-to-Server Auth with JWT](#server-to-server-auth-with-jwt)
    - [Traditional 3-legged OAuth2](#traditional-3-legged-oauth2)
    - [Other Auth Options](#other-auth-options)
  - [Usage Documentation](#usage-documentation)
    - [Making API Calls Manually](#making-api-calls-manually)
  - [Other Client Options](#other-client-options)
    - [Logging Client](#logging-client)
    - [Developer Token Client](#developer-token-client)
    - [Development Client](#development-client)
  - [Customization](#customization)
    - [Custom Subclasses](#custom-subclasses)
  - [Contributing](#contributing)
    - [Developer Setup](#developer-setup)
    - [Testing](#testing)
  - [Questions, Bugs, and Feature Requests?](#questions-bugs-and-feature-requests)
  - [Copyright and License](#copyright-and-license)

  <!-- END doctoc generated TOC please keep comment here to allow auto update -->



  ``` console
  pip install boxsdk
  ```

  The current version of the SDK is v3.x --- With this release support for
  Python 3.5 and earlier (including 2.x) has been dropped. if you're
  looking for the code or documentation for v1.5.x, please see the [1.5
  branch](https://github.com/box/box-python-sdk/tree/1.5).



  To get started with the SDK, get a Developer Token from the
  Configuration page of your app in the [Box Developer
  Console](https://app.box.com/developers/console). You can use this token
  to make test calls for your own Box account.

  The SDK provides an interactive `DevelopmentClient` that makes it easy
  to test out the SDK in a REPL. This client will automatically prompt for
  a new Developer Token when it requires one, and will log HTTP requests
  and responses to aid in debugging and understanding how the SDK makes
  API calls.

  ``` pycon
  >>> from boxsdk import DevelopmentClient
  >>> client = DevelopmentClient()
  Enter developer token: <ENTER DEVELOPER TOKEN HERE>
  >>> user = client.user().get()
  GET https://api.box.com/2.0/users/me {'headers': {'Authorization': '---wXyZ',
              'User-Agent': 'box-python-sdk-2.0.0',
              'X-Box-UA': 'agent=box-python-sdk/2.0.0; env=python/3.6.5'},
  'params': None}
  "GET https://api.box.com/2.0/users/me" 200 454
  {'Date': 'Thu, 01 Nov 2018 23:32:11 GMT', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Strict-Transport-Security': 'max-age=31536000', 'Cache-Control': 'no-cache, no-store', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding', 'BOX-REQUEST-ID': '0b50luc09ahp56m2jmkla8mgmh2', 'Age': '0'}
  {'address': '',
  'avatar_url': 'https://cloud.app.box.com/api/avatar/large/123456789',
  'created_at': '2012-06-07T11:14:50-07:00',
  'id': '123456789',
  'job_title': '',
  'language': 'en',
  'login': 'user@example.com',
  'max_upload_size': 16106127360,
  'modified_at': '2018-10-30T17:01:27-07:00',
  'name': 'Example User',
  'phone': '',
  'space_amount': 1000000000000000.0,
  'space_used': 14330018065,
  'status': 'active',
  'timezone': 'America/Los_Angeles',
  'type': 'user'}

  >>> print(f'The current user ID is {user.id}')
  The current user ID is 123456789
  ```

  Outside of a REPL, you can initialize a new `Client` with just the
  Developer Token to get started.

  ``` python
  from boxsdk import OAuth2, Client

  auth = OAuth2(
      client_id='YOUR_CLIENT_ID',
      client_secret='YOUR_CLIENT_SECRET',
      access_token='YOUR_DEVELOPER_TOKEN',
  )
  client = Client(auth)

  user = client.user().get()
  print(f'The current user ID is {user.id}')
  ```



  The Box API uses OAuth2 for auth. The SDK makes it relatively painless
  to work with OAuth2 tokens.



  The Python SDK supports your [JWT
  Authentication](https://developer.box.com/en/guides/authentication/jwt/)
  applications.

  Authenticating with a JWT requires some extra dependencies. To get them,
  simply

  ``` console
  pip install "boxsdk[jwt]"
  ```

  Instead of instantiating your `Client` with an instance of `OAuth2`,
  instead use an instance of `JWTAuth`.

  ``` python
  from boxsdk import JWTAuth
  from boxsdk import Client

  auth = JWTAuth(
      client_id='YOUR_CLIENT_ID',
      client_secret='YOUR_CLIENT_SECRET',
      enterprise_id='YOUR_ENTERPRISE_ID',
      jwt_key_id='YOUR_JWT_KEY_ID',
      rsa_private_key_file_sys_path='CERT.PEM',
      rsa_private_key_passphrase='PASSPHRASE',
  )

  access_token = auth.authenticate_instance()
  client = Client(auth)
  ```

  This client is able to create application users:

  ``` python
  ned_stark_user = client.create_user('Ned Stark')
  ```

  These users can then be authenticated:

  ``` python
  ned_auth = JWTAuth(
      client_id='YOUR_CLIENT_ID',
      client_secret='YOUR_CLIENT_SECRET',
      user=ned_stark_user,
      jwt_key_id='YOUR_JWT_KEY_ID',
      rsa_private_key_file_sys_path='CERT.PEM',
      rsa_private_key_passphrase='PASSPHRASE'
  )
  ned_auth.authenticate_user()
  ned_client = Client(ned_auth)
  ```

  Requests made with `ned_client` (or objects returned from
  `ned_client`'s methods) will be performed on behalf of the newly
  created app user.





  ``` python
  from boxsdk import OAuth2

  oauth = OAuth2(
      client_id='YOUR_CLIENT_ID',
      client_secret='YOUR_CLIENT_SECRET',
      store_tokens=your_store_tokens_callback_method,
  )

  auth_url, csrf_token = oauth.get_authorization_url('http://YOUR_REDIRECT_URL')
  ```

  store_tokens is a callback used to store the access token and refresh
  token. You might want to define something like this:

  ``` python
  def store_tokens(access_token, refresh_token):
      
  ```

  The SDK will keep the tokens in memory for the duration of the Python
  script run, so you don't always need to pass store_tokens.



  If you navigate the user to the auth_url, the user will eventually get
  redirected to <http://YOUR_REDIRECT_URL?code=YOUR_AUTH_CODE>. After
  getting the code, you will be able to use the code to exchange for an
  access token and refresh token.

  The SDK handles all the work for you; all you need to do is run:

  ``` python



  assert 'THE_CSRF_TOKEN_YOU_GOT' == csrf_token
  access_token, refresh_token = oauth.authenticate('YOUR_AUTH_CODE')
  ```



  ``` python
  from boxsdk import Client

  client = Client(oauth)
  ```

  And that's it! You can start using the client to do all kinds of cool
  stuff and the SDK will handle the token refresh for you automatically.



  Alternatively, you can instantiate an OAuth2 object with the access
  token and refresh token. Once you have an oauth object you can pass that
  into the Client object to instantiate a client and begin making calls.

  ``` python
  from boxsdk import Client, OAuth2

  oauth = OAuth2(
      client_id='YOUR_CLIENT_ID',
      client_secret='YOUR_CLIENT_SECRET',
      access_token='ACCESS_TOKEN',
      refresh_token='REFRESH_TOKEN',
  )

  client = Client(oauth)
  user = client.user().get()
  ```

  This will retrieve the current user! From here you can use the client
  you created to start making calls.



  For advanced uses of the SDK, three additional auth classes are
  provided:

  -   `CooperativelyManagedOAuth2`: Allows multiple auth instances to
      share tokens.
  -   `RemoteOAuth2`: Allows use of the SDK on clients without access to
      your application's client secret. Instead, you provide a
      `retrieve_access_token` callback. That callback should perform the
      token refresh, perhaps on your server that does have access to the
      client secret.
  -   `RedisManagedOAuth2`: Stores access and refresh tokens in Redis.
      This allows multiple processes (possibly spanning multiple machines)
      to share access tokens while synchronizing token refresh. This could
      be useful for a multiprocess web server, for example.



  Full documentation of the available functionality with example code is
  available in the [SDK documentation
  pages](https://github.com/box/box-python-sdk/blob/main/docs/usage), and
  there is also method-level documentation available on
  [ReadTheDocs](https://box-python-sdk.readthedocs.io/en/stable/index.html).



  The Box API is continually evolving. As such, there are API endpoints
  available that are not specifically supported by the SDK. You can still
  use these endpoints by using the `make_request` method of the `Client`.

  ``` python


  json_response = client.make_request(
      'GET',
      client.get_url('metadata_templates', 'enterprise', 'customer', 'schema'),
  ).json()
  ```

  `make_request()` takes two parameters:

  -   `method` - an HTTP verb like `GET` or `POST`
  -   `url` - the URL of the requested API endpoint

  The `Client` class and Box objects have a `get_url` method. Pass it an
  endpoint to get the correct URL for use with that object and endpoint.

  For API calls which require body or query params, you can use `**kwargs`
  to pass extra params:

  -   `data` - takes a jsonified dictionary of body parameters
  -   `params` - takes a dictionary of query parameters

  ``` python




  body = json.dumps({
          'name': 'test-subfolder',
          'parent': {
              'id': '0',
          }
  })

  client.make_request(
      'POST',
      client.get_url('folders'),
      params={'fields': 'name,id'},
      data=body
  )
  ```





  For more insight into the network calls the SDK is making, you can use
  the `LoggingClient` class. This class logs information about network
  requests and responses made to the Box API.

  ``` pycon
  >>> from boxsdk import LoggingClient
  >>> client = LoggingClient()
  >>> client.user().get()
  GET https://api.box.com/2.0/users/me {'headers': {u'Authorization': u'Bearer ---------------------------kBjp',
               u'User-Agent': u'box-python-sdk-1.5.0'},
   'params': None}
  {"type":"user","id":"..","name":"Jeffrey Meadows","login":"..",..}
  <boxsdk.object.user.User at 0x10615b8d0>
  ```



  The Box Developer Console allows for the creation of short-lived
  developer tokens. The SDK makes it easy to use these tokens. Use the
  `get_new_token_callback` parameter to control how the client will get
  new developer tokens as needed. The default is to prompt standard input
  for a token.



  For exploring the Box API, or to quickly get going using the SDK, the
  `DevelopmentClient` class combines the `LoggingClient` with the
  `DeveloperTokenClient`.





  Custom object subclasses can be defined:

  ``` pycon
  from boxsdk import Client
  from boxsdk import Folder

  class MyFolderSubclass(Folder):
      pass

  client = Client(oauth)
  client.translator.register('folder', MyFolderSubclass)
  folder = client.folder('0')

  >>> print folder
  >>> <Box MyFolderSubclass - 0>
  ```

  If an object subclass is registered in this way, instances of this
  subclass will be returned from all SDK methods that previously returned
  an instance of the parent. See `BaseAPIJSONObjectMeta` and `Translator`
  to see how the SDK performs dynamic lookups to determine return types.


  We use a modified version of [Semantic Versioning](https://semver.org/) for all changes. See [version strategy](VERSIONS.md) for details which is effective from 30 July 2022.



  Only the current MAJOR version of SDK is supported. New features, functionality, bug fixes, and security updates will only be added to the current MAJOR version.

  A current release is on the leading edge of our SDK development, and is intended for customers who are in active development and want the latest and greatest features.  Instead of stating a release date for a new feature, we set a fixed minor or patch release cadence of maximum 2-3 months (while we may release more often). At the same time, there is no schedule for major or breaking release. Instead, we will communicate one quarter in advance the upcoming breaking change to allow customers to plan for the upgrade. We always recommend that all users run the latest available minor release for whatever major version is in use. We highly recommend upgrading to the latest SDK major release at the earliest convenient time and before the EOL date.



  | Version | Supported Environments                                  | State     | First Release | EOL/Terminated |
  |---------|---------------------------------------------------------|-----------|---------------|----------------|
  | 3       | Python 3.6+                                             | Supported | 17 Jan 2022   | TBD            |
  | 2       |                                                         | EOL       | 01 Nov 2018   | 17 Jan 2022    |
  | 1       |                                                         | EOL       | 10 Feb 2015   | 01 Nov 2018    |



  See
  [CONTRIBUTING.md](https://github.com/box/box-python-sdk/blob/main/CONTRIBUTING.md).



  Create a virtual environment and install packages -

  ``` console
  mkvirtualenv boxsdk
  pip install -r requirements-dev.txt
  ```



  Run all tests using -

  ``` console
  tox
  ```

  The tox tests include code style checks via pep8 and pylint.

  The tox tests are configured to run on Python 3.6, 3.7, 3.8, 3.9, 3.10
  and PyPy (our CI is configured to run PyPy tests on pypy-3.6, pypy-3.7, pypy-3.8).



  Need to contact us directly? [Browse the issues
  tickets](https://github.com/box/box-python-sdk/issues)! Or, if that
  doesn't work, [file a new
  one](https://github.com/box/box-python-sdk/issues/new) and we will get
  back to you. If you have general questions about the Box API, you can
  post to the [Box Developer
  Forum](https://community.box.com/t5/Developer-Forum/bd-p/DeveloperForum).



      Copyright 2019 Box, Inc. All rights reserved.

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

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

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


pkgId: 1380f336e6aa4d5364f7e359083458e962f708b678e1a84b99258fa19c3d0a89
name: python-bpemb
arch: src
version: 0.3.4
epoch: 0
release: 1
summary: Byte-pair embeddings in 275 languages
url: https://nlp.h-its.org/bpemb
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-563661f9-3833-47aa-98ec-2252ed35545b
location_href: 00011977-python-bpemb/python-bpemb-0.3.4-1.src.rpm
checksum_type: sha256
description:
  BPEmb is a collection of pre-trained subword embeddings in 275 languages, based on Byte-Pair Encoding (BPE) and trained on Wikipedia. Its intended use is as input for neural models in natural language processing.

  [Website](https://nlp.h-its.org/bpemb) ・
  [Usage](#usage) ・
  [Download](#downloads-for-each-language) ・
  [MultiBPEmb](#multibpemb) ・
  [Paper (pdf)](http://www.lrec-conf.org/proceedings/lrec2018/pdf/1049.pdf) ・
  [Citing BPEmb](#citing-bpemb)





  Install BPEmb with pip:

  ```bash
  pip install bpemb
  ```

  Embeddings and SentencePiece models will be downloaded automatically the first time you use them.

  ```python
  >>> from bpemb import BPEmb

  >>> bpemb_en = BPEmb(lang="en", dim=50)
  downloading https://nlp.h-its.org/bpemb/en/en.wiki.bpe.vs10000.model
  downloading https://nlp.h-its.org/bpemb/en/en.wiki.bpe.vs10000.d50.w2v.bin.tar.gz
  ```

  You can do two main things with BPEmb. The first is subword segmentation:
  ```python

  >>> bpemb_en.encode("Stratford")
  ['▁strat', 'ford']

  >>> bpemb_zh = BPEmb(lang="zh", vs=100000)

  >>> bpemb_zh.encode("这是一个中文句子")  # "This is a Chinese sentence."
  ['▁这是一个', '中文', '句子']  # ["This is a", "Chinese", "sentence"]
  ```

  If / how a word gets split depends on the vocabulary size. Generally, a smaller vocabulary size will yield a segmentation into many subwords, while a large vocabulary size will result in frequent words not being split:

  | vocabulary size | segmentation |
  | --- | --- |
  | 1000 | ['▁str', 'at', 'f', 'ord'] |
  | 3000 |  ['▁str', 'at', 'ford'] |
  | 5000 | ['▁str', 'at', 'ford'] |
  | 10000 | ['▁strat', 'ford'] |
  | 25000 | ['▁stratford'] |
  | 50000 | ['▁stratford'] |
  | 100000 | ['▁stratford'] |
  | 200000 | ['▁stratford'] |


  The second purpose of BPEmb is to provide pretrained subword embeddings:

  ```python

  >>> type(bpemb_zh.emb)
  gensim.models.keyedvectors.Word2VecKeyedVectors

  >>> bpemb_en.most_similar("ford")
  [('bury', 0.8745079040527344),
   ('ton', 0.8725000619888306),
   ('well', 0.871537446975708),
   ('ston', 0.8701574206352234),
   ('worth', 0.8672043085098267),
   ('field', 0.859795331954956),
   ('ley', 0.8591548204421997),
   ('ington', 0.8126075267791748),
   ('bridge', 0.8099068999290466),
   ('brook', 0.7979353070259094)]
  >>> type(bpemb_en.vectors)
  numpy.ndarray
  >>> bpemb_en.vectors.shape
  (10000, 50)
  >>> bpemb_zh.vectors.shape
  (100000, 100)
  ```

  To use subword embeddings in your neural network, either encode your input into subword IDs:
  ```python
  >>> ids = bpemb_zh.encode_ids("这是一个中文句子")
  [25950, 695, 20199]
  >>> bpemb_zh.vectors[ids].shape
  (3, 100)
  ```

  Or use the `embed` method:
  ```python

  >>> bpemb_zh.embed("这是一个中文句子").shape
  (3, 100)
  ```



  [ab (Abkhazian)](http://nlp.h-its.org/bpemb/ab) ・
  [ace (Achinese)](http://nlp.h-its.org/bpemb/ace) ・
  [ady (Adyghe)](http://nlp.h-its.org/bpemb/ady) ・
  [af (Afrikaans)](http://nlp.h-its.org/bpemb/af) ・
  [ak (Akan)](http://nlp.h-its.org/bpemb/ak) ・
  [als (Alemannic)](http://nlp.h-its.org/bpemb/als) ・
  [am (Amharic)](http://nlp.h-its.org/bpemb/am) ・
  [an (Aragonese)](http://nlp.h-its.org/bpemb/an) ・
  [ang (Old English)](http://nlp.h-its.org/bpemb/ang) ・
  [ar (Arabic)](http://nlp.h-its.org/bpemb/ar) ・
  [arc (Official Aramaic)](http://nlp.h-its.org/bpemb/arc) ・
  [arz (Egyptian Arabic)](http://nlp.h-its.org/bpemb/arz) ・
  [as (Assamese)](http://nlp.h-its.org/bpemb/as) ・
  [ast (Asturian)](http://nlp.h-its.org/bpemb/ast) ・
  [atj (Atikamekw)](http://nlp.h-its.org/bpemb/atj) ・
  [av (Avaric)](http://nlp.h-its.org/bpemb/av) ・
  [ay (Aymara)](http://nlp.h-its.org/bpemb/ay) ・
  [az (Azerbaijani)](http://nlp.h-its.org/bpemb/az) ・
  [azb (South Azerbaijani)](http://nlp.h-its.org/bpemb/azb)

  [ba (Bashkir)](http://nlp.h-its.org/bpemb/ba) ・
  [bar (Bavarian)](http://nlp.h-its.org/bpemb/bar) ・
  [bcl (Central Bikol)](http://nlp.h-its.org/bpemb/bcl) ・
  [be (Belarusian)](http://nlp.h-its.org/bpemb/be) ・
  [bg (Bulgarian)](http://nlp.h-its.org/bpemb/bg) ・
  [bi (Bislama)](http://nlp.h-its.org/bpemb/bi) ・
  [bjn (Banjar)](http://nlp.h-its.org/bpemb/bjn) ・
  [bm (Bambara)](http://nlp.h-its.org/bpemb/bm) ・
  [bn (Bengali)](http://nlp.h-its.org/bpemb/bn) ・
  [bo (Tibetan)](http://nlp.h-its.org/bpemb/bo) ・
  [bpy (Bishnupriya)](http://nlp.h-its.org/bpemb/bpy) ・
  [br (Breton)](http://nlp.h-its.org/bpemb/br) ・
  [bs (Bosnian)](http://nlp.h-its.org/bpemb/bs) ・
  [bug (Buginese)](http://nlp.h-its.org/bpemb/bug) ・
  [bxr (Russia Buriat)](http://nlp.h-its.org/bpemb/bxr)

  [ca (Catalan)](http://nlp.h-its.org/bpemb/ca) ・
  [cdo (Min Dong Chinese)](http://nlp.h-its.org/bpemb/cdo) ・
  [ce (Chechen)](http://nlp.h-its.org/bpemb/ce) ・
  [ceb (Cebuano)](http://nlp.h-its.org/bpemb/ceb) ・
  [ch (Chamorro)](http://nlp.h-its.org/bpemb/ch) ・
  [chr (Cherokee)](http://nlp.h-its.org/bpemb/chr) ・
  [chy (Cheyenne)](http://nlp.h-its.org/bpemb/chy) ・
  [ckb (Central Kurdish)](http://nlp.h-its.org/bpemb/ckb) ・
  [co (Corsican)](http://nlp.h-its.org/bpemb/co) ・
  [cr (Cree)](http://nlp.h-its.org/bpemb/cr) ・
  [crh (Crimean Tatar)](http://nlp.h-its.org/bpemb/crh) ・
  [cs (Czech)](http://nlp.h-its.org/bpemb/cs) ・
  [csb (Kashubian)](http://nlp.h-its.org/bpemb/csb) ・
  [cu (Church Slavic)](http://nlp.h-its.org/bpemb/cu) ・
  [cv (Chuvash)](http://nlp.h-its.org/bpemb/cv) ・
  [cy (Welsh)](http://nlp.h-its.org/bpemb/cy)

  [da (Danish)](http://nlp.h-its.org/bpemb/da) ・
  [de (German)](http://nlp.h-its.org/bpemb/de) ・
  [din (Dinka)](http://nlp.h-its.org/bpemb/din) ・
  [diq (Dimli)](http://nlp.h-its.org/bpemb/diq) ・
  [dsb (Lower Sorbian)](http://nlp.h-its.org/bpemb/dsb) ・
  [dty (Dotyali)](http://nlp.h-its.org/bpemb/dty) ・
  [dv (Dhivehi)](http://nlp.h-its.org/bpemb/dv) ・
  [dz (Dzongkha)](http://nlp.h-its.org/bpemb/dz)

  [ee (Ewe)](http://nlp.h-its.org/bpemb/ee) ・
  [el (Modern Greek)](http://nlp.h-its.org/bpemb/el) ・
  [en (English)](http://nlp.h-its.org/bpemb/en) ・
  [eo (Esperanto)](http://nlp.h-its.org/bpemb/eo) ・
  [es (Spanish)](http://nlp.h-its.org/bpemb/es) ・
  [et (Estonian)](http://nlp.h-its.org/bpemb/et) ・
  [eu (Basque)](http://nlp.h-its.org/bpemb/eu) ・
  [ext (Extremaduran)](http://nlp.h-its.org/bpemb/ext)

  [fa (Persian)](http://nlp.h-its.org/bpemb/fa) ・
  [ff (Fulah)](http://nlp.h-its.org/bpemb/ff) ・
  [fi (Finnish)](http://nlp.h-its.org/bpemb/fi) ・
  [fj (Fijian)](http://nlp.h-its.org/bpemb/fj) ・
  [fo (Faroese)](http://nlp.h-its.org/bpemb/fo) ・
  [fr (French)](http://nlp.h-its.org/bpemb/fr) ・
  [frp (Arpitan)](http://nlp.h-its.org/bpemb/frp) ・
  [frr (Northern Frisian)](http://nlp.h-its.org/bpemb/frr) ・
  [fur (Friulian)](http://nlp.h-its.org/bpemb/fur) ・
  [fy (Western Frisian)](http://nlp.h-its.org/bpemb/fy)

  [ga (Irish)](http://nlp.h-its.org/bpemb/ga) ・
  [gag (Gagauz)](http://nlp.h-its.org/bpemb/gag) ・
  [gan (Gan Chinese)](http://nlp.h-its.org/bpemb/gan) ・
  [gd (Scottish Gaelic)](http://nlp.h-its.org/bpemb/gd) ・
  [gl (Galician)](http://nlp.h-its.org/bpemb/gl) ・
  [glk (Gilaki)](http://nlp.h-its.org/bpemb/glk) ・
  [gn (Guarani)](http://nlp.h-its.org/bpemb/gn) ・
  [gom (Goan Konkani)](http://nlp.h-its.org/bpemb/gom) ・
  [got (Gothic)](http://nlp.h-its.org/bpemb/got) ・
  [gu (Gujarati)](http://nlp.h-its.org/bpemb/gu) ・
  [gv (Manx)](http://nlp.h-its.org/bpemb/gv)

  [ha (Hausa)](http://nlp.h-its.org/bpemb/ha) ・
  [hak (Hakka Chinese)](http://nlp.h-its.org/bpemb/hak) ・
  [haw (Hawaiian)](http://nlp.h-its.org/bpemb/haw) ・
  [he (Hebrew)](http://nlp.h-its.org/bpemb/he) ・
  [hi (Hindi)](http://nlp.h-its.org/bpemb/hi) ・
  [hif (Fiji Hindi)](http://nlp.h-its.org/bpemb/hif) ・
  [hr (Croatian)](http://nlp.h-its.org/bpemb/hr) ・
  [hsb (Upper Sorbian)](http://nlp.h-its.org/bpemb/hsb) ・
  [ht (Haitian)](http://nlp.h-its.org/bpemb/ht) ・
  [hu (Hungarian)](http://nlp.h-its.org/bpemb/hu) ・
  [hy (Armenian)](http://nlp.h-its.org/bpemb/hy)

  [ia (Interlingua)](http://nlp.h-its.org/bpemb/ia) ・
  [id (Indonesian)](http://nlp.h-its.org/bpemb/id) ・
  [ie (Interlingue)](http://nlp.h-its.org/bpemb/ie) ・
  [ig (Igbo)](http://nlp.h-its.org/bpemb/ig) ・
  [ik (Inupiaq)](http://nlp.h-its.org/bpemb/ik) ・
  [ilo (Iloko)](http://nlp.h-its.org/bpemb/ilo) ・
  [io (Ido)](http://nlp.h-its.org/bpemb/io) ・
  [is (Icelandic)](http://nlp.h-its.org/bpemb/is) ・
  [it (Italian)](http://nlp.h-its.org/bpemb/it) ・
  [iu (Inuktitut)](http://nlp.h-its.org/bpemb/iu)

  [ja (Japanese)](http://nlp.h-its.org/bpemb/ja) ・
  [jam (Jamaican Creole English)](http://nlp.h-its.org/bpemb/jam) ・
  [jbo (Lojban)](http://nlp.h-its.org/bpemb/jbo) ・
  [jv (Javanese)](http://nlp.h-its.org/bpemb/jv)

  [ka (Georgian)](http://nlp.h-its.org/bpemb/ka) ・
  [kaa (Kara-Kalpak)](http://nlp.h-its.org/bpemb/kaa) ・
  [kab (Kabyle)](http://nlp.h-its.org/bpemb/kab) ・
  [kbd (Kabardian)](http://nlp.h-its.org/bpemb/kbd) ・
  [kbp (Kabiyè)](http://nlp.h-its.org/bpemb/kbp) ・
  [kg (Kongo)](http://nlp.h-its.org/bpemb/kg) ・
  [ki (Kikuyu)](http://nlp.h-its.org/bpemb/ki) ・
  [kk (Kazakh)](http://nlp.h-its.org/bpemb/kk) ・
  [kl (Kalaallisut)](http://nlp.h-its.org/bpemb/kl) ・
  [km (Central Khmer)](http://nlp.h-its.org/bpemb/km) ・
  [kn (Kannada)](http://nlp.h-its.org/bpemb/kn) ・
  [ko (Korean)](http://nlp.h-its.org/bpemb/ko) ・
  [koi (Komi-Permyak)](http://nlp.h-its.org/bpemb/koi) ・
  [krc (Karachay-Balkar)](http://nlp.h-its.org/bpemb/krc) ・
  [ks (Kashmiri)](http://nlp.h-its.org/bpemb/ks) ・
  [ksh (Kölsch)](http://nlp.h-its.org/bpemb/ksh) ・
  [ku (Kurdish)](http://nlp.h-its.org/bpemb/ku) ・
  [kv (Komi)](http://nlp.h-its.org/bpemb/kv) ・
  [kw (Cornish)](http://nlp.h-its.org/bpemb/kw) ・
  [ky (Kirghiz)](http://nlp.h-its.org/bpemb/ky)

  [la (Latin)](http://nlp.h-its.org/bpemb/la) ・
  [lad (Ladino)](http://nlp.h-its.org/bpemb/lad) ・
  [lb (Luxembourgish)](http://nlp.h-its.org/bpemb/lb) ・
  [lbe (Lak)](http://nlp.h-its.org/bpemb/lbe) ・
  [lez (Lezghian)](http://nlp.h-its.org/bpemb/lez) ・
  [lg (Ganda)](http://nlp.h-its.org/bpemb/lg) ・
  [li (Limburgan)](http://nlp.h-its.org/bpemb/li) ・
  [lij (Ligurian)](http://nlp.h-its.org/bpemb/lij) ・
  [lmo (Lombard)](http://nlp.h-its.org/bpemb/lmo) ・
  [ln (Lingala)](http://nlp.h-its.org/bpemb/ln) ・
  [lo (Lao)](http://nlp.h-its.org/bpemb/lo) ・
  [lrc (Northern Luri)](http://nlp.h-its.org/bpemb/lrc) ・
  [lt (Lithuanian)](http://nlp.h-its.org/bpemb/lt) ・
  [ltg (Latgalian)](http://nlp.h-its.org/bpemb/ltg) ・
  [lv (Latvian)](http://nlp.h-its.org/bpemb/lv)

  [mai (Maithili)](http://nlp.h-its.org/bpemb/mai) ・
  [mdf (Moksha)](http://nlp.h-its.org/bpemb/mdf) ・
  [mg (Malagasy)](http://nlp.h-its.org/bpemb/mg) ・
  [mh (Marshallese)](http://nlp.h-its.org/bpemb/mh) ・
  [mhr (Eastern Mari)](http://nlp.h-its.org/bpemb/mhr) ・
  [mi (Maori)](http://nlp.h-its.org/bpemb/mi) ・
  [min (Minangkabau)](http://nlp.h-its.org/bpemb/min) ・
  [mk (Macedonian)](http://nlp.h-its.org/bpemb/mk) ・
  [ml (Malayalam)](http://nlp.h-its.org/bpemb/ml) ・
  [mn (Mongolian)](http://nlp.h-its.org/bpemb/mn) ・
  [mr (Marathi)](http://nlp.h-its.org/bpemb/mr) ・
  [mrj (Western Mari)](http://nlp.h-its.org/bpemb/mrj) ・
  [ms (Malay)](http://nlp.h-its.org/bpemb/ms) ・
  [mt (Maltese)](http://nlp.h-its.org/bpemb/mt) ・
  [mwl (Mirandese)](http://nlp.h-its.org/bpemb/mwl) ・
  [my (Burmese)](http://nlp.h-its.org/bpemb/my) ・
  [myv (Erzya)](http://nlp.h-its.org/bpemb/myv) ・
  [mzn (Mazanderani)](http://nlp.h-its.org/bpemb/mzn)

  [na (Nauru)](http://nlp.h-its.org/bpemb/na) ・
  [nap (Neapolitan)](http://nlp.h-its.org/bpemb/nap) ・
  [nds (Low German)](http://nlp.h-its.org/bpemb/nds) ・
  [ne (Nepali)](http://nlp.h-its.org/bpemb/ne) ・
  [new (Newari)](http://nlp.h-its.org/bpemb/new) ・
  [ng (Ndonga)](http://nlp.h-its.org/bpemb/ng) ・
  [nl (Dutch)](http://nlp.h-its.org/bpemb/nl) ・
  [nn (Norwegian Nynorsk)](http://nlp.h-its.org/bpemb/nn) ・
  [no (Norwegian)](http://nlp.h-its.org/bpemb/no) ・
  [nov (Novial)](http://nlp.h-its.org/bpemb/nov) ・
  [nrm (Narom)](http://nlp.h-its.org/bpemb/nrm) ・
  [nso (Pedi)](http://nlp.h-its.org/bpemb/nso) ・
  [nv (Navajo)](http://nlp.h-its.org/bpemb/nv) ・
  [ny (Nyanja)](http://nlp.h-its.org/bpemb/ny)

  [oc (Occitan)](http://nlp.h-its.org/bpemb/oc) ・
  [olo (Livvi)](http://nlp.h-its.org/bpemb/olo) ・
  [om (Oromo)](http://nlp.h-its.org/bpemb/om) ・
  [or (Oriya)](http://nlp.h-its.org/bpemb/or) ・
  [os (Ossetian)](http://nlp.h-its.org/bpemb/os)

  [pa (Panjabi)](http://nlp.h-its.org/bpemb/pa) ・
  [pag (Pangasinan)](http://nlp.h-its.org/bpemb/pag) ・
  [pam (Pampanga)](http://nlp.h-its.org/bpemb/pam) ・
  [pap (Papiamento)](http://nlp.h-its.org/bpemb/pap) ・
  [pcd (Picard)](http://nlp.h-its.org/bpemb/pcd) ・
  [pdc (Pennsylvania German)](http://nlp.h-its.org/bpemb/pdc) ・
  [pfl (Pfaelzisch)](http://nlp.h-its.org/bpemb/pfl) ・
  [pi (Pali)](http://nlp.h-its.org/bpemb/pi) ・
  [pih (Pitcairn-Norfolk)](http://nlp.h-its.org/bpemb/pih) ・
  [pl (Polish)](http://nlp.h-its.org/bpemb/pl) ・
  [pms (Piemontese)](http://nlp.h-its.org/bpemb/pms) ・
  [pnb (Western Panjabi)](http://nlp.h-its.org/bpemb/pnb) ・
  [pnt (Pontic)](http://nlp.h-its.org/bpemb/pnt) ・
  [ps (Pushto)](http://nlp.h-its.org/bpemb/ps) ・
  [pt (Portuguese)](http://nlp.h-its.org/bpemb/pt)

  [qu (Quechua)](http://nlp.h-its.org/bpemb/qu)

  [rm (Romansh)](http://nlp.h-its.org/bpemb/rm) ・
  [rmy (Vlax Romani)](http://nlp.h-its.org/bpemb/rmy) ・
  [rn (Rundi)](http://nlp.h-its.org/bpemb/rn) ・
  [ro (Romanian)](http://nlp.h-its.org/bpemb/ro) ・
  [ru (Russian)](http://nlp.h-its.org/bpemb/ru) ・
  [rue (Rusyn)](http://nlp.h-its.org/bpemb/rue) ・
  [rw (Kinyarwanda)](http://nlp.h-its.org/bpemb/rw)

  [sa (Sanskrit)](http://nlp.h-its.org/bpemb/sa) ・
  [sah (Yakut)](http://nlp.h-its.org/bpemb/sah) ・
  [sc (Sardinian)](http://nlp.h-its.org/bpemb/sc) ・
  [scn (Sicilian)](http://nlp.h-its.org/bpemb/scn) ・
  [sco (Scots)](http://nlp.h-its.org/bpemb/sco) ・
  [sd (Sindhi)](http://nlp.h-its.org/bpemb/sd) ・
  [se (Northern Sami)](http://nlp.h-its.org/bpemb/se) ・
  [sg (Sango)](http://nlp.h-its.org/bpemb/sg) ・
  [sh (Serbo-Croatian)](http://nlp.h-its.org/bpemb/sh) ・
  [si (Sinhala)](http://nlp.h-its.org/bpemb/si) ・
  [sk (Slovak)](http://nlp.h-its.org/bpemb/sk) ・
  [sl (Slovenian)](http://nlp.h-its.org/bpemb/sl) ・
  [sm (Samoan)](http://nlp.h-its.org/bpemb/sm) ・
  [sn (Shona)](http://nlp.h-its.org/bpemb/sn) ・
  [so (Somali)](http://nlp.h-its.org/bpemb/so) ・
  [sq (Albanian)](http://nlp.h-its.org/bpemb/sq) ・
  [sr (Serbian)](http://nlp.h-its.org/bpemb/sr) ・
  [srn (Sranan Tongo)](http://nlp.h-its.org/bpemb/srn) ・
  [ss (Swati)](http://nlp.h-its.org/bpemb/ss) ・
  [st (Southern Sotho)](http://nlp.h-its.org/bpemb/st) ・
  [stq (Saterfriesisch)](http://nlp.h-its.org/bpemb/stq) ・
  [su (Sundanese)](http://nlp.h-its.org/bpemb/su) ・
  [sv (Swedish)](http://nlp.h-its.org/bpemb/sv) ・
  [sw (Swahili)](http://nlp.h-its.org/bpemb/sw) ・
  [szl (Silesian)](http://nlp.h-its.org/bpemb/szl)

  [ta (Tamil)](http://nlp.h-its.org/bpemb/ta) ・
  [tcy (Tulu)](http://nlp.h-its.org/bpemb/tcy) ・
  [te (Telugu)](http://nlp.h-its.org/bpemb/te) ・
  [tet (Tetum)](http://nlp.h-its.org/bpemb/tet) ・
  [tg (Tajik)](http://nlp.h-its.org/bpemb/tg) ・
  [th (Thai)](http://nlp.h-its.org/bpemb/th) ・
  [ti (Tigrinya)](http://nlp.h-its.org/bpemb/ti) ・
  [tk (Turkmen)](http://nlp.h-its.org/bpemb/tk) ・
  [tl (Tagalog)](http://nlp.h-its.org/bpemb/tl) ・
  [tn (Tswana)](http://nlp.h-its.org/bpemb/tn) ・
  [to (Tonga)](http://nlp.h-its.org/bpemb/to) ・
  [tpi (Tok Pisin)](http://nlp.h-its.org/bpemb/tpi) ・
  [tr (Turkish)](http://nlp.h-its.org/bpemb/tr) ・
  [ts (Tsonga)](http://nlp.h-its.org/bpemb/ts) ・
  [tt (Tatar)](http://nlp.h-its.org/bpemb/tt) ・
  [tum (Tumbuka)](http://nlp.h-its.org/bpemb/tum) ・
  [tw (Twi)](http://nlp.h-its.org/bpemb/tw) ・
  [ty (Tahitian)](http://nlp.h-its.org/bpemb/ty) ・
  [tyv (Tuvinian)](http://nlp.h-its.org/bpemb/tyv)

  [udm (Udmurt)](http://nlp.h-its.org/bpemb/udm) ・
  [ug (Uighur)](http://nlp.h-its.org/bpemb/ug) ・
  [uk (Ukrainian)](http://nlp.h-its.org/bpemb/uk) ・
  [ur (Urdu)](http://nlp.h-its.org/bpemb/ur) ・
  [uz (Uzbek)](http://nlp.h-its.org/bpemb/uz)

  [ve (Venda)](http://nlp.h-its.org/bpemb/ve) ・
  [vec (Venetian)](http://nlp.h-its.org/bpemb/vec) ・
  [vep (Veps)](http://nlp.h-its.org/bpemb/vep) ・
  [vi (Vietnamese)](http://nlp.h-its.org/bpemb/vi) ・
  [vls (Vlaams)](http://nlp.h-its.org/bpemb/vls) ・
  [vo (Volapük)](http://nlp.h-its.org/bpemb/vo)

  [wa (Walloon)](http://nlp.h-its.org/bpemb/wa) ・
  [war (Waray)](http://nlp.h-its.org/bpemb/war) ・
  [wo (Wolof)](http://nlp.h-its.org/bpemb/wo) ・
  [wuu (Wu Chinese)](http://nlp.h-its.org/bpemb/wuu)

  [xal (Kalmyk)](http://nlp.h-its.org/bpemb/xal) ・
  [xh (Xhosa)](http://nlp.h-its.org/bpemb/xh) ・
  [xmf (Mingrelian)](http://nlp.h-its.org/bpemb/xmf)

  [yi (Yiddish)](http://nlp.h-its.org/bpemb/yi) ・
  [yo (Yoruba)](http://nlp.h-its.org/bpemb/yo)

  [za (Zhuang)](http://nlp.h-its.org/bpemb/za) ・
  [zea (Zeeuws)](http://nlp.h-its.org/bpemb/zea) ・
  [zh (Chinese)](http://nlp.h-its.org/bpemb/zh) ・
  [zu (Zulu)](http://nlp.h-its.org/bpemb/zu)



  [multi (multilingual)](http://nlp.h-its.org/bpemb/multi)



  If you use BPEmb in academic work, please cite:

  ```
  @InProceedings{heinzerling2018bpemb,
    author = {Benjamin Heinzerling and Michael Strube},
    title = "{BPEmb: Tokenization-free Pre-trained Subword Embeddings in 275 Languages}",
    booktitle = {Proceedings of the Eleventh International Conference on Language Resources and Evaluation (LREC 2018)},
    year = {2018},
    month = {May 7-12, 2018},
    address = {Miyazaki, Japan},
    editor = {Nicoletta Calzolari (Conference chair) and Khalid Choukri and Christopher Cieri and Thierry Declerck and Sara Goggi and Koiti Hasida and Hitoshi Isahara and Bente Maegaard and Joseph Mariani and Hélène Mazo and Asuncion Moreno and Jan Odijk and Stelios Piperidis and Takenobu Tokunaga},
    publisher = {European Language Resources Association (ELRA)},
    isbn = {979-10-95546-00-9},
    language = {english}
    }
  ```


pkgId: 6e95855c5267faf7336074f1374597d69cc7abd8a9ab2aae603423cd962539a3
name: python-braceexpand
arch: src
version: 0.1.7
epoch: 0
release: 1
summary: Bash-style brace expansion for Python
url: https://github.com/trendels/braceexpand
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e29b8587-9af6-4995-af93-42769b607848
location_href: 00010232-python-braceexpand/python-braceexpand-0.1.7-1.src.rpm
checksum_type: sha256
description:
  |build-status-img| |PyPI|
  Implements Brace Expansion as described in
  `bash(1) <http://man7.org/linux/man-pages/man1/bash.1.html#EXPANSION>`__,
  with the following limitations:
  -  A pattern containing unbalanced braces will raise an
     ``UnbalancedBracesError`` exception. In bash, unbalanced braces will
     either be partly expanded or ignored.
  -  A mixed-case character range like ``'{Z..a}'`` or ``'{a..Z}'`` will
     not include the characters :literal:`[]^_\`` between ``Z`` and ``a``.
  ``braceexpand`` is tested with Python 2.7, and 3.6+


pkgId: 021a61090f504134f7a785733346564272c98df424da81872a3a7071ecd24b08
name: python-braintree
arch: src
version: 4.19.0
epoch: 0
release: 1
summary: Braintree Python Library
url: https://developer.paypal.com/braintree/docs/reference/overview
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-547961bc-142c-45ed-8113-d5b3afd55555
location_href: 00010961-python-braintree/python-braintree-4.19.0-1.src.rpm
checksum_type: sha256
description:
          The Braintree Python SDK provides integration access to the Braintree Gateway.

          1. https://github.com/braintree/braintree_python - README and Samples
          2. https://developer.paypal.com/braintree/docs/reference/overview - API Reference


pkgId: 6b5684e435eb9d85f833d00f78767323d962ed081c61c675931170a4759b2ad4
name: python-branca
arch: src
version: 0.6.0
epoch: 0
release: 1
summary: Generate complex HTML+JS pages with Python
url: https://github.com/python-visualization/branca
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-42131f94-693f-4ad9-9487-8b381cbb3cd0
location_href: 00003152-python-branca/python-branca-0.6.0-1.src.rpm
checksum_type: sha256
description:
  [![PyPI Package](https://img.shields.io/pypi/v/branca.svg)](https://pypi.python.org/pypi/branca)
  [![Build Status](https://github.com/python-visualization/branca/actions/workflows/test_code.yml/badge.svg?branch=master)](https://github.com/python-visualization/branca/actions/workflows/test_code.yml)
  [![Gitter](https://badges.gitter.im/python-visualization/folium.svg)](https://gitter.im/python-visualization/folium)



  This library is a spinoff from [folium](https://github.com/python-visualization/folium). It can be used to generate HTML + JS. It is based on Jinja2.

  - Documentation: https://python-visualization.github.io/branca/
  - Examples: https://nbviewer.org/github/python-visualization/branca/tree/main/examples/


pkgId: 7976666fba37d4dc0f0defdfa96ae266a4066cbda2d49ac0c859ddc1523ac51a
name: python-breathe
arch: src
version: 4.35.0
epoch: 0
release: 1
summary: Sphinx Doxygen renderer
url: https://github.com/michaeljones/breathe
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1fa6e4d9-e9ae-4fa8-89cb-551e65275bab
location_href: 00010881-python-breathe/python-breathe-4.35.0-1.src.rpm
checksum_type: sha256
description:
  Breathe is an extension to reStructuredText and Sphinx to be able to read and
   render `Doxygen <http://www.doxygen.org>`__ xml output.


pkgId: e0f1961596fd037df9bb38603d03abab86a3f23a46d0de9669b763459422b676
name: python-bridgecrew
arch: src
version: 2.3.158
epoch: 0
release: 1
summary: Infrastructure as code static analysis
url: https://github.com/bridgecrewio/bridgecrew
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-81a29a26-3a70-4b3b-a543-5ba5d274feeb
location_href: 00011427-python-bridgecrew/python-bridgecrew-2.3.158-1.src.rpm
checksum_type: sha256
description:
  [![build status](https://github.com/bridgecrewio/bridgecrew-py/workflows/build/badge.svg)](https://github.com/bridgecrewio/bridgecrew-py/actions?query=workflow%3Abuild)

  Wraps checkov with a bridgecrew cli (does exactly the same)


pkgId: 4a8051dcadc30179c3284663ca327a7a59a9ab9e17716e819d4745f2fefc1f9e
name: python-brother
arch: src
version: 2.3.0
epoch: 0
release: 1
summary: Python wrapper for getting data from Brother laser and inkjet printers via SNMP.
url: https://github.com/bieniu/brother
rpm_license: Apache-2.0 License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a0079a96-5946-43a2-a6f4-7c0f448f32d5
location_href: 00003158-python-brother/python-brother-2.3.0-1.src.rpm
checksum_type: sha256
description:
  [![GitHub Release][releases-shield]][releases]
  [![PyPI][pypi-releases-shield]][pypi-releases]
  [![PyPI - Downloads][pypi-downloads]][pypi-statistics]
  [![Buy me a coffee][buy-me-a-coffee-shield]][buy-me-a-coffee]
  [![PayPal_Me][paypal-me-shield]][paypal-me]



  Python wrapper for getting data from Brother laser and inkjet printers via snmp



  ```py
  import asyncio
  import logging
  from sys import argv

  import pysnmp.hlapi.asyncio as hlapi

  from brother import Brother, SnmpError, UnsupportedModelError


  HOST = "brother"
  logging.basicConfig(level=logging.DEBUG)


  async def main():
      host = argv[1] if len(argv) > 1 else HOST
      printer_type = argv[2] if len(argv) > 2 else "laser"
      
      

      external_snmp = False
      if len(argv) > 3 and argv[3] == "use_external_snmp":
          external_snmp = True

      if external_snmp:
          print("Using external SNMP engine")
          snmp_engine = hlapi.SnmpEngine()
      else:
          snmp_engine = None
      try:
          brother = await Brother.create(
              host, printer_type=printer_type, snmp_engine=snmp_engine
          )
          data = await brother.async_update()
      except (ConnectionError, SnmpError, UnsupportedModelError) as error:
          print(f"{error}")
          return

      brother.shutdown()

      print(f"Model: {brother.model}")
      print(f"Firmware: {brother.firmware}")
      if data:
          print(f"Status: {data.status}")
          print(f"Serial no: {data.serial}")
          print(f"Sensors data: {data}")


  loop = asyncio.new_event_loop()
  loop.run_until_complete(main())
  loop.close()
  ```

  [releases]: https://github.com/bieniu/brother/releases
  [releases-shield]: https://img.shields.io/github/release/bieniu/brother.svg?style=popout
  [pypi-releases]: https://pypi.org/project/brother/
  [pypi-statistics]: https://pepy.tech/project/brother
  [pypi-releases-shield]: https://img.shields.io/pypi/v/brother
  [pypi-downloads]: https://pepy.tech/badge/brother/month
  [buy-me-a-coffee-shield]: https://img.shields.io/static/v1.svg?label=%20&message=Buy%20me%20a%20coffee&color=6f4e37&logo=buy%20me%20a%20coffee&logoColor=white
  [buy-me-a-coffee]: https://www.buymeacoffee.com/QnLdxeaqO
  [paypal-me-shield]: https://img.shields.io/static/v1.svg?label=%20&message=PayPal.Me&logo=paypal
  [paypal-me]: https://www.paypal.me/bieniu79


pkgId: b05d5bbb9e40a6c218499dea3c81499328cdfe51a2a4500870d45c2e00dd3aec
name: python-brotlicffi
arch: src
version: 1.0.9.2
epoch: 0
release: 1
summary: Python CFFI bindings to the Brotli library
url: https://github.com/python-hyper/brotlicffi
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d69905c3-7726-4f99-8681-c888f10358d1
location_href: 00014208-python-brotlicffi/python-brotlicffi-1.0.9.2-1.src.rpm
checksum_type: sha256
description:
  This library contains Python CFFI bindings for the reference Brotli encoder/decoder,
  `available here`_. This allows Python software to use the Brotli compression
  algorithm directly from Python code.
  Install from PyPI:
      $ python -m pip install brotlicffi
  To use it simply, try this:
      import brotlicffi
      data = brotlicffi.decompress(compressed_data)
  More information can be found `in the documentation`_.


pkgId: d452482c275884616cfb6c38ee10e35a15827b537f5af4976a243dde4cca4089
name: python-brotlicffi-debuginfo
arch: aarch64
version: 1.0.9.2
epoch: 0
release: 1
summary: Debug information for package python-brotlicffi
url: https://github.com/python-hyper/brotlicffi
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-d69905c3-7726-4f99-8681-c888f10358d1
rpm_sourcerpm: python-brotlicffi-1.0.9.2-1.src.rpm
location_href: 00014208-python-brotlicffi/python-brotlicffi-debuginfo-1.0.9.2-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-brotlicffi.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: ff845fc8cfcf4bc51feb5b9ca146c732dd65903a58621551096079aca56ac6be
name: python-brotlicffi-debugsource
arch: aarch64
version: 1.0.9.2
epoch: 0
release: 1
summary: Debug sources for package python-brotlicffi
url: https://github.com/python-hyper/brotlicffi
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-d69905c3-7726-4f99-8681-c888f10358d1
rpm_sourcerpm: python-brotlicffi-1.0.9.2-1.src.rpm
location_href: 00014208-python-brotlicffi/python-brotlicffi-debugsource-1.0.9.2-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-brotlicffi.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 4bfd3fc81a5f2a777b22011a05045e47b25cde236a71132a155d3e14ed6e210f
name: python-brotlipy
arch: src
version: 0.7.0
epoch: 0
release: 1
summary: Python binding to the Brotli library
url: https://github.com/python-hyper/brotlipy/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-532c92cd-8a71-4c0b-996c-6b79c58cc190
location_href: 00010089-python-brotlipy/python-brotlipy-0.7.0-1.src.rpm
checksum_type: sha256
description:
  This library contains Python bindings for the reference Brotli encoder/decoder,
  `available here`_. This allows Python software to use the Brotli compression
  algorithm directly from Python code.
  To use it simply, try this:
      import brotli
      data = brotli.decompress(compressed_data)
  More information can be found `in the documentation`_.


pkgId: ea3538a4b91784eb192007165887488848be89a8ef50354de444aa99cc93cb6a
name: python-brotlipy-debuginfo
arch: aarch64
version: 0.7.0
epoch: 0
release: 1
summary: Debug information for package python-brotlipy
url: https://github.com/python-hyper/brotlipy/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-532c92cd-8a71-4c0b-996c-6b79c58cc190
rpm_sourcerpm: python-brotlipy-0.7.0-1.src.rpm
location_href: 00010089-python-brotlipy/python-brotlipy-debuginfo-0.7.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-brotlipy.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: d772fd3362e0a476ade287a94a21b2473605d30ef85ce8b12768754ffe6b075c
name: python-brotlipy-debugsource
arch: aarch64
version: 0.7.0
epoch: 0
release: 1
summary: Debug sources for package python-brotlipy
url: https://github.com/python-hyper/brotlipy/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-532c92cd-8a71-4c0b-996c-6b79c58cc190
rpm_sourcerpm: python-brotlipy-0.7.0-1.src.rpm
location_href: 00010089-python-brotlipy/python-brotlipy-debugsource-0.7.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-brotlipy.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 07b6355f7a4bf587078d3146d81d88ace1ad955bf71a0e57b8b099f5da45446d
name: python-browser-cookie3
arch: src
version: 0.17.1
epoch: 0
release: 1
url: https://github.com/borisbabic/browser_cookie3
rpm_license: lgpl
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-79774763-896e-417b-bb72-e63ffbdf77ca
location_href: 00013479-python-browser-cookie3/python-browser-cookie3-0.17.1-1.src.rpm
checksum_type: sha256
summary:
  Loads cookies from your browser into a cookiejar object so can download with urllib and other libraries the same content you see in the web browser.


pkgId: c269d7c3e54c48bf147418dea33ec891d9b6b374de6cdda798ae3a48c656f135
name: python-bsddb3
arch: src
version: 6.2.9
epoch: 0
release: 1
summary: Python bindings for Oracle Berkeley DB
url: https://www.jcea.es/programacion/pybsddb.htm
rpm_license: 3-clause BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-021237ed-52b4-43f1-ac6f-30a51ca0f1ec
location_href: 00003159-python-bsddb3/python-bsddb3-6.2.9-1.src.rpm
checksum_type: sha256
description:
  This module provides a nearly complete wrapping of the Oracle/Sleepycat C API
  for the Database Environment, Database, Cursor, Log Cursor, Sequence and
  Transaction objects, and each of these is exposed as a Python type in the
  bsddb3.db module. The database objects can use various access methods: btree,
  hash, recno, and queue.  Complete support of Berkeley DB distributed
  transactions. Complete support for Berkeley DB Replication Manager. Complete
  support for Berkeley DB Base Replication. Support for RPC.

  Please see the documents in the docs directory of the source distribution or at
  the website for more details on the types and methods provided. The goal is to
  mirror most of the real Berkeley DB API so fall back to the Oracle Berkeley DB
  documentation as appropriate.

  If you need to support ancient versions of Python and/or Berkeley DB , you can
  use old releases of this bindings.


  `Homepage <https://www.jcea.es/programacion/
  pybsddb.htm>`__ --
  `Releases (changelog) <https://www.jcea.es/programacion/
  pybsddb.htm#Releases>`__ --
  `Documentation <https://www.jcea.es/programacion/
  pybsddb_doc/>`__ --
  `Mailing List <https://mailman.jcea.es/listinfo/pybsddb>`__ --
  `Donation <https://www.jcea.es/programacion/pybsddb_doc/donate.html>`__

  .. warning::

     This library is deprecated. If you are running Python 3 >= 3.6, please
     upgrade to `berkeleydb <https://pypi.org/project/berkeleydb/>`_ library.
     Check `details <https://www.jcea.es/programacion/pybsddb.htm>`__.

     Take note that upgrading to `berkeleydb`_ is easy but not transparent.
     Notably, keys and values are **bytes** in `berkeleydb`_ lib, while in
     'bsddb3' they are **strings**. You would only need to change your code to
     add or remove type encoding/decoding, depending of how you use the library.
     The process should be simple, nevertheless.


pkgId: dfefe9c96f44372ab7c716974121727d12c11ebf72bed9cefc53e0edf60f31ae
name: python-btlewrap
arch: src
version: 0.1.1
epoch: 0
release: 1
summary: wrapper around different bluetooth low energy backends
url: https://github.com/ChristianKuehnel/btlewrap
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b4b070d6-2f97-4d15-bc48-e70c839c93eb
location_href: 00003162-python-btlewrap/python-btlewrap-0.1.1-1.src.rpm
checksum_type: sha256
description:
  Bluetooth LowEnergy wrapper for different python backends. This gives you a nice API so that you can use different Bluetooth implementations on different platforms.
  This library was initially implemented as part of the `miflora <https://github.com/open-homeautomation/miflora>`_ library, but then refactored out, so that it can be used on other projects as well.


pkgId: b4fc031cb0b53d93b5fdfac1a130d9e64da4e81bce8da9c38e2fc85c8e16537b
name: python-btrfs
arch: src
version: 13
epoch: 0
release: 1
summary: Python module to interact programmatically with an online btrfs file system
url: https://github.com/knorrie/python-btrfs
rpm_license: GNU Lesser General Public License v3 (LGPLv3)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9e724633-7865-4dc8-ac91-f3ab1dbe774d
location_href: 00003163-python-btrfs/python-btrfs-13-1.src.rpm
checksum_type: sha256
description:
  python-btrfs is a Python 3 library that provides ways to interact
  programmatically with an online btrfs file system.

  It provides a pure python shadow implementation of data structures used in
  btrfs together with convenient wrappers around the collection of kernel
  functions that are available in the btrfs kernel API.

  Using them, we can examine the secret inner world of a btrfs file system for
  educational purposes.

  The target audience for using the library is system administrators and
  developers who want to discover more about the internals of a btrfs file
  system, or want to create adjusted monitoring or administration tools that are
  optimized for their specific use cases.

  python-btrfs does not directly access disk storage, it only uses functions
  available in the kernel interface, using system calls. This also means that
  python-btrfs can not be used to repair a broken filesystem whenever the running
  Linux kernel cannot properly mount it.


pkgId: 211a271acbd53036f2b6b3aaedf40c83ec0abfa6f8d9dbefec95355fc8204f24
name: python-bucky
arch: src
version: 2.3.0
epoch: 0
release: 1
summary: StatsD and CollectD adapter for Graphite
url: http://github.com/trbs/bucky.git
rpm_license: ASF2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a0ff3498-7b02-4d77-924c-22b21ba129cc
location_href: 00003165-python-bucky/python-bucky-2.3.0-1.src.rpm
checksum_type: sha256
description:
  Bucky is a small server for collecting and translating metrics for
  Graphite. It can current collect metric data from CollectD daemons
  and from StatsD clients.


pkgId: 9d28cd50190a7f6930ccf063faf68a96ddfd122cb561fe7993cc282e650a1b58
name: python-bugsnag
arch: src
version: 4.4.0
epoch: 0
release: 1
summary: Automatic error monitoring for django, flask, etc.
url: https://bugsnag.com/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-79c6e18e-e8a0-4ddb-a2d5-0c9e925bcc66
location_href: 00010180-python-bugsnag/python-bugsnag-4.4.0-1.src.rpm
checksum_type: sha256
description:
  The official Python notifier for `Bugsnag <https://bugsnag.com/>`_.
  Provides support for automatically capturing and sending exceptions
  in your Django and other Python apps to Bugsnag, to help you find
  and solve your bugs as fast as possible.


pkgId: 7d6ea877c0afe3554d6bbe16ba9afc46b189a25bbcca664175413a42ba795084
name: python-bunch
arch: src
version: 1.0.1
epoch: 0
release: 1
summary: A dot-accessible dictionary (a la JavaScript objects)
url: http://github.com/dsc/bunch
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-30ced53e-f126-487e-94c6-7a9049fef683
location_href: 00012139-python-bunch/python-bunch-1.0.1-1.src.rpm
checksum_type: sha256
description:
  Bunch is a dictionary that supports attribute-style access, a la JavaScript.
  >>> b = Bunch()
  >>> b.hello = 'world'
  >>> b.hello
  'world'
  >>> b['hello'] += "!"
  >>> b.hello
  'world!'
  >>> b.foo = Bunch(lol=True)
  >>> b.foo.lol
  True
  >>> b.foo is b['foo']
  True


pkgId: d1dd3d42bee812e64b21acd0c567420426aa7ba06f321c3e74adb7984aefeb80
name: python-bz2file
arch: src
version: 0.98
epoch: 0
release: 1
summary: Read and write bzip2-compressed files.
url: https://github.com/nvawda/bz2file
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-394129ff-1846-4c22-bd06-c54f60b9caf9
location_href: 00009588-python-bz2file/python-bz2file-0.98-1.src.rpm
checksum_type: sha256
description:
  - Supports multi-stream files.
  - Can read from or write to any file-like object.
  - Can open files in either text or binary mode.
  - Added methods: ``peek()``, ``read1()``, ``readinto()``, ``fileno()``,
    ``readable()``, ``writable()``, ``seekable()``.


pkgId: fe0be57a2b2dd999df591ef1cdc923e89610f82e84f7ea8dba56919cfeab93f4
name: python-bzt
arch: src
version: 1.16.22
epoch: 0
release: 1
summary: Taurus Tool for Continuous Testing
url: http://gettaurus.org/
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d746260d-c718-495d-b44b-c18864e7d8da
location_href: 00013120-python-bzt/python-bzt-1.16.22-1.src.rpm
checksum_type: sha256
description:
  execution:
  - concurrency: 10
    ramp-up: 1m
    hold-for: 1m30s
    scenario: simple
  scenarios:
    simple:
      think-time: 0.75
      requests:
      - http://blazedemo.com/
      - http://blazedemo.com/vacation.html
  ```
  Then run `bzt test.yml`. After the tool finishes, observe resulting summary stats in console log (more reporting options [here](http://gettaurus.org/docs/Reporting.md)). All artifact files from the run will be placed in the directory mentioned in console log. Read more on command-line tool usage [here](http://gettaurus.org/docs/CommandLine.md).
  ![Analytics](https://ga-beacon.appspot.com/UA-63369152-1/taurus/readme)


pkgId: e8642a4717cfc43f7beffbc3f15dc5ee81f5b66628fc093f34cb951949ee2c3d
name: python-cachetools
arch: src
version: 5.3.0
epoch: 0
release: 1
summary: Extensible memoizing collections and decorators
url: https://github.com/tkem/cachetools/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-50c69f64-4b92-4eb8-8ee3-07adc2ecf969
location_href: 00008919-python-cachetools/python-cachetools-5.3.0-1.src.rpm
checksum_type: sha256
description:
  This module provides various memoizing collections and decorators,
  including variants of the Python Standard Library's `@lru_cache`_
  function decorator.
     from cachetools import cached, LRUCache, TTLCache
     
     @cached(cache={})
     def fib(n):
         return n if n < 2 else fib(n - 1) + fib(n - 2)
     
     @cached(cache=LRUCache(maxsize=32))
     def get_pep(num):
         url = 'http://www.python.org/dev/peps/pep-%04d/' % num
         with urllib.request.urlopen(url) as s:
             return s.read()
     
     @cached(cache=TTLCache(maxsize=1024, ttl=600))
     def get_weather(place):
         return owm.weather_at_place(place).get_weather()
  For the purpose of this module, a *cache* is a mutable_ mapping_ of a
  fixed maximum size.  When the cache is full, i.e. by adding another
  item the cache would exceed its maximum size, the cache must choose
  which item(s) to discard based on a suitable `cache algorithm`_.
  This module provides multiple cache classes based on different cache
  algorithms, as well as decorators for easily memoizing function and
  method calls.


pkgId: f00c9bf789afadd3ef9825c0cc90b839535ec172b6f19e306df959b5dee7f177
name: python-cachy
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: Cachy provides a simple yet effective caching library.
url: https://github.com/sdispater/cachy
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-373e8f16-e60d-45c0-bd2a-53bc75b1d939
location_href: 00003169-python-cachy/python-cachy-0.3.0-1.src.rpm
checksum_type: sha256
description:
  * `Documentation <http://cachy.readthedocs.org>`_
  * `Issue Tracker <https://github.com/sdispater/cachy/issues>`_


pkgId: fa2dd8ed3a9da713a25ec79a80cc1af41ae31ae949e0047a36db766533674da5
name: python-calcephpy
arch: src
version: 3.5.1
epoch: 0
release: 1
summary: Python interface for the CALCEPH Library
url: https://www.imcce.fr/inpop/calceph/
rpm_license: CeCILL-C or CeCILL-B or CeCILL v2.1
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7ac0ee10-7222-43e6-bc28-a2a946fee9c3
location_href: 00003175-python-calcephpy/python-calcephpy-3.5.1-1.src.rpm
checksum_type: sha256
description:
  This library is designed to access the binary planetary ephemeris files, such INPOPxx, JPL DExxx and SPICE ephemeris files.
  This library provides a C Application Programming Interface (API) and, optionally, Fortran 77/2003, Python 2/3 and Octave/Matlab interfaces to be called by the application
  This library  is developed by the "Astronomy and Dynamical System" team
  at  IMCCE, Observatoire de Paris, CNRS, PSL Research University, Sorbonne Universite,  (PARIS).


pkgId: dbc850e7b82ace3d4a82f63dd888c5e9c9e6e27ac3f3236e9d3d254e2986319d
name: python-capturer
arch: src
version: 3.0
epoch: 0
release: 1
summary: Easily capture stdout/stderr of the current process and subprocesses
url: https://capturer.readthedocs.io
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-53ee1b9e-3a1b-4cac-bc68-a665d03e9bb0
location_href: 00003181-python-capturer/python-capturer-3.0-1.src.rpm
checksum_type: sha256
description:
  The capturer package makes it easy to capture the stdout_ and stderr_ streams
  of the current process *and subprocesses*. Output can be relayed to the
  terminal in real time but is also available to the Python program for
  additional processing. It's currently tested on cPython 2.7, 3.5+ and PyPy
  (2.7). It's tested on Linux and Mac OS X and may work on other unixes but
  definitely won't work on Windows (due to the use of the platform dependent pty_
  module). For usage instructions please refer to the documentation_.


pkgId: 5a9a6378e09139cecbd5638ed1bc23ad7975b6a5c9d2d4a4442f57be991dd6a1
name: python-carbon
arch: src
version: 1.1.10
epoch: 0
release: 1
summary: Backend data caching and persistence daemon for Graphite
url: http://graphiteapp.org/
rpm_license: Apache Software License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-10126a02-ed97-40cb-a3b5-4b9529cd1e2c
location_href: 00003182-python-carbon/python-carbon-1.1.10-1.src.rpm
checksum_type: sha256
description:
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/85221cd3bb6e49d7bbd6fed376a88264)](https://www.codacy.com/app/graphite-project/carbon?utm_source=github.com&utm_medium=referral&utm_content=graphite-project/carbon&utm_campaign=badger)
  [![Build Status](https://secure.travis-ci.org/graphite-project/carbon.png?branch=master)](http://travis-ci.org/graphite-project/carbon)
  [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fgraphite-project%2Fcarbon.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fgraphite-project%2Fcarbon?ref=badge_shield)
  [![codecov](https://codecov.io/gh/graphite-project/carbon/branch/master/graph/badge.svg)](https://codecov.io/gh/graphite-project/carbon)



  Carbon is one of three components within the Graphite project:

  1. [Graphite-Web](https://github.com/graphite-project/graphite-web), a Django-based web application that renders graphs and dashboards
  2. The Carbon metric processing daemons
  3. The [Whisper](https://github.com/graphite-project/whisper) time-series database library

  ![Graphite Components](https://github.com/graphite-project/graphite-web/raw/master/webapp/content/img/overview.png "Graphite Components")

  Carbon is responsible for receiving metrics over the network, caching them in memory for "hot queries" from the Graphite-Web application, and persisting them to disk using the Whisper time-series library.



  Please refer to the instructions at [readthedocs](http://graphite.readthedocs.org/).



  Carbon is licensed under version 2.0 of the Apache License. See the [LICENSE](https://github.com/graphite-project/carbon/blob/master/LICENSE) file for details.


pkgId: 27bef43f3b989b61d189239f2ccae695b2042581ae605b1e6597cd94f713b995
name: python-caribou
arch: src
version: 0.3
epoch: 0
release: 1
summary: python migrations for sqlite databases
url: http://github.com/clutchski/caribou
rpm_license: Public Domain
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-12133488-0fcb-4899-944e-8f0560aa0afc
location_href: 00003183-python-caribou/python-caribou-0.3-1.src.rpm
checksum_type: sha256
description:
  Caribou is a simple SQLite database migrations library, built primarily
  to manage the evoluton of client side databases over multiple releases
  of an application.


pkgId: 9ed32d434b5344c722289862bf58d2a5e4b30fc6d3a6631350067eaeb1cffdea
name: python-cartoframes
arch: src
version: 1.2.5
epoch: 0
release: 1
summary: CARTO Python package for data scientists
url: https://github.com/CartoDB/cartoframes
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2894e483-4098-4c93-bde8-28741ba605d5
location_href: 00011225-python-cartoframes/python-cartoframes-1.2.5-1.src.rpm
checksum_type: sha256
description:
  * Stable (1.2.5): |stable|
  * Latest (develop branch): |develop|
  If you do not have an API key, you can still use cartoframes for creating maps locally.
      The example context only provides read access, so not all cartoframes features are available. For full access, `Start a free trial <https://carto.com/signup>`__ or get free access with a `GitHub Student Developer Pack <https://education.github.com/pack>`__.


pkgId: 4f9eeb48c6870e4af57623427f7b29442a3649cbb04d85b6aaff8fb4a3cab735
name: python-cassandra-sigv4
arch: src
version: 4.0.2
epoch: 0
release: 1
url: https://github.com/aws/aws-sigv4-auth-cassandra-python-driver-plugin/
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-226704c8-30ab-47ea-ad43-5ce5c11d305c
location_href: 00009686-python-cassandra-sigv4/python-cassandra-sigv4-4.0.2-1.src.rpm
checksum_type: sha256
summary:
  Implements a sigv4 authentication plugin for the open-source Datastax Python Driver for Apache Cassandra

description:
  The current version is 4.0.2. Please see the [changelog](./CHANGELOG.md) for details on version history.



  This package implements an authentication plugin for the open-source Datastax Python Driver for Apache Cassandra.
  The driver enables you to add authentication information to your API requests using the AWS Signature Version 4 Process (SigV4).
  Using the plugin, you can provide users and applications short-term credentials to access Amazon Keyspaces (for Apache Cassandra)
  using AWS Identity and Access Management (IAM) users and roles.

  The plugin depends on the AWS SDK for Python (Boto3). It uses `boto3.Session` to obtain credentials.




  ``` python
  ssl_context = SSLContext(PROTOCOL_TLSv1_2)
  ssl_context.load_verify_locations('./AmazonRootCA1.pem')
  ssl_context.verify_mode = CERT_REQUIRED
  boto_session = boto3.Session(aws_access_key_id="AKIAIOSFODNN7EXAMPLE",
                               aws_secret_access_key="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
                               aws_session_token="AQoDYXdzEJr...<remainder of token>",
                               region_name="us-east-2")
  auth_provider = SigV4AuthProvider(boto_session)
  cluster = Cluster(['cassandra.us-east-2.amazonaws.com'], ssl_context=ssl_context, auth_provider=auth_provider,
                    port=9142)
  session = cluster.connect()
  r = session.execute('select * from system_schema.keyspaces')
  print(r.current_rows)
  ```



  The following sections describe how to use the authentication plugin for the open-source DataStax Python Driver for Cassandra to access Amazon Keyspaces.



  The first step is to get an Amazon digital certificate to encrypt your connections using Transport Layer Security (TLS).
  The DataStax Python driver must use an SSL CA certificate so that the client SSL engine can validate the Amazon Keyspaces
  certificate on connection.

  ``` python
  ssl_context = SSLContext(PROTOCOL_TLSv1_2)
  ssl_context.load_verify_locations('./AmazonRootCA1.pem')
  ssl_context.verify_mode = CERT_REQUIRED
  ```



  Before you can start using the plugin, you must configure the AWS Region that the plugin will use when authenticating.
  This is required because SigV4 signatures are Region-specific. For example, if you are connecting to the `cassandra.us-east-2.amazonaws.com` endpoint,
  the Region must be `us-east-2`. For a list of available AWS Regions and endpoints, see [Service Endpoints for Amazon Keyspaces](https://docs.aws.amazon.com/keyspaces/latest/devguide/programmatic.endpoints.html).

  You can specify the Region using one of the following four methods:

  * Environment Variable
  * Constructor
  * Boto3 Session Configuration



  You can use the `AWS_REGION` environment variable to match the endpoint that you are
  communicating with by setting it as part of your application start-up, as follows.

  ``` shell
  $ export AWS_REGION=us-east-1
  ```



  You can either provide the constructor for `SigV4AuthProvider` with a boto3 session, aws credentials and a region,
  or a parameterless constructor to follow the default boto3 credential discovery path.



  ``` shell
  pip install cassandra-sigv4
  ```



  Note that if a session is provided, all other arguments for the constructor are ignored.

  ``` python
  boto_session = boto3.Session(aws_access_key_id="AKIAIOSFODNN7EXAMPLE",
                               aws_secret_access_key="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
                               aws_session_token="AQoDYXdzEJr...<remainder of token>",
                               region_name="us-east-2")
  auth_provider = SigV4AuthProvider(boto_session)
  cluster = Cluster(['cassandra.us-east-2.amazonaws.com'], ssl_context=ssl_context, auth_provider=auth_provider,
                    port=9142)
  ```



  ``` python
  auth_provider = SigV4AuthProvider(aws_access_key_id="AKIAIOSFODNN7EXAMPLE",
                                    aws_secret_access_key="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
                                    aws_session_token="AQoDYXdzEJr...<remainder of token>",
                                    region_name="us-east-2")
  cluster = Cluster(['cassandra.us-east-2.amazonaws.com'], ssl_context=ssl_context, auth_provider=auth_provider,
                    port=9142)
  ```


pkgId: c49d9f8c2778a2f4dc7bd1217700d3bfe5b1e764c455fec15bb4a8b39ace546d
name: python-casttube
arch: src
version: 0.2.1
epoch: 0
release: 1
summary: YouTube chromecast api
url: http://github.com/ur1katz/casttube
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0e6d0961-1d48-459a-a9ce-7e0cb506f61f
location_href: 00003186-python-casttube/python-casttube-0.2.1-1.src.rpm
checksum_type: sha256
description:
  casttube provides a way to interact with the Youtube Chromecast api.

  **Install:**

  ```
  pip install casttube
  ```

  **Features**
  * Play video
  * Play a playlist
  * Add video to the end of the play queue
  * Play next
  * Remove video
  * Clear the entire queue

  ```
  from casttube import YouTubeSession
  session = YouTubeSession(screen_id)


  session.play_video(video_id)
  ```

  The library requires 2 things:
  1. screen id
  2. The Chromecast youtube app needs to be open

  There is a small script in https://github.com/ur1katz/CastTube-Scripts to print the screen id and launch the app.


pkgId: 0d1a3bab82051e5f53b2e45dffb649b5bb6b39946935d547b2c18fc345bdb6fc
name: python-catalogue
arch: src
version: 2.0.8
epoch: 0
release: 1
summary: Super lightweight function registries for your library
url: https://github.com/explosion/catalogue
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e9febe86-4b42-417a-aa8d-57cb694cc030
location_href: 00009270-python-catalogue/python-catalogue-2.0.8-1.src.rpm
checksum_type: sha256
description:
  <a href="https://explosion.ai"><img src="https://explosion.ai/assets/img/logo.svg" width="125" height="125" align="right" /></a>



  `catalogue` is a tiny, zero-dependencies library that makes it easy to **add
  function (or object) registries** to your code. Function registries are helpful
  when you have objects that need to be both easily serializable and fully
  customizable. Instead of passing a function into your object, you pass in an
  identifier name, which the object can use to lookup the function from the
  registry. This makes the object easy to serialize, because the name is a simple
  string. If you instead saved the function, you'd have to use Pickle for
  serialization, which has many drawbacks.

  [![Azure Pipelines](https://img.shields.io/azure-devops/build/explosion-ai/public/14/master.svg?logo=azure-pipelines&style=flat-square&label=build)](https://dev.azure.com/explosion-ai/public/_build?definitionId=14)
  [![Current Release Version](https://img.shields.io/github/v/release/explosion/catalogue.svg?style=flat-square&include_prereleases&logo=github)](https://github.com/explosion/catalogue/releases)
  [![pypi Version](https://img.shields.io/pypi/v/catalogue.svg?style=flat-square&logo=pypi&logoColor=white)](https://pypi.org/project/catalogue/)
  [![conda Version](https://img.shields.io/conda/vn/conda-forge/catalogue.svg?style=flat-square&logo=conda-forge&logoColor=white)](https://anaconda.org/conda-forge/catalogue)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square)](https://github.com/ambv/black)



  ```bash
  pip install catalogue
  ```

  ```bash
  conda install -c conda-forge catalogue
  ```

  > ⚠️ **Important note:** `catalogue` v2.0+ is only compatible with Python 3.6+.
  > For Python 2.7+ compatibility, use `catalogue` v1.x.



  Let's imagine you're developing a Python package that needs to load data
  somewhere. You've already implemented some loader functions for the most common
  data types, but you want to allow the user to easily add their own. Using
  `catalogue.create` you can create a new registry under the namespace
  `your_package` &rarr; `loaders`.

  ```python

  import catalogue

  loaders = catalogue.create("your_package", "loaders")
  ```

  This gives you a `loaders.register` decorator that your users can import and
  decorate their custom loader functions with.

  ```python

  from your_package import loaders

  @loaders.register("custom_loader")
  def custom_loader(data):
      
      return data
  ```

  The decorated function will be registered automatically and in your package,
  you'll be able to access all loaders by calling `loaders.get_all`.

  ```python

  def load_data(data, loader_id):
      print("All loaders:", loaders.get_all()) # {"custom_loader": <custom_loader>}
      loader = loaders.get(loader_id)
      return loader(data)
  ```

  The user can now refer to their custom loader using only its string name
  (`"custom_loader"`) and your application will know what to do and will use their
  custom function.

  ```python

  from your_package import load_data

  load_data(data, loader_id="custom_loader")
  ```





  Sure, that's the more classic callback approach. Instead of a string ID,
  `load_data` could also take a function, in which case you wouldn't need a
  package like this. `catalogue` helps you when you need to produce a serializable
  record of which functions were passed in. For instance, you might want to write
  a log message, or save a config to load back your object later. With
  `catalogue`, your functions can be parameterized by strings, so logging and
  serialization remains easy – while still giving you full extensibility.



  Decorators normally run when modules are imported. Relying on this side-effect
  can sometimes lead to confusion, especially if there's no other reason the
  module would be imported. One solution is to use
  [entry points](https://packaging.python.org/specifications/entry-points/).

  For instance, in [spaCy](https://spacy.io) we're starting to use function
  registries to make the pipeline components much more customizable. Let's say one
  user, Jo, develops a better tagging model using new machine learning research.
  End-users of Jo's package should be able to write
  `spacy.load("jo_tagging_model")`. They shouldn't need to remember to write
  `import jos_tagged_model` first, just to run the function registries as a
  side-effect. With entry points, the registration happens at install time – so
  you don't need to rely on the import side-effects.





  Create a new registry for a given namespace. Returns a setter function that can
  be used as a decorator or called with a name and `func` keyword argument. If
  `entry_points=True` is set, the registry will check for
  [Python entry points](https://packaging.python.org/tutorials/packaging-projects/#entry-points)
  advertised for the given namespace, e.g. the entry point group
  `spacy_architectures` for the namespace `"spacy", "architectures"`, in
  `Registry.get` and `Registry.get_all`. This allows other packages to
  auto-register functions.

  | Argument       | Type       | Description                                                                                    |
  | -------------- | ---------- | ---------------------------------------------------------------------------------------------- |
  | `*namespace`   | str        | The namespace, e.g. `"spacy"` or `"spacy", "architectures"`.                                   |
  | `entry_points` | bool       | Whether to check for entry points of the given namespace and pre-populate the global registry. |
  | **RETURNS**    | `Registry` | The `Registry` object with methods to register and retrieve functions.                         |

  ```python
  architectures = catalogue.create("spacy", "architectures")


  @architectures.register("custom_architecture")
  def custom_architecture():
      pass


  architectures.register("custom_architecture", func=custom_architecture)
  ```



  The registry object that can be used to register and retrieve functions. It's
  usually created internally when you call `catalogue.create`.



  Initialize a new registry. If `entry_points=True` is set, the registry will
  check for
  [Python entry points](https://packaging.python.org/tutorials/packaging-projects/#entry-points)
  advertised for the given namespace, e.g. the entry point group
  `spacy_architectures` for the namespace `"spacy", "architectures"`, in
  `Registry.get` and `Registry.get_all`.

  | Argument       | Type       | Description                                                                      |
  | -------------- | ---------- | -------------------------------------------------------------------------------- |
  | `namespace`    | Tuple[str] | The namespace, e.g. `"spacy"` or `"spacy", "architectures"`.                     |
  | `entry_points` | bool       | Whether to check for entry points of the given namespace in `get` and `get_all`. |
  | **RETURNS**    | `Registry` | The newly created object.                                                        |

  ```python

  architectures = catalogue.create("spacy", "architectures")

  architectures = Registry(("spacy", "architectures"))
  ```



  Check whether a name is in the registry.

  | Argument    | Type | Description                          |
  | ----------- | ---- | ------------------------------------ |
  | `name`      | str  | The name to check.                   |
  | **RETURNS** | bool | Whether the name is in the registry. |

  ```python
  architectures = catalogue.create("spacy", "architectures")

  @architectures.register("custom_architecture")
  def custom_architecture():
      pass

  assert "custom_architecture" in architectures
  ```



  Register a function in the registry's namespace. Can be used as a decorator or
  called as a function with the `func` keyword argument supplying the function to
  register. Delegates to `Registry.register`.



  Register a function in the registry's namespace. Can be used as a decorator or
  called as a function with the `func` keyword argument supplying the function to
  register.

  | Argument    | Type     | Description                                               |
  | ----------- | -------- | --------------------------------------------------------- |
  | `name`      | str      | The name to register under the namespace.                 |
  | `func`      | Any      | Optional function to register (if not used as decorator). |
  | **RETURNS** | Callable | The decorator that takes one argument, the name.          |

  ```python
  architectures = catalogue.create("spacy", "architectures")


  @architectures.register("custom_architecture")
  def custom_architecture():
      pass


  architectures.register("custom_architecture", func=custom_architecture)
  ```



  Get a function registered in the namespace.

  | Argument    | Type | Description              |
  | ----------- | ---- | ------------------------ |
  | `name`      | str  | The name.                |
  | **RETURNS** | Any  | The registered function. |

  ```python
  custom_architecture = architectures.get("custom_architecture")
  ```



  Get all functions in the registry's namespace.

  | Argument    | Type           | Description                              |
  | ----------- | -------------- | ---------------------------------------- |
  | **RETURNS** | Dict[str, Any] | The registered functions, keyed by name. |

  ```python
  all_architectures = architectures.get_all()

  ```



  Get registered entry points from other packages for this namespace. The name of
  the entry point group is the namespace joined by `_`.

  | Argument    | Type           | Description                             |
  | ----------- | -------------- | --------------------------------------- |
  | **RETURNS** | Dict[str, Any] | The loaded entry points, keyed by name. |

  ```python
  architectures = catalogue.create("spacy", "architectures", entry_points=True)

  all_entry_points = architectures.get_entry_points()
  ```



  Check if registered entry point is available for a given name in the namespace
  and load it. Otherwise, return the default value.

  | Argument    | Type | Description                                      |
  | ----------- | ---- | ------------------------------------------------ |
  | `name`      | str  | Name of entry point to load.                     |
  | `default`   | Any  | The default value to return. Defaults to `None`. |
  | **RETURNS** | Any  | The loaded entry point or the default value.     |

  ```python
  architectures = catalogue.create("spacy", "architectures", entry_points=True)

  custom_architecture = architectures.get_entry_point("custom_architecture")
  ```



  Find the information about a registered function, including the
  module and path to the file it's defined in, the line number and the
  docstring, if available.

  | Argument    | Type | Description                                      |
  | ----------- | ---- | ------------------------------------------------ |
  | `name`      | str  | Name of the registered function.                     |
  | **RETURNS** | Dict[str, Union[str, int]]  | The information about the function.    |

  ```python
  import catalogue

  architectures = catalogue.create("spacy", "architectures", entry_points=True)

  @architectures("my_architecture")
  def my_architecture():
      """This is an architecture"""
      pass

  info = architectures.find("my_architecture")




  ```



  Check if a namespace exists.

  | Argument     | Type | Description                                                  |
  | ------------ | ---- | ------------------------------------------------------------ |
  | `*namespace` | str  | The namespace, e.g. `"spacy"` or `"spacy", "architectures"`. |
  | **RETURNS**  | bool | Whether the namespace exists.                                |


pkgId: d3e1fc4764c702db07dfa8d2bfbe835330eefbde39cfcea3585f1829445e1b7d
name: python-catkin-lint
arch: src
version: 1.6.22
epoch: 0
release: 1
summary: Check catkin packages for common errors
url: https://github.com/fkie/catkin_lint
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ca8ebe99-a5d4-424a-a359-5cecf3bda8cd
location_href: 00003188-python-catkin_lint/python-catkin-lint-1.6.22-1.src.rpm
checksum_type: sha256
description:
  catkin_lint


  |github_release| |pypi_badge| |debian_badge| |ci_badge| |codecov_master|

  **catkin_lint** checks package configurations for the
  `catkin <https://github.com/ros/catkin>`_ build system of `ROS <http://www.ros.org>`_.

  I generally recommend that you install **catkin_lint** from my Ubuntu PPA or use the pre-built packages for your Linux distribution. Use the PyPI version if your distribution does not ship **catkin_lint** or you absolutely need the latest release. The version in the ROS Package Archives is updated only once in a while.

  * `Debian packages <https://packages.debian.org/catkin-lint>`_
  * `Ubuntu packages <https://packages.ubuntu.com/catkin-lint>`_
  * `ROS Package Archive <http://packages.ros.org/ros/ubuntu/pool/main/c/catkin-lint/>`_
  * `Timo's Ubuntu PPA for ROS packages <https://launchpad.net/~roehling/+archive/ros>`_
  * `PyPI <https://pypi.org/project/catkin_lint>`_
  * `Github <https://github.com/fkie/catkin_lint>`_

  You can find more information about **catkin_lint** in the `online documentation`_ and
  the available command line arguments on the `manpage`_.

  .. |ci_badge| image:: https://github.com/fkie/catkin_lint/workflows/CI/badge.svg
     :target: https://github.com/fkie/catkin_lint/actions
  .. |codecov_master| image:: https://img.shields.io/codecov/c/github/fkie/catkin_lint/master.svg
     :target: https://codecov.io/github/fkie/catkin_lint?branch=master
  .. |pypi_badge| image:: https://img.shields.io/pypi/v/catkin_lint.svg
     :target: https://pypi.org/project/catkin_lint
  .. |github_release| image:: https://img.shields.io/github/release/fkie/catkin_lint.svg
     :target: https://github.com/fkie/catkin_lint/releases
  .. |debian_badge| image:: https://img.shields.io/badge/dynamic/json.svg?label=Debian&url=https%3A%2F%2Fsources.debian.org%2Fapi%2Fsrc%2Fros-catkin-lint&query=%24.versions%5B0%5D.version&colorB=blue
     :target: https://packages.debian.org/source/sid/ros-catkin-lint
  .. _online documentation: https://fkie.github.io/catkin_lint/
  .. _manpage: https://github.com/fkie/catkin_lint/blob/master/catkin_lint.pod


pkgId: 2d0ddd3bc7c39e2f2a5c1cef79cb8101aa117969d7d75b8c46d3161aa2c331d0
name: python-catkin-sphinx
arch: src
version: 0.3.2
epoch: 0
release: 1
summary: Sphinx extension for Catkin projects
url: http://www.ros.org/
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-66346dea-9c07-44af-a11c-ad50e8cf3c2f
location_href: 00003187-python-catkin-sphinx/python-catkin-sphinx-0.3.2-1.src.rpm
checksum_type: sha256
description:
  Sphinx extension for Catkin projects that provides a custom ROS theme and a Sphinx domain for cmake.


pkgId: ab992b53afbe2637e2c82dde099af7abd76e7aae26633c22c41bb26e5e16ec68
name: python-catt
arch: src
version: 0.12.10
epoch: 0
release: 1
summary: Cast All The Things allows you to send videos from many, many online sources to your Chromecast.
url: https://github.com/skorokithakis/catt
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-083557f7-513f-4af9-bc62-67db359843d4
location_href: 00011410-python-catt/python-catt-0.12.10-1.src.rpm
checksum_type: sha256
description:
  [![image](https://img.shields.io/pypi/v/catt.svg)](https://pypi.python.org/pypi/catt)
  [![image](https://img.shields.io/travis/skorokithakis/catt.svg)](https://travis-ci.org/skorokithakis/catt)
  [![image](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/skorokithakis/catt)
  Cast All The Things allows you to send videos from many, many online
  sources (YouTube, Vimeo, and a few hundred others) to your Chromecast.
  It also allows you to cast local files or render websites.


pkgId: 9317fbfada96b08279d3004bc154f08b8b4a8b6b0bbfeaf1ed0eb7ca924737ae
name: python-cbor2
arch: src
version: 5.4.6
epoch: 0
release: 1
summary: CBOR (de)serializer with extensive tag support
url: https://pypi.org/project/cbor2/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c5fc632e-821b-4fdb-9979-e38b7b72c786
location_href: 00003191-python-cbor2/python-cbor2-5.4.6-1.src.rpm
checksum_type: sha256
description:
  This library provides encoding and decoding for the Concise Binary Object Representation (CBOR)
  (`RFC 8949`_) serialization format. The specification is fully compatible with the original RFC 7049.
  `Read the docs <https://cbor2.readthedocs.io/>`_ to learn more.
  It is implemented in pure python with an optional C backend.
  On PyPy, cbor2 runs with almost identical performance to the C backend.


pkgId: cabc62df267c8a0806a24bfc8b927816ade5f71e3081609016ea89e16f96b3a8
name: python-ccard
arch: src
version: 0.2.0
epoch: 0
release: 1
summary: credit card generator
url: https://github.com/davidsamir/credit-card-generator/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c4cfb7ce-704d-4b5b-86c3-5b51db05f369
location_href: 00010613-python-ccard/python-ccard-0.2.0-1.src.rpm
checksum_type: sha256
description:
  Fake credit-card generator
  is a Python 3 Package for TESTING PURPOSES AND DATA VERIFICATION ONLY!
  Instead of using a real credit card
  this tool will help you generate a vaild credit card numbers
  Giving you the option to generate the following type of credit card
  - Visa
  - Discover
  - Master Card
  - American Express


pkgId: 23d70e2c981d54ee17df64500b648e4b66160c37cfb59b0550c3bec7101d80b0
name: python-cchardet-debuginfo
arch: aarch64
version: 2.1.7
epoch: 0
release: 1
summary: Debug information for package python-cchardet
url: https://github.com/PyYoshi/cChardet
rpm_license: Mozilla Public License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-1a3d217b-70b6-402d-8da9-44b78bd0032c
rpm_sourcerpm: python-cchardet-2.1.7-1.src.rpm
location_href: 00009659-python-cchardet/python-cchardet-debuginfo-2.1.7-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-cchardet.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 2e4f7ab297133025f0d091edfbfd7f2158074fe3fa5106acdad3220fd3acb327
name: python-cchardet-debugsource
arch: aarch64
version: 2.1.7
epoch: 0
release: 1
summary: Debug sources for package python-cchardet
url: https://github.com/PyYoshi/cChardet
rpm_license: Mozilla Public License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-1a3d217b-70b6-402d-8da9-44b78bd0032c
rpm_sourcerpm: python-cchardet-2.1.7-1.src.rpm
location_href: 00009659-python-cchardet/python-cchardet-debugsource-2.1.7-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-cchardet.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 182d900762f43e45ea06daeb7142af1d067b520c00711ef864d161e4d9ebfd3d
name: python-cclib
arch: src
version: 1.7.2
epoch: 0
release: 1
summary: cclib: parsers and algorithms for computational chemistry
url: http://cclib.github.io/
rpm_license: BSD 3-Clause License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ee0ee1ee-673d-4172-9da6-0f61db4233e7
location_href: 00003194-python-cclib/python-cclib-1.7.2-1.src.rpm
checksum_type: sha256
description:
  cclib is a Python library that provides parsers for computational
  chemistry log files. It also provides a platform to implement
  algorithms in a package-independent manner.


pkgId: 0cf9dabd62147406cf1002337600f5c16d4d379df09a3c2c667ceb8a03f4eef2
name: python-celery
arch: src
version: 5.2.7
epoch: 0
release: 1
summary: Distributed Task Queue.
url: http://celeryproject.org
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-23a5b843-e3f6-4baa-9995-000f1afa67f1
location_href: 00003195-python-celery/python-celery-5.2.7-1.src.rpm
checksum_type: sha256
description:
  This project relies on your generous donations.
  If you are using Celery to create a commercial product, please consider becoming our `backer`_ or our `sponsor`_ to ensure Celery's future.


pkgId: 11a598c5ade395fab12b17a7c67c241b252418592c5c7d9f27f56c014ba1a99d
name: python-celery-redbeat
arch: src
version: 2.0.0
epoch: 0
release: 1
summary: A Celery Beat Scheduler using Redis for persistent storage
url: https://github.com/sibson/redbeat
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d1d183da-f210-4ba6-bfa9-0f6885c81c45
location_href: 00011057-python-celery-redbeat/python-celery-redbeat-2.0.0-1.src.rpm
checksum_type: sha256
description:
  `RedBeat <https://github.com/sibson/redbeat>`_ is a
  `Celery Beat Scheduler <http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html>`_
  that stores the scheduled tasks and runtime metadata in `Redis <http://redis.io/>`_.


pkgId: cdedaf9e9029a591313674275c065e04bd5814c442aaf2018a30c09bae4557eb
name: python-celery_once
arch: src
version: 3.0.1
epoch: 0
release: 1
summary: Allows you to prevent multiple execution and queuing of celery tasks.
url: https://github.com/cameronmaske/celery-once
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b9143d4f-6a52-4c8e-a299-a5dcbe897c99
location_href: 00012554-python-celery-once/python-celery_once-3.0.1-1.src.rpm
checksum_type: sha256
description:
  |Build Status| |Coverage Status|
  Celery Once allows you to prevent multiple execution and queuing of `celery <http://www.celeryproject.org/>`_ tasks.


pkgId: 1d5328ec057885a837e711018d49a5e6531b10d9d2a865f25b4c58fa17ca5ea5
name: python-censys
arch: src
version: 2.1.9
epoch: 0
release: 1
summary: An easy-to-use and lightweight API wrapper for Censys APIs (censys.io).
url: https://pypi.org/project/censys/
rpm_license: Apache-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0bee6e84-2364-410b-a96e-403d3d169351
location_href: 00012279-python-censys/python-censys-2.1.9-1.src.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/censys?color=orange&logo=pypi&logoColor=orange)](https://pypi.org/project/censys/)
  [![Python Version](https://img.shields.io/badge/python-3.7%2B-blue?logo=python)](https://www.python.org/downloads/)
  [![Read the Docs (version)](https://img.shields.io/readthedocs/censys-python/latest?logo=read%20the%20docs)](https://censys-python.readthedocs.io/en/stable/?badge=stable)
  [![GitHub Discussions](https://img.shields.io/badge/GitHub-Discussions-brightgreen?logo=github)](https://github.com/censys/censys-python/discussions)
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-organge.svg?logo=git&logoColor=organge)](http://makeapullrequest.com)
  [![License](https://img.shields.io/github/license/censys/censys-python?logo=apache)](https://github.com/censys/censys-python/blob/main/LICENSE)

  An easy-to-use and lightweight API wrapper for Censys APIs ([censys.io](https://censys.io/)). Python 3.7+ is currently supported.

  > **Notice:** The Censys Search v1 endpoints are deprecated as of Nov. 30, 2021. Please begin using v2 endpoints to query hosts and certificates and check out our [support center](https://support.censys.io/hc/en-us/sections/360013076551-Censys-Search-2-0) for resources.



  - [Search Censys data](https://censys-python.readthedocs.io/en/stable/usage-v2.html)
  - [Bulk Certificate lookups](https://censys-python.readthedocs.io/en/stable/usage-v1.html#bulk)
  - [Download Bulk Data](https://censys-python.readthedocs.io/en/stable/usage-v1.html#data)
  - [Manage assets, events, and seeds in Censys ASM](https://censys-python.readthedocs.io/en/stable/usage-asm.html)
  - [Command-line interface](https://censys-python.readthedocs.io/en/stable/cli.html)

  <a href="https://asciinema.org/a/500416" target="_blank"><img src="https://asciinema.org/a/500416.svg" width="600"/></a>



  The library can be installed using `pip`.

  ```sh
  pip install censys
  ```

  To upgraded using `pip`.

  ```sh
  pip install --upgrade censys
  ```

  To configure your search credentials run `censys config` or set both `CENSYS_API_ID` and `CENSYS_API_SECRET` environment variables.

  ```sh
  $ censys config

  Censys API ID: XXX
  Censys API Secret: XXX
  Do you want color output? [y/n]: y

  Successfully authenticated for your@email.com
  ```

  To configure your ASM credentials run `censys asm config` or set the `CENSYS_ASM_API_KEY` environment variables.

  ```sh
  $ censys asm config

  Censys ASM API Key: XXX
  Do you want color output? [y/n]: y

  Successfully authenticated
  ```



  [![Read the Docs](https://raw.githubusercontent.com/censys/censys-python/main/docs/_static/readthedocs.png)](https://censys-python.readthedocs.io/)



  - [Source](https://github.com/censys/censys-python)
  - [Issue Tracker](https://github.com/censys/censys-python/issues)
  - [Changelog](https://github.com/censys/censys-python/releases)
  - [Documentation](https://censys-python.rtfd.io)
  - [Discussions](https://github.com/censys/censys-python/discussions)
  - [Censys Homepage](https://censys.io/)
  - [Censys Search](https://search.censys.io/)



  All contributions (no matter how small) are always welcome. See [Contributing to Censys Python](.github/CONTRIBUTING.md)



  This project uses [poetry](https://python-poetry.org/) for dependency management. Please ensure you have [installed the latest version](https://python-poetry.org/docs/#installation).

  ```sh
  git clone git@github.com:censys/censys-python.git
  cd censys-python/
  poetry install
  ```



  ```sh

  poetry run pytest

  poetry run pytest --cov-report html
  ```



  This software is licensed under [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)

  - Copyright (C) 2022 Censys, Inc.


pkgId: 20d8a3fb3a65fcad67b7c045865bbf09ff45de95aab05ff53569fd230767f285
name: python-certbot
arch: src
version: 2.4.0
epoch: 0
release: 1
summary: ACME client
url: https://github.com/letsencrypt/letsencrypt
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0b0ca1d3-fbe4-41e8-98b4-de8ef4fd4a50
location_href: 00003198-python-certbot/python-certbot-2.4.0-1.src.rpm
checksum_type: sha256
description:
  If you'd like to contribute to this project please read `Developer Guide
  <https://certbot.eff.org/docs/contributing.html>`_.
  This project is governed by `EFF's Public Projects Code of Conduct <https://www.eff.org/pages/eppcode>`_.


pkgId: 1e794264827e78df2c56302d819085323a6b1e6704eca521284c62a6c1dc26d8
name: python-certifi
arch: src
version: 2022.12.7
epoch: 0
release: 1
summary: Python package for providing Mozilla's CA Bundle.
url: https://github.com/certifi/python-certifi
rpm_license: MPL-2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-893d2572-4b40-4bff-8926-ed618fb5fd88
location_href: 00008884-python-certifi/python-certifi-2022.12.7-1.src.rpm
checksum_type: sha256
description:
  Certifi provides Mozilla's carefully curated collection of Root Certificates for
  validating the trustworthiness of SSL certificates while verifying the identity
  of TLS hosts. It has been extracted from the `Requests`_ project.


pkgId: 50c605a2fa66afa929e6d0373f6025b01081c515b9524f4f98bc6ae8cc2fac72
name: python-cfgv
arch: src
version: 3.3.1
epoch: 0
release: 1
summary: Validate configuration and produce human readable error messages.
url: https://github.com/asottile/cfgv
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-458844ec-b859-421d-bee0-315f56aff1e0
location_href: 00003215-python-cfgv/python-cfgv-3.3.1-1.src.rpm
checksum_type: sha256
description:
  Validate configuration and produce human readable error messages.

  `pip install cfgv`

  These are easier to see by example.  Here's an example where I typo'd `true`
  in a [pre-commit](https://pre-commit.com) configuration.
  ```
  pre_commit.clientlib.InvalidConfigError:
  ==> File /home/asottile/workspace/pre-commit/.pre-commit-config.yaml
  ==> At Config()
  ==> At key: repos
  ==> At Repository(repo='https://github.com/pre-commit/pre-commit-hooks')
  ==> At key: hooks
  ==> At Hook(id='flake8')


pkgId: 13bc6d16478768ab5f0179eb69ddf956edc9bd26a1d60efa4c5634fcc257e4ea
name: python-cfnresponse
arch: src
version: 1.1.2
epoch: 0
release: 1
summary: Send a response object to a custom resource by way of an Amazon S3 presigned URL
url: https://github.com/gene1wood/cfnresponse
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-960b221c-2041-4afa-815c-036ff6c4cc46
location_href: 00012693-python-cfnresponse/python-cfnresponse-1.1.2-1.src.rpm
checksum_type: sha256
description:
  This package contains the Amazon Web Services (AWS) cfnresponse module which is
  available in Python AWS Lambda environments.

  The code for this module can be found [in the Lambda Function Code documentation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html#cfn-lambda-function-code-cfnresponsemodule)
  and in the [awslabs GitHub repo](https://github.com/awslabs/aws-cloudformation-templates/blob/master/aws/services/CloudFormation/MacrosExamples/StackMetrics/lambda/cfnresponse.py)

  You can compare the code in `awslabs` with this pypi package with this command

  ```
  if [ "$(curl -s https://raw.githubusercontent.com/awslabs/aws-cloudformation-templates/master/aws/services/CloudFormation/MacrosExamples/StackMetrics/lambda/cfnresponse.py | sha256sum)" = "$(curl -s https://raw.githubusercontent.com/gene1wood/cfnresponse/master/cfnresponse/__init__.py | sha256sum)" ]; then echo "GitHub matches AWS"; fi
  if [ "$(curl -s https://raw.githubusercontent.com/awslabs/aws-cloudformation-templates/master/aws/services/CloudFormation/MacrosExamples/StackMetrics/lambda/cfnresponse.py | sha256sum)" = "$(wget --quiet https://files.pythonhosted.org/packages/91/1c/99d3119ee59205ef321e48ecaf3a3bb92fe6de6d3d5ec296e9025975061c/cfnresponse-1.1.1-py2.py3-none-any.whl && unzip -p cfnresponse-1.1.1-py2.py3-none-any.whl cfnresponse/__init__.py | sha256sum && rm cfnresponse-1.1.1-py2.py3-none-any.whl)" ]; then echo "Pypi matches AWS"; fi
  ```

  This module [used to use the vendored version of `requests`](https://github.com/awslabs/aws-cloudformation-templates/blob/dd484dd32680fcbfc52b34de45923f78b5626e39/aws/services/CloudFormation/MacrosExamples/StackMetrics/lambda/cfnresponse.py)
  provided by `botocore` but this changed in
  [April 2020](https://github.com/awslabs/aws-cloudformation-templates/commit/44b76a1f694f82eeee14fe804bf9dc973fdc2230#diff-f6c57142d56d8704aaf1d429ff1a06a6dd3f2ee6d80f0572ada8af010ff17124)
  to instead use `urllib3` as
  [`botocore.vendored.requests` was removed](https://github.com/boto/botocore/pull/1829).


pkgId: 76a56944a9bd081310ba96d76470110f5821dd840f9bf0940682f3c72c0ff820
name: python-cftime
arch: src
version: 1.6.2
epoch: 0
release: 1
summary: Time-handling functionality from netcdf4-python
url: https://pypi.org/project/cftime/
rpm_license: License :: OSI Approved :: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-722de755-cc79-4c35-85da-38d825fae789
location_href: 00003216-python-cftime/python-cftime-1.6.2-1.src.rpm
checksum_type: sha256
description:
  Time-handling functionality from netcdf4-python

  [![Build status](https://github.com/Unidata/cftime/workflows/cftime%20test/badge.svg)](https://github.com/Unidata/cftime/actions)
  [![PyPI package](https://badge.fury.io/py/cftime.svg)](http://python.org/pypi/cftime)
  [![Coverage Status](https://coveralls.io/repos/github/Unidata/cftime/badge.svg?branch=master)](https://coveralls.io/github/Unidata/cftime?branch=master)
  [![Tag Status](https://img.shields.io/github/tag/UniData/cftime.svg)](https://github.com/Unidata/cftime/tags)
  [![Release Status](https://img.shields.io/github/release/UniData/cftime.svg)](https://github.com/Unidata/cftime/releases)
  [![Commits Status](https://img.shields.io/github/commits-since/UniData/cftime/latest.svg)](https://github.com/UniData/cftime/commits/master)
  [![DOI](https://zenodo.org/badge/73107250.svg)](https://zenodo.org/badge/latestdoi/73107250)


  For details on the latest updates, see the [Changelog](https://github.com/Unidata/cftime/blob/master/Changelog).

  9/18/2022:  Version 1.6.2 released.  strptime method added, fix for num2date failure on
  empty integer array, date2num 'longdouble' keyword added. New wheel building workflow.

  6/30/2022:  Version 1.6.1 released.  Fixes for numpy 1.23.0, updated CI/CD.

  3/4/2022:  Version 1.6.0 released.  Big speed-ups for num2date, date2index bugfix for select != 'exact' when select='exact' works, fix for date2num with masked array inputs.

  1/22/2022: Version 1.5.2 released (wheels for Apple M1 available on pypi for python 3.8,3.9 and 3.10). is_leap_year
  function added (issue #259).

  10/31/2021: Version 1.5.1.1 released (new binary wheels for python 3.10).

  10/1/2021:  Version 1.5.1 released. Changed default behavior of ``proleptic_gregorian``
  to has_year_zero=T (since it is allowed in ISO-8601 and CF does not specify the
  year zero convention for this calendar). Raise warning message when trying
  to create a calendar that is not supported by CF version 1.9 (no years < 1
  allowed for 'standard'/'gregorian' or 'julian'  calendars).
  Added support for "common_year" and "common_years" units for "noleap"
  and "365_day" calendars.

  5/20/2021:  Version 1.5.0 released.  Includes support for astronomical year numbering
  (including the year zero) for real-world calendars ('julian', 'gregorian'/'standard',
  and 'proleptic_gregorian') using 'has_year_zero' `cftime.datetime` kwarg.
  Added a 'change_calendar' `cftime.datetime` method to switch to another
  'real-world' calendar to enable comparison of instances with different calendars.
  Some legacy classes and functions removed (`utime`, `JulianDayFromDate` and
  `DateFromJulianDay`). The functionality of `JulianDayFromDate` and
  `DateFromJulianDay` is now available from the methods `cftime.datetime.toordinal`
  and `cftime.datetime.fromordinal`.

  2/2/2021:  Version 1.4.1 released. Restore use of calendar-specific subclasses
  in `cftime.num2date`, `cftime.datetime.__add__`, and `cftime.datetime.__sub__`.
  The use of this will be removed in a later release.
  Add 'fromordinal' static method to create a cftime.datetime instance
  from a julian day ordinal and calendar (inverse of 'toordinal').

  2/1/2021:  Version 1.4.0 released.  License changed to MIT (GPL'ed code replaced).
  Roundtrip accuracy improved for units other than microseconds. Added
  cftime.datetime.toordinal method, returns integer julian day number.

  1/17/2021: Version 1.3.1 released.

  11/16/2020:  Version 1.3.0 released. **API change**: The `cftime.datetime` constructor now creates
   'calendar-aware' instances (default is `'standard'` calendar, if `calendar=''` or `None` the instance
   is not calendar aware and some methods, like `dayofwk`, `dayofyr`, `__add__` and `__sub__`, will not work)
   See discussion for issue [#198](https://github.com/Unidata/cftime/issues/198).
   The calendar specific sub-classes are now deprecated, but remain for now
   as stubs that just instantiate the base class and override `__repr__`.
   The default calendar in `cftime.date2num` has been changed from `'standard'` to `None`
   (the calendar associated with first input datetime object is used to define the calendar).

  07/20/2020: Version 1.2.1 released.  Fixes a couple of regressions introduced in 1.2.0. See Changelog for details.

  7/06/2020:  version 1.2.0 released. New microsecond accurate algorithm for date2num/num2date contributed by [spencerkclark](https://github.com/spencerkclark). Bugs fixed in masked array handling.

  5/12/2020:  version 1.1.3 released.  Add isoformat method for compatibility with python datetime (issue #152).
   Make 'standard' default calendar for cftime.datetime so that dayofwk,dayofyr methods don't fail (issue #169).

  4/20/2020:  version 1.1.2 released.  Code optimization, fix logic so `only_use_cftime_datetimes=False` works as
   expected (issues [#158](https://github.com/Unidata/cftime/issues/158) and [#165](https://github.com/Unidata/cftime/issues/165)).

  3/16/2020:  version 1.1.1 released.  Fix bug in microsecond formatting, ensure identical num2date results if input is an array of times, or a single scalar ([issue #143](https://github.com/Unidata/cftime/issues/143)).

  2/12/2020:  version 1.1.0 released.  `cftime.datetime` instances are returned by default from `num2date`
  (instead of returning python datetime instances where possible ([issue #136](https://github.com/Unidata/cftime/issues/136))).  `num2pydate`
  convenience function added (always returns python datetime instances, [issue #134](https://github.com/Unidata/cftime/issues/134)). Fix for
  fraction seconds in reference date string ([issue #140](https://github.com/Unidata/cftime/issues/140)). Added `daysinmonth` attribute
  ([issue #137](https://github.com/Unidata/cftime/issues/137)).

  10/25/2019:  version 1.0.4.2 released (fix for [issue #126](https://github.com/Unidata/cftime/issues/126)).

  10/21/2019:  version 1.0.4 released.

  12/05/2018:  version 1.0.3.4 released (just to fix a problem with the source
  tarball on pypi).

  12/05/2018:  version 1.0.3.1 released.  Bugfix release (fixed issue with installation
  when cython not installed, regression on 32-bit platforms, workaround for pandas
  compatibility).

  12/01/2018:  version 1.0.3 released. Test coverage with coveralls.io, improved round-tripping accuracy for non-real world calendars (like `360_day`).

  10/27/2018:  version 1.0.2 released. Improved accuracy (from approximately 1000 microseconds to 10 microseconds on x86
  platforms). Refactored calendar calculations now allow for negative reference years. num2date function now more than an
  order of magnitude faster. `months since` units now allowed, but only for `360_day` calendar.

  08/15/2018:  version 1.0.1 released.

  11/8/2016: `cftime` was split out of the [netcdf4-python](https://github.com/Unidata/netcdf4-python) package.


  * Clone GitHub repository (`git clone https://github.com/Unidata/cftime.git`), or get source tarball from [PyPI](https://pypi.python.org/pypi/cftime). Links to Windows and OS X precompiled binary packages are also available on [PyPI](https://pypi.python.org/pypi/cftime).

  * Make sure [numpy](http://www.numpy.org/) and [Cython](http://cython.org/) are
    installed and you have [Python](https://www.python.org) 2.7 or newer.

  * Run `python setup.py build`, then `python setup.py install` (with `sudo` if necessary).

  * To run all the tests, execute `py.test`.


  See the online [docs](http://unidata.github.io/cftime) for more details.


pkgId: 8af428fc184c1b32bb73f26e1ad454b8c2764a92cd654256897fc970afef56ec
name: python-cgroupspy
arch: src
version: 0.2.2
epoch: 0
release: 1
summary: Python library for managing cgroups
url: https://github.com/cloudsigma/cgroupspy
rpm_license: New BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7b30a4f2-41a3-4c63-8db7-c4e7d2e2e1b0
location_href: 00014080-python-cgroupspy/python-cgroupspy-0.2.2-1.src.rpm
checksum_type: sha256
description:
  Python library for managing cgroups
  The library provides a pythonic way to manage and represent cgroups. It provides interfaces that convert
  python objects to cgroups compatible strings and vise versa.


pkgId: 0a93564ac06896b9b762018bbbf0e0e97487d052859e52f0c274fb6ef28745f4
name: python-chainmap
arch: src
version: 1.0.3
epoch: 0
release: 1
summary: Backport/clone of ChainMap for py26, py32, and pypy3.
url: https://bitbucket.org/jeunice/chainmap
rpm_license: Python Software Foundation License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-e2e40ee9-07a8-4868-a84f-3f35e9d9543a
location_href: 00012906-python-chainmap/python-chainmap-1.0.3-1.src.rpm
checksum_type: sha256
description:
  * Automated multi-version testing managed with
    `pytest <http://pypi.python.org/pypi/pytest>`_,
    `pytest-cov <http://pypi.python.org/pypi/pytest-cov>`_,
    `coverage <http://pypi.python.org/pypi/coverage>`_, and
    `tox <http://pypi.python.org/pypi/tox>`_.
    Packaging linting with `pyroma <https://pypi.python.org/pypi/pyroma>`_.
  * Thanks to Travis CI, successfully packaged for, and tested against, all
    reasonably late-model versions of Python: 2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6,
    and 3.7, as well as PyPy 5.8.0 (essentially Python 2.7.13) and PyPy3 5.10.1
    (corresponding to Python 3.5.3).
  * The author, `Jonathan Eunice <mailto:jonathan.eunice@gmail.com>`_ or
    `@jeunice on Twitter <http://twitter.com/jeunice>`_
    welcomes your comments and suggestions.


pkgId: 22c63472843dc8eb93bec3eb77ad18428b814af75bc47e6bbea11edb9bc4176b
name: python-chaospy
arch: src
version: 4.3.10
epoch: 0
release: 1
summary: Numerical tool for performing uncertainty quantification
url: https://pypi.org/project/chaospy/
rpm_license: MIT license
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-da61c7ed-0283-4f58-8323-5fd7ae789278
location_href: 00003219-python-chaospy/python-chaospy-4.3.10-1.src.rpm
checksum_type: sha256
description:
  Installation should be straight forward from `pip <https://pypi.org/>`_:
      pip install chaospy
  Or if `Conda <https://conda.io/>`_ is more to your liking:
      conda install -c conda-forge chaospy
  Then go over to the `documentation <https://chaospy.readthedocs.io/en/master>`_
  to see how to use the toolbox.


pkgId: 29cfc7a904bdce6693e5fc9a8596f19ab60fa0a61d8868a1ba3b1cf2b27b635c
name: python-characteristic
arch: src
version: 14.3.0
epoch: 0
release: 1
summary: Python attributes without boilerplate.
url: https://characteristic.readthedocs.org/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a86a5b75-0db1-4943-90ac-3b93b39950cf
location_href: 00014192-python-characteristic/python-characteristic-14.3.0-1.src.rpm
checksum_type: sha256
description:
  ``characteristic`` is an `MIT <http://choosealicense.com/licenses/mit/>`_-licensed Python package with class decorators that ease the chores of implementing the most common attribute-related object protocols.
  You just specify the attributes to work with and ``characteristic`` gives you any or all of:
  - a nice human-readable ``__repr__``,
  - a complete set of comparison methods,
  - immutability for attributes,
  - and a kwargs-based initializer (that cooperates with your existing one and optionally even checks the types of the arguments)
  *without* writing dull boilerplate code again and again.
  This gives you the power to use actual classes with actual types in your code instead of confusing ``tuple``\ s or confusingly behaving ``namedtuple``\ s.
  So put down that type-less data structures and welcome some class into your life!
  ``characteristic``\ ’s documentation lives at `Read the Docs <https://characteristic.readthedocs.org/>`_, the code on `GitHub <https://github.com/hynek/characteristic>`_.
  It’s rigorously tested on Python 2.6, 2.7, 3.3+, and PyPy.


pkgId: f8b27f34c7874c6258a117d34271180aec64ad4fde48554dc4df7ce78d185808
name: python-chart-studio
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: Utilities for interfacing with plotly's Chart Studio
url: https://plot.ly/python/
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-bb99745a-c5ec-41dd-934d-12894db65ba5
location_href: 00011139-python-chart-studio/python-chart-studio-1.1.0-1.src.rpm
checksum_type: sha256
description:
  This package contains utilities for interfacing with Plotly's Chart Studio service (both Chart Studio cloud and Chart Studio On-Prem).  Prior to plotly.py version 4, This functionality was included in the `plotly` package under the `plotly.plotly` module. As part of plotly.py version 4, the Chart Studio functionality was removed from the `plotly` package and released in this `chart-studio` package.


pkgId: 214405540a58f8e36302eee12c185c8a45e93e83c766ca4588f2572b1d0e7a11
name: python-check-manifest
arch: src
version: 0.49
epoch: 0
release: 1
summary: Check MANIFEST.in in a Python source package for completeness
url: https://github.com/mgedmin/check-manifest
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b2f58ed7-0bd5-4538-ad84-fe1582e9476f
location_href: 00003220-python-check-manifest/python-check-manifest-0.49-1.src.rpm
checksum_type: sha256
description:
  |buildstatus|_ |appveyor|_ |coverage|_
  Are you a Python developer?  Have you uploaded packages to the Python Package
  Index?  Have you accidentally uploaded *broken* packages with some files
  missing?  If so, check-manifest is for you.


pkgId: d064be8b782fca737c2f8c20a0e9d26952fec3442258ba8d6a27c5a5999f11ed
name: python-chess
arch: src
version: 1.9.4
epoch: 0
release: 1
url: https://github.com/niklasf/python-chess
rpm_license: GPL-3.0+
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-440ba5a2-e1ab-49b5-b9cd-fda3f2719cad
location_href: 00013073-python-chess/python-chess-1.9.4-1.src.rpm
checksum_type: sha256
summary:
  A chess library with move generation and validation, Polyglot opening book probing, PGN reading and writing, Gaviota tablebase probing, Syzygy tablebase probing, and XBoard/UCI engine communication.


pkgId: b312d64deb05ac804a2bc18ef636cd465261e9e45ab7325fd30df565d7dcc3f6
name: python-chex
arch: src
version: 0.1.7
epoch: 0
release: 1
summary: Chex: Testing made fun, in JAX!
url: https://github.com/deepmind/chex
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-86d09066-5cf6-485a-846c-c7f37251cee4
location_href: 00009147-python-chex/python-chex-0.1.7-1.src.rpm
checksum_type: sha256
description:
  ![CI status](https://github.com/deepmind/chex/workflows/ci/badge.svg)
  ![docs](https://readthedocs.org/projects/chex/badge/?version=latest)
  ![pypi](https://img.shields.io/pypi/v/chex)

  Chex is a library of utilities for helping to write reliable JAX code.

  This includes utils to help:

  * Instrument your code (e.g. assertions)
  * Debug (e.g. transforming `pmaps` in `vmaps` within a context manager).
  * Test JAX code across many `variants` (e.g. jitted vs non-jitted).



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

  ```sh
  pip install chex
  ```

  or you can install the latest development version from GitHub:

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





  Dataclasses are a popular construct introduced by Python 3.7 to allow to
  easily specify typed data structures with minimal boilerplate code. They are
  not, however, compatible with JAX and
  [dm-tree](https://github.com/deepmind/tree) out of the box.

  In Chex we provide a JAX-friendly dataclass implementation reusing python [dataclasses](https://docs.python.org/3/library/dataclasses.html#module-dataclasses).

  Chex implementation of `dataclass` registers dataclasses as internal [_PyTree_
  nodes](https://jax.readthedocs.io/en/latest/pytrees.html) to ensure
  compatibility with JAX data structures.

  In addition, we provide a class wrapper that exposes dataclasses as
  `collections.Mapping` descendants which allows to process them
  (e.g. (un-)flatten) in `dm-tree` methods as usual Python dictionaries.
  See [`@mappable_dataclass`](https://github.com/deepmind/chex/blob/master/chex/_src/dataclass.py#L27)
  docstring for more details.

  Example:

  ```python
  @chex.dataclass
  class Parameters:
    x: chex.ArrayDevice
    y: chex.ArrayDevice

  parameters = Parameters(
      x=jnp.ones((2, 2)),
      y=jnp.ones((1, 2)),
  )


  jax.tree_util.tree_map(lambda x: 2.0 * x, parameters)


  tree.flatten(parameters)
  ```

  **NOTE**: Unlike standard Python 3.7 dataclasses, Chex
  dataclasses cannot be constructed using positional arguments. They support
  construction arguments provided in the same format as the Python dict
  constructor. Dataclasses can be converted to tuples with the `from_tuple` and
  `to_tuple` methods if necessary.

  ```python
  parameters = Parameters(
      jnp.ones((2, 2)),
      jnp.ones((1, 2)),
  )

  ```



  One limitation of PyType annotations for JAX is that they do not support the
  specification of `DeviceArray` ranks, shapes or dtypes. Chex includes a number
  of functions that allow flexible and concise specification of these properties.

  E.g. suppose you want to ensure that all tensors `t1`, `t2`, `t3` have the same
  shape, and that tensors `t4`, `t5` have rank `2` and (`3` or `4`), respectively.

  ```python
  chex.assert_equal_shape([t1, t2, t3])
  chex.assert_rank([t4, t5], [2, {3, 4}])
  ```

  More examples:

  ```python
  from chex import assert_shape, assert_rank, ...

  assert_shape(x, (2, 3))                # x has shape (2, 3)
  assert_shape([x, y], [(), (2,3)])      # x is scalar and y has shape (2, 3)

  assert_rank(x, 0)                      # x is scalar
  assert_rank([x, y], [0, 2])            # x is scalar and y is a rank-2 array
  assert_rank([x, y], {0, 2})            # x and y are scalar OR rank-2 arrays

  assert_type(x, int)                    # x has type `int` (x can be an array)
  assert_type([x, y], [int, float])      # x has type `int` and y has type `float`

  assert_equal_shape([x, y, z])          # x, y, and z have equal shapes

  assert_trees_all_close(tree_x, tree_y) # values and structure of trees match
  assert_tree_all_finite(tree_x)         # all tree_x leaves are finite

  assert_devices_available(2, 'gpu')     # 2 GPUs available
  assert_tpu_available()                 # at least 1 TPU available

  assert_numerical_grads(f, (x, y), j)   # f^{(j)}(x, y) matches numerical grads
  ```

  See `asserts.py`
  [documentation](https://chex.readthedocs.io/en/latest/api.html#assertions) to
  find all supported assertions.

  If you cannot find a specific assertion, please consider making a pull request
  or openning an issue on
  [the bug tracker](https://github.com/deepmind/chex/issues).



  All chex assertions support the following optional kwargs for manipulating the
  emitted exception messages:

  * `custom_message`: A string to include into the emitted exception messages.
  * `include_default_message`: Whether to include the default Chex message into
    the emitted exception messages.
  * `exception_type`: An exception type to use. `AssertionError` by default.

  For example, the following code:

  ```python
  dataset = load_dataset()
  params = init_params()
  for i in range(num_steps):
    params = update_params(params, dataset.sample())
    chex.assert_tree_all_finite(params,
                                custom_message=f'Failed at iteration {i}.',
                                exception_type=ValueError)
  ```

  will raise a `ValueError` that includes a step number when `params` get polluted
  with `NaNs` or `None`s.



  Chex divides all assertions into 2 classes: ***static*** and ***value***
  assertions.

  1.  ***static*** assertions use anything except concrete values of tensors.
      Examples: `assert_shape`, `assert_trees_all_equal_dtypes`,
      `assert_max_traces`.

  2.  ***value*** assertions require access to tensor values, which are not
      available during JAX tracing (see
      [HowJAX primitives work](https://jax.readthedocs.io/en/latest/notebooks/How_JAX_primitives_work.html)),
      thus such assertion need special treatment in a *jitted* code.

  To enable value assertions in a jitted function, it can be decorated with
  `chex.chexify()` wrapper. Example:

  ```python
    @chex.chexify
    @jax.jit
    def logp1_abs_safe(x: chex.Array) -> chex.Array:
      chex.assert_tree_all_finite(x)
      return jnp.log(jnp.abs(x) + 1)

    logp1_abs_safe(jnp.ones(2))  # OK
    logp1_abs_safe(jnp.array([jnp.nan, 3]))  # FAILS (in async mode)

    
    
    logp1_abs_safe.wait_checks()  # Wait for the (async) computation to complete.
  ```

  See
  [this docstring](https://chex.readthedocs.io/en/latest/api.html#chex.chexify)
  for more detail on `chex.chexify()`.



  JAX re-traces JIT'ted function every time the structure of passed arguments
  changes. Often this behavior is inadvertent and leads to a significant
  performance drop which is hard to debug. [@chex.assert_max_traces](https://github.com/deepmind/chex/blob/master/chex/_src/asserts.py#L44)
  decorator asserts that the function is not re-traced more than `n` times during
  program execution.

  Global trace counter can be cleared by calling
  `chex.clear_trace_counter()`. This function be used to isolate unittests relying
  on `@chex.assert_max_traces`.

  Examples:

  ```python
    @jax.jit
    @chex.assert_max_traces(n=1)
    def fn_sum_jitted(x, y):
      return x + y

    fn_sum_jitted(jnp.zeros(3), jnp.zeros(3))  # tracing for the 1st time - OK
    fn_sum_jitted(jnp.zeros([6, 7]), jnp.zeros([6, 7]))  # AssertionError!
  ```

  Can be used with `jax.pmap()` as well:

  ```python
    def fn_sub(x, y):
      return x - y

    fn_sub_pmapped = jax.pmap(chex.assert_max_traces(fn_sub, n=10))
  ```

  See
  [HowJAX primitives work](https://jax.readthedocs.io/en/latest/notebooks/How_JAX_primitives_work.html)
  section for more information about tracing.



  JAX relies extensively on code transformation and compilation, meaning that it
  can be hard to ensure that code is properly tested. For instance, just testing a
  python function using JAX code will not cover the actual code path that is
  executed when jitted, and that path will also differ whether the code is jitted
  for CPU, GPU, or TPU. This has been a source of obscure and hard to catch bugs
  where XLA changes would lead to undesirable behaviours that however only
  manifest in one specific code transformation.

  Variants make it easy to ensure that unit tests cover different ‘variations’ of
  a function, by providing a simple decorator that can be used to repeat any test
  under all (or a subset) of the relevant code transformations.

  E.g. suppose you want to test the output of a function `fn` with or without jit.
  You can use `chex.variants` to run the test with both the jitted and non-jitted
  version of the function by simply decorating a test method with
  `@chex.variants`, and then using `self.variant(fn)` in place of `fn` in the body
  of the test.

  ```python
  def fn(x, y):
    return x + y
  ...

  class ExampleTest(chex.TestCase):

    @chex.variants(with_jit=True, without_jit=True)
    def test(self):
      var_fn = self.variant(fn)
      self.assertEqual(fn(1, 2), 3)
      self.assertEqual(var_fn(1, 2), fn(1, 2))
  ```

  If you define the function in the test method, you may also use `self.variant`
  as a decorator in the function definition. For example:

  ```python
  class ExampleTest(chex.TestCase):

    @chex.variants(with_jit=True, without_jit=True)
    def test(self):
      @self.variant
      def var_fn(x, y):
         return x + y

      self.assertEqual(var_fn(1, 2), 3)
  ```

  Example of parameterized test:

  ```python
  from absl.testing import parameterized




  class ExampleParameterizedTest(parameterized.TestCase):

    @chex.variants(with_jit=True, without_jit=True)
    @parameterized.named_parameters(
        ('case_positive', 1, 2, 3),
        ('case_negative', -1, -2, -3),
    )
    def test(self, arg_1, arg_2, expected):
      @self.variant
      def var_fn(x, y):
         return x + y

      self.assertEqual(var_fn(arg_1, arg_2), expected)
  ```

  Chex currently supports the following variants:

  * `with_jit` -- applies `jax.jit()` transformation to the function.
  * `without_jit` -- uses the function as is, i.e. identity transformation.
  * `with_device` -- places all arguments (except specified in `ignore_argnums`
     argument) into device memory before applying the function.
  * `without_device` -- places all arguments in RAM before applying the function.
  * `with_pmap` -- applies `jax.pmap()` transformation to the function (see notes below).

  See documentation in [variants.py](https://github.com/deepmind/chex/blob/master/chex/_src/variants.py) for more details on the supported variants.
  More examples can be found in [variants_test.py](https://github.com/deepmind/chex/blob/master/chex/_src/variants_test.py).



  * Test classes that use `@chex.variants` must inherit from
  `chex.TestCase` (or any other base class that unrolls tests generators
  within `TestCase`, e.g. `absl.testing.parameterized.TestCase`).

  * **[`jax.vmap`]** All variants can be applied to a vmapped function;
  please see an example in [variants_test.py](https://github.com/deepmind/chex/blob/master/chex/_src/variants_test.py) (`test_vmapped_fn_named_params` and
  `test_pmap_vmapped_fn`).

  * **[`@chex.all_variants`]** You can get all supported variants
  by using the decorator `@chex.all_variants`.

  * **[`with_pmap` variant]** `jax.pmap(fn)`
  ([doc](https://jax.readthedocs.io/en/latest/jax.html#jax.pmap)) performs
  parallel map of `fn` onto multiple devices. Since most tests run in a
  single-device environment (i.e. having access to a single CPU or GPU), in which
  case `jax.pmap` is a functional equivalent to `jax.jit`, ` with_pmap` variant is
  skipped by default (although it works fine with a single device). Below we
  describe  a way to properly test `fn` if it is supposed to be used in
  multi-device environments (TPUs or multiple CPUs/GPUs). To disable skipping
  `with_pmap` variants in case of a single device, add
  `--chex_skip_pmap_variant_if_single_device=false` to your test command.



  Debugging in JAX is made more difficult by code transformations such as `jit`
  and `pmap`, which introduce optimizations that make code hard to inspect and
  trace. It can also be difficult to disable those transformations during
  debugging as they can be called at several places in the underlying
  code. Chex provides tools to globally replace `jax.jit` with a no-op
  transformation and `jax.pmap` with a (non-parallel) `jax.vmap`, in order to more
  easily debug code in a single-device context.

  For example, you can use Chex to fake `pmap` and have it replaced with a `vmap`.
  This can be achieved by wrapping your code with a context manager:

  ```python
  with chex.fake_pmap():
    @jax.pmap
    def fn(inputs):
      ...

    
    fn(inputs)
  ```

  The same functionality can also be invoked with `start` and `stop`:

  ```python
  fake_pmap = chex.fake_pmap()
  fake_pmap.start()
  ... your jax code ...
  fake_pmap.stop()
  ```

  In addition, you can fake a real multi-device test environment with a
  multi-threaded CPU. See section **Faking multi-device test environments** for
  more details.

  See documentation in [fake.py](https://github.com/deepmind/chex/blob/master/chex/_src/fake.py) and examples in [fake_test.py](https://github.com/deepmind/chex/blob/master/chex/_src/fake_test.py) for more details.



  In situations where you do not have easy access to multiple devices, you can
  still test parallel computation using single-device multi-threading.

  In particular, one can force XLA to use a single CPU's threads as separate
  devices, i.e. to fake a real multi-device environment with a multi-threaded one.
  These two options are theoretically equivalent from XLA perspective because they
  expose the same interface and use identical abstractions.

  Chex has a flag `chex_n_cpu_devices` that specifies a number of CPU threads to
  use as XLA devices.

  To set up a multi-threaded XLA environment for `absl` tests, define
  `setUpModule` function in your test module:

  ```python
  def setUpModule():
    chex.set_n_cpu_devices()
  ```

  Now you can launch your test with `python test.py --chex_n_cpu_devices=N` to run
  it in multi-device regime. Note that **all** tests within a module will have an
  access to `N` devices.

  More examples can be found in [variants_test.py](https://github.com/deepmind/chex/blob/master/chex/_src/variants_test.py), [fake_test.py](https://github.com/deepmind/chex/blob/master/chex/_src/fake_test.py) and [fake_set_n_cpu_devices_test.py](https://github.com/deepmind/chex/blob/master/chex/_src/fake_set_n_cpu_devices_test.py).



  Chex comes with a small utility that allows you to package a collection of
  dimension sizes into a single object. The basic idea is:

  ```python
  dims = chex.Dimensions(B=batch_size, T=sequence_len, E=embedding_dim)
  ...
  chex.assert_shape(arr, dims['BTE'])
  ```

  String lookups are translated integer tuples. For instance, let's say
  `batch_size == 3`, `sequence_len = 5` and `embedding_dim = 7`, then

  ```python
  dims['BTE'] == (3, 5, 7)
  dims['B'] == (3,)
  dims['TTBEE'] == (5, 5, 3, 7, 7)
  ...
  ```

  You can also assign dimension sizes dynamically as follows:

  ```python
  dims['XY'] = some_matrix.shape
  dims.Z = 13
  ```

  For more examples, see [chex.Dimensions](https://chex.readthedocs.io/en/latest/api.html#chex.Dimensions)
  documentation.



  This repository is part of the [DeepMind JAX Ecosystem], to cite Chex 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: 65c0efc517260ccb6e1381eeb46efca88e5404c588f3f6d673261047d5a97523
name: python-chiabip158
arch: src
version: 1.2
epoch: 0
release: 1
summary: Chia BIP158 (wraps C++)
url: https://github.com/Chia-Network/chiabip158
rpm_license: Apache License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f47d79f3-d980-4425-93d3-a24ae4d92adc
location_href: 00013248-python-chiabip158/python-chiabip158-1.2-1.src.rpm
checksum_type: sha256
description:
  ![Build](https://github.com/Chia-Network/chiabip158/workflows/Build/badge.svg)
  ![PyPI](https://img.shields.io/pypi/v/chiabip158?logo=pypi)
  ![PyPI - Format](https://img.shields.io/pypi/format/chiabip158?logo=pypi)
  ![GitHub](https://img.shields.io/github/license/Chia-Network/chiabip158?logo=Github)

  [![Total alerts](https://img.shields.io/lgtm/alerts/g/Chia-Network/chiabip158.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Chia-Network/chiabip158/alerts/)
  [![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/Chia-Network/chiabip158.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Chia-Network/chiabip158/context:python)
  [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/Chia-Network/chiabip158.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Chia-Network/chiabip158/context:cpp)

  This implements the compact block filter construction in BIP 158. The code is
  not used anywhere in the Bitcoin Core code base yet. The next step towards
  BIP 157 support would be to create an indexing module similar to TxIndex that
  constructs the basic and extended filters for each validated block.



  ```bash
  python3 -m venv venv
  . venv/bin/activate
  pip3 install .
  ```



  ```bash
  python3 tests/simple_test.py
  ```



  Install brew:

  ```bash
  ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  brew install python3
  brew install boost
  ```

  At this point the only error is can’t find boost_thread lib

  The issue is the homebrew boost ships libboost_thread-mt libs but doesn’t
  include plain libboost_thread, so clang can’t find it. Interestingly, homebrew
  boost does have both plain and -mt files for the libboost_system libraries.

  ```bash
  $ find /usr/local/lib/ | grep boost_thread
  libboost_thread-mt.a
  libboost_thread-mt.dylib
  ```

  Solution, with no guarantees that this is "the Right Way to do things", but
  appears to work fine for the configure stage:

  ```bash
  cd /usr/local/lib
  ln -s libboost_thread-mt.a libboost_thread.a
  ln -s libboost_thread-mt.dylib libboost_thread.dylib
  ```



  The primary build process for this repository is to use GitHub Actions to
  build binary wheels for MacOS, Linux (x64 and aarch64), and Windows and publish
  them with a source wheel on PyPi. See `.github/workflows/build.yml`. CMake uses
  [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.html)
  to download [pybind11](https://github.com/pybind/pybind11). Building is then
  managed by [cibuildwheel](https://github.com/joerick/cibuildwheel). Further
  installation is then available via `pip install chiabip158` e.g.



  Contributions are welcome and more details are available in chia-blockchain's
  [CONTRIBUTING.md](https://github.com/Chia-Network/chia-blockchain/blob/master/CONTRIBUTING.md).

  The master branch is usually the currently released latest version on PyPI.
  Note that at times chiabip158 will be ahead of the release version that
  chia-blockchain requires in it's master/release version in preparation for a
  new chia-blockchain release. Please branch or fork master and then create a
  pull request to the master branch. Linear merging is enforced on master and
  merging requires a completed review. PRs will kick off a GitHub actions ci
  build and analysis of chiabip158 at
  [lgtm.com](https://lgtm.com/projects/g/Chia-Network/chiabip158/?mode=list).
  Please make sure your build is passing and that it does not increase alerts
  at lgtm.


pkgId: 7cb86fe606e90bb97f3126121ea4d920d641e88a9cdffbd6c24fe70dfc161231
name: python-chiabip158-debuginfo
arch: aarch64
version: 1.2
epoch: 0
release: 1
summary: Debug information for package python-chiabip158
url: https://github.com/Chia-Network/chiabip158
rpm_license: Apache License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-f47d79f3-d980-4425-93d3-a24ae4d92adc
rpm_sourcerpm: python-chiabip158-1.2-1.src.rpm
location_href: 00013248-python-chiabip158/python-chiabip158-debuginfo-1.2-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-chiabip158.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: b1de77dba88c3531608a5b2388f0bfe83c2ee6460a60edead6408695e933649a
name: python-chiabip158-debugsource
arch: aarch64
version: 1.2
epoch: 0
release: 1
summary: Debug sources for package python-chiabip158
url: https://github.com/Chia-Network/chiabip158
rpm_license: Apache License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-f47d79f3-d980-4425-93d3-a24ae4d92adc
rpm_sourcerpm: python-chiabip158-1.2-1.src.rpm
location_href: 00013248-python-chiabip158/python-chiabip158-debugsource-1.2-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-chiabip158.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 2f2d3bd9bcf7d33d3fc179927853c7f6029cfb53cc78c3711f50af69dafcae02
name: python-chromedriver-autoinstaller
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: Automatically install chromedriver that supports the currently installed version of chrome.
url: https://github.com/yeongbin-jo/python-chromedriver-autoinstaller
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-19300c8f-41bc-4e24-8b4f-43d41c4c7e05
location_href: 00012319-python-chromedriver-autoinstaller/python-chromedriver-autoinstaller-0.4.0-1.src.rpm
checksum_type: sha256
description:
  Automatically download and install [chromedriver](https://chromedriver.chromium.org/) that supports the currently installed version of chrome. This installer supports Linux, MacOS and Windows operating systems.



  ```bash
  pip install chromedriver-autoinstaller
  ```


  Just type `import chromedriver_autoinstaller` in the module you want to use chromedriver.


  ```
  from selenium import webdriver
  import chromedriver_autoinstaller


  chromedriver_autoinstaller.install()  # Check if the current version of chromedriver exists
                                        
                                        

  driver = webdriver.Chrome()
  driver.get("http://www.python.org")
  assert "Python" in driver.title
  ```


pkgId: dcd912929eea503bbf77d8f7f82a9228a57d038b98406fc6e5d08efd1b3fabbb
name: python-chromedriver-autoinstaller-help
arch: noarch
version: 0.4.0
epoch: 0
release: 1
summary: Development documents and examples for chromedriver-autoinstaller
url: https://github.com/yeongbin-jo/python-chromedriver-autoinstaller
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-19300c8f-41bc-4e24-8b4f-43d41c4c7e05
rpm_sourcerpm: python-chromedriver-autoinstaller-0.4.0-1.src.rpm
checksum_type: sha256
description:
  Automatically download and install [chromedriver](https://chromedriver.chromium.org/) that supports the currently installed version of chrome. This installer supports Linux, MacOS and Windows operating systems.



  ```bash
  pip install chromedriver-autoinstaller
  ```


  Just type `import chromedriver_autoinstaller` in the module you want to use chromedriver.


  ```
  from selenium import webdriver
  import chromedriver_autoinstaller


  chromedriver_autoinstaller.install()  # Check if the current version of chromedriver exists
                                        
                                        

  driver = webdriver.Chrome()
  driver.get("http://www.python.org")
  assert "Python" in driver.title
  ```

location_href:
  00012319-python-chromedriver-autoinstaller/python-chromedriver-autoinstaller-help-0.4.0-1.noarch.rpm


pkgId: 5943b6ffb19389e449a135af3e72b4b576cb41e018bda599e8f2bbbd7322a619
name: python-ci-info
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: Continuous Integration Information
url: https://github.com/mgxd/ci-info
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-bba96cf2-2ce6-4c80-aa69-56be4a0c511a
location_href: 00014203-python-ci-info/python-ci-info-0.3.0-1.src.rpm
checksum_type: sha256
description:
  [![PyPI version](https://badge.fury.io/py/ci-info.svg)](https://badge.fury.io/py/ci-info)
  [![Build Status](https://travis-ci.org/mgxd/ci-info.svg?branch=master)](https://travis-ci.org/mgxd/ci-info)

  A Python implementation of [watson/ci-info](https://github.com/watson/ci-info).
  Get details about the current Continuous Integration environment.

  Please [open an issue](https://github.com/mgxd/ci-info/issues/new)
  if your CI server isn't properly detected :)




  Officially supported CI servers:

  | Name                                                                            | isPR |
  | ------------------------------------------------------------------------------- | ---- |
  | [AWS CodeBuild](https://aws.amazon.com/codebuild/)                              | 🚫   |
  | [AppVeyor](http://www.appveyor.com)                                             | ✅   |
  | [Azure Pipelines](https://azure.microsoft.com/en-us/services/devops/pipelines/) | ✅   |
  | [Appcircle](https://appcircle.io/)                                              | 🚫   |
  | [Bamboo](https://www.atlassian.com/software/bamboo) by Atlassian                | 🚫   |
  | [Bitbucket Pipelines](https://bitbucket.org/product/features/pipelines)         | ✅   |
  | [Bitrise](https://www.bitrise.io/)                                              | ✅   |
  | [Buddy](https://buddy.works/)                                                   | ✅   |
  | [Buildkite](https://buildkite.com)                                              | ✅   |
  | [CircleCI](http://circleci.com)                                                 | ✅   |
  | [Cirrus CI](https://cirrus-ci.org)                                              | ✅   |
  | [Codefresh](https://codefresh.io/)                                              | ✅   |
  | [Codeship](https://codeship.com)                                                | 🚫   |
  | [Drone](https://drone.io)                                                       | ✅   |
  | [dsari](https://github.com/rfinnie/dsari)                                       | 🚫   |
  | [Expo Application Services](https://expo.dev/eas)                               | 🚫   |
  | [GitHub Actions](https://github.com/features/actions/)                          | ✅   |
  | [GitLab CI](https://about.gitlab.com/gitlab-ci/)                                | ✅   |
  | [GoCD](https://www.go.cd/)                                                      | 🚫   |
  | [Hudson](http://hudson-ci.org)                                                  | 🚫   |
  | [Jenkins CI](https://jenkins-ci.org)                                            | ✅   |
  | [LayerCI](https://layerci.com/)                                                 | ✅   |
  | [Magnum CI](https://magnum-ci.com)                                              | 🚫   |
  | [Netlify CI](https://www.netlify.com/)                                          | ✅   |
  | [Nevercode](http://nevercode.io/)                                               | ✅   |
  | [Render](https://render.com/)                                                   | ✅   |
  | [Sail CI](https://sail.ci/)                                                     | ✅   |
  | [Screwdriver](https://screwdriver.cd/)                                          | ✅   |
  | [Semaphore](https://semaphoreci.com)                                            | ✅   |
  | [Shippable](https://www.shippable.com/)                                         | ✅   |
  | [Solano CI](https://www.solanolabs.com/)                                        | ✅   |
  | [Strider CD](https://strider-cd.github.io/)                                     | 🚫   |
  | [TaskCluster](http://docs.taskcluster.net)                                      | 🚫   |
  | [TeamCity](https://www.jetbrains.com/teamcity/) by JetBrains                    | 🚫   |
  | [Travis CI](http://travis-ci.org)                                               | ✅   |
  | [Vercel](https://vercel.com/)                                                   | 🚫   |
  | [Visual Studio App Center](https://appcenter.ms/)                               | 🚫   |




  ```
  pip install ci-info
  ```



  ```python
  import ci_info
  if ci_info.is_ci():
      print(ci_info.name())

  "My CI Name"
  ```






  Returns a string containing name of the CI server the code is running on.
  If CI server is not detected, it returns `None`.

  Don't depend on the value of this string not to change for a specific
  vendor.



  Returns a boolean. Will be `True` if the code is running on a CI server,
  otherwise `False`.

  Some CI servers not listed here might still trigger the `ci_info.is_ci()`
  boolean to be set to `True` if they use certain vendor neutral
  environment variables. In those cases `ci_info.name()` will be `None` and no
  vendor specific boolean will be set to `True`.



  Returns a boolean if PR detection is supported for the current CI server. Will
  be `True` if a PR is being tested, otherwise `False`. If PR detection is
  not supported for the current CI server, the value will be `None`.



  Returns a dictionary of all above values in key/value pairs.



  [MIT](LICENSE)


pkgId: 56d2e72fcf7f91c6310d2fa0b851241a50572fd922cb30252f3b2f301c9c612d
name: python-cibuildwheel
arch: src
version: 2.12.1
epoch: 0
release: 1
summary: Build Python wheels on CI with minimal configuration.
url: https://github.com/pypa/cibuildwheel
rpm_license: BSD-2-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2efc6aeb-93b6-4024-9a3f-33892cdc9acd
location_href: 00012682-python-cibuildwheel/python-cibuildwheel-2.12.1-1.src.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/cibuildwheel.svg)](https://pypi.python.org/pypi/cibuildwheel)
  [![Documentation Status](https://readthedocs.org/projects/cibuildwheel/badge/?version=stable)](https://cibuildwheel.readthedocs.io/en/stable/?badge=stable)
  [![Actions Status](https://github.com/pypa/cibuildwheel/workflows/Test/badge.svg)](https://github.com/pypa/cibuildwheel/actions)
  [![Travis Status](https://img.shields.io/travis/com/pypa/cibuildwheel/main?logo=travis)](https://travis-ci.com/pypa/cibuildwheel)
  [![Appveyor status](https://ci.appveyor.com/api/projects/status/gt3vwl88yt0y3hur/branch/main?svg=true)](https://ci.appveyor.com/project/joerick/cibuildwheel/branch/main)
  [![CircleCI Status](https://img.shields.io/circleci/build/gh/pypa/cibuildwheel/main?logo=circleci)](https://circleci.com/gh/pypa/cibuildwheel)
  [![Azure Status](https://dev.azure.com/joerick0429/cibuildwheel/_apis/build/status/pypa.cibuildwheel?branchName=main)](https://dev.azure.com/joerick0429/cibuildwheel/_build/latest?definitionId=4&branchName=main)
  [![Cirrus CI Status](https://img.shields.io/cirrus/github/pypa/cibuildwheel/main?logo=cirrusci)](https://cirrus-ci.com/github/pypa/cibuildwheel)
  [Documentation](https://cibuildwheel.readthedocs.org)
  <!--intro-start-->
  Python wheels are great. Building them across **Mac, Linux, Windows**, on **multiple versions of Python**, is not.
  `cibuildwheel` is here to help. `cibuildwheel` runs on your CI server - currently it supports GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, and GitLab CI - and it builds and tests your wheels across all of your platforms.


pkgId: 4a49ebd9ab9b74565b424a7af398fa6bca03d076addba64a476e8fb0bd8efb9c
name: python-circuitbreaker
arch: src
version: 1.4.0
epoch: 0
release: 1
summary: Python Circuit Breaker pattern implementation
url: https://github.com/fabfuel/circuitbreaker
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5ed5f104-8db9-4234-8937-5792703bdb45
location_href: 00011224-python-circuitbreaker/python-circuitbreaker-1.4.0-1.src.rpm
checksum_type: sha256
description:
  This is a Python implementation of the "Circuit Breaker" Pattern (https://martinfowler.com/bliki/CircuitBreaker.html).
  Inspired by Michael T. Nygard's highly recommendable book *Release It!* (https://pragprog.com/titles/mnee2/release-it-second-edition/).


pkgId: a605856c64f7111bc8cdca6c9bc60d074cf619ef9fea30f36f93ad86566750e1
name: python-ciscoconfparse
arch: src
version: 1.7.18
epoch: 0
release: 1
summary: Parse, Audit, Query, Build, and Modify Cisco IOS-style and JunOS-style configs
url: https://pypi.org/project/ciscoconfparse/
rpm_license: GPL-3.0-only
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-bffb5606-dd55-4be1-90f6-1f42fa3711d1
location_href: 00012681-python-ciscoconfparse/python-ciscoconfparse-1.7.18-1.src.rpm
checksum_type: sha256
description:
  [![Github unittest workflow][4]][5] [![Code Health][37]][38] [![git commits][41]][42] [![Repo Code Grade][43]][44]  [![Version][2]][3] [![Downloads][6]][7] [![License][8]][9]


pkgId: 68e627f5ab47a87bbdb1ed382b8c72e27c85eaf58f8d5523137b149e67307d3f
name: python-ciso8601-debuginfo
arch: aarch64
version: 2.3.0
epoch: 0
release: 1
summary: Debug information for package python-ciso8601
url: https://github.com/closeio/ciso8601
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-a7cc143c-5a51-4811-ba80-b2fcda1b4e3a
rpm_sourcerpm: python-ciso8601-2.3.0-1.src.rpm
location_href: 00003224-python-ciso8601/python-ciso8601-debuginfo-2.3.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-ciso8601.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: d6909c411311db135651b002d23ba662f1a87e68c3ec339e7a1d23cf71b9f2bc
name: python-ciso8601-debugsource
arch: aarch64
version: 2.3.0
epoch: 0
release: 1
summary: Debug sources for package python-ciso8601
url: https://github.com/closeio/ciso8601
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-a7cc143c-5a51-4811-ba80-b2fcda1b4e3a
rpm_sourcerpm: python-ciso8601-2.3.0-1.src.rpm
location_href: 00003224-python-ciso8601/python-ciso8601-debugsource-2.3.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-ciso8601.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 4b5a80fc29c3b700ea4b8d1e2f4e1621c5a1034becdaaa3c1663a23c53170848
name: python-cityhash
arch: src
version: 0.4.6
epoch: 0
release: 1
summary: Python bindings for CityHash and FarmHash
url: https://github.com/escherba/python-cityhash
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f912ae9b-0030-4b10-a7bc-f8e5a8f6c311
location_href: 00012070-python-cityhash/python-cityhash-0.4.6-1.src.rpm
checksum_type: sha256
description:
  Python wrapper for [FarmHash](https://github.com/google/farmhash) and
  [CityHash](https://github.com/google/cityhash), a family of fast
  non-cryptographic hash functions.

  [![Build
  Status](https://img.shields.io/github/actions/workflow/status/escherba/python-cityhash/build.yml?branch=master)](https://github.com/escherba/python-cityhash/actions/workflows/build.yml)
  [![Latest
  Version](https://img.shields.io/pypi/v/cityhash.svg)](https://pypi.python.org/pypi/cityhash)
  [![Downloads](https://img.shields.io/pypi/dm/cityhash.svg)](https://pypistats.org/packages/cityhash)
  [![License](https://img.shields.io/pypi/l/cityhash.svg)](https://opensource.org/licenses/mit-license)
  [![Supported Python
  versions](https://img.shields.io/pypi/pyversions/cityhash.svg)](https://pypi.python.org/pypi/cityhash)



  This simplest way to use this package is to install it from PyPI:

  ``` bash
  pip install cityhash
  ```

  This package exposes Python APIs for CityHash and FarmHash under `cityhash` and
  `farmhash` namespaces, respectively. Each provides 32-, 64- and 128-bit
  implementations.





  Usage example for FarmHash:

  ``` python
  >>> from farmhash import FarmHash32, FarmHash64, FarmHash128
  >>> FarmHash32("abc")
  1961358185
  >>> FarmHash64("abc")
  2640714258260161385
  >>> FarmHash128("abc")
  76434233956484675513733017140465933893

  ```



  Fingerprints are seedless hashes which are guaranteed to be hardware- and
  platform-independent. This can be useful for networking applications which
  require persisting hashed values.

  ``` python
  >>> from farmhash import Fingerprint128
  >>> Fingerprint128("abc")
  76434233956484675513733017140465933893

  ```



  CityHash and FarmHash do not support incremental hashing and thus are not ideal
  for hashing of streams. If you require incremental hashing feature, use
  [MetroHash](https://github.com/escherba/python-metrohash) or
  [xxHash](https://github.com/ifduyue/python-xxhash) instead, which do support
  it.



  The Python [Buffer Protocol](https://docs.python.org/3/c-api/buffer.html)
  allows Python objects to expose their data as raw byte arrays to other objects,
  for fast access without copying to a separate location in memory. Among others,
  NumPy is a major framework that supports this protocol.

  All hashing functions in this packege will read byte arrays from objects that
  expose them via the buffer protocol. Here is an example showing hashing of a 4D
  NumPy array:

  ``` python
  >>> import numpy as np
  >>> from farmhash import FarmHash64
  >>> arr = np.zeros((256, 256, 4))
  >>> FarmHash64(arr)
  1550282412043536862

  ```

  The arrays need to be contiguous for this to work. To convert a non-contiguous
  array, use NumPy's `ascontiguousarray()` function.



  For x86-64 platforms, the PyPi repository for this package includes wheels
  compiled with SSE4.2 support.  The 32- and 64-bit FarmHash variants
  significantly benefit from SSE4.2 instructions. The 128-bit version,
  unfortunately, does not exhibit speed up after compiling with SSE4.2 support.

  The vanilla CityHash fucntions (under `cityhash` module) do not take advantage
  of SSE4.2. Instead, the `cityhashcrc` module provided with this package exposes
  128- and 256-bit CRC functions which do harness SSE4.2. These functions are
  very fast, and beat `FarmHash128` on speed (FarmHash does not include a 256-bit
  function). Since FarmHash is the intended successor of CityHash, I would be
  careful before using the CityHash-CRC functions, however, and would verify
  whether they provide sufficient randomness for your intended application.





  For those who want to contribute, here is a quick start using some makefile
  commands:

  ``` bash
  git clone https://github.com/escherba/python-cityhash.git
  cd python-cityhash
  make env           # create a virtual environment
  make test          # run Python tests
  make cpp-test      # run C++ tests
  make shell         # enter IPython shell
  ```

  To find out which Make targets are available, type:

  ``` bash
  make help
  ```



  The wheels are built using [cibuildwheel](https://cibuildwheel.readthedocs.io/)
  and are distributed to PyPI using GitHub actions. The wheels contain compiled
  binaries and are available for the following platforms: windows-amd64,
  ubuntu-x86, linux-x86\_64, linux-aarch64, and macosx-x86\_64.



  For other fast non-cryptographic hash functions available as Python extensions,
  see [MetroHash](https://github.com/escherba/python-metrohash),
  [MurmurHash](https://github.com/hajimes/mmh3), and
  [xxHash](https://github.com/ifduyue/python-xxhash).



  The original CityHash Python bindings are due to Alexander \[Amper\] Marshalov.
  These were rewritten in Cython by Eugene Scherba, who also added the FarmHash
  bindings. The CityHash and FarmHash algorithms and their C++ implementation are
  by Google.



  This software is licensed under the [MIT
  License](http://www.opensource.org/licenses/mit-license). See the included
  LICENSE file for details.


pkgId: 7ef791c357a5b8fed6bf5bc3a4dc77909c4207aea0b9483a17b237014570f212
name: python-cityhash-debuginfo
arch: aarch64
version: 0.4.6
epoch: 0
release: 1
summary: Debug information for package python-cityhash
url: https://github.com/escherba/python-cityhash
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-f912ae9b-0030-4b10-a7bc-f8e5a8f6c311
rpm_sourcerpm: python-cityhash-0.4.6-1.src.rpm
location_href: 00012070-python-cityhash/python-cityhash-debuginfo-0.4.6-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-cityhash.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 75e4003e9ca3a664e6a907fc611a58451f52c153b352810116dc3a54ad925824
name: python-cityhash-debugsource
arch: aarch64
version: 0.4.6
epoch: 0
release: 1
summary: Debug sources for package python-cityhash
url: https://github.com/escherba/python-cityhash
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-f912ae9b-0030-4b10-a7bc-f8e5a8f6c311
rpm_sourcerpm: python-cityhash-0.4.6-1.src.rpm
location_href: 00012070-python-cityhash/python-cityhash-debugsource-0.4.6-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-cityhash.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 58bc67def6a0885e77e83ca0533d1e32e999b9a559f8037d27ba2f1d598e6ac5
name: python-clang
arch: src
version: 14.0
epoch: 0
release: 1
summary: libclang python bindings
url: http://clang.llvm.org/
rpm_license: License :: OSI Approved :: University of Illinois/NCSA Open Source License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3ba32787-d70e-4085-8f6f-b7cedd5efd0f
location_href: 00003227-python-clang/python-clang-14.0-1.src.rpm
checksum_type: sha256
description:
  This is the python bindings subdir of llvm clang repository.
  https://github.com/llvm-mirror/clang/tree/master/bindings/python

  This is a non-official packaging directly from the debian packages for the purpose of pypi package.


pkgId: f00937750cd6dafd897dc460e717645ddd23fbcb50628367525f917a34f768c1
name: python-claripy
arch: src
version: 9.2.41
epoch: 0
release: 1
summary: An abstraction layer for constraint solvers
url: https://github.com/angr/clairpy
rpm_license: BSD-2-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-02e36325-4110-4d4b-87c1-3b26f503d4ae
location_href: 00003228-python-claripy/python-claripy-9.2.41-1.src.rpm
checksum_type: sha256
description:
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

  Claripy is an abstracted constraint-solving wrapper.



  It is usable!

  General usage is similar to Z3:

  ```python
  >>> import claripy
  >>> a = claripy.BVV(3, 32)
  >>> b = claripy.BVS('var_b', 32)
  >>> s = claripy.Solver()
  >>> s.add(b > a)
  >>> print(s.eval(b, 1)[0])
  ```


pkgId: 36957a472f7e3c1f1bd6a298b315a795ed2532725e272a017916dc8a67406f05
name: python-cle
arch: src
version: 9.2.41
epoch: 0
release: 1
summary: |
url: https://github.com/angr/cle
rpm_license: BSD-2-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f234307a-3a9e-4100-ae28-0dbecca51559
location_href: 00003229-python-cle/python-cle-9.2.41-1.src.rpm
checksum_type: sha256
description:
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  CLE loads binaries and their associated libraries, resolves imports and
  provides an abstraction of process memory the same way as if it was loader by
  the OS's loader.

  `$ pip install cle`

  ```python
  >>> import cle
  >>> ld = cle.Loader("/bin/ls")
  >>> hex(ld.main_object.entry)
  '0x4048d0'
  >>> ld.shared_objects
  {'ld-linux-x86-64.so.2': <ELF Object ld-2.21.so, maps [0x5000000:0x522312f]>,
   'libacl.so.1': <ELF Object libacl.so.1.1.0, maps [0x2000000:0x220829f]>,
   'libattr.so.1': <ELF Object libattr.so.1.1.0, maps [0x4000000:0x4204177]>,
   'libc.so.6': <ELF Object libc-2.21.so, maps [0x3000000:0x33a1a0f]>,
   'libcap.so.2': <ELF Object libcap.so.2.24, maps [0x1000000:0x1203c37]>}
  >>> ld.addr_belongs_to_object(0x5000000)
  <ELF Object ld-2.21.so, maps [0x5000000:0x522312f]>
  >>> libc_main_reloc = ld.main_object.imports['__libc_start_main']
  >>> hex(libc_main_reloc.addr)       # Address of GOT entry for libc_start_main
  '0x61c1c0'
  >>> import pyvex
  >>> some_text_data = ld.memory.load(ld.main_object.entry, 0x100)
  >>> irsb = pyvex.lift(some_text_data, ld.main_object.entry, ld.main_object.arch)
  >>> irsb.pp()
  IRSB {
     t0:Ity_I32 t1:Ity_I32 t2:Ity_I32 t3:Ity_I64 t4:Ity_I64 t5:Ity_I64 t6:Ity_I32 t7:Ity_I64 t8:Ity_I32 t9:Ity_I64 t10:Ity_I64 t11:Ity_I64 t12:Ity_I64 t13:Ity_I64 t14:Ity_I64
     15 | ------ IMark(0x4048d0, 2, 0) ------
     16 | t5 = 32Uto64(0x00000000)
     17 | PUT(rbp) = t5
     18 | t7 = GET:I64(rbp)
     19 | t6 = 64to32(t7)
     20 | t2 = t6
     21 | t9 = GET:I64(rbp)
     22 | t8 = 64to32(t9)
     23 | t1 = t8
     24 | t0 = Xor32(t2,t1)
     25 | PUT(cc_op) = 0x0000000000000013
     26 | t10 = 32Uto64(t0)
     27 | PUT(cc_dep1) = t10
     28 | PUT(cc_dep2) = 0x0000000000000000
     29 | t11 = 32Uto64(t0)
     30 | PUT(rbp) = t11
     31 | PUT(rip) = 0x00000000004048d2
     32 | ------ IMark(0x4048d2, 3, 0) ------
     33 | t12 = GET:I64(rdx)
     34 | PUT(r9) = t12
     35 | PUT(rip) = 0x00000000004048d5
     36 | ------ IMark(0x4048d5, 1, 0) ------
     37 | t4 = GET:I64(rsp)
     38 | t3 = LDle:I64(t4)
     39 | t13 = Add64(t4,0x0000000000000008)
     40 | PUT(rsp) = t13
     41 | PUT(rsi) = t3
     42 | PUT(rip) = 0x00000000004048d6
     43 | t14 = GET:I64(rip)
     NEXT: PUT(rip) = t14; Ijk_Boring
  }
  ```

  For a full listing and description of the options that can be provided to the
  loader and the methods it provides, please examine the docstrings in
  `cle/loader.py`. If anything is unclear or poorly documented (there is much)
  please complain through whatever channel you feel appropriate.

  CLE's loader is implemented in the Loader class.
  There are several backends that can be used to load a single file:
      - ELF, as its name says, loads ELF binaries. ELF files loaded this way are
        statically parsed using PyElfTools.
      - PE is a backend to load Microsoft's Portable Executable format,
        effectively Windows binaries. It uses the (optional) `pefile` module.
      - Mach-O is a backend to load, you guessed it, Mach-O binaries. It is
        subject to several limitations, which you can read about in the
        [readme in the macho directory](backends/macho/README.md)
      - Blob is a backend to load unknown data. It requires that you specify
        the architecture it would be run on, in the form of a class from
        ArchInfo.
  Which backend you use can be specified as an argument to Loader. If left
  unspecified, the loader will pick a reasonable default.

  - If the `auto_load_libs` option is set to False, the Loader will not
    automatically load libraries requested by loaded objects. Otherwise...
  - The loader determines which shared objects are needed when loading
    binaries, and searches for them in the following order:
      - in the current working directory
      - in folders specified in the `ld_path` option
      - in the same folder as the main binary
      - in the system (in the corresponding library path for the architecture
        of the binary, e.g., /usr/arm-linux-gnueabi/lib for ARM, note that
        you need to install cross libraries for this, e.g.,
        libc6-powerpc-cross on Debian - needs emdebian repos)
      - in the system, but with mismatched version numbers from what is specified
        as a dependency, if the `ignore_import_version_numbers` option is True
  - If no binary is found with the correct architecture, the loader raises an
    exception if `except_missing_libs` option is True. Otherwise it simply
    leaves the dependencies unresolved.


pkgId: 3e3c69bfafcca0bd9f6b02370861aadfc574fdd107eb7ceb1cf57890f034e85e
name: python-cleanco
arch: src
version: 2.2
epoch: 0
release: 1
summary: Python library to process company names
url: https://github.com/psolin/cleanco
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8ab19d04-9051-4e5d-91c3-4455c3ba494f
location_href: 00010491-python-cleanco/python-cleanco-2.2-1.src.rpm
checksum_type: sha256
description:
  ![Python package](https://github.com/psolin/cleanco/workflows/Python%20package/badge.svg)
  ![CodeQL](https://github.com/psolin/cleanco/workflows/CodeQL/badge.svg)



  This is a Python package that processes company names, providing cleaned versions of the
  names by stripping away terms indicating organization type (such as "Ltd." or "Corp").

  Using a database of organization type terms, It also provides an utility to deduce the
  type of organization, in terms of US/UK business entity types (ie. "limited liability
  company" or "non-profit").

  Finally, the system uses the term information to suggest countries the organization could
  be established in. For example, the term "Oy" in company name suggests it is established
  in Finland, whereas "Ltd" in company name could mean UK, US or a number of other
  countries.


  Just use 'pip install cleanco' if you have pip installed (as most systems do). Or download the zip distribution from this site, unzip it and then:

  * Mac: `cd` into it, and enter `sudo python setup.py install` along with your system password.
  * Windows: Same thing but without `sudo`.


  Let's look at some sample code. To get the base name of a business without legal suffix:

      >>> from cleanco import basename
      >>> business_name = "Some Big Pharma, LLC"
      >>> basename(business_name)
      >>> 'Some Big Pharma'

  Note that sometimes a name may have e.g. two different suffixes after one another. The cleanco
  term data covers many of these, but you may want to run `basename()` twice on the name, just in case.

  If you want to use your custom terms, please see  `custom_basename()` that also provides some other ways to adjust how base name is produced.

  To get the business type or country:

      >>> from cleanco import typesources, matches
      >>> classification_sources = typesources()
      >>> matches("Some Big Pharma, LLC", classification_sources)
      ['Limited Liability Company']

  To get the possible countries of jurisdiction:

      >>> from cleanco import countrysources, matches
      >>> classification_sources = countrysources()
      >>> matches("Some Big Pharma, LLC", classification_sources) ´
      ['United States of America', 'Philippines']



  See the issue tracker. If you find a bug or have enhancement suggestion or question, please file an issue and provide a PR if you can. For example, some of the company suffixes may be incorrect or there may be suffixes missing.

  To run tests, simply install the package and run `python setup.py test`. To run tests on multiple Python versions, install `tox` and run it (see the provided tox.ini).



  - Wikipedia's [Types of Business Entity article](http://en.wikipedia.org/wiki/Types_of_business_entity), where I spent hours of research.
  - Contributors: [Petri Savolainen](https://github.com/petri)


pkgId: 0c6cf1dd34012277a7debc999cba9203fd367798d3b5a6c9d2201e9d48d068fd
name: python-cleo
arch: src
version: 2.0.1
epoch: 0
release: 1
summary: Cleo allows you to create beautiful and testable command-line interfaces.
url: https://github.com/python-poetry/cleo
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1c38983c-81b1-4d30-8317-9f0d461dbf3b
location_href: 00003230-python-cleo/python-cleo-2.0.1-1.src.rpm
checksum_type: sha256
description:
  [![Tests](https://github.com/python-poetry/cleo/actions/workflows/tests.yml/badge.svg)](https://github.com/python-poetry/cleo/actions/workflows/tests.yml)
  [![PyPI version](https://img.shields.io/pypi/v/cleo)](https://pypi.org/project/cleo/)

  Create beautiful and testable command-line interfaces.



  - [Documentation](http://cleo.readthedocs.io)
  - [Issue Tracker](https://github.com/python-poetry/cleo/issues)



  To make a command that greets you from the command line, create
  `greet_command.py` and add the following to it:

  ```python
  from cleo.commands.command import Command
  from cleo.helpers import argument, option

  class GreetCommand(Command):
      name = "greet"
      description = "Greets someone"
      arguments = [
          argument(
              "name",
              description="Who do you want to greet?",
              optional=True
          )
      ]
      options = [
          option(
              "yell",
              "y",
              description="If set, the task will yell in uppercase letters",
              flag=True
          )
      ]

      def handle(self):
          name = self.argument("name")

          if name:
              text = f"Hello {name}"
          else:
              text = "Hello"

          if self.option("yell"):
              text = text.upper()

          self.line(text)
  ```

  You also need to create the file `application.py` to run at the command line which
  creates an `Application` and adds commands to it:

  ```python


  from greet_command import GreetCommand

  from cleo.application import Application


  application = Application()
  application.add(GreetCommand())

  if __name__ == "__main__":
      application.run()
  ```

  Test the new command by running the following

  ```bash
  $ python application.py greet John
  ```

  This will print the following to the command line:

  ```text
  Hello John
  ```

  You can also use the `--yell` option to make everything uppercase:

  ```bash
  $ python application.py greet John --yell
  ```

  This prints:

  ```text
  HELLO JOHN
  ```




  Whenever you output text, you can surround the text with tags to color
  its output. For example:

  ```python

  self.line("<info>foo</info>")


  self.line("<comment>foo</comment>")


  self.line("<question>foo</question>")


  self.line("<error>foo</error>")
  ```

  The closing tag can be replaced by `</>`, which revokes all formatting
  options established by the last opened tag.

  It is possible to define your own styles using the `add_style()` method:

  ```python
  self.add_style("fire", fg="red", bg="yellow", options=["bold", "blink"])
  self.line("<fire>foo</fire>")
  ```

  Available foreground and background colors are: `black`, `red`, `green`,
  `yellow`, `blue`, `magenta`, `cyan` and `white`.

  And available options are: `bold`, `underscore`, `blink`, `reverse` and
  `conceal`.

  You can also set these colors and options inside the tag name:

  ```python

  self.line("<fg=green>foo</>")


  self.line("<fg=black;bg=cyan>foo</>")


  self.line("<bg=yellow;options=bold>foo</>")
  ```



  Cleo has four verbosity levels. These are defined in the `Output` class:

  | Mode                     | Meaning                            | Console option    |
  | ------------------------ | ---------------------------------- | ----------------- |
  | `Verbosity.QUIET`        | Do not output any messages         | `-q` or `--quiet` |
  | `Verbosity.NORMAL`       | The default verbosity level        | (none)            |
  | `Verbosity.VERBOSE`      | Increased verbosity of messages    | `-v`              |
  | `Verbosity.VERY_VERBOSE` | Informative non essential messages | `-vv`             |
  | `Verbosity.DEBUG`        | Debug messages                     | `-vvv`            |

  It is possible to print a message in a command for only a specific
  verbosity level. For example:

  ```python
  if Verbosity.VERBOSE <= self.io.verbosity:
      self.line(...)
  ```

  There are also more semantic methods you can use to test for each of the
  verbosity levels:

  ```python
  if self.output.is_quiet():
      

  if self.output.is_verbose():
      
  ```

  You can also pass the verbosity flag directly to `line()`.

  ```python
  self.line("", verbosity=Verbosity.VERBOSE)
  ```

  When the quiet level is used, all output is suppressed.



  The most interesting part of the commands are the arguments and options
  that you can make available. Arguments are the strings - separated by
  spaces - that come after the command name itself. They are ordered, and
  can be optional or required. For example, add an optional `last_name`
  argument to the command and make the `name` argument required:

  ```python
  class GreetCommand(Command):
      name = "greet"
      description = "Greets someone"
      arguments = [
          argument(
              "name",
              description="Who do you want to greet?",
          ),
          argument(
              "last_name",
              description="Your last name?",
              optional=True
          )
      ]
      options = [
          option(
              "yell",
              "y",
              description="If set, the task will yell in uppercase letters",
              flag=True
          )
      ]
  ```

  You now have access to a `last_name` argument in your command:

  ```python
  last_name = self.argument("last_name")
  if last_name:
      text += f" {last_name}"
  ```

  The command can now be used in either of the following ways:

  ```bash
  $ python application.py greet John
  $ python application.py greet John Doe
  ```

  It is also possible to let an argument take a list of values (imagine
  you want to greet all your friends). For this it must be specified at
  the end of the argument list:

  ```python
  class GreetCommand(Command):
      name = "greet"
      description = "Greets someone"
      arguments = [
          argument(
              "names",
              description="Who do you want to greet?",
              multiple=True
          )
      ]
      options = [
          option(
              "yell",
              "y",
              description="If set, the task will yell in uppercase letters",
              flag=True
          )
      ]
  ```

  To use this, just specify as many names as you want:

  ```bash
  $ python application.py greet John Jane
  ```

  You can access the `names` argument as a list:

  ```python
  names = self.argument("names")
  if names:
      text = "Hello " + ", ".join(names)
  ```




  Unlike arguments, options are not ordered (meaning you can specify them
  in any order) and are specified with two dashes (e.g. `--yell` - you can
  also declare a one-letter shortcut that you can call with a single dash
  like `-y`). Options are _always_ optional, and can be setup to accept a
  value (e.g. `--dir=src`) or simply as a boolean flag without a value
  (e.g. `--yell`).

  > _Tip_: It is also possible to make an option _optionally_ accept a value (so
  > that `--yell` or `--yell=loud` work). Options can also be configured to
  > accept a list of values.

  For example, add a new option to the command that can be used to specify
  how many times in a row the message should be printed:

  ```python
  class GreetCommand(Command):
      name = "greet"
      description = "Greets someone"
      arguments = [
          argument(
              "name",
              description="Who do you want to greet?",
              optional=True
          )
      ]
      options = [
          option(
              "yell",
              "y",
              description="If set, the task will yell in uppercase letters",
              flag=True
          ),
          option(
              "iterations",
              description="How many times should the message be printed?",
              default=1
          )
      ]
  ```

  Next, use this in the command to print the message multiple times:

  ```python
  for _ in range(int(self.option("iterations"))):
      self.line(text)
  ```

  Now, when you run the task, you can optionally specify a `--iterations`
  flag:

  ```bash
  $ python application.py greet John
  $ python application.py greet John --iterations=5
  ```

  The first example will only print once, since `iterations` is empty and
  defaults to `1`. The second example will print five times.

  Recall that options don\'t care about their order. So, either of the
  following will work:

  ```bash
  $ python application.py greet John --iterations=5 --yell
  $ python application.py greet John --yell --iterations=5
  ```




  Cleo provides several tools to help you test your commands. The most
  useful one is the `CommandTester` class. It uses a special IO class to
  ease testing without a real console:

  ```python
  from greet_command import GreetCommand

  from cleo.application import Application
  from cleo.testers.command_tester import CommandTester


  def test_execute():
      application = Application()
      application.add(GreetCommand())

      command = application.find("greet")
      command_tester = CommandTester(command)
      command_tester.execute()

      assert "..." == command_tester.io.fetch_output()
  ```

  The `CommandTester.io.fetch_output()` method returns what would have
  been displayed during a normal call from the console.
  `CommandTester.io.fetch_error()` is also available to get what you have
  been written to the stderr.

  You can test sending arguments and options to the command by passing
  them as a string to the `CommandTester.execute()` method:

  ```python
  from greet_command import GreetCommand

  from cleo.application import Application
  from cleo.testers.command_tester import CommandTester


  def test_execute():
      application = Application()
      application.add(GreetCommand())

      command = application.find("greet")
      command_tester = CommandTester(command)
      command_tester.execute("John")

      assert "John" in command_tester.io.fetch_output()
  ```

  You can also test a whole console application by using the
  `ApplicationTester` class.



  If a command depends on another one being run before it, instead of
  asking the user to remember the order of execution, you can call it
  directly yourself. This is also useful if you want to create a \"meta\"
  command that just runs a bunch of other commands.

  Calling a command from another one is straightforward:

  ```python
  def handle(self):
      return_code = self.call("greet", "John --yell")
      return return_code
  ```

  If you want to suppress the output of the executed command, you can use
  the `call_silent()` method instead.



  Cleo supports automatic (tab) completion in `bash`, `zsh` and `fish`.

  By default, your application will have a `completions` command. To register these completions for your application, run one of the following in a terminal (replacing `[program]` with the command you use to run your application):

  ```bash

  [program] completions bash | sudo tee /etc/bash_completion.d/[program].bash-completion


  [program] completions bash > $(brew --prefix)/etc/bash_completion.d/[program].bash-completion


  mkdir ~/.zfunc
  echo "fpath+=~/.zfunc" >> ~/.zshrc
  [program] completions zsh > ~/.zfunc/_[program]


  [program] completions zsh > $(brew --prefix)/share/zsh/site-functions/_[program]


  [program] completions fish > ~/.config/fish/completions/[program].fish
  ```


pkgId: 3dde6fce1e8bd687d371b2a8ebf132f352a7eb9701a851897ed1572bc5c2c6af
name: python-click
arch: src
version: 8.1.3
epoch: 0
release: 1
summary: Composable command line interface toolkit
url: https://palletsprojects.com/p/click/
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-985d1b93-c0fc-470f-88e9-bbd63d28ca68
location_href: 00008893-python-click/python-click-8.1.3-1.src.rpm
checksum_type: sha256
description:
  Click is a Python package for creating beautiful command line interfaces
  in a composable way with as little code as necessary. It's the "Command
  Line Interface Creation Kit". It's highly configurable but comes with
  sensible defaults out of the box.
  It aims to make the process of writing command line tools quick and fun
  while also preventing any frustration caused by the inability to
  implement an intended CLI API.
  Click in three points:
  -   Arbitrary nesting of commands
  -   Automatic help page generation
  -   Supports lazy loading of subcommands at runtime


pkgId: 2cd16ea51da8474d321b5c683075ecc8a29779f592f477fce3fa1d1172c87d90
name: python-click-configfile
arch: src
version: 0.2.3
epoch: 0
release: 1
summary: This package supports click commands that use configuration files.
url: https://github.com/click-contrib/click-configfile
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-644c93dc-70ae-4123-81f0-beab6c3e5047
location_href: 00011444-python-click-configfile/python-click-configfile-0.2.3-1.src.rpm
checksum_type: sha256
description:
  click_ is a framework to simplify writing composable commands for
  command-line tools. This package extends the click_ functionality
  by adding support for commands that use configuration files.

  .. _click: https://click.pocoo.org/

  EXAMPLE:

  A configuration file, like:

  .. code-block:: INI

      
      [foo]
      flag = yes
      name = Alice and Bob
      numbers = 1 4 9 16 25
      filenames = foo/xxx.txt
          bar/baz/zzz.txt

      [person.alice]
      name = Alice
      birthyear = 1995

      [person.bob]
      name = Bob
      birthyear = 2001

  can be processed with:

  .. code-block:: python

      
      
      from click_configfile import ConfigFileReader, Param, SectionSchema
      from click_configfile import matches_section
      import click

      class ConfigSectionSchema(object):
          """Describes all config sections of this configuration file."""

          @matches_section("foo")
          class Foo(SectionSchema):
              name    = Param(type=str)
              flag    = Param(type=bool, default=True)
              numbers = Param(type=int, multiple=True)
              filenames = Param(type=click.Path(), multiple=True)

          @matches_section("person.*")   # Matches multiple sections
          class Person(SectionSchema):
              name      = Param(type=str)
              birthyear = Param(type=click.IntRange(1990, 2100))


      class ConfigFileProcessor(ConfigFileReader):
          config_files = ["foo.ini", "foo.cfg"]
          config_section_schemas = [
              ConfigSectionSchema.Foo,     # PRIMARY SCHEMA
              ConfigSectionSchema.Person,
          ]

          
          
          
          

          
          
          
          


      
      CONTEXT_SETTINGS = dict(default_map=ConfigFileProcessor.read_config())

      @click.command(context_settings=CONTEXT_SETTINGS)
      @click.option("-n", "--number", "numbers", type=int, multiple=True)
      @click.pass_context
      def command_with_config(ctx, numbers):
          
          for person_data_key in ctx.default_map.keys():
              if not person_data_key.startswith("person."):
                  continue
              person_data = ctx.default_map[person_data_key]
              process_person_data(person_data)    # as dict.


pkgId: c6a33544ae14d8617ef862c35af7f60d3ebe8b45a3e8fbb8fb547ba865df54f4
name: python-click-log
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: Logging integration for Click
url: https://github.com/click-contrib/click-log
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3f3b6948-ec98-47e7-afb8-518f92c643f7
location_href: 00003237-python-click-log/python-click-log-0.4.0-1.src.rpm
checksum_type: sha256
description:
  Integrates logging with click.
  - `Documentation <https://click-log.readthedocs.org/>`_
  - `Source code <https://github.com/click-contrib/click-log>`_


pkgId: cb81eeae9d275c2850e285141be936a1f75952e9644b15b6317c90dd0717a7b1
name: python-click-man
arch: src
version: 0.4.1
epoch: 0
release: 1
summary: Generate man pages for click based CLI applications
url: https://github.com/click-contrib/click-man
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-cb5a666e-6e7b-45d5-a03e-2fa296d649c8
location_href: 00003238-python-click-man/python-click-man-0.4.1-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.org/click-contrib/click-man.svg?branch=master)](https://travis-ci.org/click-contrib/click-man) [![PyPI Package version](https://badge.fury.io/py/click-man.svg)](https://pypi.python.org/pypi/click-man)

  Create **man pages** for [click](https://github.com/pallets/click) application as easy as this:

  ```bash
  python3 setup.py --command-packages=click_man.commands man_pages
  ```

  → Checkout the [debian packaging example](https://github.com/timofurrer/click-man#debian-packages)



  *click-man* will generate one man page per command of your click CLI application specified in `console_scripts` in your `setup.py`.



  ```bash
  pip3 install click-man
  ```

  **click-man** is also available for Python 2:

  ```bash
  pip install click-man
  ```



  The following sections describe different usage example for *click-man*.



  **click-man** provides its own command line tool which can be passed the name of
  an installed script:

  ```bash
  click-man commandname
  ```

  where `commandname` is the name of an installed `console_script` entry point.

  To specify a target directory for the man pages, use the `--target` option:

  ```bash
  click-man --target path/to/man/pages commandname
  ```



  **click-man** provides a sane setuptools command extension which can be used like the following:

  ```bash
  python3 setup.py --command-packages=click_man.commands man_pages
  ```

  or specify the man pages target directory:

  ```bash
  python3 setup.py --command-packages=click_man.commands man_pages --target path/to/man/pages
  ```



  This approach of installing man pages is problematic for various reasons:



  Python in general and with that pip and setuptools are aimed to be platform independent.
  Man pages are **not**: they are a UNIX thing which means setuptools does not provide a sane
  solution to generate and install man pages.
  We should consider using automatic man page installation only with vendor specific packaging, e.g. for `*.deb` or `*.rpm` packages.



  Even on systems that support man pages, Python packages can be installed in
  virtualenvs via pip and setuptools, which do not make commands available
  globally. In fact, one of the "features" of a virtualenv is the ability to
  install a package without affecting the main system. As it is imposable to
  ensure a man page is only generated when not installing into a virtualenv,
  auto-generated man pages would pollute the main system and not stay contained in
  the virtualenv. Additionally, as a user could install multiple different
  versions of the same package into multiple different virtualenvs on the same
  system, there is no guarantee that a globally installed man page will document
  the version and behavior available in any given virtualenv.



  First, we do not want to commit man pages to our source control.
  We want to generate them on the fly. Either
  during build or installation time.

  With setuptools and pip we face two problems:

  1. If we generate and install them during installation of the package pip does not know about the man pages and thus cannot uninstall it.
  2. If we generate them in our build process and add them to your distribution we do not have a way to prevent installation to */usr/share/man* for non-UNIX-like Operating Systems or from within virtualenvs.



  The `debhelper` packages provides a very convenient script called `dh_installman`.
  It checks for the `debian/(pkg_name.)manpages` file and it's content which is basically a line by line list of man pages or globs:

  ```
  debian/tmp/manpages/*
  ```

  We override the rule provided by `dh_installman` to generate our man pages in advance, like this:

  ```Makefile
  override_dh_installman:
  	python3 setup.py --command-packages=click_man.commands man_pages --target debian/tmp/manpages
  	dh_installman -O--buildsystem=pybuild
  ```

  Now we are able to build are debian package with the tool of your choice, e.g.:

  ```debuild -us -uc```

  Checkout a working example here: [repo debian package](https://github.com/timofurrer/click-man/tree/master/examples/debian_pkg)


pkgId: 1f4461130e1cf5e0c825c8893c4ce605dd43a1de8c5b98fa89eff762ed930283
name: python-click-option-group
arch: src
version: 0.5.5
epoch: 0
release: 1
summary: Option groups missing in Click
url: https://github.com/click-contrib/click-option-group
rpm_license: BSD-3-Clause
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-bf8f1f14-8014-4c21-b311-751d5a36c962
location_href: 00010522-python-click-option-group/python-click-option-group-0.5.5-1.src.rpm
checksum_type: sha256
description:
  [![PyPI version](https://img.shields.io/pypi/v/click-option-group.svg)](https://pypi.python.org/pypi/click-option-group)
  [![Build status](https://travis-ci.org/click-contrib/click-option-group.svg?branch=master)](https://travis-ci.org/click-contrib/click-option-group)
  [![Coverage Status](https://coveralls.io/repos/github/click-contrib/click-option-group/badge.svg?branch=master)](https://coveralls.io/github/click-contrib/click-option-group?branch=master)
  ![Supported Python versions](https://img.shields.io/pypi/pyversions/click-option-group.svg)
  [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)


  **click-option-group** is a Click-extension package that adds option groups
  missing in [Click](https://github.com/pallets/click/).



  Click is a package for creating powerful and beautiful command line interfaces (CLI) in Python,
  but it has no the functionality for creating option groups.

  Option groups are convenient mechanism for logical structuring CLI, also it allows you to set
  the specific behavior and set the relationship among grouped options (mutually exclusive options for example).
  Moreover, [argparse](https://docs.python.org/3/library/argparse.html) stdlib package contains this
  functionality out of the box.

  At the same time, many Click users need this functionality.
  You can read interesting discussions about it in the following issues:

  * [issue 257](https://github.com/pallets/click/issues/257)
  * [issue 373](https://github.com/pallets/click/issues/373)
  * [issue 509](https://github.com/pallets/click/issues/509)
  * [issue 1137](https://github.com/pallets/click/issues/1137)

  The aim of this package is to provide group options with extensible functionality
  using canonical and clean API (Click-like API as far as possible).





  Install and update using pip:

  ```bash
  pip install -U click-option-group
  ```



  Here is a simple example how to use option groups in your Click-based CLI.
  Just use `optgroup` for declaring option groups by decorating
  your command function in Click-like API style.

  ```python


  import click
  from click_option_group import optgroup, RequiredMutuallyExclusiveOptionGroup

  @click.command()
  @optgroup.group('Server configuration',
                  help='The configuration of some server connection')
  @optgroup.option('-h', '--host', default='localhost', help='Server host name')
  @optgroup.option('-p', '--port', type=int, default=8888, help='Server port')
  @optgroup.option('-n', '--attempts', type=int, default=3, help='The number of connection attempts')
  @optgroup.option('-t', '--timeout', type=int, default=30, help='The server response timeout')
  @optgroup.group('Input data sources', cls=RequiredMutuallyExclusiveOptionGroup,
                  help='The sources of the input data')
  @optgroup.option('--tsv-file', type=click.File(), help='CSV/TSV input data file')
  @optgroup.option('--json-file', type=click.File(), help='JSON input data file')
  @click.option('--debug/--no-debug', default=False, help='Debug flag')
  def cli(**params):
      print(params)

  if __name__ == '__main__':
      cli()
  ```

  ```bash
  $ python app.py --help
  Usage: app.py [OPTIONS]

  Options:
    Server configuration:           The configuration of some server connection
      -h, --host TEXT               Server host name
      -p, --port INTEGER            Server port
      -n, --attempts INTEGER        The number of connection attempts
      -t, --timeout INTEGER         The server response timeout
    Input data sources: [mutually_exclusive, required]
                                    The sources of the input data
      --tsv-file FILENAME           CSV/TSV input data file
      --json-file FILENAME          JSON input data file
    --debug / --no-debug            Debug flag
    --help                          Show this message and exit.
  ```



  https://click-option-group.readthedocs.io





  * Add `tests/` directory to tarball
  * Add `tests_cov` extra dependencies for testing with coverage



  * Move frame gathering into error code path (PR [#34](https://github.com/click-contrib/click-option-group/pull/34))
  * Fix typos (PR [#37](https://github.com/click-contrib/click-option-group/pull/37))
  * PEP 561 support (PR [#42](https://github.com/click-contrib/click-option-group/pull/42))
  * Update docs dependencies and Travis CI Python version matrix (PR [#43](https://github.com/click-contrib/click-option-group/pull/43))



  * Update Click dependency version to `<9` (Issue [#33](https://github.com/click-contrib/click-option-group/issues/33))



  * Do not use default option group name. An empty group name will not be displayed
  * Slightly edited error messages
  * All arguments except `name` in `optgroup` decorator must be keyword-only



  * Fix incompatibility with autocomplete: out of the box Click completion and click-repl (Issue [#14](https://github.com/click-contrib/click-option-group/issues/14))



  * Add `AllOptionGroup` class: all options from the group must be set or none must be set (PR [#13](https://github.com/click-contrib/click-option-group/pull/13))
  * Fix type hints
  * Update docs



  * Support multi-layer wrapped functions (PR [#10](https://github.com/click-contrib/click-option-group/pull/10))
  * Fix flake8 issues



  * Add `hidden=True` to `_GroupTitleFakeOption` as a temporary workaroud for issue [#4](https://github.com/click-contrib/click-option-group/issues/4)


  * Add support for hidden options inside groups (PR [#2](https://github.com/click-contrib/click-option-group/pull/2))


  * Transfer the repo to click-contrib organisation


  * Add true lineno in warning when declaring empty option group
  * Update readme


  * Use RuntimeWarning and stacklevel 2 when declaring empty option group
  * Update readme


  * Implement `RequiredMutuallyExclusiveOptionGroup` class instead of `required` argument for `MutuallyExclusiveOptionGroup`
  * Add tests with 100% coverage
  * Update readme


  * First public release


pkgId: ed268c2d32c92fe0512be9c8433c33559e11c8f6ef5e4bda59884a7389d66659
name: python-click-spinner
arch: src
version: 0.1.10
epoch: 0
release: 1
summary: Spinner for Click
url: https://github.com/click-contrib/click-spinner
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fbdf4b58-c675-4034-9088-1417baa7850e
location_href: 00003241-python-click-spinner/python-click-spinner-0.1.10-1.src.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/click-spinner.svg)](https://pypi.python.org/pypi/click-spinner/) [![Build Status](https://travis-ci.org/click-contrib/click-spinner.svg?branch=master)](https://travis-ci.org/click-contrib/click-spinner)

  Sometimes you would just like to show the user some progress,
  but a progress bar is not suitable because you don’t know how much longer it would take.
  In these cases you might want to display a simple spinner using the `spinner()` function.

  Example usage:

  ```py
  with click_spinner.spinner():
          do_something()
          do_something_else()
  ```

  It looks like this:

  ![spinner](https://cloud.githubusercontent.com/assets/1288133/18229827/29629cd4-728f-11e6-8007-6c85ac50565c.gif)

  Spinner class based on on a [gist by @cevaris](https://gist.github.com/cevaris/79700649f0543584009e).

  Introduced in [PR #649](https://github.com/pallets/click/pull/649).



  ```
  pip install click-spinner
  ```

  Supports Python 2.7 and 3.



  - @yoavram
  - @andy-maier
  - @AdrienPensart


pkgId: 39e41e1b49ca6053eecec38dd09a87e3ba5d09781d42bb4baf23a5cc7d3a21f2
name: python-clickhouse-cityhash
arch: src
version: 1.0.2.4
epoch: 0
release: 1
summary: Python-bindings for CityHash, a fast non-cryptographic hash algorithm
url: https://github.com/xzkostyan/clickhouse-cityhash
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a630fd4d-b187-466f-b3ad-53b0ebf493bf
location_href: 00012225-python-clickhouse-cityhash/python-clickhouse-cityhash-1.0.2.4-1.src.rpm
checksum_type: sha256
description:
  A fork of Python wrapper around `CityHash <https://github.com/google/cityhash>`__
  with downgraded version of algorithm. This fork used as 3-rd party library
  for hashing data in ClickHouse protocol. Unfortunately ClickHouse
  server comes with built-in old version of this algorithm.
  Please use original `python-cityhash <https://github.com/escherba/python-cityhash>`_
  package for other purposes.


pkgId: 343223152d350d0353aea4643a270fb8a22d8753b768bfea80aca46378b6e5e5
name: python-clickhouse-cityhash-debuginfo
arch: aarch64
version: 1.0.2.4
epoch: 0
release: 1
summary: Debug information for package python-clickhouse-cityhash
url: https://github.com/xzkostyan/clickhouse-cityhash
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-a630fd4d-b187-466f-b3ad-53b0ebf493bf
rpm_sourcerpm: python-clickhouse-cityhash-1.0.2.4-1.src.rpm
location_href: 00012225-python-clickhouse-cityhash/python-clickhouse-cityhash-debuginfo-1.0.2.4-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-clickhouse-cityhash.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 4eba482e68da66c0c0fb28cfbd8873a140d232bf6661fab5b7338f5d99452ac9
name: python-clickhouse-cityhash-debugsource
arch: aarch64
version: 1.0.2.4
epoch: 0
release: 1
summary: Debug sources for package python-clickhouse-cityhash
url: https://github.com/xzkostyan/clickhouse-cityhash
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-a630fd4d-b187-466f-b3ad-53b0ebf493bf
rpm_sourcerpm: python-clickhouse-cityhash-1.0.2.4-1.src.rpm
location_href: 00012225-python-clickhouse-cityhash/python-clickhouse-cityhash-debugsource-1.0.2.4-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-clickhouse-cityhash.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 244b9dfa83dd17fd428400916301d770fc810b3e7e6e6bb1a4da182ecdcbd520
name: python-clickhouse-driver
arch: src
version: 0.2.5
epoch: 0
release: 1
summary: Python driver with native interface for ClickHouse
url: https://github.com/mymarilyn/clickhouse-driver
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-62ff9758-f433-4ce0-b950-0eb71ffa0498
location_href: 00009960-python-clickhouse-driver/python-clickhouse-driver-0.2.5-1.src.rpm
checksum_type: sha256
description:
  ClickHouse Python Driver with native (TCP) interface support.
  Asynchronous wrapper is available here: https://github.com/mymarilyn/aioch


pkgId: 1c47a4a9184b73a98534187d764918351f47d684878ff5798a117a0d0a807086
name: python-clickhouse-driver-debuginfo
arch: aarch64
version: 0.2.5
epoch: 0
release: 1
summary: Debug information for package python-clickhouse-driver
url: https://github.com/mymarilyn/clickhouse-driver
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-62ff9758-f433-4ce0-b950-0eb71ffa0498
rpm_sourcerpm: python-clickhouse-driver-0.2.5-1.src.rpm
location_href: 00009960-python-clickhouse-driver/python-clickhouse-driver-debuginfo-0.2.5-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-clickhouse-driver.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: fccb1571ed8e735655f6724d31386d44724c1f00ee053c8afcf3ceff41846e3e
name: python-clickhouse-driver-debugsource
arch: aarch64
version: 0.2.5
epoch: 0
release: 1
summary: Debug sources for package python-clickhouse-driver
url: https://github.com/mymarilyn/clickhouse-driver
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-62ff9758-f433-4ce0-b950-0eb71ffa0498
rpm_sourcerpm: python-clickhouse-driver-0.2.5-1.src.rpm
location_href: 00009960-python-clickhouse-driver/python-clickhouse-driver-debugsource-0.2.5-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-clickhouse-driver.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: c09345342bc73967055baa140ab5eb8165a423ff26d973ee96fdda4632802c62
name: python-cligj
arch: src
version: 0.7.2
epoch: 0
release: 1
summary: Click params for commmand line interfaces to GeoJSON
url: https://github.com/mapbox/cligj
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-49152f63-1605-4ce4-a0e6-e8ff5ee837cf
location_href: 00003246-python-cligj/python-cligj-0.7.2-1.src.rpm
checksum_type: sha256
description:
  Common arguments and options for GeoJSON processing commands, using Click.
  `cligj` is for Python developers who create command line interfaces for geospatial data.
  `cligj` allows you to quickly build consistent, well-tested and interoperable CLIs for handling GeoJSON.


pkgId: 3dd88e7f0d89f37decae2b40b495767cb8cc1326015c3c189364490133db7ce0
name: python-clikit
arch: src
version: 0.6.2
epoch: 0
release: 1
summary: CliKit is a group of utilities to build beautiful and testable command line interfaces.
url: https://github.com/sdispater/clikit
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-31c02cab-6121-4c02-ac39-a3a2c9ee806c
location_href: 00003249-python-clikit/python-clikit-0.6.2-1.src.rpm
checksum_type: sha256
description:
  CliKit is a group of utilities to build beautiful and testable command line interfaces.

  This is at the core of [Cleo](https://github.com/sdispater/cleo).


pkgId: a938826412e5c4550012609dda1c3c3e30a2e2f7276cf4df5f1dec2c0ffbfb6a
name: python-clingo
arch: src
version: 5.6.2
epoch: 0
release: 1
summary: CFFI-based bindings to the clingo solver.
url: https://github.com/potassco/clingo
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9372cc2e-047e-4fcc-a1f1-569c5d023fec
location_href: 00003250-python-clingo/python-clingo-5.6.2-1.src.rpm
checksum_type: sha256
description:
  This package provides CFFI-based bindings to the clingo solver.

  Clingo is part of the [Potassco](https://potassco.org) project for *Answer Set Programming* (ASP).
  ASP offers a simple and powerful modeling language to describe combinatorial problems as *logic programs*.
  The *clingo* system then takes such a logic program and computes *answer sets* representing solutions to the given problem.
  To get an idea, check our [Getting Started](https://potassco.org/doc/start/) page and the [online version](https://potassco.org/clingo/run/) of clingo.

  Please check the the [API documentation](https://potassco.org/clingo/python-api/current/clingo/) on how to use this module.


pkgId: 488aea0b124d1c3eeb15b57d69d02eb8c7f83a328eb9176851a97b2a3cb8c296
name: python-clint
arch: src
version: 0.5.1
epoch: 0
release: 1
summary: Python Command Line Interface Tools
url: https://github.com/kennethreitz/clint
rpm_license: ISC
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-da1f2b7f-21e6-442d-9b6d-bdad0890fb90
location_href: 00011357-python-clint/python-clint-0.5.1-1.src.rpm
checksum_type: sha256
description:
  **Clint** is a module filled with a set of awesome tools for developing
  commandline applications.
  **C** ommand
  **L** ine
  **IN** terface
  **T** ools
  .
  Clint is awesome. Crazy awesome. It supports colors, but detects if the session is a TTY, so doesn't render the colors if you're piping stuff around. Automagically.
  Awesome nest-able indentation context manager. Example: (``with indent(4): puts('indented text')``). It supports custom email-style quotes. Of course, it supports color too, if and when needed.
  It has an awesome Column printer with optional auto-expanding columns. It detects how wide your current console is and adjusts accordingly. It wraps your words properly to fit the column size. With or without colors mixed in. All with a single function call.
  The world's easiest to use implicit argument system w/ chaining methods for filtering. Seriously.
  Run the various executables in examples_ to get a good feel for what Clint offers.
  You'll never want to not use it.


pkgId: 8e0c2c08f01601637b2d73921a7c2cce9f4b2e778cdd0433c44ca095b7fc3bbc
name: python-clize
arch: src
version: 5.0.0
epoch: 0
release: 1
summary: Turn functions into command-line interfaces
url: https://github.com/epsy/clize
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-246098ee-288c-4ae4-ad4e-3f7f8eaef562
location_href: 00013852-python-clize/python-clize-5.0.0-1.src.rpm
checksum_type: sha256
description:
  *****
  Clize
  *****

  .. image:: https://readthedocs.org/projects/clize/badge/?version=stable
     :target: http://clize.readthedocs.io/en/stable/?badge=stable
     :alt: Documentation Status
  .. image:: https://badges.gitter.im/Join%20Chat.svg
     :alt: Join the chat at https://gitter.im/epsy/clize
     :target: https://gitter.im/epsy/clize?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
  .. image:: https://github.com/epsy/clize/actions/workflows/ci.yml/badge.svg?branch=master
     :target: https://github.com/epsy/clize/actions/workflows/ci.yml
  .. image:: https://coveralls.io/repos/epsy/clize/badge.svg?branch=master
     :target: https://coveralls.io/r/epsy/clize?branch=master

  Clize is an argument parser for `Python <https://www.python.org/>`_.  You can
  use Clize as an alternative to ``argparse`` if you want an even easier way to
  create command-line interfaces.

  **With Clize, you can:**

  * Create command-line interfaces by creating functions and passing them to
    `clize.run`.
  * Enjoy a CLI automatically created from your functions' parameters.
  * Bring your users familiar ``--help`` messages generated from your docstrings.
  * Reuse functionality across multiple commands using decorators.
  * Extend Clize with new parameter behavior.

  **Here's an example:**

  .. code-block:: python

      from clize import run

      def hello_world(name=None, *, no_capitalize=False):
          """Greets the world or the given name.

          :param name: If specified, only greet this person.
          :param no_capitalize: Don't capitalize the given name.
          """
          if name:
              if not no_capitalize:
                  name = name.title()
              return 'Hello {0}!'.format(name)
          return 'Hello world!'

      if __name__ == '__main__':
          run(hello_world)

  The python code above can now be used on the command-line as follows:

  .. code-block:: console

      $ pip install clize
      $ python3 hello.py --help
          Usage: hello.py [OPTIONS] name

          Greets the world or the given name.

          Positional arguments:
            name   If specified, only greet this person.

          Options:
            --no-capitalize   Don't capitalize the given name.

          Other actions:
            -h, --help   Show the help
      $ python3 hello.py
      Hello world!
      $ python3 hello.py john
      Hello John!
      $ python3 hello.py dave --no-capitalize
      Hello dave!

  You can find the documentation and tutorials at http://clize.readthedocs.io/


pkgId: fcc2f3738df38fd9bf296f3d542983357e7de06b82331d308592bb46ac6af0fd
name: python-cloud-sql-python-connector
arch: src
version: 1.2.1
epoch: 0
release: 1
url: https://github.com/GoogleCloudPlatform/cloud-sql-python-connector
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-33967dc9-1c30-4b91-8f53-cc7b47d15f02
location_href: 00010827-python-cloud-sql-python-connector/python-cloud-sql-python-connector-1.2.1-1.src.rpm
checksum_type: sha256
summary:
  The Cloud SQL Python Connector is a library that can be used alongside a database driver to allow users with sufficient permissions to connect to a Cloud SQL database without having to manually allowlist IPs or manage SSL certificates.

description:
  <p align="center">
      <a href="https://cloud.google.com/blog/topics/developers-practitioners/how-connect-cloud-sql-using-python-easy-way">
          <img src="https://raw.githubusercontent.com/GoogleCloudPlatform/cloud-sql-python-connector/main/docs/images/cloud-sql-python-connector.png" alt="cloud-sql-python-connector image">
      </a>
  </p>

  <h1 align="center">Cloud SQL Python Connector</h1>

  [![Open In Colab][colab-badge]][colab-notebook]
  [![CI][ci-badge]][ci-build]
  [![pypi][pypi-badge]][pypi-docs]
  [![PyPI download month][pypi-downloads]][pypi-docs]
  [![python][python-versions]][pypi-docs]

  [colab-badge]: https://colab.research.google.com/assets/colab-badge.svg
  [colab-notebook]: https://colab.research.google.com/github/GoogleCloudPlatform/cloud-sql-python-connector/blob/main/samples/notebooks/postgres_python_connector.ipynb
  [ci-badge]: https://github.com/GoogleCloudPlatform/cloud-sql-python-connector/actions/workflows/tests.yml/badge.svg?event=push
  [ci-build]: https://github.com/GoogleCloudPlatform/cloud-sql-python-connector/actions/workflows/tests.yml?query=event%3Apush+branch%3Amain
  [pypi-badge]: https://img.shields.io/pypi/v/cloud-sql-python-connector
  [pypi-docs]: https://pypi.org/project/cloud-sql-python-connector
  [pypi-downloads]: https://img.shields.io/pypi/dm/cloud-sql-python-connector.svg
  [python-versions]: https://img.shields.io/pypi/pyversions/cloud-sql-python-connector

  The _Cloud SQL Python Connector_ is a Cloud SQL connector designed for use with the
  Python language. Using a Cloud SQL connector provides the following benefits:
  * **IAM Authorization:** uses IAM permissions to control who/what can connect to
    your Cloud SQL instances
  * **Improved Security:** uses robust, updated TLS 1.3 encryption and
    identity verification between the client connector and the server-side proxy,
    independent of the database protocol.
  * **Convenience:** removes the requirement to use and distribute SSL
    certificates, as well as manage firewalls or source/destination IP addresses.
  * (optionally) **IAM DB Authentication:** provides support for
    [Cloud SQL’s automatic IAM DB AuthN][iam-db-authn] feature.

  [iam-db-authn]: https://cloud.google.com/sql/docs/postgres/authentication

  The Cloud SQL Python Connector is a package to be used alongside a database driver.
  Currently supported drivers are:
   - [`pymysql`](https://github.com/PyMySQL/PyMySQL) (MySQL)
   - [`pg8000`](https://github.com/tlocke/pg8000) (PostgreSQL)
   - [`asyncpg`](https://github.com/MagicStack/asyncpg) (PostgreSQL)
   - [`pytds`](https://github.com/denisenkom/pytds) (SQL Server)




  You can install this library with `pip install`, specifying the driver
  based on your database dialect.


  ```
  pip install "cloud-sql-python-connector[pymysql]"
  ```

  There are two different database drivers that are supported for the Postgres dialect:


  ```
  pip install "cloud-sql-python-connector[pg8000]"
  ```

  ```
  pip install "cloud-sql-python-connector[asyncpg]"
  ```

  ```
  pip install "cloud-sql-python-connector[pytds]"
  ```


  This package provides several functions for authorizing and encrypting
  connections. These functions are used with your database driver to connect to
  your Cloud SQL instance.

  The instance connection name for your Cloud SQL instance is always in the
  format "project:region:instance".



  This package requires the following to successfully make Cloud SQL Connections:

  - IAM principal (user, service account, etc.) with the
  [Cloud SQL Client][client-role] role. This IAM principal will be used for
  [credentials](#credentials).
  - The [Cloud SQL Admin API][admin-api] to be enabled within your Google Cloud
  Project. By default, the API will be called in the project associated with
  the IAM principal.

  [admin-api]: https://console.cloud.google.com/apis/api/sqladmin.googleapis.com
  [client-role]: https://cloud.google.com/sql/docs/mysql/roles-and-permissions



  This library uses the [Application Default Credentials (ADC)][adc] strategy for
  resolving credentials. Please see [these instructions for how to set your ADC][set-adc]
  (Google Cloud Application vs Local Development, IAM user vs service account credentials),
  or consult the [google.auth][google-auth] package.

  To explicitly set a specific source for the credentials, see
  [Configuring the Connector](#configuring-the-connector) below.

  [adc]: https://cloud.google.com/docs/authentication#adc
  [set-adc]: https://cloud.google.com/docs/authentication/provide-credentials-adc
  [google-auth]: https://google-auth.readthedocs.io/en/master/reference/google.auth.html



  To connect to Cloud SQL using the connector, inititalize a `Connector`
  object and call it's `connect` method with the proper input parameters.

  The `Connector` itself creates connection objects by calling its `connect` method but does not manage database connection pooling. For this reason, it is recommended to use the connector alongside a library that can create connection pools, such as [SQLAlchemy](https://www.sqlalchemy.org/). This will allow for connections to remain open and be reused, reducing connection overhead and the number of connections needed.

  In the Connector's `connect` method below, input your connection string as the first positional argument and the name of the database driver for the second positional argument. Insert the rest of your connection keyword arguments like user, password and database. You can also set the optional `timeout` or `ip_type` keyword arguments.

  To use this connector with SQLAlchemy, use the `creator` argument for `sqlalchemy.create_engine`:
  ```python
  from google.cloud.sql.connector import Connector
  import sqlalchemy


  connector = Connector()


  def getconn() -> pymysql.connections.Connection:
      conn: pymysql.connections.Connection = connector.connect(
          "project:region:instance",
          "pymysql",
          user="my-user",
          password="my-password",
          db="my-db-name"
      )
      return conn


  pool = sqlalchemy.create_engine(
      "mysql+pymysql://",
      creator=getconn,
  )
  ```

  The returned connection pool engine can then be used to query and modify the database.
  ```python

  insert_stmt = sqlalchemy.text(
      "INSERT INTO my_table (id, title) VALUES (:id, :title)",
  )

  with pool.connect() as db_conn:
      
      db_conn.execute(insert_stmt, parameters={"id": "book1", "title": "Book One"})

      
      result = db_conn.execute(sqlalchemy.text("SELECT * from my_table")).fetchall()

      
      for row in result:
          print(row)
  ```

  To close the `Connector` object's background resources, call it's `close()` method as follows:

  ```python
  connector.close()
  ```

  **Note**: For more examples of using SQLAlchemy to manage connection pooling with the connector, please see [Cloud SQL SQLAlchemy Samples](https://cloud.google.com/sql/docs/postgres/connect-connectors#python_1).

  **Note for SQL Server users**: If your SQL Server instance requires SSL, you need to download the CA certificate for your instance and include `cafile={path to downloaded certificate}` and `validate_host=False`. This is a workaround for a [known issue](https://issuetracker.google.com/184867147).



  If you need to customize something about the connector, or want to specify
  defaults for each connection to make, you can initialize a
  `Connector` object as follows:

  ```python
  from google.cloud.sql.connector import Connector, IPTypes


  connector = Connector(
      ip_type=IPTypes.PUBLIC,
      enable_iam_auth=False,
      timeout=30,
      credentials=custom_creds # google.auth.credentials.Credentials
  )
  ```



  The `Connector` object can also be used as a context manager in order to
  automatically close and cleanup resources, removing the need for explicit
  calls to `connector.close()`.

  Connector as a context manager:

  ```python
  from google.cloud.sql.connector import Connector
  import sqlalchemy


  def getconn() -> pymysql.connections.Connection:
      with Connector() as connector:
          conn = connector.connect(
              "project:region:instance",
              "pymysql",
              user="my-user",
              password="my-password",
              db="my-db-name"
          )
      return conn


  pool = sqlalchemy.create_engine(
      "mysql+pymysql://",
      creator=getconn,
  )


  insert_stmt = sqlalchemy.text(
      "INSERT INTO my_table (id, title) VALUES (:id, :title)",
  )


  with pool.connect() as db_conn:
      
      db_conn.execute(insert_stmt, parameters={"id": "book1", "title": "Book One"})

      
      result = db_conn.execute(sqlalchemy.text("SELECT * from my_table")).fetchall()

      
      for row in result:
          print(row)
  ```


  The Cloud SQL Connector for Python can be used to connect to Cloud SQL instances using both public and private IP addresses. To specify which IP address to use to connect, set the `ip_type` keyword argument Possible values are `IPTypes.PUBLIC` and `IPTypes.PRIVATE`.
  Example:
  ```python
  from google.cloud.sql.connector import IPTypes

  connector.connect(
      "project:region:instance",
      "pymysql",
      ip_type=IPTypes.PRIVATE # use private IP
  ... insert other kwargs ...
  )
  ```

  Note: If specifying Private IP, your application must already be in the same VPC network as your Cloud SQL Instance.


  Connections using [Automatic IAM database authentication](https://cloud.google.com/sql/docs/postgres/authentication#automatic) are supported when using Postgres or MySQL drivers.
  First, make sure to [configure your Cloud SQL Instance to allow IAM authentication](https://cloud.google.com/sql/docs/postgres/create-edit-iam-instances#configure-iam-db-instance)
  and [add an IAM database user](https://cloud.google.com/sql/docs/postgres/create-manage-iam-users#creating-a-database-user).

  Now, you can connect using user or service account credentials instead of a password.
  In the call to connect, set the `enable_iam_auth` keyword argument to true and the `user` argument to the appropriately formatted IAM principal.
  > Postgres: For an IAM user account, this is the user's email address. For a service account, it is the service account's email without the `.gserviceaccount.com` domain suffix.

  > MySQL: For an IAM user account, this is the user's email address, without the @ or domain name. For example, for `test-user@gmail.com`, set the `user` argument to `test-user`. For a service account, this is the service account's email address without the `@project-id.iam.gserviceaccount.com` suffix.

  Example:
  ```python
  connector.connect(
       "project:region:instance",
       "pg8000",
       user="postgres-iam-user@gmail.com",
       db="my-db-name",
       enable_iam_auth=True,
   )
  ```


  Active Directory authentication for SQL Server instances is currently only supported on Windows. First, make sure to follow [these steps](https://cloud.google.com/blog/topics/developers-practitioners/creating-sql-server-instance-integrated-active-directory-using-google-cloud-sql) to set up a Managed AD domain and join your Cloud SQL instance to the domain. [See here for more info on Cloud SQL Active Directory integration](https://cloud.google.com/sql/docs/sqlserver/ad).

  Once you have followed the steps linked above, you can run the following code to return a connection object:
  ```python
  connector.connect(
      "project:region:instance",
      "pytds",
      db="my-db-name",
      active_directory_auth=True,
      server_name="public.[instance].[location].[project].cloudsql.[domain]",
  )
  ```
  Or, if using Private IP:
  ```python
  connector.connect(
      "project:region:instance",
      "pytds",
      db="my-db-name",
      active_directory_auth=True,
      server_name="private.[instance].[location].[project].cloudsql.[domain]",
      ip_type=IPTypes.PRIVATE
  )
  ```


  The Python Connector can be used alongside popular Python web frameworks such
  as Flask, FastAPI, etc, to integrate Cloud SQL databases within your
  web applications.


  [Flask-SQLAlchemy](https://flask-sqlalchemy.palletsprojects.com/en/2.x/)
  is an extension for [Flask](https://flask.palletsprojects.com/en/2.2.x/)
  that adds support for [SQLAlchemy](https://www.sqlalchemy.org/) to your
  application. It aims to simplify using SQLAlchemy with Flask by providing
  useful defaults and extra helpers that make it easier to accomplish
  common tasks.

  You can configure Flask-SQLAlchemy to connect to a Cloud SQL database from
  your web application through the following:

  ```python
  from flask import Flask
  from flask_sqlalchemy import SQLAlchemy
  from google.cloud.sql.connector import Connector, IPTypes



  def getconn():
      with Connector() as connector:
          conn = connector.connect(
              "project:region:instance-name", # Cloud SQL Instance Connection Name
              "pg8000",
              user="my-user",
              password="my-password",
              db="my-database",
              ip_type= IPTypes.PUBLIC  # IPTypes.PRIVATE for private IP
          )
          return conn


  app = Flask(__name__)


  app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+pg8000://"
  app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {
      "creator": getconn
  }

  db = SQLAlchemy(app)
  ```

  For more details on how to use Flask-SQLAlchemy, check out the
  [Flask-SQLAlchemy Quickstarts](https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/#)


  [FastAPI](https://fastapi.tiangolo.com/) is a modern, fast (high-performance),
  web framework for building APIs with Python based on standard Python type hints.

  You can configure FastAPI to connect to a Cloud SQL database from
  your web application using [SQLAlchemy ORM](https://docs.sqlalchemy.org/en/14/orm/)
  through the following:

  ```python
  from sqlalchemy import create_engine
  from sqlalchemy.ext.declarative import declarative_base
  from sqlalchemy.orm import sessionmaker
  from google.cloud.sql.connector import Connector, IPTypes


  def getconn():
      with Connector() as connector:
          conn = connector.connect(
              "project:region:instance-name", # Cloud SQL Instance Connection Name
              "pg8000",
              user="my-user",
              password="my-password",
              db="my-database",
              ip_type= IPTypes.PUBLIC  # IPTypes.PRIVATE for private IP
          )
      return conn

  SQLALCHEMY_DATABASE_URL = "postgresql+pg8000://"

  engine = create_engine(
      SQLALCHEMY_DATABASE_URL , creator=getconn
  )


  SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

  Base = declarative_base()
  ```

  To learn more about integrating a database into your FastAPI application,
  follow along the [FastAPI SQL Database guide](https://fastapi.tiangolo.com/tutorial/sql-databases/#create-the-database-models).


  The Cloud SQL Connector is compatible with
  [asyncio](https://docs.python.org/3/library/asyncio.html) to improve the speed
  and efficiency of database connections through concurrency. You can use all
  non-asyncio drivers through the `Connector.connect_async` function, in addition
  to the following asyncio database drivers:
  - [asyncpg](https://magicstack.github.io/asyncpg) (Postgres)

  The Cloud SQL Connector has a helper `create_async_connector` function that is
  recommended for asyncio database connections. It returns a `Connector`
  object that uses the current thread's running event loop. This is different
  than `Connector()` which by default initializes a new event loop in a
  background thread.

  The `create_async_connector` allows all the same input arguments as the
  [Connector](#configuring-the-connector) object.

  Once a `Connector` object is returned by `create_async_connector` you can call
  its `connect_async` method, just as you would the `connect` method:

  ```python
  import asyncio
  import asyncpg
  from google.cloud.sql.connector import create_async_connector


  async def main():
      
      connector = await create_async_connector()

      
      conn: asyncpg.Connection = await connector.connect_async(
          "project:region:instance",  # Cloud SQL instance connection name
          "asyncpg",
          user="my-user",
          password="my-password",
          db="my-db-name"
          
      )

      
      await conn.execute("INSERT INTO ratings (title, genre, rating) VALUES ('Batman', 'Action', 8.2)")

      
      results = await conn.fetch("SELECT * from ratings")

      
      for row in results:
          print(row)

      
      await conn.close()

      
      await connector.close_async()



  asyncio.run(main())
  ```

  For more details on interacting with an `asyncpg.Connection`, please visit
  the [official documentation](https://magicstack.github.io/asyncpg/current/api/index.html).



  An alternative to using the `create_async_connector` function is initializing
  a `Connector` as an async context manager, removing the need for explicit
  calls to `connector.close_async()` to cleanup resources.

  **Note:** This alternative requires that the running event loop be
  passed in as the `loop` argument to `Connector()`.

  ```python
  import asyncio
  import asyncpg
  from google.cloud.sql.connector import Connector

  async def main():
      
      loop = asyncio.get_running_loop()
      
      async with Connector(loop=loop) as connector:

          
          conn: asyncpg.Connection = await connector.connect_async(
              "project:region:instance",  # Cloud SQL instance connection name
              "asyncpg",
              user="my-user",
              password="my-password",
              db="my-db-name"
              
          )

          
          await conn.execute("INSERT INTO ratings (title, genre, rating) VALUES ('Batman', 'Action', 8.2)")

          
          results = await conn.fetch("SELECT * from ratings")

          
          for row in results:
              print(row)

          
          await conn.close()


  asyncio.run(main())
  ```




  This project uses [semantic versioning](https://semver.org/), and uses the
  following lifecycle regarding support for a major version:

  **Active** - Active versions get all new features and security fixes (that
  wouldn’t otherwise introduce a breaking change). New major versions are
  guaranteed to be "active" for a minimum of 1 year.
  **Deprecated** - Deprecated versions continue to receive security and critical
  bug fixes, but do not receive new features. Deprecated versions will be publicly
  supported for 1 year.
  **Unsupported** - Any major version that has been deprecated for >=1 year is
  considered publicly unsupported.



  We test and support at a minimum, every [active version until it's
  end-of-life date][pyver]. Changes in supported Python versions will be
  considered a minor change, and will be listed in the release notes.

  [pyver]: https://devguide.python.org/#status-of-python-branches


  This project aims for a minimum monthly release cadence. If no new
  features or fixes have been added, a new PATCH version with the latest
  dependencies is released.



  We welcome outside contributions. Please see our
  [Contributing Guide](CONTRIBUTING.md) for details on how best to contribute.


pkgId: 323aaa1fb7ebe720afe59f050321a0646c3a699ec2b444940ef67d014b09cfb8
name: python-cloud-sql-python-connector-help
arch: noarch
version: 1.2.1
epoch: 0
release: 1
summary: Development documents and examples for cloud-sql-python-connector
url: https://github.com/GoogleCloudPlatform/cloud-sql-python-connector
rpm_license: Apache 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-33967dc9-1c30-4b91-8f53-cc7b47d15f02
rpm_sourcerpm: python-cloud-sql-python-connector-1.2.1-1.src.rpm
checksum_type: sha256
description:
  <p align="center">
      <a href="https://cloud.google.com/blog/topics/developers-practitioners/how-connect-cloud-sql-using-python-easy-way">
          <img src="https://raw.githubusercontent.com/GoogleCloudPlatform/cloud-sql-python-connector/main/docs/images/cloud-sql-python-connector.png" alt="cloud-sql-python-connector image">
      </a>
  </p>

  <h1 align="center">Cloud SQL Python Connector</h1>

  [![Open In Colab][colab-badge]][colab-notebook]
  [![CI][ci-badge]][ci-build]
  [![pypi][pypi-badge]][pypi-docs]
  [![PyPI download month][pypi-downloads]][pypi-docs]
  [![python][python-versions]][pypi-docs]

  [colab-badge]: https://colab.research.google.com/assets/colab-badge.svg
  [colab-notebook]: https://colab.research.google.com/github/GoogleCloudPlatform/cloud-sql-python-connector/blob/main/samples/notebooks/postgres_python_connector.ipynb
  [ci-badge]: https://github.com/GoogleCloudPlatform/cloud-sql-python-connector/actions/workflows/tests.yml/badge.svg?event=push
  [ci-build]: https://github.com/GoogleCloudPlatform/cloud-sql-python-connector/actions/workflows/tests.yml?query=event%3Apush+branch%3Amain
  [pypi-badge]: https://img.shields.io/pypi/v/cloud-sql-python-connector
  [pypi-docs]: https://pypi.org/project/cloud-sql-python-connector
  [pypi-downloads]: https://img.shields.io/pypi/dm/cloud-sql-python-connector.svg
  [python-versions]: https://img.shields.io/pypi/pyversions/cloud-sql-python-connector

  The _Cloud SQL Python Connector_ is a Cloud SQL connector designed for use with the
  Python language. Using a Cloud SQL connector provides the following benefits:
  * **IAM Authorization:** uses IAM permissions to control who/what can connect to
    your Cloud SQL instances
  * **Improved Security:** uses robust, updated TLS 1.3 encryption and
    identity verification between the client connector and the server-side proxy,
    independent of the database protocol.
  * **Convenience:** removes the requirement to use and distribute SSL
    certificates, as well as manage firewalls or source/destination IP addresses.
  * (optionally) **IAM DB Authentication:** provides support for
    [Cloud SQL’s automatic IAM DB AuthN][iam-db-authn] feature.

  [iam-db-authn]: https://cloud.google.com/sql/docs/postgres/authentication

  The Cloud SQL Python Connector is a package to be used alongside a database driver.
  Currently supported drivers are:
   - [`pymysql`](https://github.com/PyMySQL/PyMySQL) (MySQL)
   - [`pg8000`](https://github.com/tlocke/pg8000) (PostgreSQL)
   - [`asyncpg`](https://github.com/MagicStack/asyncpg) (PostgreSQL)
   - [`pytds`](https://github.com/denisenkom/pytds) (SQL Server)




  You can install this library with `pip install`, specifying the driver
  based on your database dialect.


  ```
  pip install "cloud-sql-python-connector[pymysql]"
  ```

  There are two different database drivers that are supported for the Postgres dialect:


  ```
  pip install "cloud-sql-python-connector[pg8000]"
  ```

  ```
  pip install "cloud-sql-python-connector[asyncpg]"
  ```

  ```
  pip install "cloud-sql-python-connector[pytds]"
  ```


  This package provides several functions for authorizing and encrypting
  connections. These functions are used with your database driver to connect to
  your Cloud SQL instance.

  The instance connection name for your Cloud SQL instance is always in the
  format "project:region:instance".



  This package requires the following to successfully make Cloud SQL Connections:

  - IAM principal (user, service account, etc.) with the
  [Cloud SQL Client][client-role] role. This IAM principal will be used for
  [credentials](#credentials).
  - The [Cloud SQL Admin API][admin-api] to be enabled within your Google Cloud
  Project. By default, the API will be called in the project associated with
  the IAM principal.

  [admin-api]: https://console.cloud.google.com/apis/api/sqladmin.googleapis.com
  [client-role]: https://cloud.google.com/sql/docs/mysql/roles-and-permissions



  This library uses the [Application Default Credentials (ADC)][adc] strategy for
  resolving credentials. Please see [these instructions for how to set your ADC][set-adc]
  (Google Cloud Application vs Local Development, IAM user vs service account credentials),
  or consult the [google.auth][google-auth] package.

  To explicitly set a specific source for the credentials, see
  [Configuring the Connector](#configuring-the-connector) below.

  [adc]: https://cloud.google.com/docs/authentication#adc
  [set-adc]: https://cloud.google.com/docs/authentication/provide-credentials-adc
  [google-auth]: https://google-auth.readthedocs.io/en/master/reference/google.auth.html



  To connect to Cloud SQL using the connector, inititalize a `Connector`
  object and call it's `connect` method with the proper input parameters.

  The `Connector` itself creates connection objects by calling its `connect` method but does not manage database connection pooling. For this reason, it is recommended to use the connector alongside a library that can create connection pools, such as [SQLAlchemy](https://www.sqlalchemy.org/). This will allow for connections to remain open and be reused, reducing connection overhead and the number of connections needed.

  In the Connector's `connect` method below, input your connection string as the first positional argument and the name of the database driver for the second positional argument. Insert the rest of your connection keyword arguments like user, password and database. You can also set the optional `timeout` or `ip_type` keyword arguments.

  To use this connector with SQLAlchemy, use the `creator` argument for `sqlalchemy.create_engine`:
  ```python
  from google.cloud.sql.connector import Connector
  import sqlalchemy


  connector = Connector()


  def getconn() -> pymysql.connections.Connection:
      conn: pymysql.connections.Connection = connector.connect(
          "project:region:instance",
          "pymysql",
          user="my-user",
          password="my-password",
          db="my-db-name"
      )
      return conn


  pool = sqlalchemy.create_engine(
      "mysql+pymysql://",
      creator=getconn,
  )
  ```

  The returned connection pool engine can then be used to query and modify the database.
  ```python

  insert_stmt = sqlalchemy.text(
      "INSERT INTO my_table (id, title) VALUES (:id, :title)",
  )

  with pool.connect() as db_conn:
      
      db_conn.execute(insert_stmt, parameters={"id": "book1", "title": "Book One"})

      
      result = db_conn.execute(sqlalchemy.text("SELECT * from my_table")).fetchall()

      
      for row in result:
          print(row)
  ```

  To close the `Connector` object's background resources, call it's `close()` method as follows:

  ```python
  connector.close()
  ```

  **Note**: For more examples of using SQLAlchemy to manage connection pooling with the connector, please see [Cloud SQL SQLAlchemy Samples](https://cloud.google.com/sql/docs/postgres/connect-connectors#python_1).

  **Note for SQL Server users**: If your SQL Server instance requires SSL, you need to download the CA certificate for your instance and include `cafile={path to downloaded certificate}` and `validate_host=False`. This is a workaround for a [known issue](https://issuetracker.google.com/184867147).



  If you need to customize something about the connector, or want to specify
  defaults for each connection to make, you can initialize a
  `Connector` object as follows:

  ```python
  from google.cloud.sql.connector import Connector, IPTypes


  connector = Connector(
      ip_type=IPTypes.PUBLIC,
      enable_iam_auth=False,
      timeout=30,
      credentials=custom_creds # google.auth.credentials.Credentials
  )
  ```



  The `Connector` object can also be used as a context manager in order to
  automatically close and cleanup resources, removing the need for explicit
  calls to `connector.close()`.

  Connector as a context manager:

  ```python
  from google.cloud.sql.connector import Connector
  import sqlalchemy


  def getconn() -> pymysql.connections.Connection:
      with Connector() as connector:
          conn = connector.connect(
              "project:region:instance",
              "pymysql",
              user="my-user",
              password="my-password",
              db="my-db-name"
          )
      return conn


  pool = sqlalchemy.create_engine(
      "mysql+pymysql://",
      creator=getconn,
  )


  insert_stmt = sqlalchemy.text(
      "INSERT INTO my_table (id, title) VALUES (:id, :title)",
  )


  with pool.connect() as db_conn:
      
      db_conn.execute(insert_stmt, parameters={"id": "book1", "title": "Book One"})

      
      result = db_conn.execute(sqlalchemy.text("SELECT * from my_table")).fetchall()

      
      for row in result:
          print(row)
  ```


  The Cloud SQL Connector for Python can be used to connect to Cloud SQL instances using both public and private IP addresses. To specify which IP address to use to connect, set the `ip_type` keyword argument Possible values are `IPTypes.PUBLIC` and `IPTypes.PRIVATE`.
  Example:
  ```python
  from google.cloud.sql.connector import IPTypes

  connector.connect(
      "project:region:instance",
      "pymysql",
      ip_type=IPTypes.PRIVATE # use private IP
  ... insert other kwargs ...
  )
  ```

  Note: If specifying Private IP, your application must already be in the same VPC network as your Cloud SQL Instance.


  Connections using [Automatic IAM database authentication](https://cloud.google.com/sql/docs/postgres/authentication#automatic) are supported when using Postgres or MySQL drivers.
  First, make sure to [configure your Cloud SQL Instance to allow IAM authentication](https://cloud.google.com/sql/docs/postgres/create-edit-iam-instances#configure-iam-db-instance)
  and [add an IAM database user](https://cloud.google.com/sql/docs/postgres/create-manage-iam-users#creating-a-database-user).

  Now, you can connect using user or service account credentials instead of a password.
  In the call to connect, set the `enable_iam_auth` keyword argument to true and the `user` argument to the appropriately formatted IAM principal.
  > Postgres: For an IAM user account, this is the user's email address. For a service account, it is the service account's email without the `.gserviceaccount.com` domain suffix.

  > MySQL: For an IAM user account, this is the user's email address, without the @ or domain name. For example, for `test-user@gmail.com`, set the `user` argument to `test-user`. For a service account, this is the service account's email address without the `@project-id.iam.gserviceaccount.com` suffix.

  Example:
  ```python
  connector.connect(
       "project:region:instance",
       "pg8000",
       user="postgres-iam-user@gmail.com",
       db="my-db-name",
       enable_iam_auth=True,
   )
  ```


  Active Directory authentication for SQL Server instances is currently only supported on Windows. First, make sure to follow [these steps](https://cloud.google.com/blog/topics/developers-practitioners/creating-sql-server-instance-integrated-active-directory-using-google-cloud-sql) to set up a Managed AD domain and join your Cloud SQL instance to the domain. [See here for more info on Cloud SQL Active Directory integration](https://cloud.google.com/sql/docs/sqlserver/ad).

  Once you have followed the steps linked above, you can run the following code to return a connection object:
  ```python
  connector.connect(
      "project:region:instance",
      "pytds",
      db="my-db-name",
      active_directory_auth=True,
      server_name="public.[instance].[location].[project].cloudsql.[domain]",
  )
  ```
  Or, if using Private IP:
  ```python
  connector.connect(
      "project:region:instance",
      "pytds",
      db="my-db-name",
      active_directory_auth=True,
      server_name="private.[instance].[location].[project].cloudsql.[domain]",
      ip_type=IPTypes.PRIVATE
  )
  ```


  The Python Connector can be used alongside popular Python web frameworks such
  as Flask, FastAPI, etc, to integrate Cloud SQL databases within your
  web applications.


  [Flask-SQLAlchemy](https://flask-sqlalchemy.palletsprojects.com/en/2.x/)
  is an extension for [Flask](https://flask.palletsprojects.com/en/2.2.x/)
  that adds support for [SQLAlchemy](https://www.sqlalchemy.org/) to your
  application. It aims to simplify using SQLAlchemy with Flask by providing
  useful defaults and extra helpers that make it easier to accomplish
  common tasks.

  You can configure Flask-SQLAlchemy to connect to a Cloud SQL database from
  your web application through the following:

  ```python
  from flask import Flask
  from flask_sqlalchemy import SQLAlchemy
  from google.cloud.sql.connector import Connector, IPTypes



  def getconn():
      with Connector() as connector:
          conn = connector.connect(
              "project:region:instance-name", # Cloud SQL Instance Connection Name
              "pg8000",
              user="my-user",
              password="my-password",
              db="my-database",
              ip_type= IPTypes.PUBLIC  # IPTypes.PRIVATE for private IP
          )
          return conn


  app = Flask(__name__)


  app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+pg8000://"
  app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {
      "creator": getconn
  }

  db = SQLAlchemy(app)
  ```

  For more details on how to use Flask-SQLAlchemy, check out the
  [Flask-SQLAlchemy Quickstarts](https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/#)


  [FastAPI](https://fastapi.tiangolo.com/) is a modern, fast (high-performance),
  web framework for building APIs with Python based on standard Python type hints.

  You can configure FastAPI to connect to a Cloud SQL database from
  your web application using [SQLAlchemy ORM](https://docs.sqlalchemy.org/en/14/orm/)
  through the following:

  ```python
  from sqlalchemy import create_engine
  from sqlalchemy.ext.declarative import declarative_base
  from sqlalchemy.orm import sessionmaker
  from google.cloud.sql.connector import Connector, IPTypes


  def getconn():
      with Connector() as connector:
          conn = connector.connect(
              "project:region:instance-name", # Cloud SQL Instance Connection Name
              "pg8000",
              user="my-user",
              password="my-password",
              db="my-database",
              ip_type= IPTypes.PUBLIC  # IPTypes.PRIVATE for private IP
          )
      return conn

  SQLALCHEMY_DATABASE_URL = "postgresql+pg8000://"

  engine = create_engine(
      SQLALCHEMY_DATABASE_URL , creator=getconn
  )


  SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

  Base = declarative_base()
  ```

  To learn more about integrating a database into your FastAPI application,
  follow along the [FastAPI SQL Database guide](https://fastapi.tiangolo.com/tutorial/sql-databases/#create-the-database-models).


  The Cloud SQL Connector is compatible with
  [asyncio](https://docs.python.org/3/library/asyncio.html) to improve the speed
  and efficiency of database connections through concurrency. You can use all
  non-asyncio drivers through the `Connector.connect_async` function, in addition
  to the following asyncio database drivers:
  - [asyncpg](https://magicstack.github.io/asyncpg) (Postgres)

  The Cloud SQL Connector has a helper `create_async_connector` function that is
  recommended for asyncio database connections. It returns a `Connector`
  object that uses the current thread's running event loop. This is different
  than `Connector()` which by default initializes a new event loop in a
  background thread.

  The `create_async_connector` allows all the same input arguments as the
  [Connector](#configuring-the-connector) object.

  Once a `Connector` object is returned by `create_async_connector` you can call
  its `connect_async` method, just as you would the `connect` method:

  ```python
  import asyncio
  import asyncpg
  from google.cloud.sql.connector import create_async_connector


  async def main():
      
      connector = await create_async_connector()

      
      conn: asyncpg.Connection = await connector.connect_async(
          "project:region:instance",  # Cloud SQL instance connection name
          "asyncpg",
          user="my-user",
          password="my-password",
          db="my-db-name"
          
      )

      
      await conn.execute("INSERT INTO ratings (title, genre, rating) VALUES ('Batman', 'Action', 8.2)")

      
      results = await conn.fetch("SELECT * from ratings")

      
      for row in results:
          print(row)

      
      await conn.close()

      
      await connector.close_async()



  asyncio.run(main())
  ```

  For more details on interacting with an `asyncpg.Connection`, please visit
  the [official documentation](https://magicstack.github.io/asyncpg/current/api/index.html).



  An alternative to using the `create_async_connector` function is initializing
  a `Connector` as an async context manager, removing the need for explicit
  calls to `connector.close_async()` to cleanup resources.

  **Note:** This alternative requires that the running event loop be
  passed in as the `loop` argument to `Connector()`.

  ```python
  import asyncio
  import asyncpg
  from google.cloud.sql.connector import Connector

  async def main():
      
      loop = asyncio.get_running_loop()
      
      async with Connector(loop=loop) as connector:

          
          conn: asyncpg.Connection = await connector.connect_async(
              "project:region:instance",  # Cloud SQL instance connection name
              "asyncpg",
              user="my-user",
              password="my-password",
              db="my-db-name"
              
          )

          
          await conn.execute("INSERT INTO ratings (title, genre, rating) VALUES ('Batman', 'Action', 8.2)")

          
          results = await conn.fetch("SELECT * from ratings")

          
          for row in results:
              print(row)

          
          await conn.close()


  asyncio.run(main())
  ```




  This project uses [semantic versioning](https://semver.org/), and uses the
  following lifecycle regarding support for a major version:

  **Active** - Active versions get all new features and security fixes (that
  wouldn’t otherwise introduce a breaking change). New major versions are
  guaranteed to be "active" for a minimum of 1 year.
  **Deprecated** - Deprecated versions continue to receive security and critical
  bug fixes, but do not receive new features. Deprecated versions will be publicly
  supported for 1 year.
  **Unsupported** - Any major version that has been deprecated for >=1 year is
  considered publicly unsupported.



  We test and support at a minimum, every [active version until it's
  end-of-life date][pyver]. Changes in supported Python versions will be
  considered a minor change, and will be listed in the release notes.

  [pyver]: https://devguide.python.org/#status-of-python-branches


  This project aims for a minimum monthly release cadence. If no new
  features or fixes have been added, a new PATCH version with the latest
  dependencies is released.



  We welcome outside contributions. Please see our
  [Contributing Guide](CONTRIBUTING.md) for details on how best to contribute.

location_href:
  00010827-python-cloud-sql-python-connector/python-cloud-sql-python-connector-help-1.2.1-1.noarch.rpm


pkgId: a3214b7012e4d9236476a0dfdd0eced5344290f89b186304e0a5808a7f24ac95
name: python-cloud_sptheme
arch: src
version: 1.10.1.post20200504175005
epoch: 0
release: 1
summary: a nice sphinx theme named 'Cloud', and some related extensions
url: https://cloud-sptheme.readthedocs.io
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c15cfdb7-5d4c-4b3a-8f6d-38d206fe71c1
location_href: 00003252-python-cloud-sptheme/python-cloud_sptheme-1.10.1.post20200504175005-1.src.rpm
checksum_type: sha256
description:
  This is a small package containing a Sphinx theme named "Cloud",
  along with some related Sphinx extensions. To see an example
  of the theme in action, check out it's documentation
  at `<https://cloud-sptheme.readthedocs.io>`_.


pkgId: 3f0bac372a30258fa2b392d66ee2c0367deacfd87fb6c7421f7ce54d0d989ae4
name: python-cloudant
arch: src
version: 2.15.0
epoch: 0
release: 1
summary: Cloudant / CouchDB Client Library
url: https://github.com/cloudant/python-cloudant
rpm_license: Apache Software License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-2fc85c44-86f1-4f37-bade-c2f7b57d424d
location_href: 00003253-python-cloudant/python-cloudant-2.15.0-1.src.rpm
checksum_type: sha256
description:
  **This library is now deprecated and will be end-of-life on Dec 31 2021.**

  The library remains supported until the end-of-life date,
  but will receive only _critical_ maintenance updates.

  Please see the [Migration Guide](./MIGRATION.md) for advice
  about migrating to our replacement library
  [cloudant-python-sdk](https://github.com/IBM/cloudant-python-sdk).

  For FAQs and additional information please refer to the
  [Cloudant blog](https://blog.cloudant.com/2021/06/30/Cloudant-SDK-Transition.html).



  [![Build Status](https://travis-ci.org/cloudant/python-cloudant.svg?branch=master)](https://travis-ci.org/cloudant/python-cloudant)
  [![Readthedocs](https://readthedocs.org/projects/pip/badge/)](http://python-cloudant.readthedocs.io)
  [![Compatibility](https://img.shields.io/badge/python-3.5-blue.svg)](http://python-cloudant.readthedocs.io/en/latest/compatibility.html)
  [![pypi](https://img.shields.io/pypi/v/cloudant.svg)](https://pypi.python.org/pypi/cloudant)

  This is the official Cloudant library for Python.

  * [Installation and Usage](#installation-and-usage)
  * [Getting Started](#getting-started)
  * [API Reference](http://python-cloudant.readthedocs.io/en/latest/cloudant.html)
  * [Related Documentation](#related-documentation)
  * [Development](#development)
      * [Contributing](CONTRIBUTING.md)
      * [Test Suite](CONTRIBUTING.md#running-the-tests)
      * [Using in Other Projects](#using-in-other-projects)
      * [License](#license)
      * [Issues](#issues)
  * [Migrating to `cloudant-python-sdk` library](#migrating-to-cloudant-python-sdk-library)




  Released versions of this library are [hosted on PyPI](https://pypi.python.org/pypi/cloudant) and can be installed with `pip`.

  In order to install the latest version, execute

      pip install cloudant



  See [Getting started (readthedocs.io)](http://python-cloudant.readthedocs.io/en/latest/getting_started.html)



  See [API reference docs (readthedocs.io)](http://python-cloudant.readthedocs.io/en/latest/cloudant.html)



  * [Cloudant Python client library docs (readthedocs.io)](http://python-cloudant.readthedocs.io)
  * [Cloudant documentation](https://console.bluemix.net/docs/services/Cloudant/cloudant.html#overview)
  * [Cloudant Learning Center](https://developer.ibm.com/clouddataservices/cloudant-learning-center/)
  * [Tutorial for creating and populating a database on IBM Cloud](https://console.bluemix.net/docs/services/Cloudant/tutorials/create_database.html#creating-and-populating-a-simple-cloudant-nosql-db-database-on-ibm-cloud)



  See [CONTRIBUTING.md](https://github.com/cloudant/python-cloudant/blob/master/CONTRIBUTING.md)



  The preferred approach for using `python-cloudant` in other projects is to use the PyPI as described above.



  [Getting Started with Python Flask on IBM Cloud](https://github.com/IBM-Cloud/get-started-python)

  [Movie Recommender Demo](https://github.com/snowch/movie-recommender-demo):
  - [Update and check if documents exist](https://github.com/snowch/movie-recommender-demo/blob/master/web_app/app/dao.py#L162-L168)
  - [Connect to Cloudant using 429 backoff with 10 retries](https://github.com/snowch/movie-recommender-demo/blob/master/web_app/app/cloudant_db.py#L17-L18)

  [Watson Recipe Bot](https://github.com/ibm-watson-data-lab/watson-recipe-bot-python-cloudant):
  - [Use Cloudant Query to find design docs](https://github.com/ibm-watson-data-lab/watson-recipe-bot-python-cloudant/blob/master/souschef/cloudant_recipe_store.py#L33-L77)



  Copyright © 2015 IBM. All rights reserved.

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

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

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



  Before opening a new issue please consider the following:
  * Only the latest release is supported. If at all possible please try to reproduce the issue using
  the latest version.
  * Please check the [existing issues](https://github.com/cloudant/python-cloudant/issues)
  to see if the problem has already been reported. Note that the default search
  includes only open issues, but it may already have been closed.
  * Cloudant customers should contact Cloudant support for urgent issues.
  * When opening a new issue [here in github](../../issues) please complete the template fully.


  We have a newly supported Cloudant Python SDK named [cloudant-python-sdk](https://github.com/IBM/cloudant-python-sdk).
  For advice on migrating from this module see [MIGRATION.md](MIGRATION.md).


pkgId: 0dac1be3167ec1c4c5ce82c4033bf29d39382e57b22aa888b41979f91667626f
name: python-cloudflare
arch: src
version: 2.11.1
epoch: 0
release: 1
summary: Python wrapper for the Cloudflare v4 API
url: https://github.com/cloudflare/python-cloudflare
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-02063d82-7f20-40f9-baa5-cc7b293f2b03
location_href: 00003254-python-cloudflare/python-cloudflare-2.11.1-1.src.rpm
checksum_type: sha256
description:
  Two methods are provided to install this software.
  Use PyPi (see [package](https://pypi.python.org/pypi/cloudflare) details) or GitHub (see [package](https://github.com/cloudflare/python-cloudflare) details).



  ```bash
      $ sudo pip install cloudflare
      $
  ```

  Yes - that simple! (the sudo may not be needed in some cases).



  ```bash
      $ git clone https://github.com/cloudflare/python-cloudflare
      $ cd python-cloudflare
      $ ./setup.py build
      $ sudo ./setup.py install
      $
  ```

  Or whatever variance of that you want to use.
  There is a Makefile included.



  In Sepember/October 2016 the company modified its company name and dropped the capital F.
  However, for now (and for backward compatibility reasons) the class name stays the same.



  The Cloudflare API can be found [here](https://api.cloudflare.com/).
  Each API call is provided via a similarly named function within the **CloudFlare** class.
  A full list is provided below.



  All example code is available on GitHub (see [package](https://github.com/cloudflare/python-cloudflare) in the [examples](https://github.com/cloudflare/python-cloudflare/tree/master/examples) folder).



  This package was initially introduced [here](https://blog.cloudflare.com/python-cloudflare/) via Cloudflare's [blog](https://blog.cloudflare.com/).



  A very simple listing of zones within your account; including the IPv6 status of the zone.

  ```python
  import CloudFlare

  def main():
      cf = CloudFlare.CloudFlare()
      zones = cf.zones.get()
      for zone in zones:
          zone_id = zone['id']
          zone_name = zone['name']
          print("zone_id=%s zone_name=%s" % (zone_id, zone_name))

  if __name__ == '__main__':
      main()
  ```

  This example works when there are less than 50 zones (50 is the default number of values returned from a query like this).

  Now lets expand on that and add code to show the IPv6 and SSL status of the zones. Lets also query 100 zones.

  ```python
  import CloudFlare

  def main():
      cf = CloudFlare.CloudFlare()
      zones = cf.zones.get(params = {'per_page':100})
      for zone in zones:
          zone_id = zone['id']
          zone_name = zone['name']

          settings_ssl = cf.zones.settings.ssl.get(zone_id)
          ssl_status = settings_ssl['value']

          settings_ipv6 = cf.zones.settings.ipv6.get(zone_id)
          ipv6_status = settings_ipv6['value']

          print("zone_id=%s zone_name=%s" % (zone_id, zone_name))
          print("ssl_status=%s ipv6_status=%s" % (ssl_status, ipv6_status))

  if __name__ == '__main__':
      main()
  ```

  In order to query more than a single page of zones, we would have to use the raw mode (described more below).
  We can loop over many get calls and pass the page parameter to facilitate the paging.

  Raw mode is only needed when a get request has the possibility of returning many items.

  ```python
  import CloudFlare

  def main():
      cf = CloudFlare.CloudFlare(raw=True)
      page_number = 0
      while True:
          page_number += 1
          raw_results = cf.zones.get(params={'per_page':5,'page':page_number})
          zones = raw_results['result']

          for zone in zones:
              zone_id = zone['id']
              zone_name = zone['name']
              print("zone_id=%s zone_name=%s" % (zone_id, zone_name))

          total_pages = raw_results['result_info']['total_pages']
          if page_number == total_pages:
              break

  if __name__ == '__main__':
      main()
  ```

  A more complex example follows.

  ```python
  import CloudFlare

  def main():
      zone_name = 'example.com'

      cf = CloudFlare.CloudFlare()

      
      try:
          zones = cf.zones.get(params = {'name':zone_name,'per_page':1})
      except CloudFlare.exceptions.CloudFlareAPIError as e:
          exit('/zones.get %d %s - api call failed' % (e, e))
      except Exception as e:
          exit('/zones.get - %s - api call failed' % (e))

      if len(zones) == 0:
          exit('No zones found')

      
      zone = zones[0]
      zone_id = zone['id']

      
      try:
          dns_records = cf.zones.dns_records.get(zone_id)
      except CloudFlare.exceptions.CloudFlareAPIError as e:
          exit('/zones/dns_records.get %d %s - api call failed' % (e, e))

      
      print("zone_id=%s zone_name=%s" % (zone_id, zone_name))

      
      for dns_record in dns_records:
          r_name = dns_record['name']
          r_type = dns_record['type']
          r_value = dns_record['content']
          r_id = dns_record['id']
          print('\t', r_id, r_name, r_type, r_value)

      exit(0)

  if __name__ == '__main__':
      main()
  ```



  When you create a **CloudFlare** class you can pass some combination of these four core parameters.

   * `email` - The account email (only if an API Key is being used)
   * `api` - The API Key (if coding prior to Issue-114 being merged)
   * `token` - The API Token (if coding after to Issue-114)
   * `certtoken` - Optional Origin-CA Certificate Token

  This parameter controls how the data is returned from a successful call (see notes below).

   * `raw - An optional Raw flag (True/False) - defaults to False

  The following paramaters are for debug and/or development usage

   * `debug` - An optional Debug flag (True/False) - defaults to False
   * `use_sessions` - An optional Use-Sessions flag (True/False) - defaults to True
   * `profile` - An optional Profile name (the default is `Cloudflare`)
   * `base_url` - An optional Base URL (only used for development)

  email=None, key=None, token=None, certtoken=None, debug=False, raw=False, use_sessions=True, profile=None, base_url=None):



  After [Issue-114](https://github.com/cloudflare/python-cloudflare/issues/114) was coded and merged, the use of `token` and `key` changed; however, is backward compatible (amazingly!).

  If you are using only the API Token, then don't include the API Email. If you are coding prior to Issue-114, then the API Key can also be used as an API Token if the API Email is not used.



  ```python
  import CloudFlare

      
      cf = CloudFlare.CloudFlare()

      
      cf = CloudFlare.CloudFlare(debug=True)

      
      cf = CloudFlare.CloudFlare(token='00000000000000000000000000000000')

      
      cf = CloudFlare.CloudFlare(email='user@example.com', key='00000000000000000000000000000000')

      
      cf = CloudFlare.CloudFlare(token='00000000000000000000000000000000', certtoken='v1.0-...')

      
      cf = CloudFlare.CloudFlare(email='user@example.com', key='00000000000000000000000000000000', certtoken='v1.0-...')

      
      cf = CloudFlare.CloudFlare(profile="CompanyX"))
  ```

  If the account email and API key are not passed when you create the class, then they are retrieved from either the users exported shell environment variables or the .cloudflare.cfg or ~/.cloudflare.cfg or ~/.cloudflare/cloudflare.cfg files, in that order.

  If you're using an API Token, any `cloudflare.cfg` file must either not contain an `email` and `key` attribute (or they can be zero length strings) and the `CLOUDFLARE_EMAIL` `CLOUDFLARE_API_KEY` environment variable must be unset (or zero length strings), otherwise the token (`CLOUDFLARE_API_TOKEN` or `token` attribute) will not be used.

  There is one call that presently doesn't need any email or token certification (the */ips* call); hence you can test without any values saved away.



  Note (for latest version of code):

   * `CLOUDFLARE_EMAIL` has replaced `CF_API_EMAIL`.
   * `CLOUDFLARE_API_KEY` has replaced `CF_API_KEY`.
   * `CLOUDFLARE_API_TOKEN` has replaced `CF_API_TOKEN`.
   * `CLOUDFLARE_API_CERTKEY` has replaced `CF_API_CERTKEY`.

  Additionally, these two variables are available for testing purposes:

   * `CLOUDFLARE_API_EXTRAS` has replaced `CF_API_EXTRAS`.
   * `CLOUDFLARE_API_URL` has replaced `CF_API_URL`.

  The older environment variable names can still be used.

  ```bash
  $ export CLOUDFLARE_EMAIL='user@example.com'
  $ export CLOUDFLARE_API_KEY='00000000000000000000000000000000'
  $ export CLOUDFLARE_API_CERTKEY='v1.0-...'
  $
  ```

  Or if using API Token.

  ```bash
  $ export CLOUDFLARE_API_TOKEN='00000000000000000000000000000000'
  $ export CLOUDFLARE_API_CERTKEY='v1.0-...'
  $
  ```
  These are optional environment variables; however, they do override the values set within a configuration file.



  The default profile name is `Cloudflare` for obvious reasons.

  ```bash
  $ cat ~/.cloudflare/cloudflare.cfg
  [Cloudflare]
  email = user@example.com # Do not set if using an API Token
  key = 00000000000000000000000000000000
  certtoken = v1.0-...
  extras =
  $
  ```

  More than one profile can be stored within that file.
  Here's an example for a work and home setup (in this example work has an API Token and home uses email/key).

  ```bash
  $ cat ~/.cloudflare/cloudflare.cfg
  [Work]
  token = 00000000000000000000000000000000
  [Home]
  email = home@example.com
  key = 00000000000000000000000000000000
  $
  ```

  To select a profile, use the `--profile profile-name` option for `cli4` command or use `profile="profile-name"` in the library call.

  ```bash
  $ cli4 --profile Work /zones | jq '.[]|.name' | wc -l
        13
  $

  $ cli4 --profile Home /zones | jq '.[]|.name' | wc -l
         1
  $
  ```

  Here is the same in code.

  ```python


  import CloudFlare

  def main():
      cf = CloudFlare.CloudFlare(profile="Work")
      ...
  ```



  The configuration file can have values that are both generic and specific to the method.
  Here's an example where a project has a different API Token for reading and writing values.

  ```bash
  $ cat ~/.cloudflare/cloudflare.cfg
  [Work]
  token = 0000000000000000000000000000000000000000
  token.get = 0123456789012345678901234567890123456789
  $
  ```

  When a GET call is processed then the second token is used. For all other calls the first token is used.
  Here's a more explict verion of that config:

  ```bash
  $ cat ~/.cloudflare/cloudflare.cfg
  [Work]
  token.delete = 0000000000000000000000000000000000000000
  token.get = 0123456789012345678901234567890123456789
  token.patch = 0000000000000000000000000000000000000000
  token.post = 0000000000000000000000000000000000000000
  token.put = 0000000000000000000000000000000000000000
  $
  ```

  This can be used with email values also.



  The *CLOUDFLARE_API_CERTKEY* or *certtoken* values are used for the Origin-CA */certificates* API calls.
  You can leave *certtoken* in the configuration with a blank value (or omit the option variable fully).

  The *extras* values are used when adding API calls outside of the core codebase.
  Technically, this is only useful for internal testing within Cloudflare.
  You can leave *extras* in the configuration with a blank value (or omit the option variable fully).





  The response is build from the JSON in the API call.
  It contains the **results** values; but does not contain the paging values.

  You can return all the paging values by calling the class with raw=True. Here's an example without paging.

  ```python


  import json
  import CloudFlare

  def main():
      cf = CloudFlare.CloudFlare()
      zones = cf.zones.get(params={'per_page':5})
      print("len=%d" % (zones.length()))

  if __name__ == '__main__':
      main()
  ```

  The results are as follows.

  ```
  5
  ```

  When you add the raw option; the APIs full structure is returned. This means the paging values can be seen.

  ```python


  import json
  import CloudFlare

  def main():
      cf = CloudFlare.CloudFlare(raw=True)
      zones = cf.zones.get(params={'per_page':5})
      print("len=%d" % (zones.length()))
      print(json.dumps(zones, indent=4, sort_keys=True))

  if __name__ == '__main__':
      main()
  ```

  This produces.

  ```
  5
  {
      "result": [
          ...
      ],
      "result_info": {
          "count": 5,
          "page": 1,
          "per_page": 5,
          "total_count": 31,
          "total_pages": 7
      }
  }
  ```

  A full example of paging is provided below.



  The library will raise **CloudFlareAPIError** when the API call fails.
  The exception returns both an integer and textual message in one value.

  ```python
  import CloudFlare

      ...
      try
          r = ...
      except CloudFlare.exceptions.CloudFlareAPIError as e:
          exit('api error: %d %s' % (e, e))
      ...
  ```

  The other raised response is **CloudFlareInternalError** which can happen when calling an invalid method.

  In some cases more than one error is returned. In this case the return value **e** is also an array.
  You can iterate over that array to see the additional error.

  ```python
  import sys
  import CloudFlare

      ...
      try
          r = ...
      except CloudFlare.exceptions.CloudFlareAPIError as e:
          if len(e) > 0:
              sys.stderr.write('api error - more than one error value returned!\n')
              for x in e:
                  sys.stderr.write('api error: %d %s\n' % (x, x))
          exit('api error: %d %s' % (e, e))
      ...
  ```



  Here's examples using the CLI command cli4 of the responses passed back in exceptions.

  First a simple get with a clean (non-error) response.

  ```
  $ cli4 /zones/:example.com/dns_records | jq -c '.[]|{"name":.name,"type":.type,"content":.content}'
  {"name":"example.com","type":"MX","content":"something.example.com"}
  {"name":"something.example.com","type":"A","content":"10.10.10.10"}
  $
  ```

  Next a simple/single error response.
  This is simulated by providing incorrect authentication information.

  ```
  $ CLOUDFLARE_EMAIL='someone@example.com' cli4 /zones/
  cli4: /zones - 9103 Unknown X-Auth-Key or X-Auth-Email
  $
  ```

  More than one call can be done on the same command line. In this mode, the connection is preserved between calls.
  ```
  $ cli4 /user/organizations /user/invites
  ...
  $
  ```
  Note that the output is presently two JSON structures one after the other - so less useful that you may think.

  Finally, a command that provides more than one error response.
  This is simulated by passing an invalid IPv4 address to a DNS record creation.

  ```
  $ cli4 --post name='foo' type=A content="1" /zones/:example.com/dns_records
  cli4: /zones/:example.com/dns_records - 9005 Content for A record is invalid. Must be a valid IPv4 address
  cli4: /zones/:example.com/dns_records - 1004 DNS Validation Error
  $
  ```



  The [examples](https://github.com/cloudflare/python-cloudflare/tree/master/examples) folder contains many examples in both simple and verbose formats.



  ```python


  import sys
  import CloudFlare

  def main():
      zone_name = sys.argv[1]
      cf = CloudFlare.CloudFlare()
      zone_info = cf.zones.post(data={'jump_start':False, 'name': zone_name})
      zone_id = zone_info['id']

      dns_records = [
          {'name':'foo', 'type':'AAAA', 'content':'2001:d8b::1'},
          {'name':'foo', 'type':'A', 'content':'192.168.0.1'},
          {'name':'duh', 'type':'A', 'content':'10.0.0.1', 'ttl':120},
          {'name':'bar', 'type':'CNAME', 'content':'foo'},
          {'name':'shakespeare', 'type':'TXT', 'content':"What's in a name? That which we call a rose by any other name ..."}
      ]

      for dns_record in dns_records:
          r = cf.zones.dns_records.post(zone_id, data=dns_record)
      exit(0)

  if __name__ == '__main__':
      main()
  ```



  ```python


  import sys
  import CloudFlare

  def main():
      zone_name = sys.argv[1]
      cf = CloudFlare.CloudFlare()
      zone_info = cf.zones.get(params={'name': zone_name})
      zone_id = zone_info['id']

      dns_name = sys.argv[2]
      dns_records = cf.zones.dns_records.get(zone_id, params={'name':dns_name + '.' + zone_name})
      for dns_record in dns_records:
          dns_record_id = dns_record['id']
          r = cf.zones.dns_records.delete(zone_id, dns_record_id)
      exit(0)

  if __name__ == '__main__':
      main()
  ```



  All API calls can be called from the command line.
  The command will convert domain names prefixed with a colon (`:`) into zone_identifiers: e.g. to view `example.com` you must use `cli4 /zones/:example.com` (the zone ID cannot be used).

  ```bash
  $ cli4 [-V|--version] [-h|--help] [-v|--verbose] [-q|--quiet] [-j|--json] [-y|--yaml] [-r|--raw] [-d|--dump] [--get|--patch|--post|--put|--delete] [item=value ...] /command...

  ```



  For API calls that need to pass data or parameters there is various formats to use.

  The simplest form is ```item=value```. This passes the value as a string within the APIs JSON data.

  If you need a numeric value passed then **==** can be used to force the value to be treated as a numeric value within the APIs JSON data.
  For example: ```item==value```.

  if you need to pass a list of items; then **[]** can be used. For example:

  ```
  pool_id1="11111111111111111111111111111111"
  pool_id2="22222222222222222222222222222222"
  pool_id3="33333333333333333333333333333333"
  cli4 --post global_pools="[ ${pool_id1}, ${pool_id2}, ${pool_id3} ]" region_pools="[ ]" /user/load_balancers/maps
  ```

  Data or parameters can be either named or unnamed.
  It can not be both.
  Named is the majority format; as described above.
  Unnamed parameters simply don't have anything before the **=** sign, as in ```=value```.
  This format is presently only used by the Cloudflare Load Balancer API calls.
  For example:

  ```
  cli4 --put ="00000000000000000000000000000000" /user/load_balancers/maps/:00000000000000000000000000000000/region/:WNAM
  ```

  Data can also be uploaded from file contents. Using the ```item=@filename``` format will open the file and the contents uploaded in the POST.



  The output from the CLI command is in JSON or YAML format (and human readable). This is controled by the **--yaml** or **--json** flags (JSON is the default).



   * ```cli4 /user/billing/profile```
   * ```cli4 /user/invites```

   * ```cli4 /zones/:example.com```
   * ```cli4 /zones/:example.com/dnssec```
   * ```cli4 /zones/:example.com/settings/ipv6```
   * ```cli4 --put /zones/:example.com/activation_check```
   * ```cli4 /zones/:example.com/keyless_certificates```

   * ```cli4 /zones/:example.com/analytics/dashboard```



  Here is the creation of a DNS entry, followed by a listing of that entry and then the deletion of that entry.

  ```bash
  $ $ cli4 --post name="test" type="A" content="10.0.0.1" /zones/:example.com/dns_records
  {
      "id": "00000000000000000000000000000000",
      "name": "test.example.com",
      "type": "A",
      "content": "10.0.0.1",
      ...
  }
  $

  $ cli4 /zones/:example.com/dns_records/:test.example.com | jq '{"id":.id,"name":.name,"type":.type,"content":.content}'
  {
    "id": "00000000000000000000000000000000",
    "name": "test.example.com",
    "type": "A",
    "content": "10.0.0.1"
  }

  $ cli4 --delete /zones/:example.com/dns_records/:test.example.com | jq -c .
  {"id":"00000000000000000000000000000000"}
  $
  ```

  There's the ability to handle dns entries with multiple values.
  This produces more than one API call within the command.

  ```
  $ cli4 /zones/:example.com/dns_records/:test.example.com | jq -c '.[]|{"id":.id,"name":.name,"type":.type,"content":.content}'
  {"id":"00000000000000000000000000000000","name":"test.example.com","type":"A","content":"192.168.0.1"}
  {"id":"00000000000000000000000000000000","name":"test.example.com","type":"AAAA","content":"2001:d8b::1"}
  $
  ```

  Here are the cache purging commands.

  ```bash
  $ cli4 --delete purge_everything=true /zones/:example.com/purge_cache | jq -c .
  {"id":"00000000000000000000000000000000"}
  $

  $ cli4 --delete files='[http://example.com/css/styles.css]' /zones/:example.com/purge_cache | jq -c .
  {"id":"00000000000000000000000000000000"}
  $

  $ cli4 --delete files='[http://example.com/css/styles.css,http://example.com/js/script.js]' /zones/:example.com/purge_cache | jq -c .
  {"id":"00000000000000000000000000000000"}
  $

  $ cli4 --delete tags='[tag1,tag2,tag3]' /zones/:example.com/purge_cache | jq -c .
  cli4: /zones/:example.com/purge_cache - 1107 Only enterprise zones can purge by tag.
  $
  ```

  A somewhat useful listing of available plans for a specific zone.

  ```bash
  $ cli4 /zones/:example.com/available_plans | jq -c '.[]|{"id":.id,"name":.name}'
  {"id":"00000000000000000000000000000000","name":"Pro Website"}
  {"id":"00000000000000000000000000000000","name":"Business Website"}
  {"id":"00000000000000000000000000000000","name":"Enterprise Website"}
  {"id":"0feeeeeeeeeeeeeeeeeeeeeeeeeeeeee","name":"Free Website"}
  $
  ```



  Here's some Cloudflare CA examples. Note the need of the zone_id= parameter with the basic **/certificates** call.

  ```bash
  $ cli4 /zones/:example.com | jq -c '.|{"id":.id,"name":.name}'
  {"id":"12345678901234567890123456789012","name":"example.com"}
  $

  $ cli4 zone_id=12345678901234567890123456789012 /certificates | jq -c '.[]|{"id":.id,"expires_on":.expires_on,"hostnames":.hostnames,"certificate":.certificate}'
  {"id":"123456789012345678901234567890123456789012345678","expires_on":"2032-01-29 22:36:00 +0000 UTC","hostnames":["*.example.com","example.com"],"certificate":"-----BEGIN CERTIFICATE-----\n ... "}
  {"id":"123456789012345678901234567890123456789012345678","expires_on":"2032-01-28 23:23:00 +0000 UTC","hostnames":["*.example.com","example.com"],"certificate":"-----BEGIN CERTIFICATE-----\n ... "}
  {"id":"123456789012345678901234567890123456789012345678","expires_on":"2032-01-28 23:20:00 +0000 UTC","hostnames":["*.example.com","example.com"],"certificate":"-----BEGIN CERTIFICATE-----\n ... "}
  $
  ```

  A certificate can be viewed via a simple GET request.
  ```bash
  $ cli4 /certificates/:123456789012345678901234567890123456789012345678
  {
      "certificate": "-----BEGIN CERTIFICATE-----\n ... ",
      "expires_on": "2032-01-29 22:36:00 +0000 UTC",
      "hostnames": [
          "*.example.com",
          "example.com"
      ],
      "id": "123456789012345678901234567890123456789012345678",
      "request_type": "origin-rsa"
  }
  $
  ```

  Creating a certificate. This is done with a **POST** request. Note the use of **==** in order to pass a decimal number (vs. string) in JSON. The CSR is not shown for simplicity sake.
  ```bash
  $ CSR=`cat example.com.csr`
  $ cli4 --post hostnames='["example.com","*.example.com"]' requested_validity==365 request_type="origin-ecc" csr="$CSR" /certificates
  {
      "certificate": "-----BEGIN CERTIFICATE-----\n ... ",
      "csr": "-----BEGIN CERTIFICATE REQUEST-----\n ... ",
      "expires_on": "2018-09-27 21:47:00 +0000 UTC",
      "hostnames": [
          "*.example.com",
          "example.com"
      ],
      "id": "123456789012345678901234567890123456789012345678",
      "request_type": "origin-ecc",
      "requested_validity": 365
  }
  $
  ```

  Deleting a certificate can be done with a **DELETE** call.
  ```bash
  $ cli4 --delete /certificates/:123456789012345678901234567890123456789012345678
  {
      "id": "123456789012345678901234567890123456789012345678",
      "revoked_at": "0000-00-00T00:00:00Z"
  }
  $
  ```



  The **--raw** command provides access to the paging returned values.
  See the API documentation for all the info.
  Here's an example of how to page thru a list of zones (it's included in the examples folder as **example_paging_thru_zones.sh**).

  ```bash
  :
  tmp=/tmp/$$_
  trap "rm ${tmp}; exit 0" 0 1 2 15
  PAGE=0
  while true
  do
          cli4 --raw per_page=5 page=${PAGE} /zones > ${tmp}
          domains=`jq -c '.|.result|.[]|.name' < ${tmp} | tr -d '"'`
          result_info=`jq -c '.|.result_info' < ${tmp}`
          COUNT=`      echo "${result_info}" | jq .count`
          PAGE=`       echo "${result_info}" | jq .page`
          PER_PAGE=`   echo "${result_info}" | jq .per_page`
          TOTAL_COUNT=`echo "${result_info}" | jq .total_count`
          TOTAL_PAGES=`echo "${result_info}" | jq .total_pages`
          echo COUNT=${COUNT} PAGE=${PAGE} PER_PAGE=${PER_PAGE} TOTAL_COUNT=${TOTAL_COUNT} TOTAL_PAGES=${TOTAL_PAGES} -- ${domains}
          if [ "${PAGE}" == "${TOTAL_PAGES}" ]
          then
                  
                  break
          fi
          
          PAGE=`expr ${PAGE} + 1`
  done
  ```

  It produces the following results.

  ```
  COUNT=5 PAGE=1 PER_PAGE=5 TOTAL_COUNT=31 TOTAL_PAGES=7 -- accumsan.example auctor.example consectetur.example dapibus.example elementum.example
  COUNT=5 PAGE=2 PER_PAGE=5 TOTAL_COUNT=31 TOTAL_PAGES=7 -- felis.example iaculis.example ipsum.example justo.example lacus.example
  COUNT=5 PAGE=3 PER_PAGE=5 TOTAL_COUNT=31 TOTAL_PAGES=7 -- lectus.example lobortis.example maximus.example morbi.example pharetra.example
  COUNT=5 PAGE=4 PER_PAGE=5 TOTAL_COUNT=31 TOTAL_PAGES=7 -- porttitor.example potenti.example pretium.example purus.example quisque.example
  COUNT=5 PAGE=5 PER_PAGE=5 TOTAL_COUNT=31 TOTAL_PAGES=7 -- sagittis.example semper.example sollicitudin.example suspendisse.example tortor.example
  COUNT=1 PAGE=7 PER_PAGE=5 TOTAL_COUNT=31 TOTAL_PAGES=7 -- varius.example vehicula.example velit.example velit.example vitae.example
  COUNT=5 PAGE=6 PER_PAGE=5 TOTAL_COUNT=31 TOTAL_PAGES=7 -- vivamus.example
  ```



  Some API calls use cursors to read beyond the initally returned values. See the API page in order to see which API calls do this.

  ```
  $ ACCOUNT_ID="00000000000000000000000000000000"
  $ LIST_ID="00000000000000000000000000000000"
  $
  $ cli4 --raw /accounts/::${ACCOUNT_ID}/rules/lists/::${LIST_ID}/items > /tmp/page1.json
  $ after=`jq -r '.result_info.cursors.after' < /tmp/page1.json`
  $ echo "after=$after"
  after=Mxm4GVmKjYbFjy2VxMPipnJigm1M_s6lCS9ABR9wx-RM2A
  $
  ```

  Once we have the ```after``` value, we can pass it along in order to read the next hunk of values. We finish when ```after``` returns as null (or isn't present).

  ```
  $ cli4 --raw cursor="$after" /accounts/::${ACCOUNT_ID}/rules/lists/::${LIST_ID}/items > /tmp/page2.json
  $ after=`jq -r '.result_info.cursors.after' < /tmp/page2.json`
  $ echo "after=$after"
  after=null
  $
  ```

  We can see the results now in two files.

  ```
  $ jq -c '.result[]' < /tmp/page1.json | wc -l
        25
  $

  $ jq -c '.result[]' < /tmp/page2.json | wc -l
         5
  $

  $ for f in /tmp/page?.json ; do jq -r '.result[]|.id,.ip,.comment' < $f | paste - - - ; done | column -s'   ' -t
  0fe44928258549feb47126a966fbf4a0  0.0.0.0           all zero
  2e1e02120f5e466f8c0e26375e4cf4c8  1.0.0.1           Cloudflare DNS a
  9ca5fd0ac6f54fdbb9dedd3fb72ce2da  1.1.1.1           Cloudflare DNS b
  b3654987446743738c782f36ebe074f5  10.0.0.0/8        RFC1918 space
  90bec8ce37d242faa2e27d1e78c1d8e2  103.21.244.0/22   Cloudflare IP
  970a3c810cda41af9bef2c36a1892f7e  103.22.200.0/22   Cloudflare IP
  3ec8516158bf4f3cac18210f611ee541  103.31.4.0/22     Cloudflare IP
  ee9d268367204e6bb8e5e4c907f22de8  104.16.0.0/12     Cloudflare IP
  93ae02eda9774c45840af367a02fe529  108.162.192.0/18  Cloudflare IP
  62891ebf6db44aa494d79a6401af185e  131.0.72.0/22     Cloudflare IP
  cac40cd940cc470582b8c912a8a12bea  141.101.64.0/18   Cloudflare IP
  f6d5eacd81a2407f8e0d81caee21e7f8  162.158.0.0/15    Cloudflare IP
  3d538dfc38ab471d9d3fe78332acfa4e  172.16.0.0/12     RFC1918 space
  f353cb8f98424837ad35382a22b9debe  172.64.0.0/13     Cloudflare IP
  78f3e1a0bafc41f88d4d40ad49a642e0  173.245.48.0/20   Cloudflare IP
  c23a545475c54c32a7681c6b508d3e80  188.114.96.0/20   Cloudflare IP
  f693237c9e294fe481221cbc2d7c20ef  190.93.240.0/20   Cloudflare IP
  6d465ab3a0994c07827ebdcf8f34d977  192.168.0.0/16    RFC1918 space
  1ad1e634b3664bac939086185c62faf7  197.234.240.0/22  Cloudflare IP
  5d2968e7b3114d8e869a379d71c8ba86  198.41.128.0/17   Cloudflare IP
  6a69de60b31448fa864f0a3ac5abe8d0  224.0.0.0/24      Multicast
  30749cce89af4ab3a80e308294f46a46  240.0.0.0/4       Class E
  2b32c67ea4d044628abe39f28662d8f0  255.255.255.255   all ones
  cc7cd828b2fb4bcfb9391c2d3ef8d068  2400:cb00::/32    Cloudflare IP
  b30d4cbd7dcd48729e8ebeda552e48a8  2405:8100::/32    Cloudflare IP
  49db60758c8344959c338a74afc9748a  2405:b500::/32    Cloudflare IP
  96e9eca1923c40d5a84865145f5a5d6a  2606:4700::/32    Cloudflare IP
  21bc52a26e10405d89b7180ddcf49302  2803:f800::/32    Cloudflare IP
  ff78f842188e4b869eb5389ae9ab8f41  2a06:98c0::/29    Cloudflare IP
  0880cdfc40b14f6fa0639522a728859d  2c0f:f248::/32    Cloudflare IP
  $
  ```

  The ```result_info.cursors``` area also contains a ```before``` value for reverse scrolling.

  As with ```per_page``` scrolling, raw mode is used.



  ```bash
  $ cli4 /zones/:example.com/dnssec | jq -c '{"status":.status}'
  {"status":"disabled"}
  $

  $ cli4 --patch status=active /zones/:example.com/dnssec | jq -c '{"status":.status}'
  {"status":"pending"}
  $

  $ cli4 /zones/:example.com/dnssec
  {
      "algorithm": "13",
      "digest": "41600621c65065b09230ebc9556ced937eb7fd86e31635d0025326ccf09a7194",
      "digest_algorithm": "SHA256",
      "digest_type": "2",
      "ds": "example.com. 3600 IN DS 2371 13 2 41600621c65065b09230ebc9556ced937eb7fd86e31635d0025326ccf09a7194",
      "flags": 257,
      "key_tag": 2371,
      "key_type": "ECDSAP256SHA256",
      "modified_on": "2016-05-01T22:42:15.591158Z",
      "public_key": "mdsswUyr3DPW132mOi8V9xESWE8jTo0dxCjjnopKl+GqJxpVXckHAeF+KkxLbxILfDLUT0rAK9iUzy1L53eKGQ==",
      "status": "pending"
  }
  $
  ```



  Refer to [Import DNS records](https://api.cloudflare.com/#dns-records-for-a-zone-import-dns-records) on API documentation for this feature.

  ```bash
  $ cat zone.txt
  example.com.            IN      SOA     somewhere.example.com. someone.example.com. (
                                  2017010101
                                  3H
                                  15
                                  1w
                                  3h
                          )

  record1.example.com.    IN      A       10.0.0.1
  record2.example.com.    IN      AAAA    2001:d8b::2
  record3.example.com.    IN      CNAME   record1.example.com.
  record4.example.com.    IN      TXT     "some text"
  $

  $ cli4 --post file=@zone.txt /zones/:example.com/dns_records/import
  {
      "recs_added": 4,
      "total_records_parsed": 4
  }
  $
  ```



  Because `import` is a reserved word in Python there needs to be a slight workaround to calling this within code.

  ```
      
      
      
      dns_records_import = getattr(cf.zones.dns_records, 'import')
      r = dns_records_import.post(zone_id, files={'file':fd})
  ```

  See (examples/example_dns_import.py)[examples/example_dns_import.py] for working code.



  The following is documented within the **Advanced** option of the DNS page within the Cloudflare portal.

  ```
  $ cli4 /zones/:example.com/dns_records/export | egrep -v '^;;|^$'
  $ORIGIN .
  @       3600    IN      SOA     example.com.    root.example.com.       (
                  2025552311      ; serial
                  7200            ; refresh
                  3600            ; retry
                  86400           ; expire
                  3600)           ; minimum
  example.com.    300     IN      NS      REPLACE&ME$WITH^YOUR@NAMESERVER.
  record4.example.com.    300     IN      TXT     "some text"
  record3.example.com.    300     IN      CNAME   record1.example.com.
  record1.example.com.    300     IN      A       10.0.0.1
  record2.example.com.    300     IN      AAAA    2001:d8b::2
  $
  ```

  The egrep is used for documentation brevity.

  This can also be done via Python code with the following example.
  ```

  import sys
  import CloudFlare

  def main():
      zone_name = sys.argv[1]
      cf = CloudFlare.CloudFlare()

      zones = cf.zones.get(params={'name': zone_name})
      zone_id = zones[0]['id']

      dns_records = cf.zones.dns_records.export.get(zone_id)
      for l in dns_records.splitlines():
          if len(l) == 0 or l[0] == ';':
              continue
          print(l)
      exit(0)

  if __name__ == '__main__':
      main()
  ```



  Cloudflare Workers are described on the Cloudflare blog at
  [here](https://blog.cloudflare.com/introducing-cloudflare-workers/) and
  [here](https://blog.cloudflare.com/code-everywhere-cloudflare-workers/), with the beta release announced
  [here](https://blog.cloudflare.com/cloudflare-workers-is-now-on-open-beta/).

  The Python libraries now support the Cloudflare Workers API calls. The following javascript is lifted from [https://cloudflareworkers.com/](https://cloudflareworkers.com/) and slightly modified.

  ```
  $ cat modify-body.js
  addEventListener("fetch", event => {
    event.respondWith(fetchAndModify(event.request));
  });

  async function fetchAndModify(request) {
    console.log("got a request:", request);

    // Send the request on to the origin server.
    const response = await fetch(request);

    // Read response body.
    const text = await response.text();

    // Modify it.
    const modified = text.replace(
    "<body>",
    "<body style=\"background: #ff0;\">");

    // Return modified response.
    return new Response(modified, {
      status: response.status,
      statusText: response.statusText,
      headers: response.headers
    });
  }
  $
  ```

  Here's the website with it's simple ```<body>``` statement

  ```
  $ curl -sS https://example.com/ | fgrep '<body'
    <body>
  $
  ```

  Now lets add the script. Looking above, you will see that it's simple action is to modify the ```<body>``` statement and make the background yellow.

  ```
  $ cli4 --put @- /zones/:example.com/workers/script < modify-body.js
  {
      "etag": "1234567890123456789012345678901234567890123456789012345678901234",
      "id": "example-com",
      "modified_on": "2018-02-15T00:00:00.000000Z",
      "script": "addEventListener(\"fetch\", event => {\n  event.respondWith(fetchAndModify(event.request));\n});\n\nasync function fetchAndModify(request) {\n  console.log(\"got a request:\", request);\n\n  // Send the request on to the origin server.\n  const response = await fetch(request);\n\n  // Read response body.\n  const text = await response.text();\n\n  // Modify it.\n  const modified = text.replace(\n  \"<body>\",\n  \"<body style=\\\"background: #ff0;\\\">\");\n\n  // Return modified response.\n  return new Response(modified, {\n    status: response.status,\n    statusText: response.statusText,\n    headers: response.headers\n  });\n}\n",
      "size": 603
  }
  $
  ```

  The following call checks that the script is associated with the zone. In this case, it's the only script added by this user.

  ```
  $ cli4 /user/workers/scripts
  [
      {
          "created_on": "2018-02-15T00:00:00.000000Z",
          "etag": "1234567890123456789012345678901234567890123456789012345678901234",
          "id": "example-com",
          "modified_on": "2018-02-15T00:00:00.000000Z"
      }
  ]
  $
  ```

  Next step is to make sure a route is added for that script on that zone.

  ```
  $ cli4 --post pattern="example.com/*" script="example-com" /zones/:example.com/workers/routes
  {
      "id": "12345678901234567890123456789012"
  }
  $

  $ cli4 /zones/:example.com/workers/routes
  [
      {
          "id": "12345678901234567890123456789012",
          "pattern": "example.com/*",
          "script": "example-com"
      }
  ]
  $
  ```

  With that script added to the zone and the route added, we can now see the website has been modified because of the Cloudflare Worker.

  ```
  $ curl -sS https://example.com/ | fgrep '<body'
    <body style="background: #ff0;">
  $
  ```

  All this can be removed; hence bringing the website back to its initial state.

  ```
  $ cli4 --delete /zones/:example.com/workers/script
  12345678901234567890123456789012
  $ cli4 --delete /zones/:example.com/workers/routes/:12345678901234567890123456789012
  true
  $

  $ curl -sS https://example.com/ | fgrep '<body'
    <body>
  $
  ```

  Refer to the Cloudflare Workers API documentation for more information.




  Please see https://developers.cloudflare.com/logs/instant-logs for all the information on how to use this feature.
  The `cli4` command along with the Python libaries can be used to control the instant logs; however, the websocket reading is outside the scope of this library.

  To query the states of the instant logs:
  ```
  $ cli4 /zones/:example.com/logpush/edge/jobs | jq .
  []
  $
  ```

  To add monitoring:
  ```
  $ cli4 --post \
          ='{
                  "fields": "ClientIP,ClientRequestHost,ClientRequestMethod,ClientRequestURI,EdgeEndTimestamp,EdgeResponseBytes,EdgeResponseStatus,EdgeStartTimestamp,RayID",
                  "sample": 1,
                  "filter": "",
                  "kind": "instant-logs"
          }' \
          /zones/:example.com/logpush/edge/jobs | jq .
  {
    "destination_conf": "wss://logs.cloudflare.com/instant-logs/ws/sessions/00000000000000000000000000000000",
    "fields": "ClientIP,ClientRequestHost,ClientRequestMethod,ClientRequestURI,EdgeEndTimestamp,EdgeResponseBytes,EdgeResponseStatus,EdgeStartTimestamp,RayID",
    "filter": "",
    "kind": "instant-logs",
    "sample": 1,
    "session_id": "00000000000000000000000000000000"
  }
  $
  ```

  To see the results:
  ```
  $ cli4 /zones/:example.com/logpush/edge/jobs | jq .
  [
    {
      "fields": "ClientIP,ClientRequestHost,ClientRequestMethod,ClientRequestURI,EdgeEndTimestamp,EdgeResponseBytes,EdgeResponseStatus,EdgeStartTimestamp,RayID",
      "filter": "",
      "kind": "instant-logs",
      "sample": 1,
      "session_id": "00000000000000000000000000000000"
    }
  ]
  $
  ```



  The GraphQL interface can be accessed via the command line or via Python.

  ```
      query="""
        query {
          viewer {
              zones(filter: {zoneTag: "%s"} ) {
              httpRequests1dGroups(limit:40, filter:{date_lt: "%s", date_gt: "%s"}) {
                sum { countryMap { bytes, requests, clientCountryName } }
                dimensions { date }
              }
            }
          }
        }
      """ % (zone_id, date_before[0:10], date_after[0:10])

      r = cf.graphql.post(data={'query':query})

      httpRequests1dGroups = zone_info = r['data']['viewer']['zones'][0]['httpRequests1dGroups']
  ```

  See the [examples/example_graphql.sh](examples/example_graphql.sh) and [examples/example_graphql.py](examples/example_graphql.py) files for working examples.
  Here is the working example of the shell version:

  ```
  $ examples/example_graphql.sh example.com
  2020-07-14T02:00:00Z    34880
  2020-07-14T03:00:00Z    18953
  2020-07-14T04:00:00Z    28700
  2020-07-14T05:00:00Z    2358
  2020-07-14T06:00:00Z    34905
  2020-07-14T07:00:00Z    779
  2020-07-14T08:00:00Z    35450
  2020-07-14T10:00:00Z    17803
  2020-07-14T11:00:00Z    32678
  2020-07-14T12:00:00Z    19947
  2020-07-14T13:00:00Z    4956
  2020-07-14T14:00:00Z    34585
  2020-07-14T15:00:00Z    3022
  2020-07-14T16:00:00Z    5224
  2020-07-14T18:00:00Z    79482
  2020-07-14T21:00:00Z    10609
  2020-07-14T22:00:00Z    5740
  2020-07-14T23:00:00Z    2545
  2020-07-15T01:00:00Z    10777
  $
  ```

  For more information on how to use GraphQL at Cloudflare, refer to the [Cloudflare GraphQL Analytics API](https://developers.cloudflare.com/analytics/graphql-api).
  It contains a full overview of Cloudflare's GraphQL features and keywords.



  The **--dump** argument to cli4 will produce a list of all the call implemented within the library.

  ```bash
  $ cli4 --dump
  /certificates
  /ips
  /organizations
  ...
  /zones/ssl/analyze
  /zones/ssl/certificate_packs
  /zones/ssl/verification
  $
  ```



  An automatically generated table of commands is provided [here](TABLE-OF-COMMANDS.md).



  Extra API calls can be added via the configuration file
  ```bash
  $ cat ~/.cloudflare/cloudflare.cfg
  [Cloudflare]
  extras =
      /client/v4/command
      /client/v4/command/:command_identifier
      /client/v4/command/:command_identifier/settings
  $
  ```

  While it's easy to call anything within Cloudflare's API, it's not very useful to add items in here as they will simply return API URL errors.
  Technically, this is only useful for internal testing within Cloudflare.



  The following error can be caused by an out of date SSL/TLS library and/or out of date Python.

  ```
  /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.
    SNIMissingWarning
  /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
    InsecurePlatformWarning
  ```

  The solution can be found [here](https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning) and/or [here](http://stackoverflow.com/questions/35144550/how-to-install-cryptography-on-ubuntu).



  As of May/June 2016 the code is now tested against pylint.
  This was required in order to move the codebase into Python 3.x.
  The motivation for this came from [Danielle Madeley (danni)](https://github.com/danni).

  ~~While the codebase has been edited to run on Python 3.x, there's not been enough Python 3.x testing performed.~~
  ~~If you can help in this regard; please contact the maintainers.~~

  As of January 2020 the code is Python3 clean.

  As of January 2020 the code is shipped up to pypi with Python2 support removed.

  As of January 2020 the code is Python3.8 clean. The new `SyntaxWarning` messages (i.e. `SyntaxWarning: "is" with a literal. Did you mean "=="?`) meant minor edits were needed.



  As of October/2022, the code is signed by the maintainers personal email address: `mahtin@mahtin.com` `7EA1 39C4 0C1C 842F 9D41 AAF9 4A34 925D 0517 2859`



  This is based on work by [Felix Wong (gnowxilef)](https://github.com/gnowxilef) found [here](https://github.com/cloudflare-api/python-cloudflare-v4).
  It has been seriously expanded upon.



  An automatically generated CHANGELOG is provided [here](CHANGELOG.md).



  Portions copyright [Felix Wong (gnowxilef)](https://github.com/gnowxilef) 2015 and Cloudflare 2016 & 2022.


pkgId: 42443f31655e0d01d7c6a8a34de6959ba3f86982c17e154ce2d0d0c3ec35395b
name: python-cloudformation-cli
arch: src
version: 0.2.28
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/aws-cloudformation/aws-cloudformation-rpdk/
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ea64714f-8721-445d-88da-8e9eb38cf552
location_href: 00010127-python-cloudformation-cli/python-cloudformation-cli-0.2.28-1.src.rpm
checksum_type: sha256
description:
  [![CloudFormation CLI](https://github.com/aws-cloudformation/cloudformation-cli/actions/workflows/pr-ci.yaml/badge.svg?branch=master)](https://github.com/aws-cloudformation/cloudformation-cli/actions/workflows/pr-ci.yaml)



  The CloudFormation CLI (cfn) allows you to author your own resource providers, hooks, and modules that can be used by CloudFormation.





  Primary documentation for the CloudFormation CLI can be found at the [AWS Documentation](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html) site.



  This tool can be installed using [pip](https://pypi.org/project/pip/) from the Python Package Index (PyPI). It requires Python 3. For resource and hook types, the tool requires at least one language plugin. Language plugins are not needed to create a module type. The language plugins are also available on PyPI and as such can be installed all at once:

  ```bash
  pip install cloudformation-cli cloudformation-cli-java-plugin cloudformation-cli-go-plugin cloudformation-cli-python-plugin cloudformation-cli-typescript-plugin
  ```




  To create a project in the current directory, use the `init` command. A wizard will guide you through the creation.

  ```bash
  cfn init
  ```



  To refresh auto-generated code, use the `generate` command. Usually, plugins try to integrate this command in the native build flow, so please consult a plugin's README to see if this is necessary.
  In a module project, this will regenerate the module schema.

  ```bash
  cfn generate
  ```



  To register a resource provider, module, or hook in your account, use the `submit` command.

  ```bash
  cfn submit
  cfn submit --dry-run #prepares schema handler package without submitting for registration
  cfn submit --set-default # if successfully registered, set submitted version to be the new default version
  ```



  To run the contract tests for a resource type, use the `test` command.

  ```bash
  cfn test
  cfn test -- -k contract_delete_update # to run a single test
  cfn test -- --tb=long # exhaustive, informative traceback formatting
  cfn test --enforce-timeout 60  # Read/List handler timeout (Create/Update/Delete handler timeout is twice the Read/List handler timeout)
  cfn test --enforce-timeout 60 -- -k contract_delete_update # combine arguments
  cfn test --log-group-name cw_log_group --log-role-arn log_delivery_role_arn # Handler logs generated by contract tests will be delivered to the specified cw_log_group using the credentials from log_delivery_role_arn
  ```

  Note: To use your type configuration in contract tests, you will need to save your type configuration json file in `~/.cfn-cli/typeConfiguration.json`.



  To validate the schema, use the `validate` command.

  This command is automatically run whenever one attempts to submit a resource, module, or hook. Errors will prevent you from submitting your resource/module. Module fragments will additionally be validated via [`cfn-lint`](https://github.com/aws-cloudformation/cfn-python-lint/) (but resulting warnings will not cause this step to fail).

  ```bash
  cfn validate
  ```



  To build an image for a resource type. This image provides a minimalistic execution environment for the resource handler that does not depend on AWS Lambda in anyway. This image can be used during cfn invoke and cfn test instead of using sam cli.

  ```bash
  cfn build-image
  cfn build-image --image-name my-handler --executable target/myjar.jar
  ```

  The resulting image can be run in a container by executing the following command:

  ```
  docker run IMAGE_NAME HANDLER_ENTRYPOINT PAYLOAD
  docker run my-test-resource com.my.test.resource.ExecutableHandlerWrapper PAYLOAD_JSON # Example for a java based-project
  ```




  For developing, it's strongly suggested to install the development dependencies inside a virtual environment. (This isn't required if you just want to use this tool.)

  ```bash
  python3 -m venv env
  source env/bin/activate
  pip install -e . -r requirements.txt
  pre-commit install
  ```

  If you're creating a resource or hook type, you will also need to install a language plugin, such as [the Java language plugin](https://github.com/aws-cloudformation/cloudformation-cli-java-plugin), also via `pip install`. For example, assuming the plugin is checked out in the same parent directory as this repository:

  ```bash
  pip install -e ../cloudformation-cli-java-plugin
  ```

  ```bash

  pre-commit run --all-files

  pre-commit run pytest-local
  ```

  If you want to generate an HTML coverage report afterwards, run `coverage html`. The report is output to `htmlcov/index.html`.



  New language plugins can be independently developed. As long as they declare the appropriate entry point and are installed in the same environment, they can even be completely separate codebases. For example, a plugin for Groovy might have the following entry point:

  ```python
  entry_points={
      "rpdk.v1.languages": ["groovy = rpdk.groovy:GroovyLanguagePlugin"],
  },
  ```

  Plugins must provide the same interface as `LanguagePlugin` (in `plugin_base.py`). And they may inherit from `LanguagePlugin` for the helper methods - but this is not necessary. As long as the class has the same methods, it will work as a plugin.




  | Language | Status            | Github                                                                                                      | PyPI                                                                                       |
  | -------- | ----------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
  | Java      | Available         | [cloudformation-cli-java-plugin](https://github.com/aws-cloudformation/cloudformation-cli-java-plugin/)     | [cloudformation-cli-java-plugin](https://pypi.org/project/cloudformation-cli-java-plugin/)     |
  | Go        | Available         | [cloudformation-cli-go-plugin](https://github.com/aws-cloudformation/cloudformation-cli-go-plugin/)         | [cloudformation-cli-go-plugin](https://pypi.org/project/cloudformation-cli-go-plugin/)         |
  | Python    | Available         | [cloudformation-cli-python-plugin](https://github.com/aws-cloudformation/cloudformation-cli-python-plugin/) | [cloudformation-cli-python-plugin](https://pypi.org/project/cloudformation-cli-python-plugin/) |
  | TypeScript| Available         | [cloudformation-cli-typescript-plugin](https://github.com/aws-cloudformation/cloudformation-cli-typescript-plugin/) | [cloudformation-cli-typescript-plugin](https://pypi.org/project/cloudformation-cli-typescript-plugin/) |


  | Language | Status            | Github                                                                                                      | PyPI                                                                                       |
  | -------- | ----------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
  | Java      | Available         | [cloudformation-cli-java-plugin](https://github.com/aws-cloudformation/cloudformation-cli-java-plugin/)     | [cloudformation-cli-java-plugin](https://pypi.org/project/cloudformation-cli-java-plugin/)     |
  | Python    | Available         | [cloudformation-cli-python-plugin](https://github.com/aws-cloudformation/cloudformation-cli-python-plugin/) | [cloudformation-cli-python-plugin](https://pypi.org/project/cloudformation-cli-python-plugin/) |



  This library is licensed under the Apache 2.0 License.


pkgId: 54d7134abf183da2ede4262b4d3d4a4060b1a2b7bef6bfc5a48ad682a16f3ef4
name: python-cloudformation-cli-go-plugin
arch: src
version: 2.0.4
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/aws-cloudformation/cloudformation-cli-go-plugin/
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c4364d16-8fc9-48f8-b8c0-fc2d9e980791
location_href: 00010144-python-cloudformation-cli-go-plugin/python-cloudformation-cli-go-plugin-2.0.4-1.src.rpm
checksum_type: sha256
description:
  If you are using this package to build resource providers for CloudFormation, install the [CloudFormation CLI Go Plugin](https://github.com/aws-cloudformation/cloudformation-cli-go-plugin) - this will automatically install the the [CloudFormation CLI](https://github.com/aws-cloudformation/cloudformation-cli)! A Python virtual environment is recommended.
  ```bash
  pip3 install cloudformation-cli-go-plugin
  ```
  Refer to the documentation for the [CloudFormation CLI](https://github.com/aws-cloudformation/cloudformation-cli) for usage instructions.


pkgId: 425dcfd55ee2237b13ac715b620f70880a3eb2520b2923a52ede61d6e2e3eab6
name: python-cloudformation-cli-go-plugin-help
arch: noarch
version: 2.0.4
epoch: 0
release: 1
summary: Development documents and examples for cloudformation-cli-go-plugin
url: https://github.com/aws-cloudformation/cloudformation-cli-go-plugin/
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-c4364d16-8fc9-48f8-b8c0-fc2d9e980791
rpm_sourcerpm: python-cloudformation-cli-go-plugin-2.0.4-1.src.rpm
checksum_type: sha256
description:
  If you are using this package to build resource providers for CloudFormation, install the [CloudFormation CLI Go Plugin](https://github.com/aws-cloudformation/cloudformation-cli-go-plugin) - this will automatically install the the [CloudFormation CLI](https://github.com/aws-cloudformation/cloudformation-cli)! A Python virtual environment is recommended.
  ```bash
  pip3 install cloudformation-cli-go-plugin
  ```
  Refer to the documentation for the [CloudFormation CLI](https://github.com/aws-cloudformation/cloudformation-cli) for usage instructions.

location_href:
  00010144-python-cloudformation-cli-go-plugin/python-cloudformation-cli-go-plugin-help-2.0.4-1.noarch.rpm


pkgId: 7b9619cebbe4e70c871fde01daded7dd9e1b0a29da6702e86638061dd58d8989
name: python-cloudformation-cli-typescript-plugin
arch: src
version: 1.0.2
epoch: 0
release: 1
summary: Typescript language support for the CloudFormation CLI
url: https://github.com/aws-cloudformation/cloudformation-cli-typescript-plugin
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f0afec6b-20ba-4c72-9f1d-b3565160e550
checksum_type: sha256
description:
  If you are using this package to build resource providers for CloudFormation, install the [CloudFormation CLI TypeScript Plugin](https://github.com/aws-cloudformation/cloudformation-cli-typescript-plugin) - this will automatically install the [CloudFormation CLI](https://github.com/aws-cloudformation/cloudformation-cli)! A Python virtual environment is recommended.
  **Prerequisites**
  - Python version 3.6 or above
  - [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)
  - Your choice of TypeScript IDE
  **Installation**
  ```shell
  pip3 install cloudformation-cli-typescript-plugin
  ```
  Refer to the [CloudFormation CLI User Guide](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-types.html) for the [CloudFormation CLI](https://github.com/aws-cloudformation/cloudformation-cli) for usage instructions.
  **Howto**
  Example run:
  ```
  $ cfn init
  Initializing new project
  What's the name of your resource type?
  (Organization::Service::Resource)
  >> Foo::Bar::Baz
  Select a language for code generation:
  [1] java
  [2] typescript
  (enter an integer):
  >> 2
  Use docker for platform-independent packaging (Y/n)?
  This is highly recommended unless you are experienced
  with cross-platform Typescript packaging.
  >> y
  Initialized a new project in <>
  $ cfn submit --dry-run
  $ sam local invoke --event sam-tests/create.json TestEntrypoint
  ```

location_href:
  00010147-python-cloudformation-cli-typescript-plugin/python-cloudformation-cli-typescript-plugin-1.0.2-1.src.rpm


pkgId: 757714f9299fb1f90932b1f12bfca049a607aefe4d483a2b17467a37ccd7d197
name: python-cloudformation-cli-typescript-plugin-help
arch: noarch
version: 1.0.2
epoch: 0
release: 1
summary: Development documents and examples for cloudformation-cli-typescript-plugin
url: https://github.com/aws-cloudformation/cloudformation-cli-typescript-plugin
rpm_license: Apache License 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-f0afec6b-20ba-4c72-9f1d-b3565160e550
rpm_sourcerpm: python-cloudformation-cli-typescript-plugin-1.0.2-1.src.rpm
checksum_type: sha256
description:
  If you are using this package to build resource providers for CloudFormation, install the [CloudFormation CLI TypeScript Plugin](https://github.com/aws-cloudformation/cloudformation-cli-typescript-plugin) - this will automatically install the [CloudFormation CLI](https://github.com/aws-cloudformation/cloudformation-cli)! A Python virtual environment is recommended.
  **Prerequisites**
  - Python version 3.6 or above
  - [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)
  - Your choice of TypeScript IDE
  **Installation**
  ```shell
  pip3 install cloudformation-cli-typescript-plugin
  ```
  Refer to the [CloudFormation CLI User Guide](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-types.html) for the [CloudFormation CLI](https://github.com/aws-cloudformation/cloudformation-cli) for usage instructions.
  **Howto**
  Example run:
  ```
  $ cfn init
  Initializing new project
  What's the name of your resource type?
  (Organization::Service::Resource)
  >> Foo::Bar::Baz
  Select a language for code generation:
  [1] java
  [2] typescript
  (enter an integer):
  >> 2
  Use docker for platform-independent packaging (Y/n)?
  This is highly recommended unless you are experienced
  with cross-platform Typescript packaging.
  >> y
  Initialized a new project in <>
  $ cfn submit --dry-run
  $ sam local invoke --event sam-tests/create.json TestEntrypoint
  ```

location_href:
  00010147-python-cloudformation-cli-typescript-plugin/python-cloudformation-cli-typescript-plugin-help-1.0.2-1.noarch.rpm


pkgId: fc6880278220e3b3fc0ead9895fd722bf68413a553493e458cbed1f27c1ad39b
name: python-cloudinary
arch: src
version: 1.32.0
epoch: 0
release: 1
summary: Python and Django SDK for Cloudinary
url: https://cloudinary.com
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-80a07403-8418-4fe9-a427-3f6a7b9a42b6
location_href: 00010947-python-cloudinary/python-cloudinary-1.32.0-1.src.rpm
checksum_type: sha256
description:
  The Cloudinary Python SDK allows you to quickly and easily integrate your application with Cloudinary.
  Effortlessly optimize, transform, upload and manage your cloud's assets.

  This Readme provides basic installation and usage information.
  For the complete documentation, see the [Python SDK Guide](https://cloudinary.com/documentation/django_integration).

  - [Key Features](#key-features)
  - [Version Support](#Version-Support)
  - [Installation](#installation)
  - [Usage](#usage)
      - [Setup](#Setup)
      - [Transform and Optimize Assets](#Transform-and-Optimize-Assets)
      - [Django](#Django)

  - [Transform](https://cloudinary.com/documentation/django_video_manipulation#video_transformation_examples) and
    [optimize](https://cloudinary.com/documentation/django_image_manipulation#image_optimizations) assets.
  - Generate [image](https://cloudinary.com/documentation/django_image_manipulation#deliver_and_transform_images) and
    [video](https://cloudinary.com/documentation/django_video_manipulation#django_video_transformation_code_examples) tags.
  - [Asset Management](https://cloudinary.com/documentation/django_asset_administration).
  - [Secure URLs](https://cloudinary.com/documentation/video_manipulation_and_delivery#generating_secure_https_urls_using_sdks).

  | SDK Version | Python 2.7 | Python 3.x |
  |-------------|------------|------------|
  | 1.x         | v          | v          |
  | SDK Version | Django 1.11 | Django 2.x | Django 3.x | Django 4.x |
  |-------------|-------------|------------|------------|------------|
  | 1.x         | v           | v          | v          | v          |

  ```bash
  pip install cloudinary
  ```


  ```python
  import cloudinary
  ```

  - [See full documentation](https://cloudinary.com/documentation/django_image_manipulation).
  ```python
  cloudinary.utils.cloudinary_url("sample.jpg", width=100, height=150, crop="fill")
  ```

  - [See full documentation](https://cloudinary.com/documentation/django_image_and_video_upload).
  - [Learn more about configuring your uploads with upload presets](https://cloudinary.com/documentation/upload_presets).
  ```python
  cloudinary.uploader.upload("my_picture.jpg")
  ```

  - [See full documentation](https://cloudinary.com/documentation/django_image_and_video_upload#django_forms_and_models).

  - [See full documentation](https://cloudinary.com/documentation/solution_overview#security).

  - [Sample projects](https://github.com/cloudinary/pycloudinary/tree/master/samples).
  - [Django Photo Album](https://github.com/cloudinary/cloudinary-django-sample).

  - Ensure tests run locally.
  - Open a PR and ensure Travis tests pass.
  - See [CONTRIBUTING](CONTRIBUTING.md).

  If you run into an issue or have a question, you can either:
  - Issues related to the SDK: [Open a GitHub issue](https://github.com/cloudinary/pycloudinary/issues).
  - Issues related to your account: [Open a support ticket](https://cloudinary.com/contact).

  Cloudinary is a powerful media API for websites and mobile apps alike, Cloudinary enables developers to efficiently
  manage, transform, optimize, and deliver images and videos through multiple CDNs. Ultimately, viewers enjoy responsive
  and personalized visual-media experiences—irrespective of the viewing device.

  - [Cloudinary Transformation and REST API References](https://cloudinary.com/documentation/cloudinary_references): Comprehensive references, including syntax and examples for all SDKs.
  - [MediaJams.dev](https://mediajams.dev/): Bite-size use-case tutorials written by and for Cloudinary Developers
  - [DevJams](https://www.youtube.com/playlist?list=PL8dVGjLA2oMr09amgERARsZyrOz_sPvqw): Cloudinary developer podcasts on YouTube.
  - [Cloudinary Academy](https://training.cloudinary.com/): Free self-paced courses, instructor-led virtual courses, and on-site courses.
  - [Code Explorers and Feature Demos](https://cloudinary.com/documentation/code_explorers_demos_index): A one-stop shop for all code explorers, Postman collections, and feature demos found in the docs.
  - [Cloudinary Roadmap](https://cloudinary.com/roadmap): Your chance to follow, vote, or suggest what Cloudinary should develop next.
  - [Cloudinary Facebook Community](https://www.facebook.com/groups/CloudinaryCommunity): Learn from and offer help to other Cloudinary developers.
  - [Cloudinary Account Registration](https://cloudinary.com/users/register/free): Free Cloudinary account registration.
  - [Cloudinary Website](https://cloudinary.com): Learn about Cloudinary's products, partners, customers, pricing, and more.

  Released under the MIT license.


pkgId: c7cc698fd47d3b29fd85e9d85202f0c04d01114c01a6469ee311cca75ac796c5
name: python-cloudpathlib
arch: src
version: 0.13.0
epoch: 0
release: 1
summary: pathlib-style classes for cloud storage services
url: https://github.com/drivendataorg/cloudpathlib
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-42183646-331b-4b36-b57b-1ad31bacc2ac
location_href: 00013226-python-cloudpathlib/python-cloudpathlib-0.13.0-1.src.rpm
checksum_type: sha256
description:
  <sup>Icon made by <a href="https://www.flaticon.com/authors/srip" title="srip">srip</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a>.</sup>
  <br /><sup>Sample code block generated using the [reprexpy package](https://github.com/crew102/reprexpy).</sup>


pkgId: 7ee760f05be823b0c7e4f34fa448549a2e1026afd385586ec5b753d76e2cfe00
name: python-cloudpickle
arch: src
version: 2.2.1
epoch: 0
release: 1
summary: Extended pickling support for Python objects
url: https://github.com/cloudpipe/cloudpickle
rpm_license: BSD 3-Clause License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1d0a8f87-70f4-4ab0-8224-ef2a9504cbda
location_href: 00008980-python-cloudpickle/python-cloudpickle-2.2.1-1.src.rpm
checksum_type: sha256
description:
  The latest release of `cloudpickle` is available from
  [pypi](https://pypi.python.org/pypi/cloudpickle):
      pip install cloudpickle


pkgId: 6525fd1b1fa7f274f22db07c3c4508398d0242cc2380cb29e21d4a41a46e783b
name: python-cloudscraper
arch: src
version: 1.2.69
epoch: 0
release: 1
summary: A Python module to bypass Cloudflare's anti-bot page.
url: https://github.com/venomous/cloudscraper
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-b3bb544e-98f8-4c7f-bf83-ab9a7d16a2c0
location_href: 00003255-python-cloudscraper/python-cloudscraper-1.2.69-1.src.rpm
checksum_type: sha256
description:
  [Brotli](https://en.wikipedia.org/wiki/Brotli) decompression support has been added, and it is enabled by default.

  |Parameter|Value|Default|
  |-------------|:-------------:|:-----:|
  |allow_brotli|(boolean)|True|

  ```python
  scraper = cloudscraper.create_scraper(allow_brotli=False)


pkgId: 98c1247c488ed166a64272733ed60296094dac57bbd4b5a24a783b6831d70133
name: python-cloudsplaining
arch: src
version: 0.5.1
epoch: 0
release: 1
url: https://github.com/salesforce/cloudsplaining
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-9f0b1aa6-2a90-491f-9778-264267c3f493
location_href: 00011458-python-cloudsplaining/python-cloudsplaining-0.5.1-1.src.rpm
checksum_type: sha256
summary:
  AWS IAM Security Assessment tool that identifies violations of least privilege and generates a risk-prioritized HTML report.

description:
  Cloudsplaining is an AWS IAM Security Assessment tool that identifies violations of least privilege and generates a risk-prioritized HTML report.
  [![Tests](https://github.com/salesforce/cloudsplaining/workflows/Test/badge.svg)](https://github.com/salesforce/cloudsplaining/actions?query=workflow%3ATest)
  [![Documentation Status](https://readthedocs.org/projects/cloudsplaining/badge/?version=latest)](https://cloudsplaining.readthedocs.io/en/latest/?badge=latest)
  [![Join the chat at https://gitter.im/cloudsplaining](https://badges.gitter.im/cloudsplaining.svg)](https://gitter.im/cloudsplaining?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
  [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/kmcquade3.svg?style=social&label=Follow%20the%20author)](https://twitter.com/kmcquade3)
  [![Downloads](https://pepy.tech/badge/cloudsplaining)](https://pepy.tech/project/cloudsplaining)
  * [Example report](https://opensource.salesforce.com/cloudsplaining/)
  > ![](https://github.com/salesforce/cloudsplaining/raw/master/docs/_images/cloudsplaining-report.gif)

  For full documentation, please visit the [project on ReadTheDocs](https://cloudsplaining.readthedocs.io/en/latest/).
  * [Installation](#installation)
  * [Cheatsheet](#cheatsheet)
  * [Example report](https://opensource.salesforce.com/cloudsplaining/)

  Cloudsplaining identifies violations of least privilege in AWS IAM policies and generates a pretty HTML report with a triage worksheet. It can scan all the policies in your AWS account or it can scan a single policy file.
  It helps to identify IAM actions that do not leverage resource constraints. It also helps prioritize the remediation process by flagging IAM policies that present the following risks to the AWS account in question without restriction:
  * Data Exfiltration (`s3:GetObject`, `ssm:GetParameter`, `secretsmanager:GetSecretValue`)
  * Infrastructure Modification
  * Resource Exposure (the ability to modify resource-based policies)
  * Privilege Escalation (based on Rhino Security Labs research)
  Cloudsplaining also identifies IAM Roles that can be assumed by AWS Compute Services (such as EC2, ECS, EKS, or Lambda), as they can present greater risk than user-defined roles - especially if the AWS Compute service is on an instance that is directly or indirectly exposed to the internet. Flagging these roles is particularly useful to penetration testers (or attackers) under certain scenarios. For example, if an attacker obtains privileges to execute [ssm:SendCommand](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendCommand.html) and there are privileged EC2 instances with the SSM agent installed, they can effectively have the privileges of those EC2 instances. Remote Code Execution via AWS Systems Manager Agent was already a known escalation/exploitation path, but Cloudsplaining can make the process of identifying theses cases easier. See the [sample report](https://opensource.salesforce.com/cloudsplaining/#executive-summary) for some examples.
  You can also specify a custom exclusions file to filter out results that are False Positives for various reasons. For example, User Policies are permissive by design, whereas System roles are generally more restrictive. You might also have exclusions that are specific to your organization's multi-account strategy or AWS application architecture.

  [Policy Sentry](https://engineering.salesforce.com/salesforce-cloud-security-automating-least-privilege-in-aws-iam-with-policy-sentry-b04fe457b8dc) revealed to us that it is possible to finally write IAM policies according to least privilege in a scalable manner. Before Policy Sentry was released, it was too easy to find IAM policy documents that lacked resource constraints. Consider the policy below, which allows the IAM principal (a role or user) to run `s3:PutObject` on any S3 bucket in the AWS account:
  ```json
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "s3:PutObject"
        ],
        "Resource": "*"
      }
    ]
  }
  ```
  This is bad. Ideally, access should be restricted according to resource ARNs, like so:
  ```json
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "s3:GetObject"
        ],
        "Resource": "arn:aws:s3:::my-bucket/*"
      }
    ]
  }
  ```
  Policy Sentry [makes it really easy to do this](https://github.com/salesforce/policy_sentry/#policy-sentry). Once Infrastructure as Code developers or AWS Administrators gain familiarity with the tool (which is quite easy to use), we've found that adoption starts very quickly. **However**, if you've been using AWS, there is probably a very large backlog of IAM policies that could use an uplift. If you have hundreds of AWS accounts with dozens of policies in each, how can we lock down those AWS accounts by programmatically identifying the policies that should be fixed?
  That's why we wrote Cloudsplaining.
  Cloudsplaining identifies violations of least privilege in AWS IAM policies and generates a pretty HTML report with a triage worksheet. It can scan all the policies in your AWS account or it can scan a single policy file.


  ```bash
  brew tap salesforce/cloudsplaining https://github.com/salesforce/cloudsplaining
  brew install cloudsplaining
  ```

  ```bash
  pip3 install --user cloudsplaining
  ```
  * Now you should be able to execute `cloudsplaining` from command line by running `cloudsplaining --help`.

  To enable Bash completion, put this in your `.bashrc`:
  ```bash
  eval "$(_CLOUDSPLAINING_COMPLETE=source cloudsplaining)"
  ```
  To enable ZSH completion, put this in your .zshrc:
  ```bash
  eval "$(_CLOUDSPLAINING_COMPLETE=source_zsh cloudsplaining)"
  ```

  You can also scan a single policy file to identify risks instead of an entire account.
  ```bash
  cloudsplaining scan-policy-file --input-file examples/policies/explicit-actions.json
  ```
  The output will include a finding description and a list of the IAM actions that do not leverage resource constraints.
  The output will resemble the following:
  ```console
  Issue found: Data Exfiltration
  Actions: s3:GetObject
  Issue found: Resource Exposure
  Actions: ecr:DeleteRepositoryPolicy, ecr:SetRepositoryPolicy, s3:BypassGovernanceRetention, s3:DeleteAccessPointPolicy, s3:DeleteBucketPolicy, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccessPointPolicy, s3:PutAccountPublicAccessBlock, s3:PutBucketAcl, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutObjectAcl, s3:PutObjectVersionAcl
  Issue found: Unrestricted Infrastructure Modification
  Actions: ecr:BatchDeleteImage, ecr:CompleteLayerUpload, ecr:CreateRepository, ecr:DeleteLifecyclePolicy, ecr:DeleteRepository, ecr:DeleteRepositoryPolicy, ecr:InitiateLayerUpload, ecr:PutImage, ecr:PutImageScanningConfiguration, ecr:PutImageTagMutability, ecr:PutLifecyclePolicy, ecr:SetRepositoryPolicy, ecr:StartImageScan, ecr:StartLifecyclePolicyPreview, ecr:TagResource, ecr:UntagResource, ecr:UploadLayerPart, s3:AbortMultipartUpload, s3:BypassGovernanceRetention, s3:CreateAccessPoint, s3:CreateBucket, s3:DeleteAccessPoint, s3:DeleteAccessPointPolicy, s3:DeleteBucket, s3:DeleteBucketPolicy, s3:DeleteBucketWebsite, s3:DeleteObject, s3:DeleteObjectTagging, s3:DeleteObjectVersion, s3:DeleteObjectVersionTagging, s3:GetObject, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccelerateConfiguration, s3:PutAccessPointPolicy, s3:PutAnalyticsConfiguration, s3:PutBucketAcl, s3:PutBucketCORS, s3:PutBucketLogging, s3:PutBucketNotification, s3:PutBucketObjectLockConfiguration, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutBucketRequestPayment, s3:PutBucketTagging, s3:PutBucketVersioning, s3:PutBucketWebsite, s3:PutEncryptionConfiguration, s3:PutInventoryConfiguration, s3:PutLifecycleConfiguration, s3:PutMetricsConfiguration, s3:PutObject, s3:PutObjectAcl, s3:PutObjectLegalHold, s3:PutObjectRetention, s3:PutObjectTagging, s3:PutObjectVersionAcl, s3:PutObjectVersionTagging, s3:PutReplicationConfiguration, s3:ReplicateDelete, s3:ReplicateObject, s3:ReplicateTags, s3:RestoreObject, s3:UpdateJobPriority, s3:UpdateJobStatus
  ```


  We can scan an entire AWS account and generate reports. To do this, we leverage the AWS IAM [get-account-authorization-details](https://docs.aws.amazon.com/cli/latest/reference/iam/get-account-authorization-details.html) API call, which downloads a large JSON file (around 100KB per account) that contains all of the IAM details for the account. This includes data on users, groups, roles, customer-managed policies, and AWS-managed policies.
  * You must have AWS credentials configured that can be used by the CLI.
  * You must have the privileges to run [iam:GetAccountAuthorizationDetails](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html). The `arn:aws:iam::aws:policy/SecurityAudit` policy includes this, as do many others that allow Read access to the IAM Service.
  * To download the account authorization details, ensure you are authenticated to AWS, then run `cloudsplaining`'s `download` command:
  ```bash
  cloudsplaining download
  ```
  * If you prefer to use your `~/.aws/credentials` file instead of environment variables, you can specify the profile name:
  ```bash
  cloudsplaining download --profile myprofile
  ```
  It will download a JSON file in your current directory that contains your account authorization detail information.

  Cloudsplaining tool does not attempt to understand the context behind everything in your AWS account. It's possible to understand the context behind some of these things programmatically - whether the policy is applied to an instance profile, whether the policy is attached, whether inline IAM policies are in use, and whether or not AWS Managed Policies are in use. **Only you know the context behind the design of your AWS infrastructure and the IAM strategy**.
  As such, it's important to eliminate False Positives that are context-dependent. You can do this with an exclusions file. We've included a command that will generate an exclusions file for you so you don't have to remember the required format.
  You can create an exclusions template via the following command:
  ```bash
  cloudsplaining create-exclusions-file
  ```
  This will generate a file in your current directory titled `exclusions.yml`.
  Now when you run the `scan` command, you can use the exclusions file like this:
  ```bash
  cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
  ```
  For more information on the structure of the exclusions file, see [Filtering False Positives](#filtering-false-positives)

  Now that we've downloaded the account authorization file, we can scan *all* of the AWS IAM policies with `cloudsplaining`.
  Run the following command:
  ```bash
  cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
  ```
  It will create an HTML report like [this](https://opensource.salesforce.com/cloudsplaining/):
  > ![](docs/_images/cloudsplaining-report.gif)
  It will also create a raw JSON data file:
  * `default-iam-results.json`: This contains the raw JSON output of the report. You can use this data file for operating on the scan results for various purposes. For example, you could write a Python script that parses this data and opens up automated JIRA issues or Salesforce Work Items. An example entry is shown below. The full example can be viewed at [examples/files/iam-results-example.json](examples/files/iam-results-example.json)
  ```json
  {
      "example-authz-details": [
          {
              "AccountID": "012345678901",
              "ManagedBy": "Customer",
              "PolicyName": "InsecureUserPolicy",
              "Arn": "arn:aws:iam::012345678901:user/userwithlotsofpermissions",
              "ActionsCount": 2,
              "ServicesCount": 1,
              "Actions": [
                  "s3:PutObject",
                  "s3:PutObjectAcl"
              ],
              "Services": [
                  "s3"
              ]
          }
      ]
  }
  ```
  See the [examples/files](examples/files) folder for sample output.

  Resource constraints are best practice - especially for system roles/instance profiles - but sometimes, these are by design. For example, consider a situation where a custom IAM policy is used on an instance profile for an EC2 instance that provisions Terraform. *In this case, broad permissions are design requirements* - so we don't want to include these in the results.
  You can create an exclusions template via the following command:
  ```bash
  cloudsplaining create-exclusions-file
  ```
  This will generate a file in your current directory titled `exclusions.yml`.
  The default exclusions file looks like this:
  ```yaml


  policies:
    - "AWSServiceRoleFor*"
    - "*ServiceRolePolicy"
    - "*ServiceLinkedRolePolicy"
    - "AdministratorAccess" # Otherwise, this will take a long time
    - "service-role*"
    - "aws-service-role*"

  roles:
    - "service-role*"
    - "aws-service-role*"
  users:
    - ""
  groups:
    - ""


  include-actions:
    - "s3:GetObject"
    - "ssm:GetParameter"
    - "ssm:GetParameters"
    - "ssm:GetParametersByPath"
    - "secretsmanager:GetSecretValue"

  exclude-actions:
    - ""
  ```
  * Make any additions or modifications that you want.
    * Under `policies`, list the path of policy names that you want to exclude.
    * If you want to exclude a role titled `MyRole`, list `MyRole` or `MyR*` in the `roles` list.
    * You can follow the same approach for `users` and `groups` list.
  Now when you run the `scan` command, you can use the exclusions file like this:
  ```bash
  cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
  ```

  If your IAM user or IAM role has `sts:AssumeRole` permissions to a common IAM role across multiple AWS accounts, you can use the `scan-multi-account` command.
  This diagram depicts how the process works:
  ![Diagram for scanning multiple AWS accounts with Cloudsplaining](docs/_images/scan-multiple-accounts.png)
  > Note: If you are new to setting up cross-account access, check out [the official AWS Tutorial on Delegating access across AWS accounts using IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html). That can help you set up the architecture above.
  * First, you'll need to create the multi-account config file. Run the following command:
  ```bash
  cloudsplaining create-multi-account-config-file \
      -o multi-account-config.yml
  ```
  * This will generate a file called `multi-account-config.yml` with the following contents:
  ```yaml
  accounts:
    default_account: 123456789012
    prod: 123456789013
    test: 123456789014
  ```
  > Note: Observe how the format of the file above includes `account_name: accountID`. Edit the file contents to match your desired account name and account ID. Include as many account IDs as you like.
  For the next step, let's say that:
   * We have a role in the target accounts that is called `CommonSecurityRole`.
  * The credentials for your IAM user are under the AWS Credentials profile called `scanning-user`.
  * That user has `sts:AssumeRole` permissions to assume the `CommonSecurityRole` in all your target accounts specified in the YAML file we created previously.
  * You want to save the output to an S3 bucket called `my-results-bucket`
  Using the data above, you can run the following command:
  ```bash
  cloudsplaining scan-multi-account \
      -c multi-account-config.yml \
      --profile scanning-user \
      --role-name CommonSecurityRole \
      --output-bucket my-results-bucket
  ```
  > Note that if you run the above without the `--profile` flag, it will execute in the standard [AWS Credentials order of precedence](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default) (i.e., Environment variables, credentials profiles, ECS container credentials, then finally EC2 Instance Profile credentials).

  ```bash

  cloudsplaining download

  cloudsplaining download --profile someprofile

  cloudsplaining scan --input-file default.json

  cloudsplaining scan --input-file default.json --exclusions-file exclusions.yml

  cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json
  cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json  --exclusions-file examples/example-exclusions.yml


  cloudsplaining create-multi-account-config-file -o accounts.yml
  cloudsplaining scan-multi-account -c accounts.yml -r TargetRole --output-directory ./
  ```

  **Will it scan all policies by default?**
  No, it will only scan policies that are attached to IAM principals.
  **Will the download command download all policy versions?**
  Not by default. If you want to do this, specify the `--include-non-default-policy-versions` flag. Note that the `scan` tool does not currently operate on non-default versions.
  **I followed the installation instructions but can't execute the program via command line at all. What do I do?**
  This is likely an issue with your PATH. Your PATH environment variable is not considering the binary packages installed by `pip3`. On a Mac, you can likely fix this by entering the command below, depending on the versions you have installed. YMMV.
  ```bash
  export PATH=$HOME/Library/Python/3.7/bin/:$PATH
  ```
  **I followed the installation instructions, but I am receiving a `ModuleNotFoundError` that says `No module named policy_sentry.analysis.expand`. What should I do?**
  Try upgrading to the latest version of Cloudsplaining. This error was fixed in version 0.0.10.

  * [Policy Sentry](https://github.com/salesforce/policy_sentry/) by [Kinnaird McQuade](https://twitter.com/kmcquade3) at Salesforce
  * [Parliament](https://github.com/duo-labs/parliament/) by [Scott Piper](https://twitter.com/0xdabbad00) at [Summit Route](http://summitroute.com/) and Duo Labs.
  * [AWS Privilege Escalation Methods](https://github.com/RhinoSecurityLabs/AWS-IAM-Privilege-Escalation) by [Spencer Gietzen](https://twitter.com/SpenGietz) at Rhino Security Labs
  * [Understanding Access Level Summaries within Policy Summaries](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_understand-policy-summary-access-level-summaries.html)
  * [Leveraging next-generation blockchain-based AI across multiple service meshes to transparently automate multi-cloud IAM wizardry :mage_man:](http://kmcquade.com/rick.html)


pkgId: 9f051471be935d9f33f58273e73b32727f97a524c55161c3167a328ed65d3aae
name: python-clr
arch: src
version: 1.0.3
epoch: 0
release: 1
summary: 🌈 Terminal string styling
url: https://github.com/lmittmann/clr
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-0ea907df-85bb-4e47-a8d9-3d0fd6738608
location_href: 00012737-python-clr/python-clr-1.0.3-1.src.rpm
checksum_type: sha256
description:
  |Build Status| |PyPI version|
  **clr** is a simple terminal string styling library. Its API is a port of the popular
  `chalk <https://github.com/chalk/chalk>`__ module for javascript.


pkgId: 89b6b861af12d5a093f4dfc37a673fa982346f5213b97d9589945849d3e1d35b
name: python-cma
arch: src
version: 3.3.0
epoch: 0
release: 1
url: https://github.com/CMA-ES/pycma
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-8b50562f-e6cc-4c8d-9015-ba7a694ff43e
location_href: 00003259-python-cma/python-cma-3.3.0-1.src.rpm
checksum_type: sha256
summary:
  CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python

description:
  A stochastic numerical optimization algorithm for difficult (non-convex,
  ill-conditioned, multi-modal, rugged, noisy) optimization problems in
  continuous search spaces, implemented in Python.
  Typical domain of application are bound-constrained or unconstrained
  objective functions with:
  * search space dimension between, say, 5 and (a few) 100,
  * no gradients available,
  * at least, say, 100 times dimension function evaluations needed to
    get satisfactory solutions,
  * non-separable, ill-conditioned, or rugged/multi-modal landscapes.
  The CMA-ES is quite reliable, however for small budgets (fewer function
  evaluations than, say, 100 times dimension) or in very small dimensions
  better (i.e. faster) methods are available.
  The ``pycma`` module provides two independent implementations of the
  CMA-ES algorithm in the classes ``cma.CMAEvolutionStrategy`` and
  ``cma.purecma.CMAES``.


pkgId: a2e0cff0d95e6287d88d4df6054cbfc94518f7662c89d04dbdaae1eb520e81c3
name: python-cmaes
arch: src
version: 0.9.1
epoch: 0
release: 1
summary: Lightweight Covariance Matrix Adaptation Evolution Strategy (CMA-ES) implementation for Python 3.
url: https://github.com/CyberAgentAILab/cmaes
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-5aed05f4-86b3-4034-844b-ff346f35bef4
location_href: 00009655-python-cmaes/python-cmaes-0.9.1-1.src.rpm
checksum_type: sha256
description:
  [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](./LICENSE) [![PyPI - Downloads](https://img.shields.io/pypi/dw/cmaes)](https://pypistats.org/packages/cmaes)

  Lightweight Covariance Matrix Adaptation Evolution Strategy (CMA-ES) [1] implementation.

  ![visualize-six-hump-camel](https://user-images.githubusercontent.com/5564044/73486622-db5cff00-43e8-11ea-98fb-8246dbacab6d.gif)


  * **2022/05/13** The paper, ["CMA-ES with Margin: Lower-Bounding Marginal Probability for Mixed-Integer Black-Box Optimization"](https://arxiv.org/abs/2205.13482) written by Hamano, Saito, [@nomuramasahir0](https://github.com/nomuramasahir0) (the maintainer of this library), and Shirakawa, has been nominated as best paper at GECCO'22 ENUM track.
  * **2021/03/10** ["Introduction to CMA-ES sampler"](https://medium.com/optuna/introduction-to-cma-es-sampler-ee68194c8f88) is published at Optuna Medium Blog. This article explains when and how to make the best use out of CMA-ES sampler. Please check it out!
  * **2021/02/02** The paper ["Warm Starting CMA-ES for Hyperparameter Optimization"](https://arxiv.org/abs/2012.06932) written by [@nomuramasahir0](https://github.com/nomuramasahir0), the maintainer of this library, is accepted at AAAI 2021 :tada:
  * **2020/07/29** Optuna's built-in CMA-ES sampler which uses this library under the hood is stabled at Optuna v2.0. Please check out the [v2.0 release blog](https://medium.com/optuna/optuna-v2-3165e3f1fc2).



  Supported Python versions are 3.7 or later.

  ```
  $ pip install cmaes
  ```

  Or you can install via [conda-forge](https://anaconda.org/conda-forge/cmaes).

  ```
  $ conda install -c conda-forge cmaes
  ```



  This library provides an "ask-and-tell" style interface.

  ```python
  import numpy as np
  from cmaes import CMA

  def quadratic(x1, x2):
      return (x1 - 3) ** 2 + (10 * (x2 + 2)) ** 2

  if __name__ == "__main__":
      optimizer = CMA(mean=np.zeros(2), sigma=1.3)

      for generation in range(50):
          solutions = []
          for _ in range(optimizer.population_size):
              x = optimizer.ask()
              value = quadratic(x[0], x[1])
              solutions.append((x, value))
              print(f"#{generation} {value} (x1={x[0]}, x2 = {x[1]})")
          optimizer.tell(solutions)
  ```

  And you can use this library via [Optuna](https://github.com/optuna/optuna) [2], an automatic hyperparameter optimization framework.
  Optuna's built-in CMA-ES sampler which uses this library under the hood is available from [v1.3.0](https://github.com/optuna/optuna/releases/tag/v1.3.0) and stabled at [v2.0.0](https://github.com/optuna/optuna/releases/tag/v2.2.0).
  See [the documentation](https://optuna.readthedocs.io/en/stable/reference/samplers/generated/optuna.samplers.CmaEsSampler.html) or [v2.0 release blog](https://medium.com/optuna/optuna-v2-3165e3f1fc2) for more details.

  ```python
  import optuna

  def objective(trial: optuna.Trial):
      x1 = trial.suggest_uniform("x1", -4, 4)
      x2 = trial.suggest_uniform("x2", -4, 4)
      return (x1 - 3) ** 2 + (10 * (x2 + 2)) ** 2

  if __name__ == "__main__":
      sampler = optuna.samplers.CmaEsSampler()
      study = optuna.create_study(sampler=sampler)
      study.optimize(objective, n_trials=250)
  ```






  CMA-ES with Margin introduces a lower bound on the marginal probability associated with each discrete dimension so that samples can avoid being fixed to a single point.
  It can be applied to mixed spaces of continuous (float) and discrete (including integer and binary).

  |CMA-ES|CMA-ESwM|
  |---|---|
  |![CMA-ES](https://raw.githubusercontent.com/EvoConJP/CMA-ES_with_Margin/main/fig/CMA-ES.gif)|![CMA-ESwM](https://raw.githubusercontent.com/EvoConJP/CMA-ES_with_Margin/main/fig/CMA-ESwM.gif)|

  The above figures are taken from [EvoConJP/CMA-ES_with_Margin](https://github.com/EvoConJP/CMA-ES_with_Margin).

  <details>
  <summary>Source code</summary>

  ```python
  import numpy as np
  from cmaes import CMAwM


  def ellipsoid_onemax(x, n_zdim):
      n = len(x)
      n_rdim = n - n_zdim
      r = 10
      if len(x) < 2:
          raise ValueError("dimension must be greater one")
      ellipsoid = sum([(1000 ** (i / (n_rdim - 1)) * x[i]) ** 2 for i in range(n_rdim)])
      onemax = n_zdim - (0.0 < x[(n - n_zdim) :]).sum()
      return ellipsoid + r * onemax


  def main():
      binary_dim, continuous_dim = 10, 10
      dim = binary_dim + continuous_dim
      bounds = np.concatenate(
          [
              np.tile([-np.inf, np.inf], (continuous_dim, 1)),
              np.tile([0, 1], (binary_dim, 1)),
          ]
      )
      steps = np.concatenate([np.zeros(continuous_dim), np.ones(binary_dim)])
      optimizer = CMAwM(mean=np.zeros(dim), sigma=2.0, bounds=bounds, steps=steps)
      print(" evals    f(x)")
      print("======  ==========")

      evals = 0
      while True:
          solutions = []
          for _ in range(optimizer.population_size):
              x_for_eval, x_for_tell = optimizer.ask()
              value = ellipsoid_onemax(x_for_eval, binary_dim)
              evals += 1
              solutions.append((x_for_tell, value))
              if evals % 300 == 0:
                  print(f"{evals:5d}  {value:10.5f}")
          optimizer.tell(solutions)

          if optimizer.should_stop():
              break


  if __name__ == "__main__":
      main()
  ```

  Source code is also available [here](./examples/cmaes_with_margin.py).

  </details>



  Warm Starting CMA-ES is a method to transfer prior knowledge on similar HPO tasks through the initialization of CMA-ES.
  Here is the result of an experiment that tuning LightGBM for Kaggle's Toxic Comment Classification Challenge data, a multilabel classification dataset.
  In this benchmark, we use 10% of a full dataset as the source task, and a full dataset as the target task.
  Please refer [the paper](https://arxiv.org/abs/2012.06932) and/or https://github.com/c-bata/benchmark-warm-starting-cmaes for more details of experiment settings.

  ![benchmark-lightgbm-toxic](https://github.com/c-bata/benchmark-warm-starting-cmaes/raw/main/result.png)

  <details>
  <summary>Source code</summary>

  ```python
  import numpy as np
  from cmaes import CMA, get_warm_start_mgd

  def source_task(x1: float, x2: float) -> float:
      b = 0.4
      return (x1 - b) ** 2 + (x2 - b) ** 2

  def target_task(x1: float, x2: float) -> float:
      b = 0.6
      return (x1 - b) ** 2 + (x2 - b) ** 2

  if __name__ == "__main__":
      
      source_solutions = []
      for _ in range(1000):
          x = np.random.random(2)
          value = source_task(x[0], x[1])
          source_solutions.append((x, value))

      
      
      ws_mean, ws_sigma, ws_cov = get_warm_start_mgd(
          source_solutions, gamma=0.1, alpha=0.1
      )
      optimizer = CMA(mean=ws_mean, sigma=ws_sigma, cov=ws_cov)

      
      print(" g    f(x1,x2)     x1      x2  ")
      print("===  ==========  ======  ======")
      while True:
          solutions = []
          for _ in range(optimizer.population_size):
              x = optimizer.ask()
              value = target_task(x[0], x[1])
              solutions.append((x, value))
              print(
                  f"{optimizer.generation:3d}  {value:10.5f}"
                  f"  {x[0]:6.2f}  {x[1]:6.2f}"
              )
          optimizer.tell(solutions)

          if optimizer.should_stop():
              break
  ```

  The full source code is available [here](./examples/ws_cma_es.py).

  </details>



  sep-CMA-ES is an algorithm which constrains the covariance matrix to be diagonal.
  Due to the reduction of the number of parameters, the learning rate for the covariance matrix can be increased.
  Consequently, this algorithm outperforms CMA-ES on separable functions.

  <details>
  <summary>Source code</summary>

  ```python
  import numpy as np
  from cmaes import SepCMA

  def ellipsoid(x):
      n = len(x)
      if len(x) < 2:
          raise ValueError("dimension must be greater one")
      return sum([(1000 ** (i / (n - 1)) * x[i]) ** 2 for i in range(n)])

  if __name__ == "__main__":
      dim = 40
      optimizer = SepCMA(mean=3 * np.ones(dim), sigma=2.0)
      print(" evals    f(x)")
      print("======  ==========")

      evals = 0
      while True:
          solutions = []
          for _ in range(optimizer.population_size):
              x = optimizer.ask()
              value = ellipsoid(x)
              evals += 1
              solutions.append((x, value))
              if evals % 3000 == 0:
                  print(f"{evals:5d}  {value:10.5f}")
          optimizer.tell(solutions)

          if optimizer.should_stop():
              break
  ```

  Full source code is available [here](./examples/sepcma_ellipsoid_function.py).

  </details>



  IPOP-CMA-ES is a method to restart CMA-ES with increasing population size like below.

  ![visualize-ipop-cmaes-himmelblau](https://user-images.githubusercontent.com/5564044/88472274-f9e12480-cf4b-11ea-8aff-2a859eb51a15.gif)

  <details>
  <summary>Source code</summary>

  ```python
  import math
  import numpy as np
  from cmaes import CMA

  def ackley(x1, x2):
      
      return (
          -20 * math.exp(-0.2 * math.sqrt(0.5 * (x1 ** 2 + x2 ** 2)))
          - math.exp(0.5 * (math.cos(2 * math.pi * x1) + math.cos(2 * math.pi * x2)))
          + math.e + 20
      )

  if __name__ == "__main__":
      bounds = np.array([[-32.768, 32.768], [-32.768, 32.768]])
      lower_bounds, upper_bounds = bounds[:, 0], bounds[:, 1]

      mean = lower_bounds + (np.random.rand(2) * (upper_bounds - lower_bounds))
      sigma = 32.768 * 2 / 5  # 1/5 of the domain width
      optimizer = CMA(mean=mean, sigma=sigma, bounds=bounds, seed=0)

      for generation in range(200):
          solutions = []
          for _ in range(optimizer.population_size):
              x = optimizer.ask()
              value = ackley(x[0], x[1])
              solutions.append((x, value))
              print(f"#{generation} {value} (x1={x[0]}, x2 = {x[1]})")
          optimizer.tell(solutions)

          if optimizer.should_stop():
              
              popsize = optimizer.population_size * 2
              mean = lower_bounds + (np.random.rand(2) * (upper_bounds - lower_bounds))
              optimizer = CMA(mean=mean, sigma=sigma, population_size=popsize)
              print(f"Restart CMA-ES with popsize={popsize}")
  ```

  Full source code is available [here](./examples/ipop_cmaes.py).

  </details>



  BIPOP-CMA-ES applies two interlaced restart strategies, one with an increasing population size and one with varying small population sizes.

  ![visualize-bipop-cmaes-himmelblau](https://user-images.githubusercontent.com/5564044/88471815-55111800-cf48-11ea-8933-5a4b48c49eba.gif)

  <details>
  <summary>Source code</summary>

  ```python
  import math
  import numpy as np
  from cmaes import CMA

  def ackley(x1, x2):
      
      return (
          -20 * math.exp(-0.2 * math.sqrt(0.5 * (x1 ** 2 + x2 ** 2)))
          - math.exp(0.5 * (math.cos(2 * math.pi * x1) + math.cos(2 * math.pi * x2)))
          + math.e + 20
      )

  if __name__ == "__main__":
      bounds = np.array([[-32.768, 32.768], [-32.768, 32.768]])
      lower_bounds, upper_bounds = bounds[:, 0], bounds[:, 1]

      mean = lower_bounds + (np.random.rand(2) * (upper_bounds - lower_bounds))
      sigma = 32.768 * 2 / 5  # 1/5 of the domain width
      optimizer = CMA(mean=mean, sigma=sigma, bounds=bounds, seed=0)

      n_restarts = 0  # A small restart doesn't count in the n_restarts
      small_n_eval, large_n_eval = 0, 0
      popsize0 = optimizer.population_size
      inc_popsize = 2

      
      
      
      
      poptype = "small"

      for generation in range(200):
          solutions = []
          for _ in range(optimizer.population_size):
              x = optimizer.ask()
              value = ackley(x[0], x[1])
              solutions.append((x, value))
              print(f"#{generation} {value} (x1={x[0]}, x2 = {x[1]})")
          optimizer.tell(solutions)

          if optimizer.should_stop():
              n_eval = optimizer.population_size * optimizer.generation
              if poptype == "small":
                  small_n_eval += n_eval
              else:  # poptype == "large"
                  large_n_eval += n_eval

              if small_n_eval < large_n_eval:
                  poptype = "small"
                  popsize_multiplier = inc_popsize ** n_restarts
                  popsize = math.floor(
                      popsize0 * popsize_multiplier ** (np.random.uniform() ** 2)
                  )
              else:
                  poptype = "large"
                  n_restarts += 1
                  popsize = popsize0 * (inc_popsize ** n_restarts)

              mean = lower_bounds + (np.random.rand(2) * (upper_bounds - lower_bounds))
              optimizer = CMA(
                  mean=mean,
                  sigma=sigma,
                  bounds=bounds,
                  population_size=popsize,
              )
              print("Restart CMA-ES with popsize={} ({})".format(popsize, poptype))
  ```

  Full source code is available [here](./examples/bipop_cmaes.py).

  </details>



  | [Rosenbrock function](https://www.sfu.ca/~ssurjano/rosen.html) | [Six-Hump Camel function](https://www.sfu.ca/~ssurjano/camel6.html) |
  | ------------------- | ----------------------- |
  | ![rosenbrock](https://user-images.githubusercontent.com/5564044/73486735-0cd5ca80-43e9-11ea-9e6e-35028edf4ee8.png) | ![six-hump-camel](https://user-images.githubusercontent.com/5564044/73486738-0e9f8e00-43e9-11ea-8e65-d60fd5853b8d.png) |

  This implementation (green) stands comparison with [pycma](https://github.com/CMA-ES/pycma) (blue).
  See [benchmark](./benchmark) for details.



  **Projects using cmaes:**

  * [Optuna](https://github.com/optuna/optuna) : A hyperparameter optimization framework that supports CMA-ES using this library under the hood.
  * (If you have a project which uses `cmaes` and want your own project to be listed here, please submit a GitHub issue.)

  **Other libraries:**

  I respect all libraries involved in CMA-ES.

  * [pycma](https://github.com/CMA-ES/pycma) : Most famous CMA-ES implementation by Nikolaus Hansen.
  * [pymoo](https://github.com/msu-coinlab/pymoo) : Multi-objective optimization in Python.
  * [evojax](https://github.com/google/evojax) : EvoJAX provides a JAX-port of this library.
  * [evosax](https://github.com/RobertTLange/evosax) : evosax provides JAX-based CMA-ES and sep-CMA-ES implementation, which is inspired by this library.

  **References:**

  * [1] [N. Hansen, The CMA Evolution Strategy: A Tutorial. arXiv:1604.00772, 2016.](https://arxiv.org/abs/1604.00772)
  * [2] [T. Akiba, S. Sano, T. Yanase, T. Ohta, M. Koyama, Optuna: A Next-generation Hyperparameter Optimization Framework, KDD, 2019.](https://dl.acm.org/citation.cfm?id=3330701)
  * [3] [R. Hamano, S. Saito, M. Nomura, S. Shirakawa, CMA-ES with Margin: Lower-Bounding Marginal Probability for Mixed-Integer Black-Box Optimization, GECCO, 2022.](https://arxiv.org/abs/2205.13482)
  * [4] [M. Nomura, S. Watanabe, Y. Akimoto, Y. Ozaki, M. Onishi, Warm Starting CMA-ES for Hyperparameter Optimization, AAAI, 2021.](https://arxiv.org/abs/2012.06932)
  * [5] [R. Ros, N. Hansen, A Simple Modification in CMA-ES Achieving Linear Time and Space Complexity, PPSN, 2008.](https://hal.inria.fr/inria-00287367/document)
  * [6] [A. Auger, N. Hansen, A restart CMA evolution strategy with increasing population size, CEC, 2005.](https://sci2s.ugr.es/sites/default/files/files/TematicWebSites/EAMHCO/contributionsCEC05/auger05ARCMA.pdf)
  * [7] [N. Hansen, Benchmarking a BI-Population CMA-ES on the BBOB-2009 Function Testbed, GECCO Workshop, 2009.](https://hal.inria.fr/inria-00382093/document)

rpm_license:
  MIT License  Copyright (c) 2020-2021 CyberAgent, Inc.  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: 3fd5fd0aaa102ce188f572ec85ff9138b6b11be5f9068cf954c72ae330b0bed4
name: python-cmarkgfm-debuginfo
arch: aarch64
version: 2022.10.27
epoch: 0
release: 1
summary: Debug information for package python-cmarkgfm
url: https://github.com/theacodes/cmarkgfm
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-42076008-4559-4f89-86eb-6e69f8a7b237
rpm_sourcerpm: python-cmarkgfm-2022.10.27-1.src.rpm
location_href: 00003260-python-cmarkgfm/python-cmarkgfm-debuginfo-2022.10.27-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-cmarkgfm.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: 650595fd157ed6728609aa345fe24f928bc7d0f192297033cde86a0a54f2fce3
name: python-cmarkgfm-debugsource
arch: aarch64
version: 2022.10.27
epoch: 0
release: 1
summary: Debug sources for package python-cmarkgfm
url: https://github.com/theacodes/cmarkgfm
rpm_license: MIT License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Development/Debug
rpm_buildhost: resalloc-42076008-4559-4f89-86eb-6e69f8a7b237
rpm_sourcerpm: python-cmarkgfm-2022.10.27-1.src.rpm
location_href: 00003260-python-cmarkgfm/python-cmarkgfm-debugsource-2022.10.27-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-cmarkgfm.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 1b802940478eceb28637a1bee84b4443cb8b9ddf43e80e17fe3fb5c98dc56ccf
name: python-cmd2
arch: src
version: 2.4.3
epoch: 0
release: 1
summary: cmd2 - quickly build feature-rich and user-friendly interactive command line applications in Python
url: https://github.com/python-cmd2/cmd2
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-d659b52a-d2bf-4816-8464-84c5af6b12f6
location_href: 00003261-python-cmd2/python-cmd2-2.4.3-1.src.rpm
checksum_type: sha256
description:
  ![system schema](https://raw.githubusercontent.com/python-cmd2/cmd2/master/.github/images/graph.drawio.png)
  When creating solutions developers have no shortage of tools to create rich and smart user interfaces.
  System administrators have long been duct taping together brittle workflows based on a menagerie of simple command line tools created by strangers on github and the guy down the hall.
  Unfortunately, when CLIs become significantly complex the ease of command discoverability tends to fade quickly.
  On the other hand, Web and traditional desktop GUIs are first in class when it comes to easily discovering functionality.
  The price we pay for beautifully colored displays is complexity required to aggregate disperate applications into larger systems.
  `cmd2` fills the niche between high [ease of command discovery](https://clig.dev/#ease-of-discovery) applications and smart workflow automation systems.
  The `cmd2` framework provides a great mixture of both worlds. Application designers can easily create complex applications and rely on the cmd2 library to offer effortless user facing help and extensive tab completion.
  When users become comfortable with functionality, cmd2 turns into a feature rich library enabling a smooth transition to full automation. If designed with enough forethought, a well implemented cmd2 application can serve as a boutique workflow tool. `cmd2` pulls off this flexibility based on two pillars of philosophy:
  * Tab Completion
  * Automation Transition


pkgId: 24f7f20dc53ff6658cf0fedca9436847d2b010d05e9a07573085bc42a569cc5b
name: python-cmdstanpy
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: Python interface to CmdStan
url: https://github.com/stan-dev/cmdstanpy
rpm_license: BSD License
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-17fda65b-49e1-4d14-9a40-42afa42ab64a
location_href: 00009519-python-cmdstanpy/python-cmdstanpy-1.1.0-1.src.rpm
checksum_type: sha256
description:
  [![codecov](https://codecov.io/gh/stan-dev/cmdstanpy/branch/master/graph/badge.svg)](https://codecov.io/gh/stan-dev/cmdstanpy)


  CmdStanPy is a lightweight pure-Python interface to CmdStan which provides access to the Stan compiler and all inference algorithms.  It supports both development and production workflows. Because model development and testing may require many iterations, the defaults favor development mode and therefore output files are stored on a temporary filesystem. Non-default options allow all aspects of a run to be specified so that scripts can be used to distributed analysis jobs across nodes and machines.

  CmdStanPy is distributed via PyPi: https://pypi.org/project/cmdstanpy/

  or Conda Forge: https://anaconda.org/conda-forge/cmdstanpy



  - Clean interface to Stan services so that CmdStanPy can keep up with Stan releases.

  - Provide access to all CmdStan inference methods.

  - Easy to install,
    + minimal Python library dependencies: numpy, pandas
    + Python code doesn't interface directly with c++, only calls compiled executables

  - Modular - CmdStanPy produces a MCMC sample (or point estimate) from the posterior; other packages do analysis and visualization.

  - Low memory overhead - by default, minimal memory used above that required by CmdStanPy; objects run CmdStan programs and track CmdStan input and output files.




  CmdStanPy and CmdStan are available from GitHub: https://github.com/stan-dev/cmdstanpy and https://github.com/stan-dev/cmdstan




  The latest release documentation is hosted on  https://mc-stan.org/cmdstanpy, older release versions are available from readthedocs:  https://cmdstanpy.readthedocs.io



  The CmdStanPy, CmdStan, and the core Stan C++ code are licensed under new BSD.



  ```python
  import os
  from cmdstanpy import cmdstan_path, CmdStanModel


  stan_file = os.path.join(cmdstan_path(), 'examples', 'bernoulli', 'bernoulli.stan')
  data_file = os.path.join(cmdstan_path(), 'examples', 'bernoulli', 'bernoulli.data.json')


  model = CmdStanModel(stan_file=stan_file)


  fit = model.sample(chains=4, data=data_file)


  fit.summary()
  ```


pkgId: 504a3037f9fe548edef5d68b7a19a408a7b223b644b34bc5ce581d0f93d9b0cb
name: python-cocotb
arch: src
version: 1.7.2
epoch: 0
release: 1
url: https://www.cocotb.org
rpm_license: BSD
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-7c589100-dcbb-4a2d-9ee2-ef871112e129
location_href: 00003264-python-cocotb/python-cocotb-1.7.2-1.src.rpm
checksum_type: sha256
summary:
  cocotb is a coroutine based cosimulation library for writing VHDL and Verilog testbenches in Python.

description:
  **cocotb** is a coroutine based cosimulation library for writing VHDL and Verilog testbenches in Python.

  [![Documentation Status](https://readthedocs.org/projects/cocotb/badge/?version=latest)](https://docs.cocotb.org/en/latest/)
  [![CI](https://github.com/cocotb/cocotb/actions/workflows/build-test-dev.yml/badge.svg?branch=master)](https://github.com/cocotb/cocotb/actions/workflows/build-test-dev.yml)
  [![PyPI](https://img.shields.io/pypi/dm/cocotb.svg?label=PyPI%20downloads)](https://pypi.org/project/cocotb/)
  [![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/cocotb/cocotb)
  [![codecov](https://codecov.io/gh/cocotb/cocotb/branch/master/graph/badge.svg)](https://codecov.io/gh/cocotb/cocotb)

  * Read the [documentation](https://docs.cocotb.org)
  * Get involved:
    * [Raise a bug / request an enhancement](https://github.com/cocotb/cocotb/issues/new) (Requires a GitHub account)
    * [Join the mailing list](https://lists.librecores.org/listinfo/cocotb)
    * [Join the Gitter chat room](https://gitter.im/cocotb)



  The current stable version of cocotb requires:

  - Python 3.6+
  - GNU Make 3+
  - An HDL simulator (such as [Icarus Verilog](https://docs.cocotb.org/en/stable/simulator_support.html#icarus-verilog),
  [Verilator](https://docs.cocotb.org/en/stable/simulator_support.html#verilator),
  [GHDL](https://docs.cocotb.org/en/stable/simulator_support.html#ghdl) or
  [other simulator](https://docs.cocotb.org/en/stable/simulator_support.html))

  After installing these dependencies, the latest stable version of cocotb can be installed with pip.

  ```command
  pip install cocotb
  ```

  For more details on installation, including prerequisites,
  see [the documentation](https://docs.cocotb.org/en/stable/install.html).

  For details on how to install the *development* version of cocotb,
  see [the preliminary documentation of the future release](https://docs.cocotb.org/en/latest/install_devel.html#install-devel).

  **!!! Bus and Testbenching Components !!!**
  The reusable bus interfaces and testbenching components have recently been moved to the [cocotb-bus](https://github.com/cocotb/cocotb-bus) package.
  You can easily install these at the same time as cocotb by adding the `bus` extra install: `pip install cocotb[bus]`.



  As a first trivial introduction to cocotb, the following example "tests" a flip-flop.

  First, we need a hardware design which we can test. For this example, create a file `dff.sv` with SystemVerilog code for a simple [D flip-flop](https://en.wikipedia.org/wiki/Flip-flop_(electronics)#D_flip-flop). You could also use any other language a [cocotb-supported simulator](https://docs.cocotb.org/en/stable/simulator_support.html) understands, e.g. VHDL.

  ```systemverilog
  // dff.sv

  `timescale 1us/1ns

  module dff (
      output logic q,
      input logic clk, d
  );

  always @(posedge clk) begin
      q <= d;
  end

  endmodule
  ```

  An example of a simple randomized cocotb testbench:

  ```python


  import random
  import cocotb
  from cocotb.clock import Clock
  from cocotb.triggers import FallingEdge

  @cocotb.test()
  async def test_dff_simple(dut):
      """ Test that d propagates to q """

      clock = Clock(dut.clk, 10, units="us")  # Create a 10us period clock on port clk
      cocotb.start_soon(clock.start())  # Start the clock

      for i in range(10):
          val = random.randint(0, 1)
          dut.d.value = val  # Assign the random value val to the input port d
          await FallingEdge(dut.clk)
          assert dut.q.value == val, "output q was incorrect on the {}th cycle".format(i)
  ```

  A simple Makefile:

  ```make


  TOPLEVEL_LANG = verilog
  VERILOG_SOURCES = $(shell pwd)/dff.sv
  TOPLEVEL = dff
  MODULE = test_dff

  include $(shell cocotb-config --makefiles)/Makefile.sim
  ```

  In order to run the test with Icarus Verilog, execute:

  ```command
  make SIM=icarus
  ```

  [![asciicast](https://asciinema.org/a/317220.svg)](https://asciinema.org/a/317220)

  For more information please see the [cocotb documentation](https://docs.cocotb.org/)
  and [our wiki](https://github.com/cocotb/cocotb/wiki).



  * the tutorial section [in the official documentation](https://docs.cocotb.org/)
  * [cocotb-bus](https://github.com/cocotb/cocotb-bus) for pre-packaged testbenching tools and reusable bus interfaces.
  * [cocotb-based USB 1.1 test suite](https://github.com/antmicro/usb-test-suite-build) for FPGA IP, with testbenches for a variety of open source USB cores
  * [`cocotb-coverage`](https://github.com/mciepluc/cocotb-coverage), an extension for Functional Coverage and Constrained Randomization
  * [`uvm-python`](https://github.com/tpoikela/uvm-python), an almost 1:1 port of UVM 1.2 to Python
  * our wiki [on extension modules](https://github.com/cocotb/cocotb/wiki/Further-Resources#extension-modules-cocotbext)
  * the list of [GitHub projects depending on cocotb](https://github.com/cocotb/cocotb/network/dependents)


pkgId: 0050d95898f572f1667de98c4b92fa5cb624374be2fbd96f75d038bb9c36d838
name: python-cognitojwt
arch: src
version: 1.4.1
epoch: 0
release: 1
summary: Decode and verify Amazon Cognito JWT tokens
url: http://github.com/borisrozumnuk/cognitojwt
rpm_license: MIT
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-43921788-0dc5-47b1-a68e-cf0cc21cae7e
location_href: 00011038-python-cognitojwt/python-cognitojwt-1.4.1-1.src.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.org/borisrozumnuk/cognitojwt.svg?branch=master)](https://travis-ci.org/borisrozumnuk/cognitojwt)







  Package works in two modes: synchronous - [requests](https://github.com/requests/requests) as http-client and asynchronous - [aiohttp](https://github.com/aio-libs/aiohttp) as http-client.
  In order to avoid installing unnecessary dependencies I separated installation flow into two modes:

  * Async mode - `pip install cognitojwt[async]`
  * Sync mode - `pip install cognitojwt[sync]`



  ```python
  import cognitojwt

  id_token = '<YOUR_TOKEN_HERE>'
  REGION = '**-****-*'
  USERPOOL_ID = 'eu-west-1_*******'
  APP_CLIENT_ID = '1p3*********'


  verified_claims: dict = cognitojwt.decode(
      id_token,
      REGION,
      USERPOOL_ID,
      app_client_id=APP_CLIENT_ID,  # Optional
      testmode=True  # Disable token expiration check for testing purposes
  )


  verified_claims: dict = await cognitojwt.decode_async(
      id_token,
      REGION,
      USERPOOL_ID,
      app_client_id=APP_CLIENT_ID,  # Optional
      testmode=True  # Disable token expiration check for testing purposes
  )

  ```

  Note: if the application is deployed inside a private vpc without internet gateway, the application will not be able to download the JWKS file.
  In this case set the `AWS_COGNITO_JWKS_PATH` environment variable referencing the absolute or relative path of the jwks.json file.

  It is possible to allow multiple app client ids by passing the value as a Container instance such as a list or tuple:
  ```python
  ALLOWED_CLIENT_IDS = ('client_one', 'client_two')

  verified_claims: dict = cognitojwt.decode(
      id_token,
      REGION,
      USERPOOL_ID,
      app_client_id=ALLOWED_CLIENT_IDS,
      testmode=True  # Disable token expiration check for testing purposes
  )
  ```


pkgId: 54c5e607855083cee7cef63138bc6d9be1a331b39daa4343c23aa0cc1c2035fe
name: python-colander
arch: src
version: 2.0
epoch: 0
release: 1
summary: A simple schema-based serialization and deserialization library
url: https://github.com/Pylons/colander
rpm_license: BSD-derived (http://www.repoze.org/LICENSE.txt)
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-31377f42-0888-4c47-8e99-6510dcccfbee
location_href: 00003265-python-colander/python-colander-2.0-1.src.rpm
checksum_type: sha256
description:
  An extensible package which can be used to:
  - deserialize and validate a data structure composed of strings,
    mappings, and lists.
  - serialize an arbitrary data structure to a data structure composed
    of strings, mappings, and lists.
  It is tested on Python 3.7, 3.8, 3.9, 3.10, and 3.11, and PyPy 3.8.
  Please see https://docs.pylonsproject.org/projects/colander/en/latest/
  for documentation.
  See https://github.com/Pylons/colander for in-development version.


pkgId: 48d6d2a731c94b688ed12f6472979ed954a4f6a7e3e6d9496000d2a958253f5f
name: python-colcon-argcomplete
arch: src
version: 0.3.3
epoch: 0
release: 1
summary: Completion for colcon command lines using argcomplete.
url: https://colcon.readthedocs.io
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a39e2821-39b9-46a6-86b7-010afb76a806
location_href: 00003266-python-colcon-argcomplete/python-colcon-argcomplete-0.3.3-1.src.rpm
checksum_type: sha256
description:
  An extension for `colcon-core <https://github.com/colcon/colcon-core>`_ to provide command line completion using `argcomplete <https://github.com/kislyuk/argcomplete>`_.


pkgId: 6c8f6447c9ba708c96416bda9662b9a10309844127e3fe2e5ac72af459eb10df
name: python-colcon-bash
arch: src
version: 0.4.2
epoch: 0
release: 1
summary: Extension for colcon to provide Bash scripts.
url: https://colcon.readthedocs.io
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-35736e00-2d50-4aa8-ab24-40e2d5a9d93b
location_href: 00003267-python-colcon-bash/python-colcon-bash-0.4.2-1.src.rpm
checksum_type: sha256
description:
  An extension for `colcon-core <https://github.com/colcon/colcon-core>`_ to provide `Bash <https://www.gnu.org/software/bash/>`_ scripts.


pkgId: cf8079ecde80f77e063da35234844d6a9d82ff5ecf378a92d42d26a299aa64d0
name: python-colcon-bazel
arch: src
version: 0.1.0
epoch: 0
release: 1
summary: Extension for colcon to support Bazel packages.
url: https://colcon.readthedocs.io
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-1c6fcb79-a32e-40b4-9bcd-0d66251db8ba
location_href: 00003268-python-colcon-bazel/python-colcon-bazel-0.1.0-1.src.rpm
checksum_type: sha256
description:
  [![Travis CI](https://travis-ci.org/colcon/colcon-bazel.svg?branch=master)](https://travis-ci.org/colcon/colcon-bazel)
  [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/colcon/colcon-bazel?svg=true&branch=master)](https://ci.appveyor.com/project/Theosakamg/colcon-bazel)
  [![codecov](https://codecov.io/gh/colcon/colcon-bazel/branch/master/graph/badge.svg)](https://codecov.io/gh/colcon/colcon-bazel)
  [![PyPI version](https://img.shields.io/pypi/v/colcon_bazel.svg)](https://pypi.python.org/pypi/colcon_bazel/)
  An extension for [colcon-core](https://github.com/colcon/colcon-core) to support [Bazel](https://bazel.build) projects.


pkgId: 570c9d9d212664c644abf137f0c5162cf00768a6c262120adc22c00c648658a4
name: python-colcon-cd
arch: src
version: 0.1.1
epoch: 0
release: 1
summary: A shell function for colcon to change the current working directory.
url: https://colcon.readthedocs.io
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-fc3763c6-98da-4051-95d1-19ec4a77c27e
location_href: 00003270-python-colcon-cd/python-colcon-cd-0.1.1-1.src.rpm
checksum_type: sha256
description:
  A shell function for `colcon-core <https://github.com/colcon/colcon-core>`_ to change the current working directory.


pkgId: acfc63d447453260eba1139158750950d3dea565e5de1c035a970ed6d67eabd1
name: python-colcon-cmake
arch: src
version: 0.2.27
epoch: 0
release: 1
summary: Extension for colcon to support CMake packages.
url: https://colcon.readthedocs.io
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-ec0619d1-eb3f-4880-9ac8-8f5fc1fdf272
location_href: 00003271-python-colcon-cmake/python-colcon-cmake-0.2.27-1.src.rpm
checksum_type: sha256
description:
  An extension for `colcon-core <https://github.com/colcon/colcon-core>`_ to support `CMake <https://cmake.org>`_ projects.


pkgId: 232f0571e669001ed93d856c20a107e06094e1b93907c161f5df6e22ea169b84
name: python-colcon-common-extensions
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: Meta package aggregating colcon-core and common extensions.
url: https://colcon.readthedocs.io
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-3c648fdc-fd4e-49db-bf7f-e98ea0206ded
location_href: 00003272-python-colcon-common-extensions/python-colcon-common-extensions-0.3.0-1.src.rpm
checksum_type: sha256
description:
  A meta package aggregating `colcon-core <https://github.com/colcon/colcon-core>`_ as well as a set of common extensions.


pkgId: c7c6d4c72110a8d7b8e2cb9f955b1263d0b192d80d3e4ddcc84c7a681b9b9750
name: python-colcon-core
arch: src
version: 0.12.1
epoch: 0
release: 1
summary: Command line tool to build sets of software packages.
url: https://colcon.readthedocs.io
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-a930f66a-bde1-455e-9216-0f3ca5a5feb2
location_href: 00003273-python-colcon-core/python-colcon-core-0.12.1-1.src.rpm
checksum_type: sha256
description:
  ``colcon`` is a command line tool to improve the workflow of building, testing and using multiple software packages.
  It automates the process, handles the ordering and sets up the environment to use the packages.
  For more information see `colcon.readthedocs.io <https://colcon.readthedocs.io>`_.


pkgId: 05f76344d08c9a848af9838c49a3c178a2ca95b763e8185b24d24ed226711d65
name: python-colcon-coveragepy-result
arch: src
version: 0.0.8
epoch: 0
release: 1
summary: colcon extension for collecting coverage.py results
url: https://colcon.readthedocs.io
rpm_license: Apache License, Version 2.0
rpm_vendor: openEuler Copr - user mywaaagh_admin
rpm_group: Unspecified
rpm_buildhost: resalloc-41dacb5a-b03e-4c90-bcaa-476742c167c0
location_href: 00003274-python-colcon-coveragepy-result/python-colcon-coveragepy-result-0.0.8-1.src.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/colcon-coveragepy-result)](https://pypi.org/project/colcon-coveragepy-result/)
  [![GitHub Action Status](https://github.com/colcon/colcon-coveragepy-result/workflows/Test/badge.svg)](https://github.com/colcon/colcon-coveragepy-result/actions)

  A [colcon](https://colcon.readthedocs.io/) extension for collecting [coverage.py](https://coverage.readthedocs.io/en/stable/) results.



  1. Build packages with coverage, e.g. using a [colcon mixin](https://colcon.readthedocs.io/en/released/reference/verb/mixin.html) for [coverage](https://github.com/colcon/colcon-mixin-repository/blob/master/coverage.mixin)
     ```shell
     $ colcon build --mixin coverage-pytest
     ```
  1. Test packages with coverage, again using a mixin
     ```shell
     $ colcon test --mixin coverage-pytest
     ```
  1. Collect coverage results
     ```shell
     $ colcon coveragepy-result
     ```
  1. Open HTML report, which by default is under `coveragepy/htmlcov/`




  * Print coverage reports for each package and a combined coverage report of all packages
     ```shell
     $ colcon coveragepy-result --verbose
     ```
  * Provide additional arguments for reports generation, e.g. to show lines without coverage
     ```shell
     $ colcon coveragepy-result --coverage-report-args -m
     ```
  * Provide additional arguments for HTML report generation, e.g. to skip files with no code
     ```shell
     $ colcon coveragepy-result --coverage-html-args --skip-empty
     ```
  * For more options
     ```shell
     $ colcon coveragepy-result --help
     ```



  See:

  * [*Contributions*](https://colcon.readthedocs.io/en/released/developer/contribution.html) for guidelines
  * [*Bootstrap from source*](https://colcon.readthedocs.io/en/released/developer/bootstrap.html) to test the package from source


