Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-digitalocean for
openSUSE:Factory checked in at 2022-01-23 12:16:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-digitalocean (Old)
and /work/SRC/openSUSE:Factory/.python-digitalocean.new.1938 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-digitalocean"
Sun Jan 23 12:16:04 2022 rev:4 rq:948133 version:1.17.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-digitalocean/python-digitalocean.changes
2021-05-18 18:27:39.430646523 +0200
+++
/work/SRC/openSUSE:Factory/.python-digitalocean.new.1938/python-digitalocean.changes
2022-01-23 12:17:04.151914056 +0100
@@ -1,0 +2,10 @@
+Sat Jan 15 16:19:25 UTC 2022 - Dirk M??ller <[email protected]>
+
+- update to 1.17.0:
+ * Update records
+ * Delete records
+ * Support for Projects in Manager
+ * Loadbalancer missing properties
+ * Updated Loadbalancer docs
+
+-------------------------------------------------------------------
Old:
----
v1.16.0.tar.gz
New:
----
v1.17.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-digitalocean.spec ++++++
--- /var/tmp/diff_new_pack.G43GVZ/_old 2022-01-23 12:17:04.607911008 +0100
+++ /var/tmp/diff_new_pack.G43GVZ/_new 2022-01-23 12:17:04.615910955 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-digitalocean
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-digitalocean
-Version: 1.16.0
+Version: 1.17.0
Release: 0
Summary: Python module for Digital Ocean droplets
License: LGPL-3.0-only
++++++ v1.16.0.tar.gz -> v1.17.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-digitalocean-1.16.0/.github/workflows/tests.yml
new/python-digitalocean-1.17.0/.github/workflows/tests.yml
--- old/python-digitalocean-1.16.0/.github/workflows/tests.yml 2020-11-19
21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/.github/workflows/tests.yml 2021-10-02
22:37:13.000000000 +0200
@@ -1,16 +1,16 @@
name: Python Tests
on:
push:
- branches: [ master ]
+ branches: [ main ]
pull_request:
- branches: [ master ]
+ branches: [ main ]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
- python-version: ['2.x', '3.x', 3.6, 3.7, 3.8]
+ python-version: ['2.x', '3.x', 3.7, 3.8, 3.9]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-digitalocean-1.16.0/Dockerfile
new/python-digitalocean-1.17.0/Dockerfile
--- old/python-digitalocean-1.16.0/Dockerfile 2020-11-19 21:15:10.000000000
+0100
+++ new/python-digitalocean-1.17.0/Dockerfile 2021-10-02 22:37:13.000000000
+0200
@@ -5,10 +5,10 @@
RUN pip3 install -U python-digitalocean pytest
-WORKDIR /root/
-ADD . /root/python-digitalocean
-
WORKDIR /root/python-digitalocean
+ADD requirements.txt requirements.txt
RUN pip3 install -U -r requirements.txt
+ADD . /root/python-digitalocean
+
CMD python3 -m pytest
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-digitalocean-1.16.0/README.md
new/python-digitalocean-1.17.0/README.md
--- old/python-digitalocean-1.16.0/README.md 2020-11-19 21:15:10.000000000
+0100
+++ new/python-digitalocean-1.17.0/README.md 2021-10-02 22:37:13.000000000
+0200
@@ -21,7 +21,7 @@
- [Creating a Droplet and checking its
status](#creating-a-droplet-and-checking-its-status)
- [Checking the status of the droplet](#checking-the-status-of-the-droplet)
- [Listing the Projects](#listing-the-projects)
- - [Assign a resource for specific
project](#assigne-a-resource-for-specific-project)
+ - [Assign a resource for specific
project](#assign-a-resource-for-specific-project)
- [List all the resources of a
project](#list-all-the-resources-of-a-project)
- [Add SSHKey into DigitalOcean
Account](#add-sshkey-into-digitalocean-account)
- [Creating a new droplet with all your SSH
keys](#creating-a-new-droplet-with-all-your-ssh-keys)
@@ -84,7 +84,37 @@
**[??? back to top](#table-of-contents)**
-## Examples
+##??Examples
+
+### Listing the Projects
+
+This example shows how to list all the projects:
+
+```python
+import digitalocean
+manager = digitalocean.Manager(token="secretspecialuniquesnowflake")
+my_projects = manager.get_all_projects()
+print(my_projects)
+```
+
+### Assign a resource for specific project
+
+```python
+import digitalocean
+manager = digitalocean.Manager(token="secretspecialuniquesnowflake")
+my_projects = manager.get_all_projects()
+my_projects[0].assign_resource(["do:droplet:<Droplet Number>"])
+```
+
+### List all the resources of a project
+```python
+import digitalocean
+manager = digitalocean.Manager(token="secretspecialuniquesnowflake")
+my_projects = manager.get_all_projects()
+resources = my_projects[0].get_all_resources()
+print(resources)
+```
+
### Listing the droplets
This example shows how to list all the active droplets:
@@ -240,7 +270,7 @@
### Creating a Firewall
-This example creates a firewall that only accepts inbound tcp traffic on port
80 from a specific load balancer and allows outbout tcp traffic on all ports to
all addresses.
+This example creates a firewall that only accepts inbound tcp traffic on port
80 from a specific load balancer and allows outbound tcp traffic on all ports
to all addresses.
```python
from digitalocean import Firewall, InboundRule, OutboundRule, Destinations,
Sources
@@ -319,7 +349,7 @@
### Update a domain record
-This example shows how to create new domain record (sub.example.com):
+This example shows how to modify an existing domain record (sub.example.com):
```python
import digitalocean
@@ -328,7 +358,7 @@
records = domain.get_records()
id = None
for r in records:
- if r.name == 'usb':
+ if r.name == 'sub':
r.data = '1.1.1.1'
r.save()
```
@@ -375,7 +405,7 @@
## Session customization
-You can take advandtage of the
[requests](http://docs.python-requests.org/en/master/) library and configure
the HTTP client under python-digitalocean.
+You can take advantage of the
[requests](http://docs.python-requests.org/en/master/) library and configure
the HTTP client under python-digitalocean.
### Configure retries in case of connection error
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-digitalocean-1.16.0/digitalocean/Action.py
new/python-digitalocean-1.17.0/digitalocean/Action.py
--- old/python-digitalocean-1.16.0/digitalocean/Action.py 2020-11-19
21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/digitalocean/Action.py 2021-10-02
22:37:13.000000000 +0200
@@ -53,7 +53,7 @@
for attr in action.keys():
setattr(self, attr, action[attr])
- def wait(self, update_every_seconds=1):
+ def wait(self, update_every_seconds=1, repeat=20):
"""
Wait until the action is marked as completed or with an error.
It will return True in case of success, otherwise False.
@@ -62,9 +62,13 @@
update_every_seconds - int : number of seconds to wait before
checking if the action is completed.
"""
+ counter = 0
while self.status == u'in-progress':
sleep(update_every_seconds)
self.load()
+ counter += 1
+ if counter > repeat:
+ break
return self.status == u'completed'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-digitalocean-1.16.0/digitalocean/Domain.py
new/python-digitalocean-1.17.0/digitalocean/Domain.py
--- old/python-digitalocean-1.16.0/digitalocean/Domain.py 2020-11-19
21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/digitalocean/Domain.py 2021-10-02
22:37:13.000000000 +0200
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
from .Record import Record
-from .baseapi import BaseAPI, GET, POST, DELETE
+from .baseapi import BaseAPI, GET, POST, DELETE, PUT
class Domain(BaseAPI):
@@ -80,15 +80,65 @@
if kwargs.get("tag", None):
data['tag'] = kwargs.get("tag", "issue")
+ if self.ttl:
+ data['ttl'] = self.ttl
+
return self.get_data(
"domains/%s/records" % self.name,
type=POST,
params=data
)
+ def update_domain_record(self, *args, **kwargs):
+ """
+ Args:
+ type: The record type (A, MX, CNAME, etc).
+ name: The host name, alias, or service being defined by the
record
+ data: Variable data depending on record type.
+ priority: The priority of the host
+ port: The port that the service is accessible on
+ weight: The weight of records with the same priority
+ """
+ data = {
+ 'id': kwargs.get("id", None),
+ 'domain': kwargs.get("domain", None)
+ }
+
+ if kwargs.get("data", None):
+ data['data'] = kwargs.get("data", None)
+
+ if kwargs.get("type", None):
+ data['type'] = kwargs.get("type", None)
+
+ if kwargs.get("name", None):
+ data['name'] = kwargs.get("name", None)
+
+ if kwargs.get("port", None):
+ data['port'] = kwargs.get("port", None)
+
+ if kwargs.get("weight", None):
+ data['weight'] = kwargs.get("weight", None)
+
+ return self.get_data(
+ "domains/%s/records/%s" % (data['domain'], data['id']),
+ type=PUT,
+ params=data
+ )
+
+ def delete_domain_record(self, *args, **kwargs):
+
+ data = {
+ 'id': kwargs.get("id", None)
+ }
+
+ return self.get_data(
+ "domains/%s/records/%s" % (self.name, data['id']),
+ type=DELETE
+ )
+
def create(self):
"""
- Create new doamin
+ Create new domain
"""
# URL https://api.digitalocean.com/v2/domains
data = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-digitalocean-1.16.0/digitalocean/LoadBalancer.py
new/python-digitalocean-1.17.0/digitalocean/LoadBalancer.py
--- old/python-digitalocean-1.16.0/digitalocean/LoadBalancer.py 2020-11-19
21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/digitalocean/LoadBalancer.py 2021-10-02
22:37:13.000000000 +0200
@@ -91,6 +91,9 @@
Args:
name (str): The Load Balancer's name
region (str): The slug identifier for a DigitalOcean region
+ size (str): The size of the load balancer. The available sizes \
+ are "lb-small", "lb-medium", or "lb-large". Once you have \
+ created a load balancer, you can't change its size
algorithm (str, optional): The load balancing algorithm to be \
used. Currently, it must be either "round_robin" or \
"least_connections"
@@ -100,6 +103,11 @@
redirect_http_to_https (bool, optional): A boolean indicating \
whether HTTP requests to the Load Balancer should be \
redirected to HTTPS
+ enable_proxy_protocol (bool, optional): A boolean value indicating \
+ whether PROXY Protocol is in use
+ enable_backend_keepalive (bool, optional): A boolean value \
+ indicating whether HTTP keepalive connections are maintained \
+ to target Droplets.
droplet_ids (obj:`list` of `int`): A list of IDs representing \
Droplets to be added to the Load Balancer (mutually \
exclusive with 'tag')
@@ -112,6 +120,7 @@
* id (str): An unique identifier for a LoadBalancer
* ip (str): Public IP address for a LoadBalancer
* region (str): The slug identifier for a DigitalOcean region
+ * size (str): The size of the load balancer
* algorithm (str, optional): The load balancing algorithm to be \
used. Currently, it must be either "round_robin" or \
"least_connections"
@@ -121,6 +130,11 @@
* redirect_http_to_https (bool, optional): A boolean indicating \
whether HTTP requests to the Load Balancer should be \
redirected to HTTPS
+ * enable_proxy_protocol (bool, optional): A boolean value indicating \
+ whether PROXY Protocol is in use
+ * enable_backend_keepalive (bool, optional): A boolean value \
+ indicating whether HTTP keepalive connections are maintained \
+ to target Droplets.
* droplet_ids (obj:`list` of `int`): A list of IDs representing \
Droplets to be added to the Load Balancer
* tag (str): A string representing a DigitalOcean Droplet tag
@@ -132,11 +146,14 @@
self.id = None
self.name = None
self.region = None
+ self.size = None
self.algorithm = None
self.forwarding_rules = []
self.health_check = None
self.sticky_sessions = None
self.redirect_http_to_https = False
+ self.enable_proxy_protocol = False
+ self.enable_backend_keepalive = False
self.droplet_ids = []
self.tag = None
self.status = None
@@ -160,7 +177,7 @@
def load(self):
"""
- Loads updated attributues for a LoadBalancer object.
+ Loads updated attributes for a LoadBalancer object.
Requires self.id to be set.
"""
@@ -195,6 +212,9 @@
Args:
name (str): The Load Balancer's name
region (str): The slug identifier for a DigitalOcean region
+ size (str): The size of the load balancer. The available sizes
+ are "lb-small", "lb-medium", or "lb-large". Once you have
+ created a load balancer, you can't change its size
algorithm (str, optional): The load balancing algorithm to be
used. Currently, it must be either "round_robin" or
"least_connections"
@@ -204,6 +224,11 @@
redirect_http_to_https (bool, optional): A boolean indicating
whether HTTP requests to the Load Balancer should be
redirected to HTTPS
+ enable_proxy_protocol (bool, optional): A boolean value indicating
+ whether PROXY Protocol is in use
+ enable_backend_keepalive (bool, optional): A boolean value
+ indicating whether HTTP keepalive connections are maintained
+ to target Droplets.
droplet_ids (obj:`list` of `int`): A list of IDs representing
Droplets to be added to the Load Balancer (mutually
exclusive with 'tag')
@@ -215,8 +240,11 @@
rules_dict = [rule.__dict__ for rule in self.forwarding_rules]
params = {'name': self.name, 'region': self.region,
+ 'size': self.size,
'forwarding_rules': rules_dict,
'redirect_http_to_https': self.redirect_http_to_https,
+ 'enable_proxy_protocol': self.enable_proxy_protocol,
+ 'enable_backend_keepalive': self.enable_backend_keepalive,
'vpc_uuid': self.vpc_uuid}
if self.droplet_ids and self.tag:
@@ -239,6 +267,7 @@
self.id = data['load_balancer']['id']
self.ip = data['load_balancer']['ip']
self.algorithm = data['load_balancer']['algorithm']
+ self.size = data['load_balancer']['size']
self.health_check = HealthCheck(
**data['load_balancer']['health_check'])
self.sticky_sessions = StickySessions(
@@ -246,6 +275,9 @@
self.droplet_ids = data['load_balancer']['droplet_ids']
self.status = data['load_balancer']['status']
self.created_at = data['load_balancer']['created_at']
+ self.redirect_http_to_https =
data['load_balancer']['redirect_http_to_https']
+ self.enable_proxy_protocol =
data['load_balancer']['enable_proxy_protocol']
+ self.enable_backend_keepalive =
data['load_balancer']['enable_backend_keepalive']
self.vpc_uuid = data['load_balancer']['vpc_uuid']
return self
@@ -261,6 +293,8 @@
'region': self.region['slug'],
'forwarding_rules': forwarding_rules,
'redirect_http_to_https': self.redirect_http_to_https,
+ 'enable_proxy_protocol': self.enable_proxy_protocol,
+ 'enable_backend_keepalive': self.enable_backend_keepalive,
'vpc_uuid': self.vpc_uuid
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-digitalocean-1.16.0/digitalocean/Manager.py
new/python-digitalocean-1.17.0/digitalocean/Manager.py
--- old/python-digitalocean-1.16.0/digitalocean/Manager.py 2020-11-19
21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/digitalocean/Manager.py 2021-10-02
22:37:13.000000000 +0200
@@ -25,7 +25,6 @@
from .VPC import VPC
from .Project import Project
-
class Manager(BaseAPI):
def __init__(self, *args, **kwargs):
super(Manager, self).__init__(*args, **kwargs)
@@ -445,5 +444,35 @@
return vpcs
+ def get_all_projects(self):
+ """
+ All the projects of the account
+ """
+ data = self.get_data("projects")
+ projects = list()
+ for jsoned in data['projects']:
+ project = Project(**jsoned)
+ project.token = self.token
+ projects.append(project)
+ return projects
+
+ def get_project(self, project_id):
+ """
+ Return a Project by its ID.
+ """
+ return Project.get_object(
+ api_token=self.token,
+ project_id=project_id,
+ )
+
+ def get_default_project(self):
+ """
+ Return default project of the account
+ """
+ return Project.get_object(
+ api_token=self.token,
+ project_id="default",
+ )
+
def __str__(self):
return "<Manager>"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-digitalocean-1.16.0/digitalocean/Tag.py
new/python-digitalocean-1.17.0/digitalocean/Tag.py
--- old/python-digitalocean-1.16.0/digitalocean/Tag.py 2020-11-19
21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/digitalocean/Tag.py 2021-10-02
22:37:13.000000000 +0200
@@ -187,3 +187,7 @@
return False
+
+ def __str__(self):
+ return "<Tag: %s>" % self.name
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-digitalocean-1.16.0/digitalocean/VPC.py
new/python-digitalocean-1.17.0/digitalocean/VPC.py
--- old/python-digitalocean-1.16.0/digitalocean/VPC.py 2020-11-19
21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/digitalocean/VPC.py 2021-10-02
22:37:13.000000000 +0200
@@ -25,7 +25,7 @@
CIDR notation
* urn (str): The uniform resource name (URN) for the VPC
* created_at (str): A string that represents when the VPC was created
- * default (bool): A boolen representing whether or not the VPC is the \
+ * default (bool): A boolean representing whether or not the VPC is the
\
user's default VPC for the region
"""
def __init__(self, *args, **kwargs):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-digitalocean-1.16.0/digitalocean/baseapi.py
new/python-digitalocean-1.17.0/digitalocean/baseapi.py
--- old/python-digitalocean-1.16.0/digitalocean/baseapi.py 2020-11-19
21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/digitalocean/baseapi.py 2021-10-02
22:37:13.000000000 +0200
@@ -222,6 +222,7 @@
try:
data = req.json()
+
except ValueError as e:
raise JSONReadError(
'Read failed from DigitalOcean: %s' % str(e)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-digitalocean-1.16.0/digitalocean/tests/data/domains/update_record.json
new/python-digitalocean-1.17.0/digitalocean/tests/data/domains/update_record.json
---
old/python-digitalocean-1.16.0/digitalocean/tests/data/domains/update_record.json
1970-01-01 01:00:00.000000000 +0100
+++
new/python-digitalocean-1.17.0/digitalocean/tests/data/domains/update_record.json
2021-10-02 22:37:13.000000000 +0200
@@ -0,0 +1,12 @@
+{
+ "domain_record": {
+ "id": 30,
+ "type": "CNAME",
+ "name": "www",
+ "data": "@",
+ "priority": null,
+ "port": null,
+ "ttl": 600,
+ "weight": null
+ }
+}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-digitalocean-1.16.0/digitalocean/tests/data/loadbalancer/all.json
new/python-digitalocean-1.17.0/digitalocean/tests/data/loadbalancer/all.json
---
old/python-digitalocean-1.16.0/digitalocean/tests/data/loadbalancer/all.json
2020-11-19 21:15:10.000000000 +0100
+++
new/python-digitalocean-1.17.0/digitalocean/tests/data/loadbalancer/all.json
2021-10-02 22:37:13.000000000 +0200
@@ -1,154 +1,85 @@
{
"load_balancers": [
- {
- "id": "4de2ac7b-495b-4884-9e69-1050d6793cd4",
- "name": "example-lb-02",
- "ip": "104.131.186.248",
- "algorithm": "round_robin",
- "status": "new",
- "created_at": "2017-02-01T22:22:58Z",
- "forwarding_rules": [
- {
- "entry_protocol": "http",
- "entry_port": 80,
- "target_protocol": "http",
- "target_port": 80,
- "certificate_id": "",
- "tls_passthrough": false
- },
- {
- "entry_protocol": "https",
- "entry_port": 444,
- "target_protocol": "https",
- "target_port": 443,
- "certificate_id": "",
- "tls_passthrough": true
- }
- ],
- "health_check": {
- "protocol": "http",
- "port": 80,
- "path": "/",
- "check_interval_seconds": 10,
- "response_timeout_seconds": 5,
- "healthy_threshold": 5,
- "unhealthy_threshold": 3
- },
- "sticky_sessions": {
- "type": "none"
- },
- "region": {
- "name": "New York 3",
- "slug": "nyc3",
- "sizes": [
- "512mb",
- "1gb",
- "2gb",
- "4gb",
- "8gb",
- "16gb",
- "m-16gb",
- "32gb",
- "m-32gb",
- "48gb",
- "m-64gb",
- "64gb",
- "m-128gb",
- "m-224gb"
- ],
- "features": [
- "private_networking",
- "backups",
- "ipv6",
- "metadata",
- "install_agent"
+ {
+ "id": "4de7ac8b-495b-4884-9a69-1050c6793cd6",
+ "name": "example-lb-01",
+ "ip": "104.131.186.241",
+ "size": "lb-small",
+ "algorithm": "round_robin",
+ "status": "new",
+ "created_at": "2017-02-01T22:22:58Z",
+ "forwarding_rules": [
+ {
+ "entry_protocol": "http",
+ "entry_port": 80,
+ "target_protocol": "http",
+ "target_port": 80,
+ "certificate_id": "",
+ "tls_passthrough": false
+ },
+ {
+ "entry_protocol": "https",
+ "entry_port": 444,
+ "target_protocol": "https",
+ "target_port": 443,
+ "certificate_id": "",
+ "tls_passthrough": true
+ }
],
- "available": true
- },
- "tag": "web",
- "droplet_ids": [
- 3164444,
- 3164445
- ],
- "redirect_http_to_https": false,
- "vpc_uuid": "08187eaa-90eb-40d6-a8f0-0222b28ded72"
- },
- {
- "id": "4de7ac8b-495b-4884-9a69-1050c6793cd6",
- "name": "example-lb-01",
- "ip": "104.131.186.241",
- "algorithm": "round_robin",
- "status": "new",
- "created_at": "2017-02-01T22:22:58Z",
- "forwarding_rules": [
- {
- "entry_protocol": "http",
- "entry_port": 80,
- "target_protocol": "http",
- "target_port": 80,
- "certificate_id": "",
- "tls_passthrough": false
+ "health_check": {
+ "protocol": "http",
+ "port": 80,
+ "path": "/",
+ "check_interval_seconds": 10,
+ "response_timeout_seconds": 5,
+ "healthy_threshold": 5,
+ "unhealthy_threshold": 3
},
- {
- "entry_protocol": "https",
- "entry_port": 444,
- "target_protocol": "https",
- "target_port": 443,
- "certificate_id": "",
- "tls_passthrough": true
- }
- ],
- "health_check": {
- "protocol": "http",
- "port": 80,
- "path": "/",
- "check_interval_seconds": 10,
- "response_timeout_seconds": 5,
- "healthy_threshold": 5,
- "unhealthy_threshold": 3
- },
- "sticky_sessions": {
- "type": "none"
- },
- "region": {
- "name": "New York 3",
- "slug": "nyc3",
- "sizes": [
- "512mb",
- "1gb",
- "2gb",
- "4gb",
- "8gb",
- "16gb",
- "m-16gb",
- "32gb",
- "m-32gb",
- "48gb",
- "m-64gb",
- "64gb",
- "m-128gb",
- "m-224gb"
- ],
- "features": [
- "private_networking",
- "backups",
- "ipv6",
- "metadata",
- "install_agent"
+ "sticky_sessions": {
+ "type": "none"
+ },
+ "region": {
+ "name": "New York 3",
+ "slug": "nyc3",
+ "sizes": [
+ "s-1vcpu-1gb",
+ "s-1vcpu-2gb",
+ "s-1vcpu-3gb",
+ "s-2vcpu-2gb",
+ "s-3vcpu-1gb",
+ "s-2vcpu-4gb",
+ "s-4vcpu-8gb",
+ "s-6vcpu-16gb",
+ "s-8vcpu-32gb",
+ "s-12vcpu-48gb",
+ "s-16vcpu-64gb",
+ "s-20vcpu-96gb",
+ "s-24vcpu-128gb",
+ "s-32vcpu-192gb"
+ ],
+ "features": [
+ "private_networking",
+ "backups",
+ "ipv6",
+ "metadata",
+ "install_agent"
+ ],
+ "available": true
+ },
+ "tag": "",
+ "droplet_ids": [
+ 3164444,
+ 3164445
],
- "available": true
- },
- "tag": "",
- "droplet_ids": [
- 3164444,
- 3164445
- ],
- "redirect_http_to_https": false,
- "vpc_uuid": "08187eaa-90eb-40d6-a8f0-0222b28ded72"
- }],
+ "redirect_http_to_https": false,
+ "enable_proxy_protocol": false,
+ "enable_backend_keepalive": false,
+ "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
+ }
+ ],
"links": {
},
"meta": {
"total": 1
}
-}
\ No newline at end of file
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-digitalocean-1.16.0/digitalocean/tests/data/loadbalancer/save.json
new/python-digitalocean-1.17.0/digitalocean/tests/data/loadbalancer/save.json
---
old/python-digitalocean-1.16.0/digitalocean/tests/data/loadbalancer/save.json
2020-11-19 21:15:10.000000000 +0100
+++
new/python-digitalocean-1.17.0/digitalocean/tests/data/loadbalancer/save.json
2021-10-02 22:37:13.000000000 +0200
@@ -42,20 +42,20 @@
"name": "New York 3",
"slug": "nyc3",
"sizes": [
- "512mb",
- "1gb",
- "2gb",
- "4gb",
- "8gb",
- "16gb",
- "m-16gb",
- "32gb",
- "m-32gb",
- "48gb",
- "m-64gb",
- "64gb",
- "m-128gb",
- "m-224gb"
+ "s-1vcpu-1gb",
+ "s-1vcpu-2gb",
+ "s-1vcpu-3gb",
+ "s-2vcpu-2gb",
+ "s-3vcpu-1gb",
+ "s-2vcpu-4gb",
+ "s-4vcpu-8gb",
+ "s-6vcpu-16gb",
+ "s-8vcpu-32gb",
+ "s-12vcpu-48gb",
+ "s-16vcpu-64gb",
+ "s-20vcpu-96gb",
+ "s-24vcpu-128gb",
+ "s-32vcpu-192gb"
],
"features": [
"private_networking",
@@ -71,7 +71,9 @@
34153248,
34153250
],
- "redirect_http_to_https": false,
- "vpc_uuid": "08187eaa-90eb-40d6-a8f0-0222b28ded72"
+ "redirect_http_to_https": true,
+ "enable_proxy_protocol": true,
+ "enable_backend_keepalive": true,
+ "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-digitalocean-1.16.0/digitalocean/tests/data/loadbalancer/single.json
new/python-digitalocean-1.17.0/digitalocean/tests/data/loadbalancer/single.json
---
old/python-digitalocean-1.16.0/digitalocean/tests/data/loadbalancer/single.json
2020-11-19 21:15:10.000000000 +0100
+++
new/python-digitalocean-1.17.0/digitalocean/tests/data/loadbalancer/single.json
2021-10-02 22:37:13.000000000 +0200
@@ -3,6 +3,7 @@
"id": "4de7ac8b-495b-4884-9a69-1050c6793cd6",
"name": "example-lb-01",
"ip": "104.131.186.241",
+ "size": "lb-small",
"algorithm": "round_robin",
"status": "new",
"created_at": "2017-02-01T22:22:58Z",
@@ -40,20 +41,20 @@
"name": "New York 3",
"slug": "nyc3",
"sizes": [
- "512mb",
- "1gb",
- "2gb",
- "4gb",
- "8gb",
- "16gb",
- "m-16gb",
- "32gb",
- "m-32gb",
- "48gb",
- "m-64gb",
- "64gb",
- "m-128gb",
- "m-224gb"
+ "s-1vcpu-1gb",
+ "s-1vcpu-2gb",
+ "s-1vcpu-3gb",
+ "s-2vcpu-2gb",
+ "s-3vcpu-1gb",
+ "s-2vcpu-4gb",
+ "s-4vcpu-8gb",
+ "s-6vcpu-16gb",
+ "s-8vcpu-32gb",
+ "s-12vcpu-48gb",
+ "s-16vcpu-64gb",
+ "s-20vcpu-96gb",
+ "s-24vcpu-128gb",
+ "s-32vcpu-192gb"
],
"features": [
"private_networking",
@@ -70,6 +71,8 @@
3164445
],
"redirect_http_to_https": false,
- "vpc_uuid": "08187eaa-90eb-40d6-a8f0-0222b28ded72"
+ "enable_proxy_protocol": false,
+ "enable_backend_keepalive": false,
+ "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
}
-}
\ No newline at end of file
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-digitalocean-1.16.0/digitalocean/tests/data/loadbalancer/single_tag.json
new/python-digitalocean-1.17.0/digitalocean/tests/data/loadbalancer/single_tag.json
---
old/python-digitalocean-1.16.0/digitalocean/tests/data/loadbalancer/single_tag.json
2020-11-19 21:15:10.000000000 +0100
+++
new/python-digitalocean-1.17.0/digitalocean/tests/data/loadbalancer/single_tag.json
2021-10-02 22:37:13.000000000 +0200
@@ -1,8 +1,9 @@
{
"load_balancer": {
- "id": "4de2ac7b-495b-4884-9e69-1050d6793cd4",
- "name": "example-lb-02",
+ "id": "4de7ac8b-495b-4884-9a69-1050c6793cd6",
+ "name": "example-lb-01",
"ip": "104.131.186.248",
+ "size": "lb-small",
"algorithm": "round_robin",
"status": "new",
"created_at": "2017-02-01T22:22:58Z",
@@ -40,20 +41,20 @@
"name": "New York 3",
"slug": "nyc3",
"sizes": [
- "512mb",
- "1gb",
- "2gb",
- "4gb",
- "8gb",
- "16gb",
- "m-16gb",
- "32gb",
- "m-32gb",
- "48gb",
- "m-64gb",
- "64gb",
- "m-128gb",
- "m-224gb"
+ "s-1vcpu-1gb",
+ "s-1vcpu-2gb",
+ "s-1vcpu-3gb",
+ "s-2vcpu-2gb",
+ "s-3vcpu-1gb",
+ "s-2vcpu-4gb",
+ "s-4vcpu-8gb",
+ "s-6vcpu-16gb",
+ "s-8vcpu-32gb",
+ "s-12vcpu-48gb",
+ "s-16vcpu-64gb",
+ "s-20vcpu-96gb",
+ "s-24vcpu-128gb",
+ "s-32vcpu-192gb"
],
"features": [
"private_networking",
@@ -64,12 +65,14 @@
],
"available": true
},
- "tag": "web",
"droplet_ids": [
3164444,
3164445
],
+ "tag": "web:prod",
"redirect_http_to_https": false,
- "vpc_uuid": "08187eaa-90eb-40d6-a8f0-0222b28ded72"
+ "enable_proxy_protocol": false,
+ "enable_backend_keepalive": false,
+ "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
}
-}
\ No newline at end of file
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-digitalocean-1.16.0/digitalocean/tests/test_domain.py
new/python-digitalocean-1.17.0/digitalocean/tests/test_domain.py
--- old/python-digitalocean-1.16.0/digitalocean/tests/test_domain.py
2020-11-19 21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/digitalocean/tests/test_domain.py
2021-10-02 22:37:13.000000000 +0200
@@ -68,6 +68,44 @@
self.assertEqual(response['domain_record']['ttl'], 600)
@responses.activate
+ def test_update_new_domain_record(self):
+ data = self.load_from_file('domains/update_record.json')
+ record_id = str(json.loads(data)['domain_record']['id'])
+
+ url = self.base_url + "domains/example.com/records/" + record_id
+ responses.add(responses.PUT,
+ url,
+ body=data,
+ status=201,
+ content_type='application/json')
+
+ response = self.domain.update_domain_record(
+ domain="example.com", id=record_id, type="CNAME", name="www",
data="@")
+
+ self.assert_url_query_equal(
+ responses.calls[0].request.url,
+ self.base_url + "domains/example.com/records/" + record_id)
+ self.assertEqual(json.loads(responses.calls[0].request.body),
+ {"type": "CNAME", "id": record_id, "domain":
"example.com", "data": "@", "name": "www"})
+ self.assertEqual(response['domain_record']['type'], "CNAME")
+ self.assertEqual(response['domain_record']['name'], "www")
+ self.assertEqual(response['domain_record']['data'], "@")
+ self.assertEqual(response['domain_record']['ttl'], 600)
+
+ @responses.activate
+ def test_delete_domain_record(self):
+ record_id = "1234"
+ url = self.base_url + "domains/example.com/records/" + record_id
+ responses.add(responses.DELETE,
+ url,
+ status=204,
+ content_type='application/json')
+
+ self.domain.delete_domain_record(id=record_id)
+
+ self.assertEqual(responses.calls[0].request.url, url)
+
+ @responses.activate
def test_create_new_srv_record_zero_priority(self):
data = self.load_from_file('domains/create_srv_record.json')
@@ -116,7 +154,7 @@
@responses.activate
def test_create(self):
- data = self.load_from_file('domains/create.json')
+ data = self.load_from_file( 'domains/create.json')
url = self.base_url + "domains"
responses.add(responses.POST,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-digitalocean-1.16.0/digitalocean/tests/test_load_balancer.py
new/python-digitalocean-1.17.0/digitalocean/tests/test_load_balancer.py
--- old/python-digitalocean-1.16.0/digitalocean/tests/test_load_balancer.py
2020-11-19 21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/digitalocean/tests/test_load_balancer.py
2021-10-02 22:37:13.000000000 +0200
@@ -11,7 +11,7 @@
def setUp(self):
super(TestLoadBalancer, self).setUp()
self.lb_id = '4de7ac8b-495b-4884-9a69-1050c6793cd6'
- self.vpc_uuid = "08187eaa-90eb-40d6-a8f0-0222b28ded72"
+ self.vpc_uuid = "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
self.lb = digitalocean.LoadBalancer(id=self.lb_id, token=self.token)
@responses.activate
@@ -31,6 +31,7 @@
self.assert_get_url_equal(responses.calls[0].request.url, url)
self.assertEqual(self.lb.id, self.lb_id)
self.assertEqual(self.lb.region['slug'], 'nyc3')
+ self.assertEqual(self.lb.size, 'lb-small')
self.assertEqual(self.lb.algorithm, 'round_robin')
self.assertEqual(self.lb.ip, '104.131.186.241')
self.assertEqual(self.lb.name, 'example-lb-01')
@@ -44,6 +45,9 @@
self.assertEqual(self.lb.health_check.port, 80)
self.assertEqual(self.lb.sticky_sessions.type, 'none')
self.assertEqual(self.lb.droplet_ids, [3164444, 3164445])
+ self.assertEqual(self.lb.redirect_http_to_https, False)
+ self.assertEqual(self.lb.enable_proxy_protocol, False)
+ self.assertEqual(self.lb.enable_backend_keepalive, False)
self.assertEqual(self.lb.vpc_uuid, self.vpc_uuid)
@responses.activate
@@ -70,6 +74,7 @@
sticky = digitalocean.StickySessions(type='none')
lb = digitalocean.LoadBalancer(name='example-lb-01', region='nyc3',
algorithm='round_robin',
+ size='lb-small',
forwarding_rules=[rule1, rule2],
health_check=check,
sticky_sessions=sticky,
@@ -84,6 +89,7 @@
self.assertEqual(lb.algorithm, 'round_robin')
self.assertEqual(lb.ip, '104.131.186.241')
self.assertEqual(lb.name, 'example-lb-01')
+ self.assertEqual(lb.size, 'lb-small')
self.assertEqual(len(resp_rules), 2)
self.assertEqual(resp_rules[0].entry_protocol, 'http')
self.assertEqual(resp_rules[0].entry_port, 80)
@@ -94,6 +100,9 @@
self.assertEqual(lb.health_check.port, 80)
self.assertEqual(lb.sticky_sessions.type, 'none')
self.assertEqual(lb.droplet_ids, [3164444, 3164445])
+ self.assertEqual(lb.redirect_http_to_https, False)
+ self.assertEqual(lb.enable_proxy_protocol, False)
+ self.assertEqual(lb.enable_backend_keepalive, False)
self.assertEqual(lb.vpc_uuid, self.vpc_uuid)
@responses.activate
@@ -120,21 +129,23 @@
sticky = digitalocean.StickySessions(type='none')
lb = digitalocean.LoadBalancer(name='example-lb-01', region='nyc3',
algorithm='round_robin',
+ size='lb-small',
forwarding_rules=[rule1, rule2],
health_check=check,
sticky_sessions=sticky,
redirect_http_to_https=False,
- tag='web',
+ tag='web:prod',
vpc_uuid=self.vpc_uuid,
token=self.token).create()
resp_rules = lb.forwarding_rules
self.assertEqual(responses.calls[0].request.url,
self.base_url + 'load_balancers')
- self.assertEqual(lb.id, '4de2ac7b-495b-4884-9e69-1050d6793cd4')
+ self.assertEqual(lb.id, '4de7ac8b-495b-4884-9a69-1050c6793cd6')
self.assertEqual(lb.algorithm, 'round_robin')
self.assertEqual(lb.ip, '104.131.186.248')
self.assertEqual(lb.name, 'example-lb-01')
+ self.assertEqual(lb.size, 'lb-small')
self.assertEqual(len(resp_rules), 2)
self.assertEqual(resp_rules[0].entry_protocol, 'http')
self.assertEqual(resp_rules[0].entry_port, 80)
@@ -144,8 +155,11 @@
self.assertEqual(lb.health_check.protocol, 'http')
self.assertEqual(lb.health_check.port, 80)
self.assertEqual(lb.sticky_sessions.type, 'none')
- self.assertEqual(lb.tag, 'web')
+ self.assertEqual(lb.tag, 'web:prod')
self.assertEqual(lb.droplet_ids, [3164444, 3164445])
+ self.assertEqual(lb.redirect_http_to_https, False)
+ self.assertEqual(lb.enable_proxy_protocol, False)
+ self.assertEqual(lb.enable_backend_keepalive, False)
self.assertEqual(lb.vpc_uuid, self.vpc_uuid)
@responses.activate
@@ -167,11 +181,12 @@
sticky = digitalocean.StickySessions(type='none')
lb = digitalocean.LoadBalancer(name='example-lb-01', region='nyc3',
algorithm='round_robin',
+ size='lb-small',
forwarding_rules=[rule],
health_check=check,
sticky_sessions=sticky,
redirect_http_to_https=False,
- tag='web',
+ tag='web:prod',
droplet_ids=[123456, 789456],
vpc_uuid=self.vpc_uuid,
token=self.token)
@@ -223,6 +238,8 @@
self.assertEqual(self.lb.droplet_ids, [3164444, 3164445])
self.assertEqual(self.lb.tag, '')
self.assertEqual(self.lb.redirect_http_to_https, False)
+ self.assertEqual(self.lb.enable_proxy_protocol, False)
+ self.assertEqual(self.lb.enable_backend_keepalive, False)
self.assertEqual(self.lb.vpc_uuid, self.vpc_uuid)
data2 = self.load_from_file('loadbalancer/save.json')
@@ -239,6 +256,9 @@
self.lb.sticky_sessions.cookie_ttl_seconds = 300
self.lb.droplet_ids = [34153248, 34153250]
self.lb.vpc_uuid = self.vpc_uuid
+ self.lb.redirect_http_to_https = True
+ self.lb.enable_proxy_protocol = True
+ self.lb.enable_backend_keepalive = True
res = self.lb.save()
lb = digitalocean.LoadBalancer(**res['load_balancer'])
@@ -275,7 +295,9 @@
self.assertEqual(lb.sticky_sessions.cookie_ttl_seconds, 300)
self.assertEqual(lb.droplet_ids, [34153248, 34153250])
self.assertEqual(lb.tag, '')
- self.assertEqual(lb.redirect_http_to_https, False)
+ self.assertEqual(lb.redirect_http_to_https, True)
+ self.assertEqual(lb.enable_proxy_protocol, True)
+ self.assertEqual(lb.enable_backend_keepalive, True)
self.assertEqual(self.lb.vpc_uuid, self.vpc_uuid)
@responses.activate
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-digitalocean-1.16.0/digitalocean/tests/test_manager.py
new/python-digitalocean-1.17.0/digitalocean/tests/test_manager.py
--- old/python-digitalocean-1.16.0/digitalocean/tests/test_manager.py
2020-11-19 21:15:10.000000000 +0100
+++ new/python-digitalocean-1.17.0/digitalocean/tests/test_manager.py
2021-10-02 22:37:13.000000000 +0200
@@ -451,10 +451,10 @@
lbs = self.manager.get_all_load_balancers()
resp_rules = lbs[0].forwarding_rules[0]
- self.assertEqual(lbs[0].id, '4de2ac7b-495b-4884-9e69-1050d6793cd4')
+ self.assertEqual(lbs[0].id, '4de7ac8b-495b-4884-9a69-1050c6793cd6')
self.assertEqual(lbs[0].algorithm, 'round_robin')
- self.assertEqual(lbs[0].ip, '104.131.186.248')
- self.assertEqual(lbs[0].name, 'example-lb-02')
+ self.assertEqual(lbs[0].ip, '104.131.186.241')
+ self.assertEqual(lbs[0].name, 'example-lb-01')
self.assertEqual(len(lbs[0].forwarding_rules), 2)
self.assertEqual(resp_rules.entry_protocol, 'http')
self.assertEqual(resp_rules.entry_port, 80)
@@ -464,7 +464,7 @@
self.assertEqual(lbs[0].health_check.protocol, 'http')
self.assertEqual(lbs[0].health_check.port, 80)
self.assertEqual(lbs[0].sticky_sessions.type, 'none')
- self.assertEqual(lbs[0].tag, 'web')
+ self.assertEqual(lbs[0].tag, '')
self.assertEqual(lbs[0].droplet_ids, [3164444, 3164445])
@responses.activate
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-digitalocean-1.16.0/setup.py
new/python-digitalocean-1.17.0/setup.py
--- old/python-digitalocean-1.16.0/setup.py 2020-11-19 21:15:10.000000000
+0100
+++ new/python-digitalocean-1.17.0/setup.py 2021-10-02 22:37:13.000000000
+0200
@@ -15,7 +15,7 @@
setup(
name='python-digitalocean',
- version='1.16.0',
+ version='1.17.0',
description='digitalocean.com API to manage Droplets and Images',
author='Lorenzo Setale ( http://who.is.lorenzo.setale.me/? )',
author_email='[email protected]',