Skip to content
REST API calls made easier
Python
Branch: master
Clone or download
Latest commit b808fe8 Mar 28, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
tests V2 release Mar 28, 2019
.gitignore V2 release Mar 28, 2019
.travis.yml requests patch update Nov 1, 2018
LICENSE born Mar 10, 2018
MANIFEST.in born Mar 10, 2018
README.md update docs Mar 28, 2019
requirements.txt Update requests from 2.20.0 to 2.21.0 Mar 9, 2019
resteasy.py fixed immutability Mar 28, 2019
setup.cfg born Mar 10, 2018
setup.py fixed immutability Mar 28, 2019

README.md

RESTEasy

REST API calls made easier

PyPI version Build Status Join the chat at https://gitter.im/rapidstack/RESTEasy

Installation

pip install resteasy

Usage and examples

Import

from resteasy import RESTEasy, json

api = RESTEasy(base_url='https://api.example.com',
               auth=('user', '****'),
               verify=False, cert=None, timeout=None,
               encoder=json.dumps, decoder=json.loads, debug=False)
               
# optional timeout
api.timeout = 60

Example 1: GitHub Jobs

api =  RESTEasy(base_url='https://jobs.github.com')

positions = api.route('positions.json')

positions.get(description='python', full_time=1)
# or
positions.do('GET', {'description': 'python', 'full_time': 1})

# GET https://jobs.github.com/positions.json?description=python&full_time=1

Example 2: All methods: GET, POST, PUT, PATCH, DELETE

from resteasy import RESTEasy

api = RESTEasy(base_url='https://jsonplaceholder.typicode.com')

posts = api.route('posts')

### GET (fetch resources)
posts.get()
posts.get(userId=1)
posts.route(1).get()

### POST (create a resource)
posts.post(title='foo', body='bar', userId=1)

### PUT & PATCH (update a resource)
posts.route(1).put(id=1, title='foo', body='bar', userId=1)
posts.route(1).patch(title='foo')

### DELETE (delete a resource)
posts.route(1).delete()

Example 3: Chuck Norris jokes

from __future__ import print_function
from resteasy import RESTEasy

api = RESTEasy(base_url='https://api.chucknorris.io')


### Print a random joke
jokes = api.route('jokes')
random = jokes.route('random')
print(random.get())

# GET https://api.chucknorris.io/jokes/random


### Get all categories
categories = jokes.route('categories').get()
print(categories)

# GET https://api.chucknorris.io/jokes/categories


### Print a random joke from each category
for category in categories:
    random_joke = random.get(category=category)
    print(category, ':', random_joke['value'])

    # GET https://api.chucknorris.io/jokes/random?category=<category>

Example 4: Using custom decoder: Parsing MyAnimeList HTML content

from resteasy import RESTEasy
from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    '''Custom HTML parser'''
    
    def handle_starttag(self, tag, attrs):
        '''Overriding abstract method'''
        if tag == 'title' and not self.found:
            self.found = True

    def handle_data(self, data):
        '''Overriding abstract method'''
        if self.found and self.anime is None:
            self.anime = data
    
    def parse(self, content):
        '''Parse content and return object'''
        self.found = False
        self.anime = None
        self.feed(content)
        title = self.anime.strip().replace(' - MyAnimeList.net', '') if self.found else None
        return dict(title=title)

parser = MyHTMLParser()

api = RESTEasy(base_url='https://myanimelist.net', decoder=parser.parse)

### One way
api.route('anime/1').get()

### Another way
api.route('anime', 1).get()

### Yet another way
api.route('anime').route(1).get()

### This is the last way I swear
api.route('anime').route(1).do('GET')

### Just kidding...
api.route('anime').route(1).request('GET').json()

# GET https://myanimelist.net/anime/1

Debugging

To enable debugging just pass or set debug=True

api.debug = True

Once debugging is set to 'True', Every HTTP call will return debug information instead of doing the actual request

>>> posts.debug = True
>>> posts.get(userId=1)
{'endpoint': 'https://jsonplaceholder.typicode.com/posts',
 'params': {'userId': 1},
 'method': 'GET',
 'timeout': None}

Exceptions

  • As this package uses requests module to perform HTTP calls, so all exceptions will be raised by requests module itself.
You can’t perform that action at this time.