From 6540aba45e922e3271c319f2d7e21d62018414fd Mon Sep 17 00:00:00 2001 From: David Gay i Tello Date: Fri, 6 Feb 2015 12:31:33 +0100 Subject: [PATCH] desk: add support for companies endpoint --- libsaas/services/desk/companies.py | 52 ++++++++++++++++++++++++++++++ libsaas/services/desk/service.py | 16 ++++++++- test/test_desk.py | 22 +++++++++++++ 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 libsaas/services/desk/companies.py diff --git a/libsaas/services/desk/companies.py b/libsaas/services/desk/companies.py new file mode 100644 index 0000000..3994a29 --- /dev/null +++ b/libsaas/services/desk/companies.py @@ -0,0 +1,52 @@ +from libsaas import http, parsers +from libsaas.services import base + +from . import resource, cases, customers + + +class CompaniesBase(resource.DeskResource): + + path = 'companies' + + def delete(self, *args, **kwargs): + raise base.MethodNotSupported() + + +class Companies(CompaniesBase): + + def update(self, *args, **kwargs): + raise base.MethodNotSupported() + + @base.apimethod + def get(self, embed=None, fields=None, per_page=None, page=None): + """ + Retrieve a paginated list of all companies + + Upstream documentation: http://dev.desk.com/API/companies/#list + """ + params = base.get_params(None, locals()) + + return http.Request('GET', self.get_url(), params), parsers.parse_json + + @base.apimethod + def search(self, q, per_page=None, page=None, + sort_field=None, sort_direction=None): + """ + Search companies based on a search parameter with pagination. + + Upstream documentation: http://dev.desk.com/API/companies/#search + """ + params = base.get_params(None, locals()) + url = '{0}/{1}'.format(self.get_url(), 'search') + return http.Request('GET', url, params), parsers.parse_json + + +class Company(CompaniesBase): + + @base.resource(cases.Cases) + def cases(self): + return cases.Cases(self) + + @base.resource(customers.Customers) + def customers(self): + return customers.Customers(self) diff --git a/libsaas/services/desk/service.py b/libsaas/services/desk/service.py index 3f48cd7..f1cd645 100644 --- a/libsaas/services/desk/service.py +++ b/libsaas/services/desk/service.py @@ -5,7 +5,7 @@ from libsaas.services import base from libsaas.filters import auth -from . import cases, customers, users, contents, macros, insights +from . import cases, customers, companies, users, contents, macros, insights class Desk(base.Resource): @@ -85,6 +85,20 @@ def cases(self): """ return cases.Cases(self) + @base.resource(companies.Company) + def company(self, company_id): + """ + Return the resource corresponding to a single company. + """ + return companies.Company(self, company_id) + + @base.resource(companies.Companies) + def companies(self): + """ + Return the resource corresponding to all companies. + """ + return companies.Companies(self) + @base.resource(customers.Customer) def customer(self, customer_id=None): """ diff --git a/test/test_desk.py b/test/test_desk.py index 67dbe0b..8f94867 100644 --- a/test/test_desk.py +++ b/test/test_desk.py @@ -51,6 +51,28 @@ def test_cases(self): self.service.cases().delete() self.service.case(10).delete() + def test_companies(self): + obj = {'name': 'test'} + paging = {'page': 1, 'per_page': 5} + + self.service.companies().get(per_page=5, page=1) + self.expect('GET', '/companies', paging) + + self.service.company(4).get() + self.expect('GET', '/companies/4') + + self.service.company(4).update(obj) + self.expect('PATCH', '/companies/4', obj) + + self.service.companies().create(obj) + self.expect('POST', '/companies', obj) + + self.service.companies().search('foo') + self.expect('GET', '/companies/search', {'q': 'foo'}) + + self.assertRaises(base.MethodNotSupported, + self.service.customer(4).delete) + def test_customers(self): obj = {'email': 'test@test.com'} paging = {'page': 1, 'per_page': 5}