:snake: Python SDK to query Scaleway APIs.

Overview

Scaleway SDK

Python SDK to query Scaleway's APIs.

Stable release: Last release Python versions Software license Requirements freshness

Development: Unit-tests status Coverage Status Code Quality

Installation

The package is available on pip. To install it in a virtualenv:

$ virtualenv my_virtualenv
$ source my_virtualenv/bin/activate
$ pip install scaleway-sdk

General principle

If you're looking to send a GET HTTP request against our APIs, like:

GET <api_url>/foo/bar

you only need to call the following pythonic code:

>>> from scaleway.apis import DummyAPI
>>> DummyAPI().query().foo.bar.get()

The magic here lies in scaleway.apis.*API instances, which all have a query method returning a slumber.API object. The latter handling all the excruciating details of the requests.

Documentation

Even if this SDK is designed to be developer-friendly and aim for self-service discovery, it is still recommended to read the official API documentation.

And because most of the provided helpers takes the form of pre-configured Slumber objects, a good read of Slumber documention is encouraged as well.

The list of available resources per API can be found [on the Scaleway API repository](https://github.com/scaleway/api.scaleway.com/blob/master/README.md#apis)

Examples

  • List your organizations:
>>> from scaleway.apis import AccountAPI
>>> api = AccountAPI(auth_token='')  # Set your token here!
>>> print api.query().organizations.get()
{u'organizations': [...]}
  • List your organizations, but get a flask.Response object instead of a dict:
>>> from scaleway.apis import AccountAPI
>>> api = AccountAPI(auth_token='')  # Set your token here!
>>> resp = api.query(serialize=False).organizations.get()
>>> print type(resp)
<Response [200]>
>>> print resp.headers
{...}  # Response HTTP headers.
>>> print resp.links
{...}  # Parsed "Link" HTTP header, for pagination.
>>> print resp.json()
{u'organizations': [...]}
  • List your servers:
>>> from scaleway.apis import ComputeAPI
>>> api = ComputeAPI(auth_token='')  # Set your token here!
>>> print api.query().servers.get()
{u'servers': [...]}
# Or choose your region, as in apis/api_compute.py
>>> api = ComputeAPI(region='ams1', auth_token='')  # Set your token here!
>>> print api.query().servers.get()
{u'servers': [...]}
  • Get details of a server:
>>> from scaleway.apis import ComputeAPI
>>> api = ComputeAPI(auth_token='')  # Set your token here!
>>> server_id = ''  # Set a server ID here!
>>> print api.query().servers(server_id).get()
{u'server': {...}}
  • Check if your token has the permission servers:read for the service compute for the organization 9a096d36-6bf9-470f-91df-2398aa7361f7:
>>> from scaleway.apis import AccountAPI
>>> api = AccountAPI(auth_token='')  # Set your token here!
>>> print api.has_perm(service='compute', name='servers:read',
...     resource='9a096d36-6bf9-470f-91df-2398aa7361f7')
False

Development

Assuming you are in a virtualenv:

$ pip install -e .
$ python -c 'from scaleway.apis import AccountAPI'
  # it works!

Test

To submit a patch, you'll need to test your code against python2.7 and python3.4. To run tests:

$ pip install nose coverage pycodestyle pylint
$ python setup.py nosetests --with-coverage
  (...)
$ pycodestyle scaleway
  (...)
$ pylint scaleway
  (...)
  • Coverage score should never be lower than before your patch.
  • PEP8 should never return an error.
  • Pylint score should never be lower than before your patch.

Alternatively, to run nosetests on both Python2.7 and Python3.4, you can run tox.

Alternative libraries / clients

We maintain a list of the current library/client implementations on the api.scaleway.com repository.

License

This software is licensed under a BSD 2-Clause License.

Comments
  • 404 Error on retrieving organizations

    404 Error on retrieving organizations

    The first example of the readme api.query().organizations.get() fails with error 404: {"message": "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.", "type": "404"}

    opened by DavHau 7
  • Is this sdk still maintained

    Is this sdk still maintained

    I was wondering if this sdk is still maintained by the scaleway team. It still has support for the non-working account.scaleway.com part of the api and doesn't support the new endpoints (like https://api.scaleway.com/account/v2alpha1/ssh-keys for managing ssh keys) that are supported in the scaleway go sdk. Not entirely related to this specific sdk, but this part of the api doesn't seem to be documented anywhere.

    opened by mpaulon 4
  • Not able to specify region because of the Hyphen

    Not able to specify region because of the Hyphen

    Trying to list the RDB instances but I have difficulties to specify the region. That -Hyphen seems to be the problem, but I am not Python expert enough figure out how to escape is correctly.

    api = API(base_url="https://api.scaleway.com", auth_token="yo")
    api.make_requests_session()
    instances = api.query().rdb.v1.regions.fr-par1.instances.get()
    
    Traceback (most recent call last):
      File "executeOrder.py", line 11, in <module>
        instances = api.query().rdb.v1.regions.fr-par1.instances.get()
    NameError: name 'par1' is not defined
    
    opened by Vad1mo 3
  • WIP: feat: add userdata api to SDK

    WIP: feat: add userdata api to SDK

    Hello! This PR implement the reading of user_data information from the SDK. As this feature need to call the base_url with a privileged port, I had to override the python requests object.

    Regarding the unit tests, I didn't find an elegant way to integrate them except mocking get get_userdata method and compare the result to a string (which is basically comparing two static strings). If you have any piece of advice about it, I would be more than happy to integrate them.

    opened by abarbare 3
  • add user_data parameter in create server API

    add user_data parameter in create server API

    I think it would be great to have ability to send user_data(usually text that is interpreted as bash script) when creating a server via the API, https://github.com/scaleway/api.scaleway.com/blob/master/contents/server.md#create-a-new-server-post

    This way, a scaleway customer can be able to specify things that they would like to run during the server creation.

    This already exists in other cloud platforms, eg:

    The ovh create server api has a parameter called userData that you can specify:: https://api.ovh.com/console/#/cloud/project/%7BserviceName%7D/instance#POST The digitalocean API also takes a parameter called user_data, https://developers.digitalocean.com/documentation/v2/#create-a-new-droplet This is very useful especially when you want to automate creation of servers that are different from each other but are based off the same image.

    opened by komuw 3
  • Unclear case with api_account.perm_matches and None request

    Unclear case with api_account.perm_matches and None request

    Reading the following line:

            self.assertTrue(self.api.perm_matches(None, 'object:*'))
    

    I would assume the opposite, can you clarify this case and maybe update the docstring?

    question 
    opened by moul 2
  • fix: keep support for python 2

    fix: keep support for python 2

    cachetools recently drop py2 support, we would like to keep for some time so simply use the latest py2 compatible cachetools when using py2. Py3 is free to use the latest and greatest.

    opened by CedricCabessa 1
  • refactor: move init.py to apis subpackage

    refactor: move init.py to apis subpackage

    As of today because of the scaleway/__init__.py we cannot share the scaleway namespace with other libraries.

    Based on https://packaging.python.org/guides/packaging-namespace-packages/ we implement the "pkgutil-style namespace packages" method

    opened by jerome-quere 1
  • Add a short (ttl-based) cache to `AccountAPI.get_quotas()`

    Add a short (ttl-based) cache to `AccountAPI.get_quotas()`

    The goal is to optimize usecases like this :

    api = AccountAPI(...)
    api.has_quota(organization=organization, resource='servers', used=10)
    api.has_quota(organization=organization, resource='volumes', used=10)
    api.has_quota(organization=organization, resource='ips', used=10)
    

    => we check several quotas of the same organization in a very short period of time, typically within less than 1sec

    In that usecase, the current AccountAPI does 3 calls to API-account, which is sub-optimal. But we can easily cache "in-ram" the response to get_quotas(), because it's getting all quotas of a given organization, and re-use it for the 2nd and 3rd call.

    NB: currently, each call to api-account to get quotas takes ~60 ms, so each call avoided is a lot :)

    opened by frivoire 1
  • Create server raise Client Error 400?

    Create server raise Client Error 400?

    Using following:

    compute_api = ComputeAPI(auth_token=secret_key, region='pl-waw-1')
    
    compute_api.query().servers.post({'project': org_id, "name": 'test', "commercial_type": "DEV1-M"})
    

    Got:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/draven/.local/lib/python2.7/site-packages/slumber/__init__.py", line 167, in post
        resp = self._request("POST", data=data, files=files, params=kwargs)
      File "scaleway/scaleway/apis/__init__.py", line 87, in _request
        return super(SlumberResource, self)._request(*args, **kwargs)
      File "/home/draven/.local/lib/python2.7/site-packages/slumber/__init__.py", line 101, in _request
        raise exception_class("Client Error %s: %s" % (resp.status_code, url), response=resp, content=resp.content)
    slumber.exceptions.HttpClientError: Client Error 400: https://api-pl-waw.scaleway.com/instance/v1/zones/pl-waw-1/servers/
    

    Since there is no documents about how to use POST / Create so based on other sample such as this I assume the above code is correct.

    But Error 400 ?

    opened by DravenJohnson 2
  • Documentation for other request types than GET missing

    Documentation for other request types than GET missing

    All examples in the readme only demonstrate the usage for GET requests. There is not a single example for other request types like POST. I needed to dig inside the docs of Slumber to find out how to do them. Including at least one example on how to create a new server or similar would save some time for a lot of people i guess.

    opened by DavHau 1
  • Exception text not useful

    Exception text not useful

    When a request returns an error the exception printed to the console is quite useless because it does not contain the message of the response. Just the error code. It would be more convenient if the message of result would be included in the Exception text.

    opened by DavHau 0
