From 0399fef1b83599502acbf45ef483242bae69c2fb Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Thu, 9 Jul 2020 16:22:40 -0400 Subject: [PATCH 01/20] Update WebexTeamsAPI Provide access to the access_tokens API wrapper directly from the WebexTeamsAPI class *before* instantiating an instance of the class (which requires an access token). Also provide convenience class methods that will instantiate a new WebexTeamsAPI connection object from an OAuth Authorization Code or Refresh Token. --- webexteamssdk/api/__init__.py | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/webexteamssdk/api/__init__.py b/webexteamssdk/api/__init__.py index e742e0a..29da0aa 100644 --- a/webexteamssdk/api/__init__.py +++ b/webexteamssdk/api/__init__.py @@ -230,3 +230,66 @@ def single_request_timeout(self): def wait_on_rate_limit(self): """Automatic rate-limit handling enabled / disabled.""" return self._session.wait_on_rate_limit + + # Create a class attribute for the Access Tokens API that can be accessed + # before WebexTeamsAPI object is initialized. + access_tokens = AccessTokensAPI( + base_url=DEFAULT_BASE_URL, + object_factory=immutable_data_factory, + single_request_timeout=DEFAULT_SINGLE_REQUEST_TIMEOUT, + ) + + @classmethod + def from_oauth_code(cls, client_id, client_secret, code, redirect_uri): + """Create a new WebexTeamsAPI connection object using an OAuth code. + + Exchange an Authorization Code for an Access Token, then use the access + token to create a new WebexTeamsAPI connection object. + + Args: + client_id(basestring): Provided when you created your integration. + client_secret(basestring): Provided when you created your + integration. + code(basestring): The Authorization Code provided by the user + OAuth process. + redirect_uri(basestring): The redirect URI used in the user OAuth + process. + + Returns: + AccessToken: An AccessToken object with the access token provided + by the Webex Teams cloud. + + Raises: + TypeError: If the parameter types are incorrect. + ApiError: If the Webex Teams cloud returns an error. + """ + token_obj = cls.access_tokens.get(client_id, client_secret, code, + redirect_uri) + + return cls(access_token=token_obj.access_token) + + @classmethod + def from_oauth_refresh(cls, client_id, client_secret, refresh_token): + """Create a new WebexTeamsAPI connection object using an OAuth refresh. + + Exchange a refresh token for an Access Token, then use the access + token to create a new WebexTeamsAPI connection object. + + Args: + client_id(basestring): Provided when you created your integration. + client_secret(basestring): Provided when you created your + integration. + refresh_token(basestring): Provided when you requested the Access + Token. + + Returns: + AccessToken: With the access token provided by the Webex Teams + cloud. + + Raises: + TypeError: If the parameter types are incorrect. + ApiError: If the Webex Teams cloud returns an error. + """ + token_obj = cls.access_tokens.refresh(client_id, client_secret, + refresh_token) + return cls(access_token=token_obj.access_token) From c316906c727edcf621b03d04b4cab9ac9103cbdf Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Thu, 9 Jul 2020 16:54:07 -0400 Subject: [PATCH 02/20] Update docstrings --- webexteamssdk/api/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/webexteamssdk/api/__init__.py b/webexteamssdk/api/__init__.py index 29da0aa..de1ab94 100644 --- a/webexteamssdk/api/__init__.py +++ b/webexteamssdk/api/__init__.py @@ -256,8 +256,8 @@ def from_oauth_code(cls, client_id, client_secret, code, redirect_uri): process. Returns: - AccessToken: An AccessToken object with the access token provided - by the Webex Teams cloud. + WebexTeamsAPI: A new WebexTeamsAPI object initialized with the + access token from the OAuth Authentication Code exchange. Raises: TypeError: If the parameter types are incorrect. @@ -283,8 +283,8 @@ def from_oauth_refresh(cls, client_id, client_secret, refresh_token): Token. Returns: - AccessToken: With the access token provided by the Webex Teams - cloud. + WebexTeamsAPI: A new WebexTeamsAPI object initialized with the + access token from the OAuth Refresh Token exchange. Raises: TypeError: If the parameter types are incorrect. From 2f2735e4fe19bdf5c9be51dcd852d236100760c0 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 15:13:40 -0400 Subject: [PATCH 03/20] Update response_codes.py --- webexteamssdk/response_codes.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/webexteamssdk/response_codes.py b/webexteamssdk/response_codes.py index 7897882..b996d7f 100644 --- a/webexteamssdk/response_codes.py +++ b/webexteamssdk/response_codes.py @@ -46,10 +46,14 @@ 409: "The request could not be processed because it conflicts with some " "established rule of the system. For example, a person may not be " "added to a room more than once.", + 410: "The requested resource is no longer available.", 415: "The request was made to a resource without specifying a media type " "or used a media type that is not supported.", + 423: "The requested resource is temporarily unavailable. A `Retry-After` " + "header may be present that specifies how many seconds you need to " + "wait before attempting the request again.", 429: "Too many requests have been sent in a given amount of time and the " - "request has been rate limited. A Retry-After header should be " + "request has been rate limited. A `Retry-After` header should be " "present that specifies how many seconds you need to wait before a " "successful request can be made.", 500: "Something went wrong on the server. If the issue persists, feel " @@ -63,8 +67,8 @@ RATE_LIMIT_RESPONSE_CODE = 429 EXPECTED_RESPONSE_CODE = { - 'GET': 200, - 'POST': 200, - 'PUT': 200, - 'DELETE': 204 + "GET": 200, + "POST": 200, + "PUT": 200, + "DELETE": 204 } From 9d51961880599babb3f51f76a5dc6af9fe60f954 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 15:29:59 -0400 Subject: [PATCH 04/20] Update attachment_actions.py Rename the paramater ID parameter in the get() method from `attachmentId` to `id` to be consistent with the documentation. --- webexteamssdk/api/attachment_actions.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/webexteamssdk/api/attachment_actions.py b/webexteamssdk/api/attachment_actions.py index 8e4325c..c6f7ae4 100644 --- a/webexteamssdk/api/attachment_actions.py +++ b/webexteamssdk/api/attachment_actions.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -"""Webex Teams Messages API wrapper. +"""Webex Teams Attachment Actions API wrapper. Copyright (c) 2016-2019 Cisco and/or its affiliates. @@ -106,12 +106,11 @@ def create(self, type, messageId, inputs, **request_parameters): # Return a attachment action object created from the response JSON data return self._object_factory(OBJECT_TYPE, json_data) - def get(self, attachmentId): - """Get the details of a attachment action, by ID. + def get(self, id): + """Get the details for a attachment action, by ID. Args: - attachmentId(basestring): The ID of the attachment action to be - retrieved. + id(basestring): A unique identifier for the attachment action. Returns: AttachmentAction: A Attachment Action object with the details of @@ -122,10 +121,10 @@ def get(self, attachmentId): ApiError: If the Webex Teams cloud returns an error. """ - check_type(attachmentId, basestring) + check_type(id, basestring) # API request - json_data = self._session.get(API_ENDPOINT + '/' + attachmentId) + json_data = self._session.get(API_ENDPOINT + '/' + id) # Return a message object created from the response JSON data return self._object_factory(OBJECT_TYPE, json_data) From e9f0d70eadce4fc238fd42b7246c38dfee95f47e Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 16:29:08 -0400 Subject: [PATCH 05/20] Update Guest Issuer API wrapper and token data model - Align the parameter names with those used in the documentation. - Update the docstrings. - The paramaters are mandatory (may not be `None`). - Use the library restsession to submit the request. The supplied headers will me merged-in with the session's default headers; the Authentication header will replace the default Authentication header. --- webexteamssdk/api/guest_issuer.py | 59 +++++++++++-------- .../models/mixins/guest_issuer_token.py | 8 +-- 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/webexteamssdk/api/guest_issuer.py b/webexteamssdk/api/guest_issuer.py index b53b3e1..07db8a9 100644 --- a/webexteamssdk/api/guest_issuer.py +++ b/webexteamssdk/api/guest_issuer.py @@ -47,8 +47,8 @@ import base64 import requests -API_ENDPOINT = 'jwt' -OBJECT_TYPE = 'guest_issuer_token' +API_ENDPOINT = "jwt" +OBJECT_TYPE = "guest_issuer_token" class GuestIssuerAPI(object): @@ -76,46 +76,57 @@ def __init__(self, session, object_factory): self._session = session self._object_factory = object_factory - def create(self, subject, displayName, issuerToken, expiration, secret): + def create(self, sub, name, iss, exp, secret): """Create a new guest issuer using the provided issuer token. This function returns a guest issuer with an api access token. Args: - subject(basestring): Unique and public identifier - displayName(basestring): Display Name of the guest user - issuerToken(basestring): Issuer token from developer hub - expiration(basestring): Expiration time as a unix timestamp - secret(basestring): The secret used to sign your guest issuers + sub(basestring): The subject of the token. This is your unique + and public identifier for the guest user. This claim may + contain only letters, numbers, and hyphens. + name(basestring): The display name of the guest user. This will be + the name shown in Webex Teams clients. + iss(basestring): The issuer of the token. Use the Guest + Issuer ID provided in My Webex Teams Apps. + exp(basestring): The exp time of the token, as a UNIX + timestamp in seconds. Use the lowest practical value for the + use of the token. This is not the exp time for the guest + user's session. + secret(basestring): Use the secret Webex provided you when you + created your Guest Issuer App. The secret will be used to sign + the token request. Returns: - GuestIssuerToken: A Guest Issuer with a valid access token. + GuestIssuerToken: A Guest Issuer token with a valid access token. Raises: TypeError: If the parameter types are incorrect ApiError: If the webex teams cloud returns an error. """ - check_type(subject, basestring, optional=True) - check_type(displayName, basestring, optional=True) - check_type(issuerToken, basestring, optional=True) - check_type(expiration, basestring, optional=True) - check_type(secret, basestring, optional=True) + check_type(sub, basestring) + check_type(name, basestring) + check_type(iss, basestring) + check_type(exp, basestring) + check_type(secret, basestring) payload = { - "sub": subject, - "name": displayName, - "iss": issuerToken, - "exp": expiration + "sub": sub, + "name": name, + "iss": iss, + "exp": exp } key = base64.b64decode(secret) - jwt_token = jwt.encode(payload, key, algorithm='HS256') + jwt_token = jwt.encode(payload, key, algorithm="HS256") - url = self._session.base_url + API_ENDPOINT + "/" + "login" headers = { - 'Authorization': "Bearer " + jwt_token.decode('utf-8') + "Authorization": "Bearer " + jwt_token.decode("utf-8") } - response = requests.post(url, headers=headers) - check_response_code(response, EXPECTED_RESPONSE_CODE['GET']) - return self._object_factory(OBJECT_TYPE, response.json()) + json_data = self._session.post( + API_ENDPOINT + "/" + "login", + headers=headers + ) + + return self._object_factory(OBJECT_TYPE, json_data) diff --git a/webexteamssdk/models/mixins/guest_issuer_token.py b/webexteamssdk/models/mixins/guest_issuer_token.py index f35567b..dd97963 100644 --- a/webexteamssdk/models/mixins/guest_issuer_token.py +++ b/webexteamssdk/models/mixins/guest_issuer_token.py @@ -36,9 +36,9 @@ class GuestIssuerTokenBasicPropertiesMixin(object): """Guest issuer token basic properties""" @property - def access_token(self): - return self._json_data.get('token') + def token(self): + return self._json_data.get("token") @property - def expires_in(self): - return self._json_data.get('expiresIn') + def expiresIn(self): + return self._json_data.get("expiresIn") From 21f1afc2dbd5a69038ee9703283ab61de7f0f298 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 16:40:57 -0400 Subject: [PATCH 06/20] Update the license data model --- webexteamssdk/models/mixins/license.py | 33 ++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/webexteamssdk/models/mixins/license.py b/webexteamssdk/models/mixins/license.py index 6047552..e1c7bfe 100644 --- a/webexteamssdk/models/mixins/license.py +++ b/webexteamssdk/models/mixins/license.py @@ -39,19 +39,44 @@ class LicenseBasicPropertiesMixin(object): @property def id(self): """A unique identifier for the license.""" - return self._json_data.get('id') + return self._json_data.get("id") @property def name(self): """Name of the licensed feature.""" - return self._json_data.get('name') + return self._json_data.get("name") @property def totalUnits(self): """Total number of license units allocated.""" - return self._json_data.get('totalUnits') + return self._json_data.get("totalUnits") @property def consumedUnits(self): """Total number of license units consumed.""" - return self._json_data.get('consumedUnits') + return self._json_data.get("consumedUnits") + + @property + def subscriptionId(self): + """The subscription ID associated with this license. + + This ID is used in other systems, such as Webex Control Hub. + """ + return self._json_data.get("subscriptionId") + + @property + def siteUrl(self): + """The Webex Meetings site associated with this license.""" + return self._json_data.get("siteUrl") + + @property + def siteType(self): + """The type of site associated with this license. + + `Control Hub managed site` the site is managed by Webex Control Hub. + + `Linked site` the site is a linked site + + `Site Admin managed site` the site is managed by Site Administration + """ + return self._json_data.get("siteType") From ede0acd484b119420c8a99bb6dc39d8c8eb747cc Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 17:12:27 -0400 Subject: [PATCH 07/20] Update Messages API - Add the parentId parameter to the messages.list() method. - Add the messages.list_direct() API endpoint. - Update the message data model attributes. --- webexteamssdk/api/messages.py | 71 ++++++++++++++++++++++++-- webexteamssdk/models/mixins/message.py | 59 +++++++++++++++------ 2 files changed, 109 insertions(+), 21 deletions(-) diff --git a/webexteamssdk/api/messages.py b/webexteamssdk/api/messages.py index b0a9916..12b2db8 100644 --- a/webexteamssdk/api/messages.py +++ b/webexteamssdk/api/messages.py @@ -73,8 +73,8 @@ def __init__(self, session, object_factory): self._object_factory = object_factory @generator_container - def list(self, roomId, mentionedPeople=None, before=None, - beforeMessage=None, max=None, **request_parameters): + def list(self, roomId, parentId=None, mentionedPeople=None, before=None, + beforeMessage=None, max=50, **request_parameters): """Lists messages in a room. Each message will include content attachments if present. @@ -93,6 +93,7 @@ def list(self, roomId, mentionedPeople=None, before=None, Args: roomId(basestring): List messages for a room, by ID. + parentId(basestring): List messages with a parent, by ID. mentionedPeople(basestring): List messages where the caller is mentioned by specifying "me" or the caller `personId`. before(basestring): List messages sent before a date and time, in @@ -114,6 +115,7 @@ def list(self, roomId, mentionedPeople=None, before=None, """ check_type(roomId, basestring) + check_type(parentId, basestring, optional=True) check_type(mentionedPeople, basestring, optional=True) check_type(before, basestring, optional=True) check_type(beforeMessage, basestring, optional=True) @@ -122,6 +124,7 @@ def list(self, roomId, mentionedPeople=None, before=None, params = dict_from_items_with_values( request_parameters, roomId=roomId, + parentId=parentId, mentionedPeople=mentionedPeople, before=before, beforeMessage=beforeMessage, @@ -135,9 +138,67 @@ def list(self, roomId, mentionedPeople=None, before=None, for item in items: yield self._object_factory(OBJECT_TYPE, item) - def create(self, roomId=None, toPersonId=None, toPersonEmail=None, - text=None, markdown=None, files=None, attachments=None, - parentId=None, **request_parameters): + @generator_container + def list_direct(self, personId=None, personEmail=None, parentId=None, + **request_parameters): + """List all messages in a 1:1 (direct) room. + + Use the `personId` or `personEmail` query parameter to specify the + room. + + The list API sorts the messages in descending order by creation date. + + This method supports Webex Teams's implementation of RFC5988 Web + Linking to provide pagination support. It returns a generator + container that incrementally yields all messages returned by the + query. The generator will automatically request additional 'pages' of + responses from Webex as needed until all responses have been returned. + The container makes the generator safe for reuse. A new API call will + be made, using the same parameters that were specified when the + generator was created, every time a new iterator is requested from the + container. + + Args: + personId(basestring): List messages in a 1:1 room, by person ID. + personEmail(basestring): List messages in a 1:1 room, by person + email. + parentId(basestring): List messages with a parent, by ID. + **request_parameters: Additional request parameters (provides + support for parameters that may be added in the future). + + Returns: + GeneratorContainer: A GeneratorContainer which, when iterated, + yields the messages returned by the Webex Teams query. + + Raises: + TypeError: If the parameter types are incorrect. + ApiError: If the Webex Teams cloud returns an error. + + """ + check_type(personId, basestring, optional=True) + check_type(personEmail, basestring, optional=True) + check_type(parentId, basestring, optional=True) + + params = dict_from_items_with_values( + request_parameters, + personId=personId, + personEmail=personEmail, + parentId=parentId, + ) + + # API request - get items + items = self._session.get_items( + API_ENDPOINT + "/direct", + params=params, + ) + + # Yield message objects created from the returned items JSON objects + for item in items: + yield self._object_factory(OBJECT_TYPE, item) + + def create(self, roomId=None, parentId=None, toPersonId=None, + toPersonEmail=None, text=None, markdown=None, files=None, + attachments=None, **request_parameters): """Post a message to a room. The files parameter is a list, which accepts multiple values to allow diff --git a/webexteamssdk/models/mixins/message.py b/webexteamssdk/models/mixins/message.py index d4aacd8..c46ae51 100644 --- a/webexteamssdk/models/mixins/message.py +++ b/webexteamssdk/models/mixins/message.py @@ -41,12 +41,17 @@ class MessageBasicPropertiesMixin(object): @property def id(self): """The unique identifier for the message.""" - return self._json_data.get('id') + return self._json_data.get("id") + + @property + def parentId(self): + """The unique identifier for the parent message.""" + return self._json_data.get("parentId") @property def roomId(self): """The room ID of the message.""" - return self._json_data.get('roomId') + return self._json_data.get("roomId") @property def roomType(self): @@ -56,57 +61,79 @@ def roomType(self): `direct`: 1:1 room `group`: Group room """ - return self._json_data.get('roomType') + return self._json_data.get("roomType") + + @property + def toPersonId(self): + """The person ID of the recipient when sending a 1:1 message.""" + return self._json_data.get("toPersonId") + + @property + def toPersonEmail(self): + """The email address of the recipient when sending a 1:1 message.""" + return self._json_data.get("toPersonEmail") @property def text(self): """The message, in plain text.""" - return self._json_data.get('text') + return self._json_data.get("text") @property def markdown(self): """The message, in Markdown format.""" - return self._json_data.get('markdown') + return self._json_data.get("markdown") @property def html(self): - """The message, in HTML format.""" - return self._json_data.get('html') + """The text content of the message, in HTML format. + + This read-only property is used by the Webex Teams clients. + """ + return self._json_data.get("html") @property def files(self): """Public URLs for files attached to the message.""" - return self._json_data.get('files') + return self._json_data.get("files") @property def personId(self): """The person ID of the message author.""" - return self._json_data.get('personId') + return self._json_data.get("personId") @property def personEmail(self): """The email address of the message author.""" - return self._json_data.get('personEmail') + return self._json_data.get("personEmail") @property def mentionedPeople(self): """People IDs for anyone mentioned in the message.""" - return self._json_data.get('mentionedPeople') + return self._json_data.get("mentionedPeople") @property def mentionedGroups(self): """Group names for the groups mentioned in the message.""" - return self._json_data.get('mentionedGroups') + return self._json_data.get("mentionedGroups") @property - def parentId(self): - """The unique identifier for the parent message.""" - return self._json_data.get('parentId') + def attachments(self): + """Message content attachments attached to the message.""" + return self._json_data.get("attachments") @property def created(self): """The date and time the message was created.""" - created = self._json_data.get('created') + created = self._json_data.get("created") + if created: + return WebexTeamsDateTime.strptime(created) + else: + return None + + @property + def updated(self): + """The date and time the message was created.""" + created = self._json_data.get("updated") if created: return WebexTeamsDateTime.strptime(created) else: From b3c1213f98f4fb4b85e7589accbca6fa8328d16a Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 17:21:37 -0400 Subject: [PATCH 08/20] Update People API Docstring updates. --- webexteamssdk/api/people.py | 12 ++++++- webexteamssdk/models/mixins/person.py | 45 ++++++++++++++------------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/webexteamssdk/api/people.py b/webexteamssdk/api/people.py index 41f7b8b..ef9cd96 100644 --- a/webexteamssdk/api/people.py +++ b/webexteamssdk/api/people.py @@ -75,7 +75,17 @@ def __init__(self, session, object_factory): @generator_container def list(self, email=None, displayName=None, id=None, orgId=None, max=None, **request_parameters): - """List people + """List people in your organization. + + For most users, either the `email` or `displayName` parameter is + required. Admin users can omit these fields and list all users in their + organization. + + Response properties associated with a user's presence status, such as + `status` or `lastActivity`, will only be displayed for people within + your organization or an organization you manage. Presence information + will not be shown if the authenticated user has disabled status + sharing. This method supports Webex Teams's implementation of RFC5988 Web Linking to provide pagination support. It returns a generator diff --git a/webexteamssdk/models/mixins/person.py b/webexteamssdk/models/mixins/person.py index 6dd50fa..3e013b9 100644 --- a/webexteamssdk/models/mixins/person.py +++ b/webexteamssdk/models/mixins/person.py @@ -41,21 +41,21 @@ class PersonBasicPropertiesMixin(object): @property def id(self): """A unique identifier for the person.""" - return self._json_data.get('id') + return self._json_data.get("id") @property def emails(self): """The email addresses of the person.""" - return self._json_data.get('emails') + return self._json_data.get("emails") def phoneNumbers(self): """Phone numbers for the person.""" - return self._json_data.get('phoneNumbers') + return self._json_data.get("phoneNumbers") @property def displayName(self): """The full name of the person.""" - return self._json_data.get('displayName') + return self._json_data.get("displayName") @property def nickName(self): @@ -64,43 +64,43 @@ def nickName(self): If no nickname is configured for the person, this field will not be present. """ - return self._json_data.get('nickName') + return self._json_data.get("nickName") @property def firstName(self): """The first name of the person.""" - return self._json_data.get('firstName') + return self._json_data.get("firstName") @property def lastName(self): """The last name of the person.""" - return self._json_data.get('lastName') + return self._json_data.get("lastName") @property def avatar(self): - """The URL to the person's avatar in PNG format.""" - return self._json_data.get('avatar') + """The URL to the person"s avatar in PNG format.""" + return self._json_data.get("avatar") @property def orgId(self): """The ID of the organization to which this person belongs.""" - return self._json_data.get('orgId') + return self._json_data.get("orgId") @property def roles(self): """An array of role strings representing the roles to which this person belongs. """ - return self._json_data.get('roles') + return self._json_data.get("roles") @property def licenses(self): """An array of license strings allocated to this person.""" - return self._json_data.get('licenses') + return self._json_data.get("licenses") @property def created(self): """The date and time the person was created.""" - created = self._json_data.get('created') + created = self._json_data.get("created") if created: return WebexTeamsDateTime.strptime(created) else: @@ -109,7 +109,7 @@ def created(self): @property def lastModified(self): """The date and time the person was last changed.""" - last_modified = self._json_data.get('lastModified') + last_modified = self._json_data.get("lastModified") if last_modified: return WebexTeamsDateTime.strptime(last_modified) else: @@ -122,13 +122,13 @@ def timezone(self): If no timezone is configured on the account, this field will not be present. """ - return self._json.get('timezone') + return self._json.get("timezone") @property def lastActivity(self): - """The date and time of the person's last activity within Webex + """The date and time of the person"s last activity within Webex Teams. """ - last_activity = self._json_data.get('lastActivity') + last_activity = self._json_data.get("lastActivity") if last_activity: return WebexTeamsDateTime.strptime(last_activity) else: @@ -160,7 +160,7 @@ def status(self): `unknown`: The user’s status could not be determined """ - return self._json_data.get('status') + return self._json_data.get("status") @property def invitePending(self): @@ -173,7 +173,7 @@ def invitePending(self): `false`: An invite is not pending for this person """ - return self._json_data.get('invitePending') + return self._json_data.get("invitePending") @property def loginEnabled(self): @@ -182,9 +182,9 @@ def loginEnabled(self): Person Login Enabled Enum: `true`: The person can log into Webex Teams - 'false': The person cannot log into Webex Teams + "false": The person cannot log into Webex Teams """ - return self._json_data.get('loginEnabled') + return self._json_data.get("loginEnabled") @property def type(self): @@ -193,5 +193,6 @@ def type(self): Person Type Enum: `person`: Account belongs to a person `bot`: Account is a bot user + `appuser`: Account is a guest user """ - return self._json_data.get('type') + return self._json_data.get("type") From a1c6b78648a40f041d2fc82019aefb52793c14bd Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 17:31:18 -0400 Subject: [PATCH 09/20] Update teams.py - Update default value for `max=` in the teams.list() method. - Make `name` a required parameter for the teams.update() method. --- webexteamssdk/api/teams.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/webexteamssdk/api/teams.py b/webexteamssdk/api/teams.py index 784049e..a637d47 100644 --- a/webexteamssdk/api/teams.py +++ b/webexteamssdk/api/teams.py @@ -73,7 +73,7 @@ def __init__(self, session, object_factory): self._object_factory = object_factory @generator_container - def list(self, max=None, **request_parameters): + def list(self, max=100, **request_parameters): """List teams to which the authenticated user belongs. This method supports Webex Teams's implementation of RFC5988 Web @@ -168,7 +168,7 @@ def get(self, teamId): # Return a team object created from the response JSON data return self._object_factory(OBJECT_TYPE, json_data) - def update(self, teamId, name=None, **request_parameters): + def update(self, teamId, name, **request_parameters): """Update details for a team, by ID. Args: @@ -186,7 +186,7 @@ def update(self, teamId, name=None, **request_parameters): """ check_type(teamId, basestring) - check_type(name, basestring, optional=True) + check_type(name, basestring) put_data = dict_from_items_with_values( request_parameters, From d976876ee6a956c263926de5ad3fbd064b09e084 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 17:52:07 -0400 Subject: [PATCH 10/20] Update Team Memberships API Update the default value for the `max=` parameter of the team_memberships.list() method. --- webexteamssdk/api/team_memberships.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webexteamssdk/api/team_memberships.py b/webexteamssdk/api/team_memberships.py index 2b14901..d8d83f2 100644 --- a/webexteamssdk/api/team_memberships.py +++ b/webexteamssdk/api/team_memberships.py @@ -73,7 +73,7 @@ def __init__(self, session, object_factory): self._object_factory = object_factory @generator_container - def list(self, teamId, max=None, **request_parameters): + def list(self, teamId, max=100, **request_parameters): """List team memberships for a team, by ID. This method supports Webex Teams's implementation of RFC5988 Web From 659f3519fbbf809c1d08275aee9f2a5eafc5a5f8 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 18:00:27 -0400 Subject: [PATCH 11/20] Update the Webhooks API Add the default value for the `max=` parameter of the webhooks.list() method. --- webexteamssdk/api/webhooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webexteamssdk/api/webhooks.py b/webexteamssdk/api/webhooks.py index 99ef8b5..b3c3fee 100644 --- a/webexteamssdk/api/webhooks.py +++ b/webexteamssdk/api/webhooks.py @@ -73,7 +73,7 @@ def __init__(self, session, object_factory): self._object_factory = object_factory @generator_container - def list(self, max=None, **request_parameters): + def list(self, max=100, **request_parameters): """List all of the authenticated user's webhooks. This method supports Webex Teams's implementation of RFC5988 Web From ecb48446d833e1f54d48796e99611cd54e6e1b8a Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 18:37:35 -0400 Subject: [PATCH 12/20] Update Messages API tests - Test new messages.list_direct() method - Test replying to messages (threading with parentId) --- tests/api/test_messages.py | 81 +++++++++++++++++++++++++++++++++----- 1 file changed, 71 insertions(+), 10 deletions(-) diff --git a/tests/api/test_messages.py b/tests/api/test_messages.py index 69f2155..27f1785 100644 --- a/tests/api/test_messages.py +++ b/tests/api/test_messages.py @@ -57,7 +57,7 @@ def adaptive_card(): @pytest.fixture(scope="session") -def direct_message_by_email(api, test_people): +def direct_message_by_person_email(api, test_people): person = test_people["member_added_by_email"] message = api.messages.create( toPersonEmail=person.emails[0], @@ -69,6 +69,16 @@ def direct_message_by_email(api, test_people): api.messages.delete(message.id) +@pytest.fixture(scope="session") +def direct_message_reply_by_person_email(api, direct_message_by_person_email): + text = create_string("Reply Message") + return api.messages.create( + toPersonEmail=direct_message_by_person_email.toPersonEmail, + parentId=direct_message_by_person_email.id, + text=text, + ) + + @pytest.fixture(scope="session") def direct_message_by_email_with_card(api, test_people, adaptive_card): person = test_people["member_added_by_email"] @@ -89,7 +99,7 @@ def direct_message_by_email_with_card(api, test_people, adaptive_card): @pytest.fixture(scope="session") -def direct_message_by_id(api, test_people): +def direct_message_by_person_id(api, test_people): person = test_people["member_added_by_id"] message = api.messages.create( toPersonId=person.id, @@ -101,6 +111,16 @@ def direct_message_by_id(api, test_people): api.messages.delete(message.id) +@pytest.fixture(scope="session") +def direct_message_reply_by_person_id(api, direct_message_by_person_id): + text = create_string("Reply Message") + return api.messages.create( + toPersonId=direct_message_by_person_id.toPersonId, + parentId=direct_message_by_person_id.id, + text=text, + ) + + @pytest.fixture(scope="session") def send_group_room_message(api): messages = [] @@ -125,6 +145,16 @@ def group_room_text_message(group_room, send_group_room_message): return send_group_room_message(group_room.id, text=text) +@pytest.fixture(scope="session") +def group_room_message_reply_by_id(api, group_room, group_room_text_message): + text = create_string("Reply Message") + return api.messages.create( + # roomId=group_room.id, + parentId=group_room_text_message.id, + text=text, + ) + + @pytest.fixture(scope="session") def group_room_markdown_message( me, @@ -201,13 +231,13 @@ def group_room_messages( @pytest.fixture(scope="session") def direct_messages( - direct_message_by_email, - direct_message_by_id, + direct_message_by_person_email, + direct_message_by_person_id, direct_message_by_email_with_card, ): return [ - direct_message_by_email, - direct_message_by_id, + direct_message_by_person_email, + direct_message_by_person_id, direct_message_by_email_with_card, ] @@ -258,8 +288,14 @@ def test_list_messages_mentioning_me(api, group_room, assert are_valid_messages(messages_list) -def test_create_direct_messages_by_email(direct_message_by_email): - assert is_valid_message(direct_message_by_email) +def test_create_direct_messages_by_email(direct_message_by_person_email): + assert is_valid_message(direct_message_by_person_email) + + +def test_reply_to_direct_message_by_person_email( + direct_message_reply_by_person_email +): + assert is_valid_message(direct_message_reply_by_person_email) def test_create_direct_messages_by_email_with_card( @@ -268,14 +304,39 @@ def test_create_direct_messages_by_email_with_card( assert is_valid_message(direct_message_by_email_with_card) -def test_create_direct_messages_by_id(direct_message_by_id): - assert is_valid_message(direct_message_by_id) +def test_create_direct_messages_by_id(direct_message_by_person_id): + assert is_valid_message(direct_message_by_person_id) + + +def test_reply_to_direct_message_by_person_id( + direct_message_reply_by_person_id +): + assert is_valid_message(direct_message_reply_by_person_id) + + +def test_list_direct_messages_by_person_id(api, direct_message_by_person_id): + messages = api.messages.list_direct( + personId=direct_message_by_person_id.toPersonId, + ) + assert are_valid_messages(messages) + + +def test_list_direct_messages_by_person_email(api, + direct_message_by_person_email): + messages = api.messages.list_direct( + personEmail=direct_message_by_person_email.toPersonEmail, + ) + assert are_valid_messages(messages) def test_create_text_message(group_room_text_message): assert is_valid_message(group_room_text_message) +def test_create_reply_message(group_room_text_message): + assert is_valid_message(group_room_text_message) + + def test_create_markdown_message(group_room_markdown_message): assert is_valid_message(group_room_markdown_message) From 80056c563842fbf5e61b11c22ccbd42082a9fec3 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Fri, 10 Jul 2020 18:41:12 -0400 Subject: [PATCH 13/20] Update docs for messages.list_direct() --- docs/user/api_structure_table.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/user/api_structure_table.rst b/docs/user/api_structure_table.rst index 83ae447..cd53440 100644 --- a/docs/user/api_structure_table.rst +++ b/docs/user/api_structure_table.rst @@ -22,6 +22,7 @@ | | | :meth:`delete() ` | +------------------------+---------------------------+---------------------------------------------------------------------------------+ | | :ref:`messages` | :meth:`list() ` | +| | | :meth:`list_direct() ` | | | | :meth:`create() ` | | | | :meth:`get() ` | | | | :meth:`delete() ` | From 2489509b57e866abe005a4764e1c041b551a3bc3 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Sat, 11 Jul 2020 13:29:54 -0400 Subject: [PATCH 14/20] Update Rooms API - Set default value for `max=` parameter on the rooms.list() method. - Make `title` a required parameter for the rooms.update() method. --- webexteamssdk/api/rooms.py | 6 +++--- webexteamssdk/models/mixins/room.py | 28 ++++++++++++++-------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/webexteamssdk/api/rooms.py b/webexteamssdk/api/rooms.py index 41a403e..b8918f9 100644 --- a/webexteamssdk/api/rooms.py +++ b/webexteamssdk/api/rooms.py @@ -73,7 +73,7 @@ def __init__(self, session, object_factory): self._object_factory = object_factory @generator_container - def list(self, teamId=None, type=None, sortBy=None, max=None, + def list(self, teamId=None, type=None, sortBy=None, max=100, **request_parameters): """List rooms. @@ -189,7 +189,7 @@ def get(self, roomId): # Return a room object created from the response JSON data return self._object_factory(OBJECT_TYPE, json_data) - def update(self, roomId, title=None, **request_parameters): + def update(self, roomId, title, **request_parameters): """Update details for a room, by ID. Args: @@ -207,7 +207,7 @@ def update(self, roomId, title=None, **request_parameters): """ check_type(roomId, basestring) - check_type(roomId, basestring, optional=True) + check_type(roomId, basestring) put_data = dict_from_items_with_values( request_parameters, diff --git a/webexteamssdk/models/mixins/room.py b/webexteamssdk/models/mixins/room.py index 6cb9e6c..648eece 100644 --- a/webexteamssdk/models/mixins/room.py +++ b/webexteamssdk/models/mixins/room.py @@ -41,12 +41,12 @@ class RoomBasicPropertiesMixin(object): @property def id(self): """A unique identifier for the room.""" - return self._json_data.get('id') + return self._json_data.get("id") @property def title(self): """A user-friendly name for the room.""" - return self._json_data.get('title') + return self._json_data.get("title") @property def type(self): @@ -57,22 +57,22 @@ def type(self): `group`: Group room """ - return self._json_data.get('type') + return self._json_data.get("type") @property def isLocked(self): """Whether the room is moderated (locked) or not.""" - return self._json_data.get('isLocked') + return self._json_data.get("isLocked") @property def teamId(self): """The ID for the team with which this room is associated.""" - return self._json_data.get('teamId') + return self._json_data.get("teamId") @property def lastActivity(self): - """The date and time of the room's last activity.""" - last_activity = self._json_data.get('lastActivity') + """The date and time of the room"s last activity.""" + last_activity = self._json_data.get("lastActivity") if last_activity: return WebexTeamsDateTime.strptime(last_activity) else: @@ -81,18 +81,18 @@ def lastActivity(self): @property def creatorId(self): """The ID of the person who created this room.""" - return self._json_data.get('creatorId') - - @property - def ownerId(self): - """The ID of the organization which owns this room.""" - return self._json_data.get('ownerId') + return self._json_data.get("creatorId") @property def created(self): """The date and time the room was created.""" - created = self._json_data.get('created') + created = self._json_data.get("created") if created: return WebexTeamsDateTime.strptime(created) else: return None + + @property + def ownerId(self): + """The ID of the organization which owns this room.""" + return self._json_data.get("ownerId") From 25f1227a35f05c19df90953260e5b51cc9382316 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Sat, 11 Jul 2020 13:55:23 -0400 Subject: [PATCH 15/20] Add Get Room Meeting Details API endpoint - Update the Rooms API with the GET `/v1/rooms/{roomId}/meetingInfo` endpoint. - Add a RoomMeetingInfo data model - Update the docs and tests --- docs/user/api.rst | 11 ++- docs/user/api_structure_table.rst | 1 + tests/api/test_rooms.py | 10 +++ webexteamssdk/__init__.py | 2 +- webexteamssdk/api/rooms.py | 26 +++++++ webexteamssdk/models/immutable.py | 6 ++ .../models/mixins/room_meeting_info.py | 67 +++++++++++++++++++ 7 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 webexteamssdk/models/mixins/room_meeting_info.py diff --git a/docs/user/api.rst b/docs/user/api.rst index dae8500..f811a51 100644 --- a/docs/user/api.rst +++ b/docs/user/api.rst @@ -257,6 +257,15 @@ Room :inherited-members: +.. _RoomMeetingInfo: + +Room Meeting Info +----------------- + +.. autoclass:: RoomMeetingInfo() + :inherited-members: + + .. _Team: Team @@ -266,7 +275,7 @@ Team :inherited-members: -.. _Team Membership: +.. _TeamMembership: Team Membership --------------- diff --git a/docs/user/api_structure_table.rst b/docs/user/api_structure_table.rst index cd53440..47e7650 100644 --- a/docs/user/api_structure_table.rst +++ b/docs/user/api_structure_table.rst @@ -42,6 +42,7 @@ | | :ref:`rooms` | :meth:`list() ` | | | | :meth:`create() ` | | | | :meth:`get() ` | +| | | :meth:`get_meeting_info() ` | | | | :meth:`update() ` | | | | :meth:`delete() ` | +------------------------+---------------------------+---------------------------------------------------------------------------------+ diff --git a/tests/api/test_rooms.py b/tests/api/test_rooms.py index a7a423b..ad7a1dd 100644 --- a/tests/api/test_rooms.py +++ b/tests/api/test_rooms.py @@ -36,6 +36,11 @@ def is_valid_room(obj): return isinstance(obj, webexteamssdk.Room) and obj.id is not None +def is_valid_room_meeting_info(obj): + return (isinstance(obj, webexteamssdk.RoomMeetingInfo) + and obj.roomId is not None) + + def are_valid_rooms(iterable): return all([is_valid_room(obj) for obj in iterable]) @@ -156,6 +161,11 @@ def test_get_room_details(api, group_room): assert is_valid_room(room) +def test_get_room_meeting_info(api, group_room): + room_meeting_info = api.rooms.get_meeting_info(group_room.id) + assert is_valid_room_meeting_info(room_meeting_info) + + def test_update_room_title(api, group_room): new_title = create_string("Updated Group Room") room = api.rooms.update(group_room.id, title=new_title) diff --git a/webexteamssdk/__init__.py b/webexteamssdk/__init__.py index 56abc52..371d101 100644 --- a/webexteamssdk/__init__.py +++ b/webexteamssdk/__init__.py @@ -46,7 +46,7 @@ from .models.immutable import ( AccessToken, AdminAuditEvent, AttachmentAction, Event, GuestIssuerToken, immutable_data_factory, License, Membership, Message, Organization, Person, - Role, Room, Team, TeamMembership, Webhook, WebhookEvent, + Role, Room, RoomMeetingInfo, Team, TeamMembership, Webhook, WebhookEvent, ) from .models.simple import simple_data_factory, SimpleDataModel from .utils import WebexTeamsDateTime diff --git a/webexteamssdk/api/rooms.py b/webexteamssdk/api/rooms.py index b8918f9..de9f56a 100644 --- a/webexteamssdk/api/rooms.py +++ b/webexteamssdk/api/rooms.py @@ -189,6 +189,32 @@ def get(self, roomId): # Return a room object created from the response JSON data return self._object_factory(OBJECT_TYPE, json_data) + def get_meeting_info(self, roomId): + """Get the meeting details for a room. + + Args: + roomId(basestring): The unique identifier for the room. + + Returns: + RoomMeetingInfo: A Room Meeting Info object with the meeting + details for the room such as the SIP address, meeting URL, + toll-free and toll dial-in numbers. + + Raises: + TypeError: If the parameter types are incorrect. + ApiError: If the Webex Teams cloud returns an error. + + """ + check_type(roomId, basestring) + + # API request + json_data = self._session.get( + API_ENDPOINT + '/' + roomId + '/meetingInfo', + ) + + # Return a room meeting info object created from the response JSON data + return self._object_factory("room_meeting_info", json_data) + def update(self, roomId, title, **request_parameters): """Update details for a room, by ID. diff --git a/webexteamssdk/models/immutable.py b/webexteamssdk/models/immutable.py index 4aa6601..24cb739 100644 --- a/webexteamssdk/models/immutable.py +++ b/webexteamssdk/models/immutable.py @@ -55,6 +55,7 @@ from .mixins.person import PersonBasicPropertiesMixin from .mixins.role import RoleBasicPropertiesMixin from .mixins.room import RoomBasicPropertiesMixin +from .mixins.room_meeting_info import RoomMeetingInfoBasicPropertiesMixin from .mixins.team import TeamBasicPropertiesMixin from .mixins.team_membership import TeamMembershipBasicPropertiesMixin from .mixins.webhook import WebhookBasicPropertiesMixin @@ -240,6 +241,10 @@ class Room(ImmutableData, RoomBasicPropertiesMixin): """Webex Teams Room data model.""" +class RoomMeetingInfo(ImmutableData, RoomMeetingInfoBasicPropertiesMixin): + """Webex Teams Room Meeting Info data model.""" + + class Team(ImmutableData, TeamBasicPropertiesMixin): """Webex Teams Team data model.""" @@ -278,6 +283,7 @@ class GuestIssuerToken(ImmutableData, GuestIssuerTokenBasicPropertiesMixin): person=Person, role=Role, room=Room, + room_meeting_info=RoomMeetingInfo, team=Team, team_membership=TeamMembership, webhook=Webhook, diff --git a/webexteamssdk/models/mixins/room_meeting_info.py b/webexteamssdk/models/mixins/room_meeting_info.py new file mode 100644 index 0000000..2b52c3d --- /dev/null +++ b/webexteamssdk/models/mixins/room_meeting_info.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +"""Webex Teams Room Meeting Info data model. + +Copyright (c) 2016-2019 Cisco and/or its affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +""" + + +from __future__ import ( + absolute_import, + division, + print_function, + unicode_literals, +) + +from builtins import * + + +class RoomMeetingInfoBasicPropertiesMixin(object): + """Room basic properties.""" + + @property + def roomId(self): + """A unique identifier for the room.""" + return self._json_data.get("roomId") + + @property + def meetingLink(self): + """The Webex meeting URL for the room.""" + return self._json_data.get("meetingLink") + + @property + def sipAddress(self): + """The SIP address for the room.""" + return self._json_data.get("sipAddress") + + @property + def meetingNumber(self): + """The Webex meeting number for the room.""" + return self._json_data.get("meetingNumber") + + @property + def callInTollFreeNumber(self): + """The toll-free PSTN number for the room.""" + return self._json_data.get("callInTollFreeNumber") + + @property + def callInTollNumber(self): + """The toll (local) PSTN number for the room.""" + return self._json_data.get("callInTollNumber") From ba36eb8e895dae15d638ea0ae28a921c8cfd7ba1 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Sat, 11 Jul 2020 14:32:33 -0400 Subject: [PATCH 16/20] Add tests for the Guest Issuer API Test the guest_issuer.create() method. --- tests/api/test_guest_issuer.py | 55 ++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 tests/api/test_guest_issuer.py diff --git a/tests/api/test_guest_issuer.py b/tests/api/test_guest_issuer.py new file mode 100644 index 0000000..122e8a1 --- /dev/null +++ b/tests/api/test_guest_issuer.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +"""WebexTeamsAPI Licenses API fixtures and tests. + +Copyright (c) 2016-2019 Cisco and/or its affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +""" + +import os +import time + +import webexteamssdk + + +TOKEN_EXPIRATION_SECONDS = 60 * 5 +WEBEX_TEAMS_GUEST_ISSUER_ID = os.environ.get("WEBEX_TEAMS_GUEST_ISSUER_ID") +WEBEX_TEAMS_GUEST_ISSUER_SECRET = os.environ.get( + "WEBEX_TEAMS_GUEST_ISSUER_SECRET" +) + + +# Helper Functions + +def is_valid_guest_issuer_token(obj): + return (isinstance(obj, webexteamssdk.GuestIssuerToken) + and obj.token is not None) + + +# Tests + +def test_get_guest_issuer_token(api): + guest_issuer_token = api.guest_issuer.create( + sub="test-guest-user", + name="Test Guest User", + iss=WEBEX_TEAMS_GUEST_ISSUER_ID, + exp=str(int(time.time()) + TOKEN_EXPIRATION_SECONDS), + secret=WEBEX_TEAMS_GUEST_ISSUER_SECRET, + ) + assert is_valid_guest_issuer_token(guest_issuer_token) From cc2fa60b8b8a69db11c44f13f3fa2b8529499935 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Mon, 13 Jul 2020 10:25:28 -0400 Subject: [PATCH 17/20] Update Copyright notice --- LICENSE | 2 +- README.rst | 2 +- docs/conf.py | 2 +- docs/index.rst | 2 +- docs/installation.rst | 2 +- docs/user/api.rst | 2 +- docs/user/intro.rst | 2 +- docs/user/quickstart.rst | 6 +++--- examples/bot-example-flask.py | 4 ++-- examples/bot-example-webpy.py | 4 ++-- examples/local_file_upload.py | 4 ++-- examples/ngrokwebhook.py | 4 ++-- examples/people.py | 4 ++-- .../pyramidWebexTeamsBot/pyramidWebexTeamsBot/__init__.py | 4 ++-- .../pyramidWebexTeamsBot/pyramidWebexTeamsBot/views.py | 4 ++-- examples/pyramidWebexTeamsBot/setup.py | 4 ++-- examples/simple.py | 2 +- script/build | 2 +- script/ci | 2 +- script/clean | 2 +- script/console | 2 +- script/installdeps | 2 +- script/ipython_console.py | 2 +- script/setup | 2 +- script/test | 2 +- script/update | 2 +- setup.py | 2 +- tests/api/__init__.py | 2 +- tests/api/test_admin_audit_events.py | 2 +- tests/api/test_attachment_actions.py | 2 +- tests/api/test_events.py | 2 +- tests/api/test_guest_issuer.py | 2 +- tests/api/test_licenses.py | 2 +- tests/api/test_memberships.py | 2 +- tests/api/test_messages.py | 2 +- tests/api/test_organizations.py | 2 +- tests/api/test_people.py | 2 +- tests/api/test_roles.py | 2 +- tests/api/test_rooms.py | 2 +- tests/api/test_teammemberships.py | 2 +- tests/api/test_teams.py | 2 +- tests/conftest.py | 2 +- tests/environment.py | 2 +- tests/test_restsession.py | 2 +- tests/test_webexteamssdk.py | 2 +- tests/utils.py | 2 +- webexteamssdk/__init__.py | 2 +- webexteamssdk/_metadata.py | 4 ++-- webexteamssdk/api/__init__.py | 2 +- webexteamssdk/api/access_tokens.py | 8 +------- webexteamssdk/api/admin_audit_events.py | 2 +- webexteamssdk/api/attachment_actions.py | 2 +- webexteamssdk/api/events.py | 2 +- webexteamssdk/api/guest_issuer.py | 2 +- webexteamssdk/api/licenses.py | 2 +- webexteamssdk/api/memberships.py | 2 +- webexteamssdk/api/messages.py | 2 +- webexteamssdk/api/organizations.py | 2 +- webexteamssdk/api/people.py | 2 +- webexteamssdk/api/roles.py | 2 +- webexteamssdk/api/rooms.py | 2 +- webexteamssdk/api/team_memberships.py | 2 +- webexteamssdk/api/teams.py | 2 +- webexteamssdk/api/webhooks.py | 2 +- webexteamssdk/config.py | 2 +- webexteamssdk/environment.py | 2 +- webexteamssdk/exceptions.py | 2 +- webexteamssdk/generator_containers.py | 2 +- webexteamssdk/models/cards/__init__.py | 2 +- webexteamssdk/models/cards/actions.py | 2 +- webexteamssdk/models/cards/adaptive_card_component.py | 2 +- webexteamssdk/models/cards/card.py | 2 +- webexteamssdk/models/cards/components.py | 2 +- webexteamssdk/models/cards/container.py | 2 +- webexteamssdk/models/cards/inputs.py | 2 +- webexteamssdk/models/cards/options.py | 2 +- webexteamssdk/models/cards/utils.py | 2 +- webexteamssdk/models/dictionary.py | 2 +- webexteamssdk/models/immutable.py | 2 +- webexteamssdk/models/mixins/access_token.py | 2 +- webexteamssdk/models/mixins/admin_audit_event.py | 2 +- webexteamssdk/models/mixins/attachment_action.py | 2 +- webexteamssdk/models/mixins/event.py | 2 +- webexteamssdk/models/mixins/guest_issuer_token.py | 2 +- webexteamssdk/models/mixins/license.py | 2 +- webexteamssdk/models/mixins/membership.py | 2 +- webexteamssdk/models/mixins/message.py | 2 +- webexteamssdk/models/mixins/organization.py | 2 +- webexteamssdk/models/mixins/person.py | 2 +- webexteamssdk/models/mixins/role.py | 2 +- webexteamssdk/models/mixins/room.py | 2 +- webexteamssdk/models/mixins/room_meeting_info.py | 2 +- webexteamssdk/models/mixins/team.py | 2 +- webexteamssdk/models/mixins/team_membership.py | 2 +- webexteamssdk/models/mixins/webhook.py | 2 +- webexteamssdk/models/mixins/webhook_event.py | 2 +- webexteamssdk/models/simple.py | 2 +- webexteamssdk/response_codes.py | 2 +- webexteamssdk/restsession.py | 2 +- webexteamssdk/utils.py | 2 +- 100 files changed, 111 insertions(+), 117 deletions(-) diff --git a/LICENSE b/LICENSE index 8c1cba8..ce0147c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.rst b/README.rst index 24c656d..c837ff8 100644 --- a/README.rst +++ b/README.rst @@ -156,7 +156,7 @@ Contribution webexteamssdk_ is a community development projects. Feedback, thoughts, ideas, and code contributions are welcome! Please see the `Contributing`_ guide for more information. -*Copyright (c) 2016-2019 Cisco and/or its affiliates.* +*Copyright (c) 2016-2020 Cisco and/or its affiliates.* .. _ciscosparkapi: https://github.com/CiscoDevNet/ciscosparkapi/tree/ciscosparkapi diff --git a/docs/conf.py b/docs/conf.py index 4bd43e2..8bba024 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -11,7 +11,7 @@ project = u'webexteamssdk' -copyright = u'Copyright (c) 2016-2019 Cisco and/or its affiliates.' +copyright = u'Copyright (c) 2016-2020 Cisco and/or its affiliates.' author = u'Chris Lunsford' version = get_versions()['version'] release = get_versions()['version'] diff --git a/docs/index.rst b/docs/index.rst index 517a02a..1e8f638 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -66,7 +66,7 @@ Webex Teams for Developers Leveraging the Webex Teams APIs and developing on top of the Webex Teams cloud is easy. Signup for a `free account`_ and then head over to the `Webex Teams for Developers`_ website to learn more. -*Copyright (c) 2016-2019 Cisco and/or its affiliates.* +*Copyright (c) 2016-2020 Cisco and/or its affiliates.* .. _free account: `Webex Teams` diff --git a/docs/installation.rst b/docs/installation.rst index a84e5b0..5376248 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -58,7 +58,7 @@ command: $ python setup.py install -*Copyright (c) 2016-2019 Cisco and/or its affiliates.* +*Copyright (c) 2016-2020 Cisco and/or its affiliates.* .. _Python Package Index (PyPI): https://pypi.python.org/pypi/webexteamssdk diff --git a/docs/user/api.rst b/docs/user/api.rst index f811a51..4d0b4bc 100644 --- a/docs/user/api.rst +++ b/docs/user/api.rst @@ -434,4 +434,4 @@ Actions .. autoclass:: webexteamssdk.cards.actions.ShowCard -*Copyright (c) 2016-2019 Cisco and/or its affiliates.* +*Copyright (c) 2016-2020 Cisco and/or its affiliates.* diff --git a/docs/user/intro.rst b/docs/user/intro.rst index 8814cc4..5014c45 100644 --- a/docs/user/intro.rst +++ b/docs/user/intro.rst @@ -151,7 +151,7 @@ webexteamssdk License .. include:: ../../LICENSE -*Copyright (c) 2016-2019 Cisco and/or its affiliates.* +*Copyright (c) 2016-2020 Cisco and/or its affiliates.* .. _MIT Open Source License: https://opensource.org/licenses/MIT diff --git a/docs/user/quickstart.rst b/docs/user/quickstart.rst index a5f4211..72952d8 100644 --- a/docs/user/quickstart.rst +++ b/docs/user/quickstart.rst @@ -473,7 +473,7 @@ Extending the API with bound methods ------------------------------------ As the Webex Teams API is developed and features are added, it may be necessary to extend the webexteamssdk to access those features. -Extending the API is simple by binding your own methods to the WebexTeamsAPI connection object. By binding a method, you can +Extending the API is simple by binding your own methods to the WebexTeamsAPI connection object. By binding a method, you can extend functionality and leverage all of the objects and quality of life features of webexteamssdk. .. code-block:: python @@ -481,13 +481,13 @@ extend functionality and leverage all of the objects and quality of life feature >>> new_method(self, param): ... json_obj = self._session.get('/example/action/' + param) ... return json_obj - + >>> api = WebexTeamsAPI() >>> api.new_method = new_method >>> output = WebexTeamsAPI.new_method(param) -*Copyright (c) 2016-2019 Cisco and/or its affiliates.* +*Copyright (c) 2016-2020 Cisco and/or its affiliates.* .. _Webex Teams: https://www.webex.com/products/teams/index.html diff --git a/examples/bot-example-flask.py b/examples/bot-example-flask.py index 493cd78..8c058de 100755 --- a/examples/bot-example-flask.py +++ b/examples/bot-example-flask.py @@ -22,7 +22,7 @@ This script supports Python versions 2 and 3. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -57,7 +57,7 @@ __author__ = "Chris Lunsford" __author_email__ = "chrlunsf@cisco.com" __contributors__ = ["Brad Bester "] -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" diff --git a/examples/bot-example-webpy.py b/examples/bot-example-webpy.py index 91e01fb..259fbfe 100755 --- a/examples/bot-example-webpy.py +++ b/examples/bot-example-webpy.py @@ -22,7 +22,7 @@ the time of this writing web.py (v0.38) only supports Python 2. Therefore this script only supports Python 2. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -57,7 +57,7 @@ __author__ = "Brad Bester" __author_email__ = "brbester@cisco.com" __contributors__ = ["Chris Lunsford "] -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" diff --git a/examples/local_file_upload.py b/examples/local_file_upload.py index 856748a..5228fed 100755 --- a/examples/local_file_upload.py +++ b/examples/local_file_upload.py @@ -17,7 +17,7 @@ variable set to run this script. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -49,7 +49,7 @@ __author__ = "Jeff Levensailor" __author_email__ = "jeff@levensailor.com" __contributors__ = ["Chris Lunsford "] -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" diff --git a/examples/ngrokwebhook.py b/examples/ngrokwebhook.py index 730f5cd..0396958 100755 --- a/examples/ngrokwebhook.py +++ b/examples/ngrokwebhook.py @@ -13,7 +13,7 @@ To use script simply launch ngrok, and then launch this script. After ngrok is killed, run this script a second time to remove webhook from Webex Teams. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -48,7 +48,7 @@ __author__ = "Brad Bester" __author_email__ = "brbester@cisco.com" __contributors__ = ["Chris Lunsford "] -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" diff --git a/examples/people.py b/examples/people.py index f147502..a140736 100755 --- a/examples/people.py +++ b/examples/people.py @@ -6,7 +6,7 @@ WEBEX_TEAMS_ACCESS_TOKEN environment variable. You must have this environment variable set to run this script. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -40,7 +40,7 @@ __author__ = "Jose Bogarín Solano" __author_email__ = "jose@bogarin.co.cr" __contributors__ = ["Chris Lunsford "] -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" from webexteamssdk import WebexTeamsAPI diff --git a/examples/pyramidWebexTeamsBot/pyramidWebexTeamsBot/__init__.py b/examples/pyramidWebexTeamsBot/pyramidWebexTeamsBot/__init__.py index 5c5a514..053488e 100755 --- a/examples/pyramidWebexTeamsBot/pyramidWebexTeamsBot/__init__.py +++ b/examples/pyramidWebexTeamsBot/pyramidWebexTeamsBot/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Main entry point. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -26,7 +26,7 @@ __author__ = "Jose Bogarín Solano" __author_email__ = "jose@bogarin.co.cr" __contributors__ = ["Chris Lunsford "] -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" diff --git a/examples/pyramidWebexTeamsBot/pyramidWebexTeamsBot/views.py b/examples/pyramidWebexTeamsBot/pyramidWebexTeamsBot/views.py index 8fd49ca..7632e65 100755 --- a/examples/pyramidWebexTeamsBot/pyramidWebexTeamsBot/views.py +++ b/examples/pyramidWebexTeamsBot/pyramidWebexTeamsBot/views.py @@ -22,7 +22,7 @@ This script supports Python versions 2 and 3. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -60,7 +60,7 @@ "Brad Bester ", "Chris Lunsford ", ] -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" diff --git a/examples/pyramidWebexTeamsBot/setup.py b/examples/pyramidWebexTeamsBot/setup.py index 7da2b72..d14644f 100755 --- a/examples/pyramidWebexTeamsBot/setup.py +++ b/examples/pyramidWebexTeamsBot/setup.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """A simple bot script, built on Pyramid using Cornice. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -25,7 +25,7 @@ __author__ = "Jose Bogarín Solano" __author_email__ = "jose@bogarin.co.cr" __contributors__ = ["Chris Lunsford "] -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" diff --git a/examples/simple.py b/examples/simple.py index 787a327..9bb02e8 100755 --- a/examples/simple.py +++ b/examples/simple.py @@ -11,7 +11,7 @@ variable set to run this script. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/script/build b/script/build index e1acbdd..6948ef5 100755 --- a/script/build +++ b/script/build @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Build the project's product(s). # -# Copyright (c) 2016-2019 Cisco and/or its affiliates. +# Copyright (c) 2016-2020 Cisco and/or its affiliates. # License: MIT diff --git a/script/ci b/script/ci index b926a98..d54e27d 100755 --- a/script/ci +++ b/script/ci @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Run the project's test suite. # -# Copyright (c) 2016-2019 Cisco and/or its affiliates. +# Copyright (c) 2016-2020 Cisco and/or its affiliates. # License: MIT diff --git a/script/clean b/script/clean index e2b61e1..0e8a4f4 100755 --- a/script/clean +++ b/script/clean @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Clean the project directory. # -# Copyright (c) 2016-2019 Cisco and/or its affiliates. +# Copyright (c) 2016-2020 Cisco and/or its affiliates. # License: MIT diff --git a/script/console b/script/console index e416263..de884d7 100755 --- a/script/console +++ b/script/console @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Open the project's console. # -# Copyright (c) 2016-2019 Cisco and/or its affiliates. +# Copyright (c) 2016-2020 Cisco and/or its affiliates. # License: MIT diff --git a/script/installdeps b/script/installdeps index 288f3f5..0a2f20a 100755 --- a/script/installdeps +++ b/script/installdeps @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Install all the development dependencies for this project. # -# Copyright (c) 2016-2019 Cisco and/or its affiliates. +# Copyright (c) 2016-2020 Cisco and/or its affiliates. # License: MIT diff --git a/script/ipython_console.py b/script/ipython_console.py index 69a3705..32a277e 100755 --- a/script/ipython_console.py +++ b/script/ipython_console.py @@ -16,7 +16,7 @@ import webexteamssdk -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" diff --git a/script/setup b/script/setup index 5b6a2a0..2a2556c 100755 --- a/script/setup +++ b/script/setup @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Setup or reset the project to its initial state. # -# Copyright (c) 2016-2019 Cisco and/or its affiliates. +# Copyright (c) 2016-2020 Cisco and/or its affiliates. # License: MIT diff --git a/script/test b/script/test index fd07f5e..68a22c1 100755 --- a/script/test +++ b/script/test @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Run the project's test suite(s). # -# Copyright (c) 2016-2019 Cisco and/or its affiliates. +# Copyright (c) 2016-2020 Cisco and/or its affiliates. # License: MIT diff --git a/script/update b/script/update index 5ccb828..40f08cc 100755 --- a/script/update +++ b/script/update @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Update the project's dependencies. # -# Copyright (c) 2016-2019 Cisco and/or its affiliates. +# Copyright (c) 2016-2020 Cisco and/or its affiliates. # License: MIT diff --git a/setup.py b/setup.py index 4f1c0a8..b001503 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ import versioneer -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" diff --git a/tests/api/__init__.py b/tests/api/__init__.py index 6d3ba04..13be5cf 100644 --- a/tests/api/__init__.py +++ b/tests/api/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_admin_audit_events.py b/tests/api/test_admin_audit_events.py index cb823e6..7601ffc 100644 --- a/tests/api/test_admin_audit_events.py +++ b/tests/api/test_admin_audit_events.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Admin Audit Events API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_attachment_actions.py b/tests/api/test_attachment_actions.py index 9442e95..f8366f4 100644 --- a/tests/api/test_attachment_actions.py +++ b/tests/api/test_attachment_actions.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Messages API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_events.py b/tests/api/test_events.py index 4aa67e1..a09d587 100644 --- a/tests/api/test_events.py +++ b/tests/api/test_events.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Events API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_guest_issuer.py b/tests/api/test_guest_issuer.py index 122e8a1..f361c1c 100644 --- a/tests/api/test_guest_issuer.py +++ b/tests/api/test_guest_issuer.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Licenses API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_licenses.py b/tests/api/test_licenses.py index fe74ee7..c7e6b62 100644 --- a/tests/api/test_licenses.py +++ b/tests/api/test_licenses.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Licenses API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_memberships.py b/tests/api/test_memberships.py index 096a9a9..88cfa31 100644 --- a/tests/api/test_memberships.py +++ b/tests/api/test_memberships.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Memberships API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_messages.py b/tests/api/test_messages.py index 27f1785..cedb19d 100644 --- a/tests/api/test_messages.py +++ b/tests/api/test_messages.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Messages API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_organizations.py b/tests/api/test_organizations.py index 3a83073..b00e52a 100644 --- a/tests/api/test_organizations.py +++ b/tests/api/test_organizations.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Organizations API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_people.py b/tests/api/test_people.py index 114159d..99e3a39 100644 --- a/tests/api/test_people.py +++ b/tests/api/test_people.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI People API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_roles.py b/tests/api/test_roles.py index 656bf1e..7c26236 100644 --- a/tests/api/test_roles.py +++ b/tests/api/test_roles.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Roles API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_rooms.py b/tests/api/test_rooms.py index ad7a1dd..4e403fb 100644 --- a/tests/api/test_rooms.py +++ b/tests/api/test_rooms.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Rooms API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_teammemberships.py b/tests/api/test_teammemberships.py index dcf78e9..7f79393 100644 --- a/tests/api/test_teammemberships.py +++ b/tests/api/test_teammemberships.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Team Memberships API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/api/test_teams.py b/tests/api/test_teams.py index cc23b70..d737cde 100644 --- a/tests/api/test_teams.py +++ b/tests/api/test_teams.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """WebexTeamsAPI Team API fixtures and tests. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/conftest.py b/tests/conftest.py index 37be457..d73f184 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """pytest configuration and top-level fixtures. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/environment.py b/tests/environment.py index 0f6c65e..721edf6 100644 --- a/tests/environment.py +++ b/tests/environment.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Test suite environment variables. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/test_restsession.py b/tests/test_restsession.py index 10c9b67..47b6ad4 100644 --- a/tests/test_restsession.py +++ b/tests/test_restsession.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """webexteamssdk/restsession.py Fixtures & Tests -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/test_webexteamssdk.py b/tests/test_webexteamssdk.py index bf9cde1..196e2b7 100644 --- a/tests/test_webexteamssdk.py +++ b/tests/test_webexteamssdk.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Test suite for the community-developed Python SDK for the Webex Teams APIs. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/utils.py b/tests/utils.py index f1abac9..36bb3f3 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Test utilities, helper functions, and classes. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/__init__.py b/webexteamssdk/__init__.py index 371d101..d881ea8 100644 --- a/webexteamssdk/__init__.py +++ b/webexteamssdk/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Community-developed Python SDK for the Webex Teams APIs. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/_metadata.py b/webexteamssdk/_metadata.py index 39ad4cb..e5ecd88 100644 --- a/webexteamssdk/_metadata.py +++ b/webexteamssdk/_metadata.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Package metadata. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -28,7 +28,7 @@ __download_url__ = 'https://pypi.python.org/pypi/webexteamssdk' __author__ = 'Chris Lunsford' __author_email__ = 'chrlunsf@cisco.com' -__copyright__ = "Copyright (c) 2016-2019 Cisco Systems, Inc." +__copyright__ = "Copyright (c) 2016-2020 Cisco and/or its affiliates." __license__ = "MIT" diff --git a/webexteamssdk/api/__init__.py b/webexteamssdk/api/__init__.py index de1ab94..c4cf9ab 100644 --- a/webexteamssdk/api/__init__.py +++ b/webexteamssdk/api/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams API wrappers. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/access_tokens.py b/webexteamssdk/api/access_tokens.py index da32ee9..aade7b5 100644 --- a/webexteamssdk/api/access_tokens.py +++ b/webexteamssdk/api/access_tokens.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Access-Tokens API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -49,12 +49,6 @@ ) -__author__ = "Chris Lunsford" -__author_email__ = "chrlunsf@cisco.com" -__copyright__ = "Copyright (c) 2016-2019 Cisco and/or its affiliates." -__license__ = "MIT" - - API_ENDPOINT = 'access_token' OBJECT_TYPE = 'access_token' diff --git a/webexteamssdk/api/admin_audit_events.py b/webexteamssdk/api/admin_audit_events.py index b9883cf..6f4154c 100644 --- a/webexteamssdk/api/admin_audit_events.py +++ b/webexteamssdk/api/admin_audit_events.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Admin Audit Events API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/attachment_actions.py b/webexteamssdk/api/attachment_actions.py index c6f7ae4..157b7c0 100644 --- a/webexteamssdk/api/attachment_actions.py +++ b/webexteamssdk/api/attachment_actions.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Attachment Actions API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/events.py b/webexteamssdk/api/events.py index 14c0c84..51d3dae 100644 --- a/webexteamssdk/api/events.py +++ b/webexteamssdk/api/events.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Events API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/guest_issuer.py b/webexteamssdk/api/guest_issuer.py index 07db8a9..db2afde 100644 --- a/webexteamssdk/api/guest_issuer.py +++ b/webexteamssdk/api/guest_issuer.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Guest Issuer API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/licenses.py b/webexteamssdk/api/licenses.py index 22c7f06..49a51e3 100644 --- a/webexteamssdk/api/licenses.py +++ b/webexteamssdk/api/licenses.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Licenses API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/memberships.py b/webexteamssdk/api/memberships.py index edc8f9f..ced2652 100644 --- a/webexteamssdk/api/memberships.py +++ b/webexteamssdk/api/memberships.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Memberships API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/messages.py b/webexteamssdk/api/messages.py index 12b2db8..06e4df9 100644 --- a/webexteamssdk/api/messages.py +++ b/webexteamssdk/api/messages.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Messages API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/organizations.py b/webexteamssdk/api/organizations.py index c92ea22..0143671 100644 --- a/webexteamssdk/api/organizations.py +++ b/webexteamssdk/api/organizations.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Organizations API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/people.py b/webexteamssdk/api/people.py index ef9cd96..13ce40f 100644 --- a/webexteamssdk/api/people.py +++ b/webexteamssdk/api/people.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams People API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/roles.py b/webexteamssdk/api/roles.py index 48413ef..1b0d142 100644 --- a/webexteamssdk/api/roles.py +++ b/webexteamssdk/api/roles.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Roles API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/rooms.py b/webexteamssdk/api/rooms.py index de9f56a..0e07ce3 100644 --- a/webexteamssdk/api/rooms.py +++ b/webexteamssdk/api/rooms.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Rooms API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/team_memberships.py b/webexteamssdk/api/team_memberships.py index d8d83f2..b545314 100644 --- a/webexteamssdk/api/team_memberships.py +++ b/webexteamssdk/api/team_memberships.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Memberships API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/teams.py b/webexteamssdk/api/teams.py index a637d47..7a54506 100644 --- a/webexteamssdk/api/teams.py +++ b/webexteamssdk/api/teams.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Teams-API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/api/webhooks.py b/webexteamssdk/api/webhooks.py index b3c3fee..f7401e9 100644 --- a/webexteamssdk/api/webhooks.py +++ b/webexteamssdk/api/webhooks.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Webhooks API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/config.py b/webexteamssdk/config.py index f7d9279..3eb032e 100644 --- a/webexteamssdk/config.py +++ b/webexteamssdk/config.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Package configuration. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/environment.py b/webexteamssdk/environment.py index 5f0e9f1..6a68708 100644 --- a/webexteamssdk/environment.py +++ b/webexteamssdk/environment.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Package environment variables. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/exceptions.py b/webexteamssdk/exceptions.py index 75c5f3b..5c573eb 100644 --- a/webexteamssdk/exceptions.py +++ b/webexteamssdk/exceptions.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Package exceptions. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/generator_containers.py b/webexteamssdk/generator_containers.py index 0c31b50..97a9309 100644 --- a/webexteamssdk/generator_containers.py +++ b/webexteamssdk/generator_containers.py @@ -8,7 +8,7 @@ generator_container: Function decorator for wrapping a generator function in a GeneratorContainer. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/cards/__init__.py b/webexteamssdk/models/cards/__init__.py index 0366db4..5a9ef34 100644 --- a/webexteamssdk/models/cards/__init__.py +++ b/webexteamssdk/models/cards/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Adaptive Cards data models. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/cards/actions.py b/webexteamssdk/models/cards/actions.py index 2ad33d6..ba4f730 100644 --- a/webexteamssdk/models/cards/actions.py +++ b/webexteamssdk/models/cards/actions.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Adaptive Card actions. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/cards/adaptive_card_component.py b/webexteamssdk/models/cards/adaptive_card_component.py index 1e803b2..ae405eb 100644 --- a/webexteamssdk/models/cards/adaptive_card_component.py +++ b/webexteamssdk/models/cards/adaptive_card_component.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Adaptive Card Component base class. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/cards/card.py b/webexteamssdk/models/cards/card.py index ba70b6c..02e1499 100644 --- a/webexteamssdk/models/cards/card.py +++ b/webexteamssdk/models/cards/card.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Adaptive Card data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/cards/components.py b/webexteamssdk/models/cards/components.py index 49a5bdd..9353d8c 100644 --- a/webexteamssdk/models/cards/components.py +++ b/webexteamssdk/models/cards/components.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Adaptive Card components. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/cards/container.py b/webexteamssdk/models/cards/container.py index edc444a..9798e45 100644 --- a/webexteamssdk/models/cards/container.py +++ b/webexteamssdk/models/cards/container.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Adaptive Card container data models. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/cards/inputs.py b/webexteamssdk/models/cards/inputs.py index c235004..23f450d 100644 --- a/webexteamssdk/models/cards/inputs.py +++ b/webexteamssdk/models/cards/inputs.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Access-Tokens API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/cards/options.py b/webexteamssdk/models/cards/options.py index f2b9344..5fa6691 100644 --- a/webexteamssdk/models/cards/options.py +++ b/webexteamssdk/models/cards/options.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Adaptive Card options. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/cards/utils.py b/webexteamssdk/models/cards/utils.py index f3d549a..78e7e95 100644 --- a/webexteamssdk/models/cards/utils.py +++ b/webexteamssdk/models/cards/utils.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Access-Tokens API wrapper. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/dictionary.py b/webexteamssdk/models/dictionary.py index 2d2d361..4105a72 100644 --- a/webexteamssdk/models/dictionary.py +++ b/webexteamssdk/models/dictionary.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams data models. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/immutable.py b/webexteamssdk/models/immutable.py index 24cb739..c789cf4 100644 --- a/webexteamssdk/models/immutable.py +++ b/webexteamssdk/models/immutable.py @@ -8,7 +8,7 @@ Python dictionary as a native Python object; providing attribute access using native dot-syntax (`object.attribute`). -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/access_token.py b/webexteamssdk/models/mixins/access_token.py index 3f288c4..17dee87 100644 --- a/webexteamssdk/models/mixins/access_token.py +++ b/webexteamssdk/models/mixins/access_token.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Access-Token data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/admin_audit_event.py b/webexteamssdk/models/mixins/admin_audit_event.py index 7e8cff5..be2c612 100644 --- a/webexteamssdk/models/mixins/admin_audit_event.py +++ b/webexteamssdk/models/mixins/admin_audit_event.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Webhook-Event data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/attachment_action.py b/webexteamssdk/models/mixins/attachment_action.py index 6c2b3f2..1bd2db4 100644 --- a/webexteamssdk/models/mixins/attachment_action.py +++ b/webexteamssdk/models/mixins/attachment_action.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Message data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/event.py b/webexteamssdk/models/mixins/event.py index ba275f0..e086c39 100644 --- a/webexteamssdk/models/mixins/event.py +++ b/webexteamssdk/models/mixins/event.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Event data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/guest_issuer_token.py b/webexteamssdk/models/mixins/guest_issuer_token.py index dd97963..d354a13 100644 --- a/webexteamssdk/models/mixins/guest_issuer_token.py +++ b/webexteamssdk/models/mixins/guest_issuer_token.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Guest-Issuer data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/license.py b/webexteamssdk/models/mixins/license.py index e1c7bfe..f1c53ea 100644 --- a/webexteamssdk/models/mixins/license.py +++ b/webexteamssdk/models/mixins/license.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams License data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/membership.py b/webexteamssdk/models/mixins/membership.py index 9d65ed1..f1ac31d 100644 --- a/webexteamssdk/models/mixins/membership.py +++ b/webexteamssdk/models/mixins/membership.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Membership data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/message.py b/webexteamssdk/models/mixins/message.py index c46ae51..bb70076 100644 --- a/webexteamssdk/models/mixins/message.py +++ b/webexteamssdk/models/mixins/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Message data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/organization.py b/webexteamssdk/models/mixins/organization.py index 2f24e60..8f46dd5 100644 --- a/webexteamssdk/models/mixins/organization.py +++ b/webexteamssdk/models/mixins/organization.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Organization data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/person.py b/webexteamssdk/models/mixins/person.py index 3e013b9..c9f5616 100644 --- a/webexteamssdk/models/mixins/person.py +++ b/webexteamssdk/models/mixins/person.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Person data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/role.py b/webexteamssdk/models/mixins/role.py index 91d737b..95767b1 100644 --- a/webexteamssdk/models/mixins/role.py +++ b/webexteamssdk/models/mixins/role.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Role data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/room.py b/webexteamssdk/models/mixins/room.py index 648eece..5c0e526 100644 --- a/webexteamssdk/models/mixins/room.py +++ b/webexteamssdk/models/mixins/room.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Room data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/room_meeting_info.py b/webexteamssdk/models/mixins/room_meeting_info.py index 2b52c3d..28ba87c 100644 --- a/webexteamssdk/models/mixins/room_meeting_info.py +++ b/webexteamssdk/models/mixins/room_meeting_info.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Room Meeting Info data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/team.py b/webexteamssdk/models/mixins/team.py index 58ebd6b..8ce60e3 100644 --- a/webexteamssdk/models/mixins/team.py +++ b/webexteamssdk/models/mixins/team.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Team data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/team_membership.py b/webexteamssdk/models/mixins/team_membership.py index caaff6f..9820260 100644 --- a/webexteamssdk/models/mixins/team_membership.py +++ b/webexteamssdk/models/mixins/team_membership.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Team-Membership data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/webhook.py b/webexteamssdk/models/mixins/webhook.py index 6a8f42d..a3d3b26 100644 --- a/webexteamssdk/models/mixins/webhook.py +++ b/webexteamssdk/models/mixins/webhook.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Webhook data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/mixins/webhook_event.py b/webexteamssdk/models/mixins/webhook_event.py index a30cd4a..d4207ad 100644 --- a/webexteamssdk/models/mixins/webhook_event.py +++ b/webexteamssdk/models/mixins/webhook_event.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Webhook-Event data model. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/models/simple.py b/webexteamssdk/models/simple.py index 96ad26a..44140b1 100644 --- a/webexteamssdk/models/simple.py +++ b/webexteamssdk/models/simple.py @@ -8,7 +8,7 @@ Python dictionary as a native Python object; providing attribute access using native dot-syntax. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/response_codes.py b/webexteamssdk/response_codes.py index b996d7f..5706b9e 100644 --- a/webexteamssdk/response_codes.py +++ b/webexteamssdk/response_codes.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Webex Teams Response Codes. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/restsession.py b/webexteamssdk/restsession.py index 550271d..fb93beb 100644 --- a/webexteamssdk/restsession.py +++ b/webexteamssdk/restsession.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """RestSession class for creating connections to the Webex Teams APIs. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/webexteamssdk/utils.py b/webexteamssdk/utils.py index 5afb205..f22c8bb 100644 --- a/webexteamssdk/utils.py +++ b/webexteamssdk/utils.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Package helper functions and classes. -Copyright (c) 2016-2019 Cisco and/or its affiliates. +Copyright (c) 2016-2020 Cisco and/or its affiliates. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From f6e76dff79438465cba11c1e299ad9cdc6999a79 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Mon, 13 Jul 2020 10:31:52 -0400 Subject: [PATCH 18/20] Use the new webexapis.com API domain Update the default base URL to use the new webexapis.com domain name. --- webexteamssdk/config.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/webexteamssdk/config.py b/webexteamssdk/config.py index 3eb032e..f7336d6 100644 --- a/webexteamssdk/config.py +++ b/webexteamssdk/config.py @@ -24,17 +24,17 @@ # Package Constants -DEFAULT_BASE_URL = 'https://api.ciscospark.com/v1/' +DEFAULT_BASE_URL = "https://webexapis.com/v1/" DEFAULT_SINGLE_REQUEST_TIMEOUT = 60 DEFAULT_WAIT_ON_RATE_LIMIT = True -ACCESS_TOKEN_ENVIRONMENT_VARIABLE = 'WEBEX_TEAMS_ACCESS_TOKEN' +ACCESS_TOKEN_ENVIRONMENT_VARIABLE = "WEBEX_TEAMS_ACCESS_TOKEN" LEGACY_ACCESS_TOKEN_ENVIRONMENT_VARIABLES = [ - 'SPARK_ACCESS_TOKEN', - 'CISCO_SPARK_ACCESS_TOKEN', + "SPARK_ACCESS_TOKEN", + "CISCO_SPARK_ACCESS_TOKEN", ] WEBEX_TEAMS_DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ" From 9f6c713e388bc013ae35873f14a50fefd72ab392 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Mon, 13 Jul 2020 10:58:21 -0400 Subject: [PATCH 19/20] Update README.rst --- README.rst | 57 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/README.rst b/README.rst index c837ff8..b135e4a 100644 --- a/README.rst +++ b/README.rst @@ -15,29 +15,22 @@ webexteamssdk .. image:: https://readthedocs.org/projects/webexteamssdk/badge/?version=latest :target: http://webexteamssdk.readthedocs.io/en/latest/?badge=latest -------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------ -Looking for ``ciscosparkapi``? You are in the right place. ``ciscosparkapi`` is now ``webexteamssdk``! It still has all of the native and natural Webex Teams Python functionality that you love and now we have made room for even more functionality to be added in the future. +With release v1.6 we are wrapping up active development on the v1.x release and shifting our focus to the next major +release v2! Please see the work-in-progress `Release Plan`__ and contribute your ideas for v2.x enhancements by either +opening enhancement issues_ or by joining our +`webexteamssdk - Webex Teams SDK - Python Community Contributors `_ space and posting your +ideas there. -We will maintain the ``ciscosparkapi`` package (bug fixes, etc.) in the `ciscosparkapi`_ branch of this repository and continue to publish package updates with these fixes to PyPI (through the end of 2019). Maintaining the ``ciscosparkapi`` package should keep your code and projects up and running while giving you 12+ months to migrate your code to the new ``webexteamssdk`` library. +------------------------------------------------------------------------------------------------------------------------ -*Migration Note:* Migrating should be easy. The ``WebexTeamsAPI`` class and the Python objects returned by the API calls are nearly identical to their ``CiscoSparkAPI`` predecessors. Does the word "nearly" scare you? Here are some specifics: -* The obvious top-level name change from ``CiscoSparkAPI`` to ``WebexTeamsAPI``. -* ``WebexTeamsAPI``'s API structure: method and attribute names are *identical*. -* The returned Python objects (now derivatives of an `ImmutableData` base class) are now immutable; so you can use them in sets and as keys in dictionaries. -* ``WebexTeamsAPI`` converts object attributes that contain data-time strings (like a room's creation date) to Python ``datetime``'s (actually a derived class that has been customized to model the Webex Teams data-time format) +**webexteamssdk** is a *community developed* Python library for working with the Webex Teams APIs. Our goal is to make +working with Webex Teams in Python a *native* and *natural* experience! -There is also some new functionality under the hood that we will document, communicate, and generally make available in the future. - - -------------------------------------------------------------------------------- - - -**webexteamssdk** is a *community developed* Python library for working with the Webex Teams APIs. Our goal is to make working with Webex Teams in Python a *native* and *natural* experience! - -.. code-block:: python +.. code-block:: Python from webexteamssdk import WebexTeamsAPI @@ -64,7 +57,8 @@ There is also some new functionality under the hood that we will document, commu files=["https://www.webex.com/content/dam/wbx/us/images/dg-integ/teams_icon.png"]) -That's more than 6 Webex Teams API calls in less than 23 lines of code (with comments and whitespace), and likely more than that since webexteamssdk handles pagination_ for you automatically! +That's more than 6 Webex Teams API calls in less than 23 lines of code (with comments and whitespace), and likely more +than that, since webexteamssdk handles pagination_ for you automatically! webexteamssdk makes your life better... `Learn how!`__ @@ -78,7 +72,8 @@ webexteamssdk does all of this for you: * Transparently sources your Webex Teams access token from your local environment -* Provides and uses default arguments and settings everywhere possible, so you don't have to think about things like API endpoint URLs, HTTP headers and JSON formats +* Provides and uses default arguments and settings everywhere possible, so you don't have to think about things like API + endpoint URLs, HTTP headers and JSON formats * Represents all Webex Teams API interactions using native Python tools @@ -108,7 +103,7 @@ Installing and upgrading webexteamssdk is easy: $ pip install webexteamssdk -**Upgrading to the latest Version** +**Upgrade to the latest version** .. code-block:: bash @@ -137,15 +132,18 @@ __ Contribution_ Release Notes ------------- -Please see the releases_ page for release notes on the incremental functionality and bug fixes incorporated into the published releases. +Please see the releases_ page for release notes on the incremental functionality and bug fixes incorporated into the +published releases. Questions, Support & Discussion ------------------------------- -webexteamssdk is a *community developed* and *community supported* project. If you experience any issues using this package, please report them using the issues_ page. +webexteamssdk is a *community developed* and *community-supported* project. If you experience any issues using this +package, please report them using the issues_ page. -Please join the `Python Webex Teams Devs`__ Webex Teams space to ask questions, join the discussion, and share your projects and creations. +Please join the `Python Webex Teams Devs`__ Webex Teams space to ask questions, join the discussion, and share your +projects and creations. __ Community_ @@ -153,7 +151,18 @@ __ Community_ Contribution ------------ -webexteamssdk_ is a community development projects. Feedback, thoughts, ideas, and code contributions are welcome! Please see the `Contributing`_ guide for more information. +webexteamssdk_ is a community development project. Feedback, thoughts, ideas, and code contributions are welcome! +Please see the `Contributing`_ guide for more information. + + +History +------- + +The Webex Teams SDK (webexteamssdk) library started as Cisco Spark API (ciscosparkapi). We updated the library's name in +alignment with Cisco's re-brand of Cisco Spark to Webex Teams. The Cisco Spark API library has been deprecated and is no +longer supported; however, its open-source codebase is still available in the `ciscosparkapi`_ branch of this repository. + +The development team may make additional name changes as the library evolves with the Webex APIs published on developer.webex.com. *Copyright (c) 2016-2020 Cisco and/or its affiliates.* From c8aa0bb2417543f8c7f87024cf637217c2058356 Mon Sep 17 00:00:00 2001 From: Chris Lunsford Date: Mon, 13 Jul 2020 11:02:09 -0400 Subject: [PATCH 20/20] Update README.rst Update links --- README.rst | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index b135e4a..2406763 100644 --- a/README.rst +++ b/README.rst @@ -19,7 +19,7 @@ webexteamssdk With release v1.6 we are wrapping up active development on the v1.x release and shifting our focus to the next major -release v2! Please see the work-in-progress `Release Plan`__ and contribute your ideas for v2.x enhancements by either +release v2! Please see the work-in-progress `Release Plan`_ and contribute your ideas for v2.x enhancements by either opening enhancement issues_ or by joining our `webexteamssdk - Webex Teams SDK - Python Community Contributors `_ space and posting your ideas there. @@ -160,15 +160,17 @@ History The Webex Teams SDK (webexteamssdk) library started as Cisco Spark API (ciscosparkapi). We updated the library's name in alignment with Cisco's re-brand of Cisco Spark to Webex Teams. The Cisco Spark API library has been deprecated and is no -longer supported; however, its open-source codebase is still available in the `ciscosparkapi`_ branch of this repository. +longer supported; however, its open-source codebase is still available in the `ciscosparkapi`_ branch of this +repository. -The development team may make additional name changes as the library evolves with the Webex APIs published on developer.webex.com. +The development team may make additional name changes as the library evolves with the Webex APIs published on +developer.webex.com. *Copyright (c) 2016-2020 Cisco and/or its affiliates.* -.. _ciscosparkapi: https://github.com/CiscoDevNet/ciscosparkapi/tree/ciscosparkapi +.. _Release Plan: https://github.com/CiscoDevNet/webexteamssdk/wiki/Release-Plans .. _Introduction: http://webexteamssdk.readthedocs.io/en/latest/user/intro.html .. _pagination: https://developer.webex.com/pagination.html .. _webexteamssdk.readthedocs.io: https://webexteamssdk.readthedocs.io @@ -183,3 +185,4 @@ The development team may make additional name changes as the library evolves wit .. _the repository: webexteamssdk_ .. _pull request: `pull requests`_ .. _Contributing: https://github.com/CiscoDevNet/webexteamssdk/blob/master/docs/contributing.rst +.. _ciscosparkapi: https://github.com/CiscoDevNet/ciscosparkapi/tree/ciscosparkapi