From d2eaca15a7e315b6882fbaee034ed7af375a3a11 Mon Sep 17 00:00:00 2001 From: Francesco Siddi Date: Mon, 31 Aug 2015 19:16:38 +0200 Subject: [PATCH] Added groups and organizations --- attractsdk/__init__.py | 1 + attractsdk/groups.py | 12 ++++++++++++ attractsdk/nodes.py | 17 +++++++++++++++++ attractsdk/organizations.py | 12 ++++++++++++ attractsdk/resource.py | 24 ++++++++++++++++++++++++ 5 files changed, 66 insertions(+) create mode 100644 attractsdk/groups.py create mode 100644 attractsdk/organizations.py diff --git a/attractsdk/__init__.py b/attractsdk/__init__.py index 07cbf59..7203c46 100644 --- a/attractsdk/__init__.py +++ b/attractsdk/__init__.py @@ -4,6 +4,7 @@ from .nodes import NodeType from .users import User from .files import File from .tokens import Token +from .groups import Group from .binary_files import binaryFile from .exceptions import ResourceNotFound, UnauthorizedAccess, MissingConfig from .config import __version__, __pypi_packagename__ diff --git a/attractsdk/groups.py b/attractsdk/groups.py new file mode 100644 index 0000000..d6bb5d1 --- /dev/null +++ b/attractsdk/groups.py @@ -0,0 +1,12 @@ +from .resource import List +from .resource import Find +from .resource import Create +from .resource import Post +from .resource import Update +from .resource import Delete + + +class Group(List, Find, Create, Post, Update, Delete): + """Group class wrapping the REST nodes endpoint + """ + path = "groups" diff --git a/attractsdk/nodes.py b/attractsdk/nodes.py index bd4d017..1fce060 100755 --- a/attractsdk/nodes.py +++ b/attractsdk/nodes.py @@ -7,6 +7,7 @@ from .resource import Delete from .resource import Replace from . import utils +from .api import Api class Node(List, Find, Create, Post, Update, Delete, Replace): @@ -14,6 +15,22 @@ class Node(List, Find, Create, Post, Update, Delete, Replace): """ path = "nodes" + @classmethod + def find(cls, resource_id, params=None, api=None): + """Locate resource, usually using ObjectID + + Usage:: + + >>> Node.find("507f1f77bcf86cd799439011") + """ + + api = api or Api.Default() + + url = utils.join_url(cls.path, str(resource_id)) + if params: + url = utils.join_url_params(url, params) + return cls(api.get(url)) + class NodeType(List, Find, Create, Post, Delete): """NodeType class wrapping the REST node_types endpoint diff --git a/attractsdk/organizations.py b/attractsdk/organizations.py new file mode 100644 index 0000000..d70ed1e --- /dev/null +++ b/attractsdk/organizations.py @@ -0,0 +1,12 @@ +from .resource import List +from .resource import Find +from .resource import Create +from .resource import Post +from .resource import Update +from .resource import Delete + + +class Organization(List, Find, Create, Post, Update, Delete): + """Organization class wrapping the REST nodes endpoint + """ + path = "organizations" diff --git a/attractsdk/resource.py b/attractsdk/resource.py index ff27766..2c58b1d 100644 --- a/attractsdk/resource.py +++ b/attractsdk/resource.py @@ -114,6 +114,30 @@ class Find(Resource): url = utils.join_url(cls.path, str(resource_id)) return cls(api.get(url)) + @classmethod + def find_first(cls, params, api=None): + """Get list of resources, allowing some parameters such as: + - count + - start_time + - sort_by + - sort_order + + Usage:: + + >>> shots = Nodes.all({'count': 2, 'type': 'shot'}) + """ + api = api or Api.Default() + + # Force delivery of only 1 result + params['max_results'] = 1 + url = utils.join_url_params(cls.path, params) + + response = api.get(url) + res = cls(response) + if res._items: + return res._items[0] + else: + return None class List(Resource):