Releases(v1.14.0)
Owner
Scaleway
APIs, SDKs and open source projects from Scaleway
Scaleway
Quickly visualize docker networks with graphviz.

Docker Network Graph Visualize the relationship between Docker networks and containers as a neat graphviz graph. Example Usage usage: docker-net-graph

Leo Verto 43 Dec 12, 2022
A full-featured Python wrapper for the Onfleet API.

UPDATE: Please use Onfleet's wrapper instead. This repository is not maintained. https://github.com/onfleet/pyonfleet --- Python-Onfleet   python-onfl

Lionheart Software 11 Jan 13, 2022
Discord Remote Administration Tool fully written in Python3.

DiscordRAT Discord Remote Administration Tool fully written in Python3. This is a RAT controlled over Discord with over 50 post exploitation modules.

hozzywozzy 2 Feb 06, 2022
Cogs for RedDiscord-Bot V3

Cogs v3 Disclaimer: This is an unapproved repo, meaning no one has formally reviewed this repo yet and any loss of data in your bot isn't my fault (An

Honkertonken 5 Nov 17, 2022
Telegram Link Wayback Bot. This bot archives a web page thrown at itself with wayback Machine (Archive.org).

Telegram Link Wayback Bot. This bot archives a web page thrown at itself with wayback Machine (Archive.org).

