1# coding=utf-8
2r"""
3This code was generated by
4\ / _    _  _|   _  _
5 | (_)\/(_)(_|\/| |(/_  v1.0.0
6      /       /
7"""
8
9from twilio.base import deserialize
10from twilio.base import serialize
11from twilio.base import values
12from twilio.base.instance_context import InstanceContext
13from twilio.base.instance_resource import InstanceResource
14from twilio.base.list_resource import ListResource
15from twilio.base.page import Page
16
17
18class RoleList(ListResource):
19
20    def __init__(self, version, chat_service_sid):
21        """
22        Initialize the RoleList
23
24        :param Version version: Version that contains the resource
25        :param chat_service_sid: The SID of the Conversation Service that the resource is associated with
26
27        :returns: twilio.rest.conversations.v1.service.role.RoleList
28        :rtype: twilio.rest.conversations.v1.service.role.RoleList
29        """
30        super(RoleList, self).__init__(version)
31
32        # Path Solution
33        self._solution = {'chat_service_sid': chat_service_sid, }
34        self._uri = '/Services/{chat_service_sid}/Roles'.format(**self._solution)
35
36    def create(self, friendly_name, type, permission):
37        """
38        Create the RoleInstance
39
40        :param unicode friendly_name: A string to describe the new resource
41        :param RoleInstance.RoleType type: The type of role
42        :param list[unicode] permission: A permission the role should have
43
44        :returns: The created RoleInstance
45        :rtype: twilio.rest.conversations.v1.service.role.RoleInstance
46        """
47        data = values.of({
48            'FriendlyName': friendly_name,
49            'Type': type,
50            'Permission': serialize.map(permission, lambda e: e),
51        })
52
53        payload = self._version.create(method='POST', uri=self._uri, data=data, )
54
55        return RoleInstance(self._version, payload, chat_service_sid=self._solution['chat_service_sid'], )
56
57    def stream(self, limit=None, page_size=None):
58        """
59        Streams RoleInstance records from the API as a generator stream.
60        This operation lazily loads records as efficiently as possible until the limit
61        is reached.
62        The results are returned as a generator, so this operation is memory efficient.
63
64        :param int limit: Upper limit for the number of records to return. stream()
65                          guarantees to never return more than limit.  Default is no limit
66        :param int page_size: Number of records to fetch per request, when not set will use
67                              the default value of 50 records.  If no page_size is defined
68                              but a limit is defined, stream() will attempt to read the
69                              limit with the most efficient page size, i.e. min(limit, 1000)
70
71        :returns: Generator that will yield up to limit results
72        :rtype: list[twilio.rest.conversations.v1.service.role.RoleInstance]
73        """
74        limits = self._version.read_limits(limit, page_size)
75
76        page = self.page(page_size=limits['page_size'], )
77
78        return self._version.stream(page, limits['limit'])
79
80    def list(self, limit=None, page_size=None):
81        """
82        Lists RoleInstance records from the API as a list.
83        Unlike stream(), this operation is eager and will load `limit` records into
84        memory before returning.
85
86        :param int limit: Upper limit for the number of records to return. list() guarantees
87                          never to return more than limit.  Default is no limit
88        :param int page_size: Number of records to fetch per request, when not set will use
89                              the default value of 50 records.  If no page_size is defined
90                              but a limit is defined, list() will attempt to read the limit
91                              with the most efficient page size, i.e. min(limit, 1000)
92
93        :returns: Generator that will yield up to limit results
94        :rtype: list[twilio.rest.conversations.v1.service.role.RoleInstance]
95        """
96        return list(self.stream(limit=limit, page_size=page_size, ))
97
98    def page(self, page_token=values.unset, page_number=values.unset,
99             page_size=values.unset):
100        """
101        Retrieve a single page of RoleInstance records from the API.
102        Request is executed immediately
103
104        :param str page_token: PageToken provided by the API
105        :param int page_number: Page Number, this value is simply for client state
106        :param int page_size: Number of records to return, defaults to 50
107
108        :returns: Page of RoleInstance
109        :rtype: twilio.rest.conversations.v1.service.role.RolePage
110        """
111        data = values.of({'PageToken': page_token, 'Page': page_number, 'PageSize': page_size, })
112
113        response = self._version.page(method='GET', uri=self._uri, params=data, )
114
115        return RolePage(self._version, response, self._solution)
116
117    def get_page(self, target_url):
118        """
119        Retrieve a specific page of RoleInstance records from the API.
120        Request is executed immediately
121
122        :param str target_url: API-generated URL for the requested results page
123
124        :returns: Page of RoleInstance
125        :rtype: twilio.rest.conversations.v1.service.role.RolePage
126        """
127        response = self._version.domain.twilio.request(
128            'GET',
129            target_url,
130        )
131
132        return RolePage(self._version, response, self._solution)
133
134    def get(self, sid):
135        """
136        Constructs a RoleContext
137
138        :param sid: The SID of the Role resource to fetch
139
140        :returns: twilio.rest.conversations.v1.service.role.RoleContext
141        :rtype: twilio.rest.conversations.v1.service.role.RoleContext
142        """
143        return RoleContext(self._version, chat_service_sid=self._solution['chat_service_sid'], sid=sid, )
144
145    def __call__(self, sid):
146        """
147        Constructs a RoleContext
148
149        :param sid: The SID of the Role resource to fetch
150
151        :returns: twilio.rest.conversations.v1.service.role.RoleContext
152        :rtype: twilio.rest.conversations.v1.service.role.RoleContext
153        """
154        return RoleContext(self._version, chat_service_sid=self._solution['chat_service_sid'], sid=sid, )
155
156    def __repr__(self):
157        """
158        Provide a friendly representation
159
160        :returns: Machine friendly representation
161        :rtype: str
162        """
163        return '<Twilio.Conversations.V1.RoleList>'
164
165
166class RolePage(Page):
167
168    def __init__(self, version, response, solution):
169        """
170        Initialize the RolePage
171
172        :param Version version: Version that contains the resource
173        :param Response response: Response from the API
174        :param chat_service_sid: The SID of the Conversation Service that the resource is associated with
175
176        :returns: twilio.rest.conversations.v1.service.role.RolePage
177        :rtype: twilio.rest.conversations.v1.service.role.RolePage
178        """
179        super(RolePage, self).__init__(version, response)
180
181        # Path Solution
182        self._solution = solution
183
184    def get_instance(self, payload):
185        """
186        Build an instance of RoleInstance
187
188        :param dict payload: Payload response from the API
189
190        :returns: twilio.rest.conversations.v1.service.role.RoleInstance
191        :rtype: twilio.rest.conversations.v1.service.role.RoleInstance
192        """
193        return RoleInstance(self._version, payload, chat_service_sid=self._solution['chat_service_sid'], )
194
195    def __repr__(self):
196        """
197        Provide a friendly representation
198
199        :returns: Machine friendly representation
200        :rtype: str
201        """
202        return '<Twilio.Conversations.V1.RolePage>'
203
204
205class RoleContext(InstanceContext):
206
207    def __init__(self, version, chat_service_sid, sid):
208        """
209        Initialize the RoleContext
210
211        :param Version version: Version that contains the resource
212        :param chat_service_sid: The SID of the Conversation Service to fetch the resource from
213        :param sid: The SID of the Role resource to fetch
214
215        :returns: twilio.rest.conversations.v1.service.role.RoleContext
216        :rtype: twilio.rest.conversations.v1.service.role.RoleContext
217        """
218        super(RoleContext, self).__init__(version)
219
220        # Path Solution
221        self._solution = {'chat_service_sid': chat_service_sid, 'sid': sid, }
222        self._uri = '/Services/{chat_service_sid}/Roles/{sid}'.format(**self._solution)
223
224    def update(self, permission):
225        """
226        Update the RoleInstance
227
228        :param list[unicode] permission: A permission the role should have
229
230        :returns: The updated RoleInstance
231        :rtype: twilio.rest.conversations.v1.service.role.RoleInstance
232        """
233        data = values.of({'Permission': serialize.map(permission, lambda e: e), })
234
235        payload = self._version.update(method='POST', uri=self._uri, data=data, )
236
237        return RoleInstance(
238            self._version,
239            payload,
240            chat_service_sid=self._solution['chat_service_sid'],
241            sid=self._solution['sid'],
242        )
243
244    def delete(self):
245        """
246        Deletes the RoleInstance
247
248        :returns: True if delete succeeds, False otherwise
249        :rtype: bool
250        """
251        return self._version.delete(method='DELETE', uri=self._uri, )
252
253    def fetch(self):
254        """
255        Fetch the RoleInstance
256
257        :returns: The fetched RoleInstance
258        :rtype: twilio.rest.conversations.v1.service.role.RoleInstance
259        """
260        payload = self._version.fetch(method='GET', uri=self._uri, )
261
262        return RoleInstance(
263            self._version,
264            payload,
265            chat_service_sid=self._solution['chat_service_sid'],
266            sid=self._solution['sid'],
267        )
268
269    def __repr__(self):
270        """
271        Provide a friendly representation
272
273        :returns: Machine friendly representation
274        :rtype: str
275        """
276        context = ' '.join('{}={}'.format(k, v) for k, v in self._solution.items())
277        return '<Twilio.Conversations.V1.RoleContext {}>'.format(context)
278
279
280class RoleInstance(InstanceResource):
281
282    class RoleType(object):
283        CONVERSATION = "conversation"
284        SERVICE = "service"
285
286    def __init__(self, version, payload, chat_service_sid, sid=None):
287        """
288        Initialize the RoleInstance
289
290        :returns: twilio.rest.conversations.v1.service.role.RoleInstance
291        :rtype: twilio.rest.conversations.v1.service.role.RoleInstance
292        """
293        super(RoleInstance, self).__init__(version)
294
295        # Marshaled Properties
296        self._properties = {
297            'sid': payload.get('sid'),
298            'account_sid': payload.get('account_sid'),
299            'chat_service_sid': payload.get('chat_service_sid'),
300            'friendly_name': payload.get('friendly_name'),
301            'type': payload.get('type'),
302            'permissions': payload.get('permissions'),
303            'date_created': deserialize.iso8601_datetime(payload.get('date_created')),
304            'date_updated': deserialize.iso8601_datetime(payload.get('date_updated')),
305            'url': payload.get('url'),
306        }
307
308        # Context
309        self._context = None
310        self._solution = {'chat_service_sid': chat_service_sid, 'sid': sid or self._properties['sid'], }
311
312    @property
313    def _proxy(self):
314        """
315        Generate an instance context for the instance, the context is capable of
316        performing various actions.  All instance actions are proxied to the context
317
318        :returns: RoleContext for this RoleInstance
319        :rtype: twilio.rest.conversations.v1.service.role.RoleContext
320        """
321        if self._context is None:
322            self._context = RoleContext(
323                self._version,
324                chat_service_sid=self._solution['chat_service_sid'],
325                sid=self._solution['sid'],
326            )
327        return self._context
328
329    @property
330    def sid(self):
331        """
332        :returns: The unique string that identifies the resource
333        :rtype: unicode
334        """
335        return self._properties['sid']
336
337    @property
338    def account_sid(self):
339        """
340        :returns: The SID of the Account that created the resource
341        :rtype: unicode
342        """
343        return self._properties['account_sid']
344
345    @property
346    def chat_service_sid(self):
347        """
348        :returns: The SID of the Conversation Service that the resource is associated with
349        :rtype: unicode
350        """
351        return self._properties['chat_service_sid']
352
353    @property
354    def friendly_name(self):
355        """
356        :returns: The string that you assigned to describe the resource
357        :rtype: unicode
358        """
359        return self._properties['friendly_name']
360
361    @property
362    def type(self):
363        """
364        :returns: The type of role
365        :rtype: RoleInstance.RoleType
366        """
367        return self._properties['type']
368
369    @property
370    def permissions(self):
371        """
372        :returns: An array of the permissions the role has been granted
373        :rtype: list[unicode]
374        """
375        return self._properties['permissions']
376
377    @property
378    def date_created(self):
379        """
380        :returns: The ISO 8601 date and time in GMT when the resource was created
381        :rtype: datetime
382        """
383        return self._properties['date_created']
384
385    @property
386    def date_updated(self):
387        """
388        :returns: The ISO 8601 date and time in GMT when the resource was last updated
389        :rtype: datetime
390        """
391        return self._properties['date_updated']
392
393    @property
394    def url(self):
395        """
396        :returns: An absolute URL for this user role.
397        :rtype: unicode
398        """
399        return self._properties['url']
400
401    def update(self, permission):
402        """
403        Update the RoleInstance
404
405        :param list[unicode] permission: A permission the role should have
406
407        :returns: The updated RoleInstance
408        :rtype: twilio.rest.conversations.v1.service.role.RoleInstance
409        """
410        return self._proxy.update(permission, )
411
412    def delete(self):
413        """
414        Deletes the RoleInstance
415
416        :returns: True if delete succeeds, False otherwise
417        :rtype: bool
418        """
419        return self._proxy.delete()
420
421    def fetch(self):
422        """
423        Fetch the RoleInstance
424
425        :returns: The fetched RoleInstance
426        :rtype: twilio.rest.conversations.v1.service.role.RoleInstance
427        """
428        return self._proxy.fetch()
429
430    def __repr__(self):
431        """
432        Provide a friendly representation
433
434        :returns: Machine friendly representation
435        :rtype: str
436        """
437        context = ' '.join('{}={}'.format(k, v) for k, v in self._solution.items())
438        return '<Twilio.Conversations.V1.RoleInstance {}>'.format(context)
439