Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ python setup.py install

**Supported versions** (offline tests pass with tox):

* python 3.2
* python 3.3
* python 2.6
* python 2.7
* <del>python 3.2</del> removed due to python2/3 support
* python 3.3
* python 3.4
* python 3.5
* pypi3 2.4.0
Expand All @@ -34,7 +36,7 @@ python setup.py install
* Scale horizontally by creating / destroying servers
* Scale vertically by changing the RAM, CPU, storage specs of any server
* Manage firewall (on/off and individual rules)
* since 0.2: full management of firewall rules
* since 0.2: full management of firewall rules

**TODO:**
* Cloning of storages
Expand Down Expand Up @@ -173,11 +175,11 @@ Tests located in `project_root/tests/` directory. Run with:
py.test tests/
```

To test against python3.2=< and pypy3-2.4.0, run:
To test against all supported python versions, run:

```python
tox
```
```

The project also supplies a small test suite to test against the live API at `test/live_test.py`. This suite is NOT run with `py.test` as it will permanently remove all resources related to an account. It should only be run with a throwaway dev-only account when preparing for a new release. It is not shipped with PyPI releases. See source code on how to run the live tests.

Expand Down
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
future==0.14.3
mock==1.0.1
py==1.4.26
pytest==2.6.4
requests==2.6.0
responses==0.3.0
six==1.9.0
wheel==0.24.0
4 changes: 3 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@
download='https://github.com/UpCloudLtd/upcloud-python-api/tarball/v0.2.0',
license='MIT',
install_requires=[
'future==0.14.3',
'mock==1.0.1',
'py==1.4.26',
'pytest==2.6.4',
'requests==2.6.0',
'responses==0.3.0',
'six==1.9.0'
'six==1.9.0',
'wheel==0.24.0'
]
)
10 changes: 9 additions & 1 deletion test/conftest.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from builtins import open
from future import standard_library
standard_library.install_aliases()
from builtins import object
import os
import pytest
import responses
Expand All @@ -10,7 +18,7 @@ def manager():
return upcloud.CloudManager("testuser", "mock-api-password")


class Mock():
class Mock(object):
base_url = 'https://api.upcloud.com/1.2'

@staticmethod
Expand Down
7 changes: 7 additions & 0 deletions test/live_test.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division
from __future__ import absolute_import
from builtins import input
from future import standard_library
standard_library.install_aliases()
import sys
from time import sleep

Expand Down
9 changes: 8 additions & 1 deletion test/test_cloud_manager.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
from builtins import object
import responses
import json
from conftest import Mock

class TestCloudManagerBasic():
class TestCloudManagerBasic(object):
@responses.activate
def test_get_account(self, manager):
data = Mock.mock_get("account")
Expand Down
9 changes: 8 additions & 1 deletion test/test_firewall.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
from builtins import object
from upcloud import FirewallRule
import responses
import json
Expand Down Expand Up @@ -38,7 +45,7 @@ def check_fields(body):



class TestFirewall():
class TestFirewall(object):
@responses.activate
def test_add_firewall_rule(self, manager):
Mock.mock_get("server/00798b85-efdc-41ca-8021-f6ef457b8531")
Expand Down
9 changes: 8 additions & 1 deletion test/test_ip_manager.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
from builtins import object
import responses
import json
from conftest import Mock

class TestIP():
class TestIP(object):
@responses.activate
def test_get_ip(self, manager):
data = Mock.mock_get("ip_address/10.1.0.101")
Expand Down
10 changes: 9 additions & 1 deletion test/test_server.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from builtins import str
from future import standard_library
standard_library.install_aliases()
from builtins import object
import responses
import json
from conftest import Mock
import pytest

class TestServer():
class TestServer(object):
@responses.activate
def test_get_server(self, manager):
data = Mock.mock_get("server/00798b85-efdc-41ca-8021-f6ef457b8531")
Expand Down
9 changes: 8 additions & 1 deletion test/test_server_creation.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
from builtins import object
from conftest import Mock
from upcloud import ZONE
from upcloud import Server
Expand All @@ -6,7 +13,7 @@
import json
import pytest

