summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-05 06:50:42 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-05 06:50:42 +0000
commit791815a318a6257b524479941862d7297138a951 (patch)
tree31653b67dc463617000dbc817ffe343b85daa78a
parent60baf05f28ef96525d5ad83d196d17db427424f6 (diff)
automatic import of python-packet-pythonopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-packet-python.spec1303
-rw-r--r--sources1
3 files changed, 1305 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..956ae58 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/packet-python-1.44.3.tar.gz
diff --git a/python-packet-python.spec b/python-packet-python.spec
new file mode 100644
index 0000000..33b7935
--- /dev/null
+++ b/python-packet-python.spec
@@ -0,0 +1,1303 @@
+%global _empty_manifest_terminate_build 0
+Name: python-packet-python
+Version: 1.44.3
+Release: 1
+Summary: Equinix Metal (Packet) API client
+License: LGPL v3
+URL: https://github.com/packethost/packet-python
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/36/a5/ce1dbc68f65d3be09afe3702687fad82b03d590906429a4b5533cb0a23cb/packet-python-1.44.3.tar.gz
+BuildArch: noarch
+
+Requires: python3-requests
+
+%description
+# Equinix Metal
+
+A Python client for the Equinix Metal API.
+
+[![Build Status](https://github.com/packethost/packet-python/actions/workflows/test.yml/badge.svg)](https://github.com/packethost/packet-python/actions/workflows/test.yml)
+[![Stability: Maintained](https://img.shields.io/badge/Stability-Maintained-green.svg)](https://github.com/packethost/standards/blob/main/maintained-statement.md#maintained-statements)
+
+This repository is [Maintained](https://github.com/packethost/standards/blob/master/maintained-statement.md) meaning that this software is supported by Equinix Metal and its community - available to use in production environments.
+
+## Table of Contents
+
+* [Installation](#installation)
+* [Documentation](#documentation)
+* [Authentication](#authentication)
+* [Examples](#examples)
+ * [List Projects](#list-projects)
+ * [List Plans](#list-plans)
+ * [Creating a Device](#creating-a-device)
+ * [Checking the Status and Rebooting a Device](#checking-the-status-and-rebooting-a-device)
+ * [Listing all Devices Limiting to 50 per Page](#listing-all-devices-limiting-to-50-per-page)
+ * [Updating a Device](#updating-a-device)
+ * [Deleting a Device](#deleting-a-device)
+ * [Creating a Device Batch](#creating-a-device-batch)
+ * [Creating a Volume](#creating-a-volume)
+ * [Attaching and Detaching a Volume](#attaching-and-detaching-a-volume)
+ * [Creating and Restoring a Volume Snapshot](#creating-and-restoring-a-volume-snapshot)
+ * [Listing Project IP Addresses](#listing-project-ip-addresses)
+ * [Creating a Project for an Organization](#creating-a-project-for-an-organization)
+ * [Creating a VLAN](#creating-a-vlan)
+* [Contributing](#contributing)
+* [Copyright](#copyright)
+* [Changes](#changes)
+
+## Installation
+
+The Equinix Metal python api library can be installed using pip:
+
+ pip install packet-python
+
+Package information available here:
+
+https://pypi.python.org/pypi/packet-python
+
+## Documentation
+
+Full Equinix Metal API documenation is available here:
+[https://metal.equinix.com/developers/api/](https://metal.equinix.com/developers/api/)
+
+## Authentication
+
+Provide your credentials when instantiating client:
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+```
+
+## Examples
+
+### List Projects
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+projects = manager.list_projects()
+for project in projects:
+ print(project)
+```
+
+### List Plans
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+plans = manager.list_plans()
+for plan in plans:
+ print(plan)
+ if 'cpus' in plan.specs:
+ print(plan.specs['cpus'][0]['count'])
+```
+
+### Creating a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.create_device(project_id='project-id',
+ hostname='node-name-of-your-choice',
+ plan='baremetal_1', metro='sv',
+ operating_system='ubuntu_18_04')
+print(device)
+```
+
+### Checking the Status and Rebooting a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.get_device('device-id')
+print(device.state)
+device.reboot()
+```
+
+### Listing all Devices Limiting to 50 per Page
+
+_Equinix Metal API defaults to a limit of 10 per page_
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+params = {
+ 'per_page': 50
+}
+devices = manager.list_devices(project_id='project_id', params = params)
+print(devices)
+```
+
+### Updating a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.get_device('device-id')
+device.hostname = "test02"
+device.description = "new description"
+
+device.update()
+```
+
+### Deleting a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.get_device('device-id')
+device.delete()
+```
+
+### Creating a Device Batch
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+batch01 = packet.DeviceBatch({
+ "hostname": "batch01",
+ "quantity": 2,
+ "facility": "ams1",
+ "operating_system": "centos_7",
+ "plan": "baremetal_0",
+ })
+
+device_batch = manager.create_batch(project_id="project_id", params=[batch01])
+print(device_batch)
+```
+
+### Creating a Volume
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+volume = manager.create_volume(project_id="project-id",
+ description="volume description",
+ plan="storage_1",
+ size="100",
+ facility="ewr1",
+ snapshot_count=7,
+ snapshot_frequency="1day")
+print(volume)
+```
+
+### Attaching and Detaching a Volume
+
+```python
+import packet
+import time
+
+manager = packet.Manager(auth_token="yourapiauthtoken")
+volume = manager.get_volume("volume_id")
+
+volume.attach("device_id")
+
+while True:
+ if manager.get_device("device_id").state == "active":
+ break
+ time.sleep(2)
+
+volume.detach()
+```
+
+## Creating and Restoring a Volume Snapshot
+
+```python
+import packet
+import time
+
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+volume = manager.get_volume("volume_id")
+volume.create_snapshot()
+
+while True:
+ if manager.get_volume(volume.id).state == "active":
+ break
+ time.sleep(2)
+
+snapshots = manager.get_snapshots(volume.id)
+volume.restore(snapshots[0].timestamp)
+```
+
+### Listing Project IP Addresses
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+ips = manager.list_project_ips("project_id")
+for ip in ips:
+ print(ip.address)
+```
+
+### Creating a Project for an Organization
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+project = manager.create_organization_project(
+ org_id="organization_id",
+ name="Integration Tests",
+ customdata={"tag": "QA"}
+)
+print(project)
+```
+
+### Creating a VLAN
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+vlan = manager.create_vlan(project_id="project_id", facility="ewr1")
+print(vlan)
+```
+
+## Contributing
+
+* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
+* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
+* Fork the project.
+* Start a feature/bugfix branch.
+* Commit and push until you are happy with your contribution.
+* You can test your changes with the `tox`, which is what GitHub Actions use to check builds.
+
+## Credits
+
+CargoCulted with much gratitude from:
+https://github.com/koalalorenzo/python-digitalocean
+
+## Changes
+
+See the [Changelog](CHANGELOG.md) for further details.
+
+# Changelog
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
+This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [1.45.0] - Unreleased
+### Added
+### Changed
+### Fixed
+
+## [1.44.3] - 2022-07-27
+### Fixed
+- Fix handling non-dict error data in ResponseError #128 #129
+
+## [1.44.2] - 2021-11-18
+### Fixed
+- Fix logic behind `validate_metro_capacity` #125
+
+## [1.44.1] - 2021-09-20
+### Fixed
+- Fix metros URL used in Metro API lists #122
+- Catch TypeError when HardwareReservations do not have a device assignment #120
+
+## [1.44.0] - 2021-05-19
+### Added
+- User-Agent header added to client requests #113
+- `Metro` class added (https://feedback.equinixmetal.com/changelog/new-metros-feature-live) #110
+- Adds `metro` property to `DeviceBatch`, `Device`, `IPAddress`, `VLan` #110
+- Adds `metro` to `create_device`, `reserve_ip_address`, `create_vlan`, `create_connection` #110
+- Adds `list_metros`, `validate_metro_capacity` to `Manager` #110
+- Adds `CODE_OF_CONDUCT.md`, `SUPPORT.md`, `OWNERS.md` #102, #101, #100
+- Adds package metadata for `author`, `author_email`, `copyright` #114
+### Changed
+- `facility` is now optional in `create_device`, `reserve_ip_address`, `create_vlan`, `create_connection` #110
+- CI is using GH Actions instead of Drone #115
+### Fixed
+- Handles when IPAddress Facility is null in API responses #117
+
+## [1.43.1] - 2020-09-04
+### Fixed
+- ResponseError fixed for Python2.7 compatibility
+
+## [1.43.0] - 2020-07-14
+### Added
+- Support for reinstalling the operating system to a device, including changing the operating system.
+- `Manager.create_vlan` now includes a description argument
+### Changed
+- `ResponseError` will now be raised when an API call results in an error
+### Fixed
+- `Manager.validate_capacity` now considers availability
+- `Manager.create_project_ssh_key` will retry when it encounters 404 responses following a successful creation.
+- API responses with `{"error":""}` keys were not handled well, and will now be handled just like `{"errors":[""]}` keys.
+
+## [1.42.0] - 2020-02-14
+### Added
+- Capturing of `available_in` to Plan
+- Capturing of `hardware_reservation`, `spot_price_max`, `termination_time`, and `provisioning_percentage` to `Device`
+- Support for creating project ssh keys
+- Support for passing `custom_data` when creating a device
+### Fixed
+- Black not building for CI and thus failing
+
+## [1.41.0] - 2019-10-16
+### Added
+- Support for retrieval of hardware reservations
+- CPR support at device creation
+
+## [1.40.0] - 2019-10-14
+### Added
+- Integration tests are only run if `PACKET_PYTHON_TEST_ACTUAL_API` envvar is set
+- Rescue action and along with test
+- Missing SPDX and source encoding meta comments
+### Removed
+- Use of Travis CI
+
+## [1.39.1] - 2019-09-17
+### Added
+- Support for `hardware_reservation_id`
+
+## [1.39.0] - 2019-08-26
+### Added
+- Support for Organizations, Events, Emails, VLAN, Snapshot Policies, Batches, Ports, VPN and IPs.
+- Live tests
+
+## [1.38.2] - 2019-05-30
+### Added
+- Test fixtures to sdist
+
+## [1.38.1] - 2019-05-30
+### Fixed
+- Changelog
+
+## [1.38.0] - 2019-05-30
+### Added
+- Support for python3.7
+- `legacy` param to `get_capacity` function
+### Removed
+- Support for python3.3
+### Changed
+- setup.py no longer converts markdown to reST because pypi now supports markdown, woop.
+
+## [1.37.1] - 2018-01-08
+### Fixed
+- Version number in setup.py
+
+## [1.37.0] - 2018-01-08
+### Added
+- Spot Market Support
+- Ability to specify ssh keys on device creation
+
+## [1.36.0] - 2017-10-16
+### Added
+- Better tests using PacketMockManager
+- Test on 2.7 and 3.[3-6]
+- Changelog
+
+### Changed
+- Use tox for testing
+
+## [1.35] - 2017-08-04
+### Fixed
+- Some tests were broken
+
+## [1.35]
+### Added
+- `public_ipv4_subnet_size`
+
+## [1.34] - 2017-08-04
+### Added
+- Custom iPXE and `always_pxe` setting
+- Volume coloning
+- Device Tags
+
+### Fixed
+- Handling of error messages from api response
+
+## [1.33] - 2017-03-15
+### Fixed
+- Default payment method
+
+
+%package -n python3-packet-python
+Summary: Equinix Metal (Packet) API client
+Provides: python-packet-python
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-packet-python
+# Equinix Metal
+
+A Python client for the Equinix Metal API.
+
+[![Build Status](https://github.com/packethost/packet-python/actions/workflows/test.yml/badge.svg)](https://github.com/packethost/packet-python/actions/workflows/test.yml)
+[![Stability: Maintained](https://img.shields.io/badge/Stability-Maintained-green.svg)](https://github.com/packethost/standards/blob/main/maintained-statement.md#maintained-statements)
+
+This repository is [Maintained](https://github.com/packethost/standards/blob/master/maintained-statement.md) meaning that this software is supported by Equinix Metal and its community - available to use in production environments.
+
+## Table of Contents
+
+* [Installation](#installation)
+* [Documentation](#documentation)
+* [Authentication](#authentication)
+* [Examples](#examples)
+ * [List Projects](#list-projects)
+ * [List Plans](#list-plans)
+ * [Creating a Device](#creating-a-device)
+ * [Checking the Status and Rebooting a Device](#checking-the-status-and-rebooting-a-device)
+ * [Listing all Devices Limiting to 50 per Page](#listing-all-devices-limiting-to-50-per-page)
+ * [Updating a Device](#updating-a-device)
+ * [Deleting a Device](#deleting-a-device)
+ * [Creating a Device Batch](#creating-a-device-batch)
+ * [Creating a Volume](#creating-a-volume)
+ * [Attaching and Detaching a Volume](#attaching-and-detaching-a-volume)
+ * [Creating and Restoring a Volume Snapshot](#creating-and-restoring-a-volume-snapshot)
+ * [Listing Project IP Addresses](#listing-project-ip-addresses)
+ * [Creating a Project for an Organization](#creating-a-project-for-an-organization)
+ * [Creating a VLAN](#creating-a-vlan)
+* [Contributing](#contributing)
+* [Copyright](#copyright)
+* [Changes](#changes)
+
+## Installation
+
+The Equinix Metal python api library can be installed using pip:
+
+ pip install packet-python
+
+Package information available here:
+
+https://pypi.python.org/pypi/packet-python
+
+## Documentation
+
+Full Equinix Metal API documenation is available here:
+[https://metal.equinix.com/developers/api/](https://metal.equinix.com/developers/api/)
+
+## Authentication
+
+Provide your credentials when instantiating client:
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+```
+
+## Examples
+
+### List Projects
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+projects = manager.list_projects()
+for project in projects:
+ print(project)
+```
+
+### List Plans
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+plans = manager.list_plans()
+for plan in plans:
+ print(plan)
+ if 'cpus' in plan.specs:
+ print(plan.specs['cpus'][0]['count'])
+```
+
+### Creating a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.create_device(project_id='project-id',
+ hostname='node-name-of-your-choice',
+ plan='baremetal_1', metro='sv',
+ operating_system='ubuntu_18_04')
+print(device)
+```
+
+### Checking the Status and Rebooting a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.get_device('device-id')
+print(device.state)
+device.reboot()
+```
+
+### Listing all Devices Limiting to 50 per Page
+
+_Equinix Metal API defaults to a limit of 10 per page_
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+params = {
+ 'per_page': 50
+}
+devices = manager.list_devices(project_id='project_id', params = params)
+print(devices)
+```
+
+### Updating a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.get_device('device-id')
+device.hostname = "test02"
+device.description = "new description"
+
+device.update()
+```
+
+### Deleting a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.get_device('device-id')
+device.delete()
+```
+
+### Creating a Device Batch
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+batch01 = packet.DeviceBatch({
+ "hostname": "batch01",
+ "quantity": 2,
+ "facility": "ams1",
+ "operating_system": "centos_7",
+ "plan": "baremetal_0",
+ })
+
+device_batch = manager.create_batch(project_id="project_id", params=[batch01])
+print(device_batch)
+```
+
+### Creating a Volume
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+volume = manager.create_volume(project_id="project-id",
+ description="volume description",
+ plan="storage_1",
+ size="100",
+ facility="ewr1",
+ snapshot_count=7,
+ snapshot_frequency="1day")
+print(volume)
+```
+
+### Attaching and Detaching a Volume
+
+```python
+import packet
+import time
+
+manager = packet.Manager(auth_token="yourapiauthtoken")
+volume = manager.get_volume("volume_id")
+
+volume.attach("device_id")
+
+while True:
+ if manager.get_device("device_id").state == "active":
+ break
+ time.sleep(2)
+
+volume.detach()
+```
+
+## Creating and Restoring a Volume Snapshot
+
+```python
+import packet
+import time
+
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+volume = manager.get_volume("volume_id")
+volume.create_snapshot()
+
+while True:
+ if manager.get_volume(volume.id).state == "active":
+ break
+ time.sleep(2)
+
+snapshots = manager.get_snapshots(volume.id)
+volume.restore(snapshots[0].timestamp)
+```
+
+### Listing Project IP Addresses
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+ips = manager.list_project_ips("project_id")
+for ip in ips:
+ print(ip.address)
+```
+
+### Creating a Project for an Organization
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+project = manager.create_organization_project(
+ org_id="organization_id",
+ name="Integration Tests",
+ customdata={"tag": "QA"}
+)
+print(project)
+```
+
+### Creating a VLAN
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+vlan = manager.create_vlan(project_id="project_id", facility="ewr1")
+print(vlan)
+```
+
+## Contributing
+
+* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
+* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
+* Fork the project.
+* Start a feature/bugfix branch.
+* Commit and push until you are happy with your contribution.
+* You can test your changes with the `tox`, which is what GitHub Actions use to check builds.
+
+## Credits
+
+CargoCulted with much gratitude from:
+https://github.com/koalalorenzo/python-digitalocean
+
+## Changes
+
+See the [Changelog](CHANGELOG.md) for further details.
+
+# Changelog
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
+This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [1.45.0] - Unreleased
+### Added
+### Changed
+### Fixed
+
+## [1.44.3] - 2022-07-27
+### Fixed
+- Fix handling non-dict error data in ResponseError #128 #129
+
+## [1.44.2] - 2021-11-18
+### Fixed
+- Fix logic behind `validate_metro_capacity` #125
+
+## [1.44.1] - 2021-09-20
+### Fixed
+- Fix metros URL used in Metro API lists #122
+- Catch TypeError when HardwareReservations do not have a device assignment #120
+
+## [1.44.0] - 2021-05-19
+### Added
+- User-Agent header added to client requests #113
+- `Metro` class added (https://feedback.equinixmetal.com/changelog/new-metros-feature-live) #110
+- Adds `metro` property to `DeviceBatch`, `Device`, `IPAddress`, `VLan` #110
+- Adds `metro` to `create_device`, `reserve_ip_address`, `create_vlan`, `create_connection` #110
+- Adds `list_metros`, `validate_metro_capacity` to `Manager` #110
+- Adds `CODE_OF_CONDUCT.md`, `SUPPORT.md`, `OWNERS.md` #102, #101, #100
+- Adds package metadata for `author`, `author_email`, `copyright` #114
+### Changed
+- `facility` is now optional in `create_device`, `reserve_ip_address`, `create_vlan`, `create_connection` #110
+- CI is using GH Actions instead of Drone #115
+### Fixed
+- Handles when IPAddress Facility is null in API responses #117
+
+## [1.43.1] - 2020-09-04
+### Fixed
+- ResponseError fixed for Python2.7 compatibility
+
+## [1.43.0] - 2020-07-14
+### Added
+- Support for reinstalling the operating system to a device, including changing the operating system.
+- `Manager.create_vlan` now includes a description argument
+### Changed
+- `ResponseError` will now be raised when an API call results in an error
+### Fixed
+- `Manager.validate_capacity` now considers availability
+- `Manager.create_project_ssh_key` will retry when it encounters 404 responses following a successful creation.
+- API responses with `{"error":""}` keys were not handled well, and will now be handled just like `{"errors":[""]}` keys.
+
+## [1.42.0] - 2020-02-14
+### Added
+- Capturing of `available_in` to Plan
+- Capturing of `hardware_reservation`, `spot_price_max`, `termination_time`, and `provisioning_percentage` to `Device`
+- Support for creating project ssh keys
+- Support for passing `custom_data` when creating a device
+### Fixed
+- Black not building for CI and thus failing
+
+## [1.41.0] - 2019-10-16
+### Added
+- Support for retrieval of hardware reservations
+- CPR support at device creation
+
+## [1.40.0] - 2019-10-14
+### Added
+- Integration tests are only run if `PACKET_PYTHON_TEST_ACTUAL_API` envvar is set
+- Rescue action and along with test
+- Missing SPDX and source encoding meta comments
+### Removed
+- Use of Travis CI
+
+## [1.39.1] - 2019-09-17
+### Added
+- Support for `hardware_reservation_id`
+
+## [1.39.0] - 2019-08-26
+### Added
+- Support for Organizations, Events, Emails, VLAN, Snapshot Policies, Batches, Ports, VPN and IPs.
+- Live tests
+
+## [1.38.2] - 2019-05-30
+### Added
+- Test fixtures to sdist
+
+## [1.38.1] - 2019-05-30
+### Fixed
+- Changelog
+
+## [1.38.0] - 2019-05-30
+### Added
+- Support for python3.7
+- `legacy` param to `get_capacity` function
+### Removed
+- Support for python3.3
+### Changed
+- setup.py no longer converts markdown to reST because pypi now supports markdown, woop.
+
+## [1.37.1] - 2018-01-08
+### Fixed
+- Version number in setup.py
+
+## [1.37.0] - 2018-01-08
+### Added
+- Spot Market Support
+- Ability to specify ssh keys on device creation
+
+## [1.36.0] - 2017-10-16
+### Added
+- Better tests using PacketMockManager
+- Test on 2.7 and 3.[3-6]
+- Changelog
+
+### Changed
+- Use tox for testing
+
+## [1.35] - 2017-08-04
+### Fixed
+- Some tests were broken
+
+## [1.35]
+### Added
+- `public_ipv4_subnet_size`
+
+## [1.34] - 2017-08-04
+### Added
+- Custom iPXE and `always_pxe` setting
+- Volume coloning
+- Device Tags
+
+### Fixed
+- Handling of error messages from api response
+
+## [1.33] - 2017-03-15
+### Fixed
+- Default payment method
+
+
+%package help
+Summary: Development documents and examples for packet-python
+Provides: python3-packet-python-doc
+%description help
+# Equinix Metal
+
+A Python client for the Equinix Metal API.
+
+[![Build Status](https://github.com/packethost/packet-python/actions/workflows/test.yml/badge.svg)](https://github.com/packethost/packet-python/actions/workflows/test.yml)
+[![Stability: Maintained](https://img.shields.io/badge/Stability-Maintained-green.svg)](https://github.com/packethost/standards/blob/main/maintained-statement.md#maintained-statements)
+
+This repository is [Maintained](https://github.com/packethost/standards/blob/master/maintained-statement.md) meaning that this software is supported by Equinix Metal and its community - available to use in production environments.
+
+## Table of Contents
+
+* [Installation](#installation)
+* [Documentation](#documentation)
+* [Authentication](#authentication)
+* [Examples](#examples)
+ * [List Projects](#list-projects)
+ * [List Plans](#list-plans)
+ * [Creating a Device](#creating-a-device)
+ * [Checking the Status and Rebooting a Device](#checking-the-status-and-rebooting-a-device)
+ * [Listing all Devices Limiting to 50 per Page](#listing-all-devices-limiting-to-50-per-page)
+ * [Updating a Device](#updating-a-device)
+ * [Deleting a Device](#deleting-a-device)
+ * [Creating a Device Batch](#creating-a-device-batch)
+ * [Creating a Volume](#creating-a-volume)
+ * [Attaching and Detaching a Volume](#attaching-and-detaching-a-volume)
+ * [Creating and Restoring a Volume Snapshot](#creating-and-restoring-a-volume-snapshot)
+ * [Listing Project IP Addresses](#listing-project-ip-addresses)
+ * [Creating a Project for an Organization](#creating-a-project-for-an-organization)
+ * [Creating a VLAN](#creating-a-vlan)
+* [Contributing](#contributing)
+* [Copyright](#copyright)
+* [Changes](#changes)
+
+## Installation
+
+The Equinix Metal python api library can be installed using pip:
+
+ pip install packet-python
+
+Package information available here:
+
+https://pypi.python.org/pypi/packet-python
+
+## Documentation
+
+Full Equinix Metal API documenation is available here:
+[https://metal.equinix.com/developers/api/](https://metal.equinix.com/developers/api/)
+
+## Authentication
+
+Provide your credentials when instantiating client:
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+```
+
+## Examples
+
+### List Projects
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+projects = manager.list_projects()
+for project in projects:
+ print(project)
+```
+
+### List Plans
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+plans = manager.list_plans()
+for plan in plans:
+ print(plan)
+ if 'cpus' in plan.specs:
+ print(plan.specs['cpus'][0]['count'])
+```
+
+### Creating a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.create_device(project_id='project-id',
+ hostname='node-name-of-your-choice',
+ plan='baremetal_1', metro='sv',
+ operating_system='ubuntu_18_04')
+print(device)
+```
+
+### Checking the Status and Rebooting a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.get_device('device-id')
+print(device.state)
+device.reboot()
+```
+
+### Listing all Devices Limiting to 50 per Page
+
+_Equinix Metal API defaults to a limit of 10 per page_
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+params = {
+ 'per_page': 50
+}
+devices = manager.list_devices(project_id='project_id', params = params)
+print(devices)
+```
+
+### Updating a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.get_device('device-id')
+device.hostname = "test02"
+device.description = "new description"
+
+device.update()
+```
+
+### Deleting a Device
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+device = manager.get_device('device-id')
+device.delete()
+```
+
+### Creating a Device Batch
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+batch01 = packet.DeviceBatch({
+ "hostname": "batch01",
+ "quantity": 2,
+ "facility": "ams1",
+ "operating_system": "centos_7",
+ "plan": "baremetal_0",
+ })
+
+device_batch = manager.create_batch(project_id="project_id", params=[batch01])
+print(device_batch)
+```
+
+### Creating a Volume
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+volume = manager.create_volume(project_id="project-id",
+ description="volume description",
+ plan="storage_1",
+ size="100",
+ facility="ewr1",
+ snapshot_count=7,
+ snapshot_frequency="1day")
+print(volume)
+```
+
+### Attaching and Detaching a Volume
+
+```python
+import packet
+import time
+
+manager = packet.Manager(auth_token="yourapiauthtoken")
+volume = manager.get_volume("volume_id")
+
+volume.attach("device_id")
+
+while True:
+ if manager.get_device("device_id").state == "active":
+ break
+ time.sleep(2)
+
+volume.detach()
+```
+
+## Creating and Restoring a Volume Snapshot
+
+```python
+import packet
+import time
+
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+volume = manager.get_volume("volume_id")
+volume.create_snapshot()
+
+while True:
+ if manager.get_volume(volume.id).state == "active":
+ break
+ time.sleep(2)
+
+snapshots = manager.get_snapshots(volume.id)
+volume.restore(snapshots[0].timestamp)
+```
+
+### Listing Project IP Addresses
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+ips = manager.list_project_ips("project_id")
+for ip in ips:
+ print(ip.address)
+```
+
+### Creating a Project for an Organization
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+project = manager.create_organization_project(
+ org_id="organization_id",
+ name="Integration Tests",
+ customdata={"tag": "QA"}
+)
+print(project)
+```
+
+### Creating a VLAN
+
+```python
+import packet
+manager = packet.Manager(auth_token="yourapiauthtoken")
+
+vlan = manager.create_vlan(project_id="project_id", facility="ewr1")
+print(vlan)
+```
+
+## Contributing
+
+* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
+* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
+* Fork the project.
+* Start a feature/bugfix branch.
+* Commit and push until you are happy with your contribution.
+* You can test your changes with the `tox`, which is what GitHub Actions use to check builds.
+
+## Credits
+
+CargoCulted with much gratitude from:
+https://github.com/koalalorenzo/python-digitalocean
+
+## Changes
+
+See the [Changelog](CHANGELOG.md) for further details.
+
+# Changelog
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
+This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [1.45.0] - Unreleased
+### Added
+### Changed
+### Fixed
+
+## [1.44.3] - 2022-07-27
+### Fixed
+- Fix handling non-dict error data in ResponseError #128 #129
+
+## [1.44.2] - 2021-11-18
+### Fixed
+- Fix logic behind `validate_metro_capacity` #125
+
+## [1.44.1] - 2021-09-20
+### Fixed
+- Fix metros URL used in Metro API lists #122
+- Catch TypeError when HardwareReservations do not have a device assignment #120
+
+## [1.44.0] - 2021-05-19
+### Added
+- User-Agent header added to client requests #113
+- `Metro` class added (https://feedback.equinixmetal.com/changelog/new-metros-feature-live) #110
+- Adds `metro` property to `DeviceBatch`, `Device`, `IPAddress`, `VLan` #110
+- Adds `metro` to `create_device`, `reserve_ip_address`, `create_vlan`, `create_connection` #110
+- Adds `list_metros`, `validate_metro_capacity` to `Manager` #110
+- Adds `CODE_OF_CONDUCT.md`, `SUPPORT.md`, `OWNERS.md` #102, #101, #100
+- Adds package metadata for `author`, `author_email`, `copyright` #114
+### Changed
+- `facility` is now optional in `create_device`, `reserve_ip_address`, `create_vlan`, `create_connection` #110
+- CI is using GH Actions instead of Drone #115
+### Fixed
+- Handles when IPAddress Facility is null in API responses #117
+
+## [1.43.1] - 2020-09-04
+### Fixed
+- ResponseError fixed for Python2.7 compatibility
+
+## [1.43.0] - 2020-07-14
+### Added
+- Support for reinstalling the operating system to a device, including changing the operating system.
+- `Manager.create_vlan` now includes a description argument
+### Changed
+- `ResponseError` will now be raised when an API call results in an error
+### Fixed
+- `Manager.validate_capacity` now considers availability
+- `Manager.create_project_ssh_key` will retry when it encounters 404 responses following a successful creation.
+- API responses with `{"error":""}` keys were not handled well, and will now be handled just like `{"errors":[""]}` keys.
+
+## [1.42.0] - 2020-02-14
+### Added
+- Capturing of `available_in` to Plan
+- Capturing of `hardware_reservation`, `spot_price_max`, `termination_time`, and `provisioning_percentage` to `Device`
+- Support for creating project ssh keys
+- Support for passing `custom_data` when creating a device
+### Fixed
+- Black not building for CI and thus failing
+
+## [1.41.0] - 2019-10-16
+### Added
+- Support for retrieval of hardware reservations
+- CPR support at device creation
+
+## [1.40.0] - 2019-10-14
+### Added
+- Integration tests are only run if `PACKET_PYTHON_TEST_ACTUAL_API` envvar is set
+- Rescue action and along with test
+- Missing SPDX and source encoding meta comments
+### Removed
+- Use of Travis CI
+
+## [1.39.1] - 2019-09-17
+### Added
+- Support for `hardware_reservation_id`
+
+## [1.39.0] - 2019-08-26
+### Added
+- Support for Organizations, Events, Emails, VLAN, Snapshot Policies, Batches, Ports, VPN and IPs.
+- Live tests
+
+## [1.38.2] - 2019-05-30
+### Added
+- Test fixtures to sdist
+
+## [1.38.1] - 2019-05-30
+### Fixed
+- Changelog
+
+## [1.38.0] - 2019-05-30
+### Added
+- Support for python3.7
+- `legacy` param to `get_capacity` function
+### Removed
+- Support for python3.3
+### Changed
+- setup.py no longer converts markdown to reST because pypi now supports markdown, woop.
+
+## [1.37.1] - 2018-01-08
+### Fixed
+- Version number in setup.py
+
+## [1.37.0] - 2018-01-08
+### Added
+- Spot Market Support
+- Ability to specify ssh keys on device creation
+
+## [1.36.0] - 2017-10-16
+### Added
+- Better tests using PacketMockManager
+- Test on 2.7 and 3.[3-6]
+- Changelog
+
+### Changed
+- Use tox for testing
+
+## [1.35] - 2017-08-04
+### Fixed
+- Some tests were broken
+
+## [1.35]
+### Added
+- `public_ipv4_subnet_size`
+
+## [1.34] - 2017-08-04
+### Added
+- Custom iPXE and `always_pxe` setting
+- Volume coloning
+- Device Tags
+
+### Fixed
+- Handling of error messages from api response
+
+## [1.33] - 2017-03-15
+### Fixed
+- Default payment method
+
+
+%prep
+%autosetup -n packet-python-1.44.3
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-packet-python -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 1.44.3-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..6bdee41
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+2a82b54eec69110c40f9dcb0f212e199 packet-python-1.44.3.tar.gz