Metadata-Version: 2.1
Name: rest-api-lib-creator
Version: 0.1.1
Summary: Boilerplate-free way for creating libs for REST APIs
Home-page: https://github.com/filwaitman/rest-api-lib-creator
Author: Filipe Waitman
Author-email: filwaitman@gmail.com
License: UNKNOWN
Download-URL: https://github.com/filwaitman/rest-api-lib-creator/tarball/0.1.1
Description: [![Build Status](https://travis-ci.org/filwaitman/rest-api-lib-creator.svg?branch=master)](https://travis-ci.org/filwaitman/rest-api-lib-creator)
        
        ## REST API lib creator
        
        REST API lib creator is a boilerplate-free way for creating libs for RESTful APIs (specially the ones created using [Django REST framework](https://github.com/encode/django-rest-framework) - but certainly adaptable for other frameworks).
        
        **NOTES**:
        * This is a port for a personal project I made for myself. It may or may not solve your needs (it solves mine).
        * This is still alpha. I opened this on GH just so I can see if this is something I should improve (or not).
        
        
        ## Installation:
        
        ```bash
        pip install rest-api-lib-creator
        ```
        
        ## Examples:
        
        * The bare minimum for creating your own lib:
        ```python
        from rest_api_lib_creator.core import ViewsetRestApiLib
        
        
        class User(ViewsetRestApiLib):
            base_api_url = 'http://super.cool/api/users'
        ```
        
        * With this you can play around with your API:
        ```python
        users = User.list()  # Triggers a requests.get with url=http://super.cool/api/users
        isinstance(users[0], User)
        
        user = User.create(first_name='Filipe', last_name='Waitman', email='filwaitman@gmail.com', photo=open('image.png', 'rb'))  # Triggers a requests.post with url=http://super.cool/api/users and data={'first_name': 'Filipe', 'last_name': 'Waitman', 'email': 'filwaitman@gmail.com'} and files={'photo': <file binary content>}
        
        # Similarly to the call above you could create an empty object and save it:
        user = User()
        user.first_name = 'Filipe'
        user.last_name = 'Waitman'
        user.email = 'filwaitman@gmail.com'
        user.photo = open('image.png', 'rb')
        user.save()  # Triggers a requests.post with url=http://super.cool/api/users and data={'first_name': 'Filipe', 'last_name': 'Waitman', 'email': 'filwaitman@gmail.com'} and files={'photo': <file binary content>}
        
        isinstance(user, User)
        print(user.id)  # Prints the user id (assuming the API returned this field)
        print(user.first_name)  # )rints the user first name (assuming the API returned this field)
        user.first_name = 'New name'
        user.save()  # Triggers a requests.patch with url=http://super.cool/api/users/<user-id> and data={'first_name': 'New name'}
        
        user.delete()  # Triggers a requests.delete with url=http://super.cool/api/users/<user-id>
        ```
        
        * If your resource return other nested resources you can parse them as well:
        ```python
        class Pet(ViewsetRestApiLib):
            base_api_url = 'http://super.cool/api/pets'
            nested_objects = {
                'owner': User,
            }
        
        
        pet = Pet.retrieve('pet-id')
        isinstance(pet, Pet)
        isinstance(pet.owner, User)
        ```
        
        You can see all possible customizations [here](https://github.com/filwaitman/rest-api-lib-creator/blob/master/rest_api_lib_creator/core.py#L10-L30) (someday I'll improve this doc).
        
        ## Special thanks:
        
        * [Django REST framework](https://github.com/encode/django-rest-framework) - you're the best, seriously.
        * [Stripe-python lib](https://github.com/stripe/stripe-python) - which I used as an inspiration to create this project.
        
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