class TestCreateServer():
class TestCreateServer(object):


def test_storage_prepare_post_body(self, manager):
Expand Down
9 changes: 8 additions & 1 deletion test/test_storage.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
from builtins import object
import responses
import json
from conftest import Mock

class TestStorage():
class TestStorage(object):
@responses.activate
def test_get_storage(self, manager):
data = Mock.mock_get("storage/01d4fcd4-e446-433b-8a9c-551a1284952e")
Expand Down
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# and then run "tox" from this directory.

[tox]
envlist = py32, py33, py34, py35, pypy3
envlist = py26, py27, py33, py34, py35, pypy3

[testenv]
commands = py.test test/
Expand Down
6 changes: 6 additions & 0 deletions upcloud/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
"""
Python Interface to UpCloud's API
"""
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()

__version__ = "0.0.1"
__author__ = "Elias Nygren"
Expand Down
8 changes: 7 additions & 1 deletion upcloud/base.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
import json
import requests

Expand All @@ -14,7 +20,7 @@ def __init__(self, token):
Handles errors with __error_middleware.
"""
def request(self, method, endpoint, body=None):
if(method not in {"GET", "POST", "PUT", "DELETE"}):
if(method not in set(["GET", "POST", "PUT", "DELETE"])):
raise Exception("Invalid/Forbidden HTTP method")

url = "/" + self.api_v + endpoint
Expand Down
6 changes: 6 additions & 0 deletions upcloud/cloud_manager/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
from .cloud_manager import CloudManager
6 changes: 6 additions & 0 deletions upcloud/cloud_manager/cloud_manager.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
from ..base import BaseAPI

from .server_mixin import ServerManager
Expand Down
10 changes: 9 additions & 1 deletion upcloud/cloud_manager/firewall_mixin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from builtins import str
from future import standard_library
standard_library.install_aliases()
from builtins import object
from .. import FirewallRule

class FirewallManager():
class FirewallManager(object):
"""
Provides get / list / create / delete functionality for firewall rules.
These functions are used by the FirewallRule class but may also be used
Expand Down
9 changes: 8 additions & 1 deletion upcloud/cloud_manager/ip_address_mixin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
from builtins import object, str
from ..ip_address import IP_address

class IPManager():
class IPManager(object):
"""
Functions for managing IP-addresses. Intended to be used as a mixin for CloudManager.
"""
Expand Down
11 changes: 10 additions & 1 deletion upcloud/cloud_manager/server_mixin.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from builtins import dict
from builtins import str
from future import standard_library
standard_library.install_aliases()
from builtins import object
from ..ip_address import IP_address
from ..storage import Storage

Expand All @@ -6,7 +15,7 @@
from ..tools import assignIfExists


class ServerManager():
class ServerManager(object):
"""
Functions for managing IP-addresses. Intended to be used as a mixin for CloudManager.
"""
Expand Down
10 changes: 9 additions & 1 deletion upcloud/cloud_manager/storage_mixin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division
from __future__ import absolute_import
from builtins import dict
from future import standard_library
standard_library.install_aliases()
from builtins import object
from ..storage import Storage

class StorageManager():
class StorageManager(object):
"""
Functions for managing Storage disks. Intended to be used as a mixin for CloudManager.
"""
Expand Down
6 changes: 6 additions & 0 deletions upcloud/firewall.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
from .base import BaseAPI

class FirewallRule(object):
Expand Down
6 changes: 6 additions & 0 deletions upcloud/ip_address.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
from .base import BaseAPI

class IP_address(BaseAPI):
Expand Down
8 changes: 8 additions & 0 deletions upcloud/server.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from builtins import dict
from builtins import str
from future import standard_library
standard_library.install_aliases()
from .base import BaseAPI

class Server(BaseAPI):
Expand Down
11 changes: 10 additions & 1 deletion upcloud/storage.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from builtins import dict
from builtins import str
from future import standard_library
standard_library.install_aliases()
from builtins import object
from .tools import assignIfExists
from .tools import OperatingSystems

class Storage():
class Storage(object):

def __init__(self, **kwargs):
self.__reset(**kwargs)
Expand Down
Loading