Metadata-Version: 2.1
Name: rgbnotes
Version: 1.0.9
Summary: Python bindings for the RGB Notes API
Home-page: https://github.com/rgbnotes/rgb-api-python
Author: rgbnotes
Author-email: support@rgbnotes.com
License: MIT
Platform: UNKNOWN
Requires-Dist: requests (>=0.8.8)

RGB Notes Python Library
========================

The RGB Notes Python library provides convenient access to the RGB Notes
API from applications written in the Python language. It includes a
pre-defined set of classes for API resources that initialize themselves
dynamically from API responses.

Documentation
-------------

See the `API docs <https://rgbnotes.com/help?section=api>`__.

Installation
------------

You don't need this source code unless you want to modify the package.
If you just want to use the package, just run:

::

    pip install --upgrade rgbnotes

Install from source with:

::

    python setup.py install

Requirements
~~~~~~~~~~~~

-  Python 2.6+ or Python 3.3+ (PyPy supported)
-  Requests Module (PyPy supported)

Usage
-----

The library needs to be configured with your account's secret key which
is available in your `RGB Notes
Settings <https://rgbnotes.com/login.php?r=/settings.php>`__.

**Config**

1. Edit **rgb\_api.conf** located in ``rgbnotes``
2. Copy and paste your ``client_email``, ``client_id`` and
   ``client_key`` in the appropriate fields

For Developers
==============

API v1
------

How to Create an Instance with config file: Config files with
``client_id`` and ``client_key`` can be put in one of those directories:
``/home/user.name/rgb_api.conf`` ``/etc/rgb_api.conf``

.. code:: py

    >>> import rgbnotes
    >>> api = rgbnotes.RGB_API(debug_http=True)
    DEBUG:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): rgbnotes.com
    send: 'POST /api/token/client HTTP/1.1\r\nHost: rgbnotes.com\r\nConnection: keep-alive\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nUser-Agent: python-requests/2.14.2\r\nContent-Length: 58\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\nclient_id=0123&client_key=0123456789abcdef0123456789abcdef'
    reply: 'HTTP/1.1 200 OK\r\n'
    header: Date: Sat, 09 Sep 2017 12:55:11 GMT
    header: Server: Apache/2.4.7 (Ubuntu)
    header: X-Powered-By: PHP/5.5.9-1ubuntu4.22
    header: Cache-Control: no-cache, must-revalidate
    header: Expires: Fri, 23 Feb 1979 05:00:00 GMT
    header: Content-Length: 200
    header: Keep-Alive: timeout=5, max=100
    header: Connection: Keep-Alive
    header: Content-Type: application/json
    DEBUG:requests.packages.urllib3.connectionpool:https://rgbnotes.com:443 "POST /api/token/client HTTP/1.1" 200 200

Load a Custom Config
~~~~~~~~~~~~~~~~~~~~

You may wish to load a different config than the one that comes packaged
and loaded by default by the API class. In that case you could do
something like this.

.. code:: py

    >>> import rgbnotes
    >>> rgbnotes.api_config.CONFIG_FILE = '/path/to/config.file'
    >>> config = rgbnotes.api_config.load_config()
    >>> # make an instance of the api
    >>> api = rgbnotes.RGB_API(config=config, debug_http=True)

Load instance with client secrets directly
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: py

    >>> import rgbnotes
    >>> api = rgbnotes.RGB_API(client_id='1234', 
                               client_key='123456abcdefghijk123567')

API Methods
-----------

Find Items
~~~~~~~~~~

.. code:: py

    >>> api.find('project', ['title', '==', 'Gold Python'])
    [{'description': 'Lorem ipsum dolor sit amet, consectetur adipiscing ', 'title': 'Gold Python', 'id': 1376, 'members': [177, 178], 'owner_id': 176}]

.. code:: py

    >>> api.find_one('project', ['title', '==', 'Gold Python'])
    {'description': 'Lorem ipsum dolor sit amet, consectetur adipiscing ', 'title': 'Gold Python', 'id': 1376, 'members': [177, 178], 'owner_id': 176}

Project Files
~~~~~~~~~~~~~