Hüzünlü Artemis [HuzunluArtemis] 11 Feb 18, 2022
A telegram user and chat info extractor with pyrogram python module

Made with Python3 (C) @FayasNoushad Copyright permission under MIT License License - https://github.com/FayasNoushad/Telegram-Info/blob/main/LICENSE

Fayas Noushad 8 Dec 22, 2021
twtxt is a decentralised, minimalist microblogging service for hackers.

twtxt twtxt is a decentralised, minimalist microblogging service for hackers. So you want to get some thoughts out on the internet in a convenient and

buckket 1.8k Jan 09, 2023
It was increasingly cumbersome to eye-grep CF output in the AWS console.

cfplot Overview It was increasingly cumbersome to eye-grep CF output in the AWS console. I couldn't find another tool out there to provide individual

46 Dec 26, 2022
A bot to playing music in telegram vcg

Idzeroid Music|| Idzeroid Music adalah sebuah repository music bot telegram untuk memainkan suara di voice chat group anda. Fyi This repo im using for

idzeroid 1 Oct 26, 2021
Simple debugger and tester for dico-command.

dp Simple debugger and tester for dico-command. Installation pip install -U dico-dp Usage bot = dico_command.Bot(...) ... bot.load_module("dp") Comma

3 Nov 19, 2022
Google Translater v2

Google_Translater_V2 Features Supporting 100 More Languages You can Set Your Custom Languages Supporting in Group Configs TG_BOT_TOKEN - Get bot token

Lntechnical 31 Nov 12, 2022
SEP Finder Bot

SEP Finder Bot This is a Telegram bot that will help you find the correct SEP and Baseband files to use for your device with futurerestore. Usage A ho

6 Dec 03, 2022
Automation for grabbing keys from a Linux host. Useful during red team exercises to quickly help assess what access to a Linux host can lead to.

keygrabber Automation for grabbing keys from a Linux host. This can be helpful during red team exercises when you gain access to a Linux host and want

Cedric Owens 14 Sep 27, 2022
Public repo of the bot

wiki-reddit-bot Public repo of u/wikipedia_answer_bot Tools Language: Python Libraries: praw (Reddit API) mediawikiapi (Wikipedia API) tenacity How it

TheBugYouCantFix 51 Dec 03, 2022
Auto file forward bot with python

Auto-File-Forward-Bot Auto file forward bot. Without Admin Permission in FROM_CHANNEL Only Give Permission In your Telegram Personal Channel Please fo

Milas 1 Oct 15, 2021
Cord Python API Client

Cord Python API Client The data programming platform for AI 💻 Features Minimal low-level Python client that allows you to interact with Cord's API Su

Cord 52 Nov 25, 2022
A Python wrapper for the tesseract-ocr API

tesserocr A simple, Pillow-friendly, wrapper around the tesseract-ocr API for Optical Character Recognition (OCR). tesserocr integrates directly with

Fayez 1.7k Jan 03, 2023
Collection of script to manage WLED devices

Collection of script to manage WLED devices

Daniel Poelzleithner 4 Sep 26, 2022
An EmbedBuilder in Python for discord.py embeds. Pip Module.

Discord.py-MaxEmbeds An EmbedBuilder for Discord bots in Python. You need discord.py to use this module. Installation Step 1 First you have to install

Max Tischberger 6 Jan 13, 2022
批量下载抖音无水印视频

版权说明 本项目fork自Johnserf-Seed TikTokDownload。目的是为了增加个性化的功能,若想体验更多完善的功能请支持原作者的项目。 免责声明 本代码仅用于学习,下载后请勿用于商业用途。 环境要求 请检查宿主机,是否安装了python环境,并且配置了环境变量 pytho

Zhiwu Mao 44 Dec 28, 2022