diff --git a/.gitignore b/.gitignore index 1532d61..d6a2b78 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ var/ .installed.cfg *.egg .idea +myenv/ # PyInstaller # Usually these files are written by a python script from a template diff --git a/.travis.yml b/.travis.yml index 95a84e4..c30af8d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,3 +16,4 @@ deploy: secure: YIvWzNQAUsnxUNQGtGBKAdA9qJBCoaxVudbmO68OCQJ8x4iseNH321tUCihO3ZVeEkyduXEHIK85Club0CEgLvANoGnAOeLPWs+xCljagPBwjtjM7BAtIpojOCCd69OhZfF8pYuUNHL1Ja6NmwoNXSLwhDpTDJVQp0v+dOVAjJg= on: tags: true + skip_existing: true diff --git a/CHANGELOG b/CHANGELOG index 4452052..0e16ca2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +2.69.1 + * Added warning about deprecated methods + * Upload returns as json 2.69.0 * Added support for access groups 2.61.0 diff --git a/README.md b/README.md index 2f0b1b1..74683c7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![PyPI version](https://badge.fury.io/py/testdroid.svg)](https://badge.fury.io/py/testdroid) [![Build Status](https://travis-ci.org/bitbar/testdroid-api-client-python.svg?branch=devel)](https://travis-ci.org/bitbar/testdroid-api-client-python) Python client for Testdroid Cloud APIv2 diff --git a/setup.py b/setup.py index cbee57b..43855ea 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ import sys, os -version = '2.69.0' +version = '2.69.1' setup(name='testdroid', version=version, @@ -16,7 +16,7 @@ keywords='testdroid rest api client', author='Henri Kivelä , Sakari Rautiainen , Teppo Malinen , Jarno Tuovinen , Atte Keltanen ', author_email='info@bitbar.com', - url='http://www.testdroid.com', + url='http://www.bitbar.com', license='Apache License v2.0', packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), include_package_data=True, diff --git a/testdroid/__init__.py b/testdroid/__init__.py index 5a5275e..469c165 100755 --- a/testdroid/__init__.py +++ b/testdroid/__init__.py @@ -11,7 +11,7 @@ from optparse import OptionParser from datetime import datetime -__version__ = '2.69.0' +__version__ = '2.69.1' FORMAT = "%(message)s" logging.basicConfig(format=FORMAT) @@ -240,7 +240,7 @@ def upload(self, path=None, filename=None): res = requests.post(url, files=files, headers=self._build_headers()) if res.status_code not in list(range(200, 300)): raise RequestResponseError(res.text, res.status_code) - return res + return res.json() """ GET from API resource """ @@ -391,27 +391,30 @@ def print_projects(self, limit=0): for project in self.get_projects(limit)['data']: print("%s %s \"%s\"" % (str(project['id']).ljust(10), project['type'].ljust(15), project['name'])) - """ Upload application file to project + """ ***DEPRECATED*** Upload application file to project +Consider using upload_file() instead. """ def upload_application_file(self, project_id, filename): + logger.warning('WARNING: This method has been deprecated and will be removed in the future.') me = self.get_me() path = "users/%s/projects/%s/files/application" % (me['id'], project_id) - self.upload(path=path, filename=filename) + return self.upload(path=path, filename=filename) """ Upload application file to project """ def upload_file(self, filename): me = self.get_me() path = "users/%s/files" % (me['id']) - res = self.upload(path=path, filename=filename).json() - print("ID:%s Name:%s Size:%s" % (str(res['id']).ljust(10), res['name'].ljust(15), res['size'])) + return self.upload(path=path, filename=filename) - """ Upload test file to project + """ ***DEPRECATED*** Upload test file to project +Consider using upload_file() instead. """ def upload_test_file(self, project_id, filename): + logger.warning('WARNING: This method has been deprecated and will be removed in the future.') me = self.get_me() path = "users/%s/projects/%s/files/test" % (me['id'], project_id) - self.upload(path=path, filename=filename) + return self.upload(path=path, filename=filename) """ Delete project parameter """ @@ -426,12 +429,14 @@ def get_project_parameters(self, project_id): path = "me/projects/%s/config/parameters" % ( project_id ) return self.get(path=path) - """ Upload additional data file to project + """ ***DEPRECATED*** Upload additional data file to project +Consider using upload_file() instead. """ def upload_data_file(self, project_id, filename): + logger.warning('WARNING: This method has been deprecated and will be removed in the future.') me = self.get_me() path = "users/%s/projects/%s/files/data" % (me['id'], project_id) - self.upload(path=path, filename=filename) + return self.upload(path=path, filename=filename) """ Set project parameters """ @@ -447,9 +452,11 @@ def get_project_config(self, project_id): path = "me/projects/%s/config" % ( project_id ) return self.get(path=path) - """ Set project config according to http://docs.testdroid.com/_pages/client.html#project-config + """ ***DEPRECATED*** Set project config +Consider using start_test_run_using_config() instead. """ def set_project_config(self, project_id, payload): + logger.warning('WARNING: This method has been deprecated and will be removed in the future.') #set the project config to reflect the given json payload #e.g.: {'usedDeviceGroupId': 1234} if isinstance(payload, str): @@ -458,13 +465,15 @@ def set_project_config(self, project_id, payload): path = "users/%s/projects/%s/config" % ( me['id'], project_id ) return self.post(path=path, payload=payload) - """Set project framework based on a framework integer id + """ ***DEPRECATED*** Set project framework based on a framework integer id +Consider using start_test_run_using_config() instead. """ def set_project_framework(self, project_id, frameworkId): + logger.warning('WARNING: This method has been deprecated and will be removed in the future.') path = "projects/%(project_id)s/frameworks" % { 'project_id': project_id } - self.post(path, payload={"frameworkId": frameworkId}) + return self.post(path, payload={"frameworkId": frameworkId}) """ Start a test run using test run config @@ -484,9 +493,11 @@ def start_test_run_using_config(self, test_run_config={}): test_run = self.post(path=path, payload=test_run_config, headers={'Content-type': 'application/json', 'Accept': 'application/json'}) return test_run - """ Start a test run on a device group + """ ***DEPRECATED*** Start a test run on a device group +Consider using start_test_run_using_config() instead. """ def start_test_run(self, project_id, device_group_id=None, device_model_ids=None, name=None, additional_params={}): + logger.warning('WARNING: This method has been deprecated and will be removed in the future.') # check project validity project = self.get_project(project_id) if not 'id' in project: @@ -947,7 +958,7 @@ class MyParser(OptionParser): def format_epilog(self, formatter): return self.epilog usage = "usage: %prog [options] [arguments...]" - description = "Client for Testdroid Cloud API v2" + description = "Client for Bitbar Cloud API v2" epilog = """ Commands: @@ -965,16 +976,16 @@ def format_epilog(self, formatter): CALABASH_IOS delete-project Delete a project projects Get projects - upload-application Upload application to project - upload-test Upload test file to project - upload-data Upload additional data file to project + upload-application ***DEPRECATED*** Upload application to project + upload-test ***DEPRECATED*** Upload test file to project + upload-data ***DEPRECATED*** Upload additional data file to project upload-file Upload to "Files" set-project-config - Change the project config parameters as facilitated by the API: - http://docs.testdroid.com/_pages/client.html#project-config + ***DEPRECATED*** Change the project config parameters as facilitated by the API: e.g.: ./testdroid-api-client set-project-config 1234 '{"limitationType":"CLASS", "limitationValue":"com.foo.test.VerifyFoo"}' - start-test-run Start a test run + start-test-run + ***DEPRECATED*** Start a test run start-wait-download-test-run Start a test run, await completion (polling) and download results @@ -996,7 +1007,7 @@ def format_epilog(self, formatter): See the sample of Jenkisfile in http://docs.bitbar.com/build-service/guide.html update-job Update existing job - create-build Create a new build job. See https://cloud.testdroid.com/cloud/swagger-ui.html + create-build Create a new build job. See https://cloud.bitbar.com/cloud/swagger-ui.html for details of build configuration delete-job Delete job and all the builds in it delete-build Delete build by id @@ -1032,7 +1043,7 @@ def format_epilog(self, formatter): """ parser = MyParser(usage=usage, description=description, epilog=epilog, version="%s %s" % ("%prog", __version__)) parser.add_option("-k", "--apikey", dest="apikey", - help="API key - the API key for Testdroid Cloud. Optional. You can use environment variable TESTDROID_APIKEY as well.") + help="API key - the API key for Bitbar Cloud. Optional. You can use environment variable TESTDROID_APIKEY as well.") parser.add_option("-u", "--username", dest="username", help="Username - the email address. Optional. You can use environment variable TESTDROID_USERNAME as well.") parser.add_option("-p", "--password", dest="password", diff --git a/testdroid/tests/test_all.py b/testdroid/tests/test_all.py index e8d1c04..ca4e2c2 100644 --- a/testdroid/tests/test_all.py +++ b/testdroid/tests/test_all.py @@ -69,7 +69,7 @@ def test_upload(self): url = '{}/{}'.format(URL_API, path) responses.add(responses.POST, url, json=JSON, status=200) response = t.upload(path, file_path) - self.assertEqual(response.status_code, 200) + self.assertEqual(response, JSON) @responses.activate def test_get_me(self): @@ -194,9 +194,11 @@ def test_start_test_run(self): 'id': USER_ID, 'name': 'Sample project', } + responses.add(responses.GET, url, json=json, status=200) responses.add(responses.GET, URL_API_ME, json=json, status=200) + url = '{}/projects/{}/runs'.format( URL_USERS, PROJECT_ID) json = { @@ -204,9 +206,8 @@ def test_start_test_run(self): 'displayName': "My test run" } - responses.add(responses.POST, url, json=json, status=201) - self.assertEqual(t.start_test_run(PROJECT_ID, DEVICE_GROUP_ID), json['id']) + self.assertEqual(t.start_test_run(PROJECT_ID, DEVICE_GROUP_ID), json['id']) @responses.activate def test_delete_project_parameters(self): @@ -216,9 +217,8 @@ def test_delete_project_parameters(self): json = { 'id': USER_ID } + responses.add(responses.GET, URL_API_ME, json=json, status=200) responses.add(responses.DELETE, url, json=JSON, status=204) response = t.delete_project_parameters(PROJECT_ID, PARAM_ID) self.assertEqual(response.status_code, 204) - -