.. code:: py

    >>> api.get_project_files(1376)
    >>> from pprint import pprint
    >>> pprint(rgb_api.project_files)
    {u'filters': [],
     u'pagination': {u'limit': 20,
                     u'offset': 0,
                     u'sort_by': u'date',
                     u'sort_dir': u'desc',
                     u'total': 2},
     u'results': [{u'dateUploaded': u'2017-09-06 00:19:37',
                   u'description': u'Post file using token',
                   u'file': u'miss_fortune_surrender_league_anim_workshop.mp4',
                   u'filesize': 11877374,
                   u'filetype': u'video/mp4',
                   u'height': 576,
                   u'id': 1098,
                   u'project_id': 1376,
                   u'q_status': 50,
                   u'thumb': 1,
                   u'url': u'https://staging.rgbnotes.com/viewer/#1098',
                   u'user_id': 177,
                   u'width': 1024},
                  {u'dateUploaded': u'2017-08-05 01:47:02',
                   u'description': u'This assassin doesn\u2019t just strike from the shadows - he is the shadow. And they don\u2019t stand a chance.',
                   u'file': u'death_mark_league_animation.mp4',
                   u'filesize': 14902288,
                   u'filetype': u'video/mp4',
                   u'height': 576,
                   u'id': 1064,
                   u'project_id': 1376,
                   u'q_status': 50,
                   u'thumb': 1,
                   u'url': u'https://staging.rgbnotes.com/viewer/#1064',
                   u'user_id': 178,
                   u'width': 1024}]}

Project Notes
~~~~~~~~~~~~~

.. code:: py

    >>> api.get_project_notes(1376)
    >>> pprint(api.project_notes)
    {u'filters': [],
     u'pagination': {u'limit': 20,
                     u'offset': 0,
                     u'sort_by': u'date',
                     u'sort_dir': u'desc',
                     u'total': 3},
     u'results': [{u'comment': u'third note',
                   u'date': u'2017-08-30 02:23:20',
                   u'file_id': 1064,
                   u'id': 657,
                   u'project_id': 1376,
                   u'url': u'https://staging.rgbnotes.com/viewer/#1064/657',
                   u'user_id': 176},
                  {u'comment': u'second note',
                   u'date': u'2017-08-30 02:22:56',
                   u'file_id': 1064,
                   u'id': 656,
                   u'project_id': 1376,
                   u'url': u'https://staging.rgbnotes.com/viewer/#1064/656',
                   u'user_id': 176},
                  {u'comment': u'first note',
                   u'date': u'2017-08-30 02:21:20',
                   u'file_id': 1064,
                   u'id': 655,
                   u'project_id': 1376,
                   u'url': u'https://staging.rgbnotes.com/viewer/#1064/655',
                   u'user_id': 176}]}

Create User
~~~~~~~~~~~

.. code:: py

    >>> api.create_user('uakari', email='uakari@qtum-ico.com')
    Fetching: ['users']
    >>> api.created_users
    [{u'email': u'uakari@qtum-ico.com', u'id': 182, u'name': u'uakari'}]

.. code:: py

    >>> api.create_user('ether', email='f4ts3@ethereum1.top')
    Fetching: ['users']
    User "ether" already exists

Project Member Token
~~~~~~~~~~~~~~~~~~~~

.. code:: py

    >>> api.get_project_member_token(177, 1376)
    >>> api.project_member_token
    u'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1MDQwNTY4MzksIm5iZiI6MTUwNDA1NjgzOSwiZXhwIjoxNTA0MDYwNDM5LCJwaWQiOiIxMzc1IiwidWlkIjoiMTc3IiwibHZsIjoicHJvamVjdF9tZW1iZXIifQ.0DFXXigbByMkp76dpdONA18S7lCUC2npHe8aeK3GvcQ'
    >>> api.project_member_token_header
    {'Rgb-Project-Member-Token': u'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1MDQwNTY4MzksIm5iZiI6MTUwNDA1NjgzOSwiZXhwIjoxNTA0MDYwNDM5LCJwaWQiOiIxMzc1IiwidWlkIjoiMTc3IiwibHZsIjoicHJvamVjdF9tZW1iZXIifQ.0DFXXigbByMkp76dpdONA18S7lCUC2npHe8aeK3GvcQ'}

Upload
~~~~~~

.. code:: py

    >>> api.get_project_member_token(178, 1376)
    >>> f = open('D:/Videos/youtube-dl/darius_fear_league_anim_workshop.mp4', 'rb')
    >>> meta_data = {'description': 'File upload via python api', 'share-emails-array[0]': 'user@domain.com', 'share-ids-array[0]': 176}
    >>> file_data = {'file': f}
    >>> api.upload_file(meta_data, file_data)



