From a5451186bdf40cdccdd38e9733971f1a9d450e0d Mon Sep 17 00:00:00 2001 From: Aric Gardner Date: Tue, 21 Jan 2020 13:37:26 -0500 Subject: [PATCH] Enable project_version_update Typo in the rtd docs api lead this to not be implemented. corrected endpoint and implemented in CLI Signed-off-by: Aric Gardner Change-Id: I09aee9e06e1b54c8f6c143762c501286627098d5 --- docs/commands/rtd.rst | 6 ++++++ lftools/api/endpoints/readthedocs.py | 15 +++++---------- lftools/cli/rtd.py | 19 +++++++++++++++++-- releasenotes/notes/readthedocs-74199dc94515f19f.yaml | 6 ++++++ tests/test_rtd.py | 7 +++---- 5 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 releasenotes/notes/readthedocs-74199dc94515f19f.yaml diff --git a/docs/commands/rtd.rst b/docs/commands/rtd.rst index 4055e76a..5919213c 100644 --- a/docs/commands/rtd.rst +++ b/docs/commands/rtd.rst @@ -30,6 +30,12 @@ project-version-details .. program-output:: lftools rtd project-version-details --help +project-version-update +---------------------- + +.. program-output:: lftools rtd project-version-update --help + + project-create -------------- diff --git a/lftools/api/endpoints/readthedocs.py b/lftools/api/endpoints/readthedocs.py index fed07ae6..1d9f1e2a 100644 --- a/lftools/api/endpoints/readthedocs.py +++ b/lftools/api/endpoints/readthedocs.py @@ -62,7 +62,7 @@ class ReadTheDocs(client.RestApi): :param kwargs: :return: {result} """ - result = self.get('projects/{}/'.format(project))[1] + result = self.get('projects/{}/?expand=active_versions'.format(project))[1] return result def project_version_list(self, project): @@ -109,25 +109,20 @@ class ReadTheDocs(client.RestApi): .format(project, version))[1] return result - # This is implemented per their docs, however they do not appear to have - # it working yet as this always returns a 404 - def project_version_update(self, project, version, active, - privacy_level): - """Edit a version. + def project_version_update(self, project, version, active): + """Edit version activity. :param project: The project slug :param version: The version slug :param active: 'true' or 'false' - :param privacy_level: 'public' or 'private' :return: {result} """ data = { - 'active': active, - 'privacy_level': privacy_level + "active": active } json_data = json.dumps(data) - result = self.patch('projects/{}/version/{}/'.format(project, version), + result = self.patch('projects/{}/versions/{}/'.format(project, version), data=json_data) return result diff --git a/lftools/cli/rtd.py b/lftools/cli/rtd.py index 35ab11b2..0da70ec9 100644 --- a/lftools/cli/rtd.py +++ b/lftools/cli/rtd.py @@ -59,11 +59,25 @@ def project_version_list(ctx, project_slug): """Retrieve project version list.""" r = readthedocs.ReadTheDocs() data = r.project_version_list(project_slug) - for version in data: log.info(version) +@click.command(name='project-version-update') +@click.argument('project-slug') +@click.argument('version-slug') +@click.argument('active', type=click.BOOL) +@click.pass_context +def project_version_update(ctx, project_slug, version_slug, active): + """Update projects active version. + + active must be one of true or false + """ + r = readthedocs.ReadTheDocs() + data = r.project_version_update(project_slug, version_slug, active) + log.info(data) + + @click.command(name='project-version-details') @click.argument('project-slug') @click.argument('version-slug') @@ -160,7 +174,7 @@ def subproject_list(ctx, project_slug): def subproject_details(ctx, project_slug, subproject_slug): """Retrieve subproject's details.""" r = readthedocs.ReadTheDocs() - data = r.subproject_details(project_slug, subproject_slug) + data = r.subproject_details(project_slug, subproject_slug, "expand=active_versions") log.info(pformat(data)) @@ -193,6 +207,7 @@ def subproject_delete(ctx, project_slug, subproject_slug): rtd.add_command(project_list) rtd.add_command(project_details) rtd.add_command(project_version_list) +rtd.add_command(project_version_update) rtd.add_command(project_version_details) rtd.add_command(project_create) rtd.add_command(project_build_list) diff --git a/releasenotes/notes/readthedocs-74199dc94515f19f.yaml b/releasenotes/notes/readthedocs-74199dc94515f19f.yaml new file mode 100644 index 00000000..3d0b28ae --- /dev/null +++ b/releasenotes/notes/readthedocs-74199dc94515f19f.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Enable project_version_update API method. + Allows enabling or disabling a project version (visibility in the + U/I) via an api call. diff --git a/tests/test_rtd.py b/tests/test_rtd.py index 22d7edc2..8db3047d 100644 --- a/tests/test_rtd.py +++ b/tests/test_rtd.py @@ -78,14 +78,13 @@ def test_project_version_details(datafiles): @responses.activate def test_project_version_update(): data = { - 'active': 'true', - 'privacy_level': 'public' + 'active': True } responses.add(responses.PATCH, - url='https://readthedocs.org/api/v3/projects/TestProject1/version/latest/', # noqa + url='https://readthedocs.org/api/v3/projects/TestProject1/versions/latest/', # noqa json=data, status=204) assert rtd.project_version_update('TestProject1', 'latest', - 'true', 'public') + 'True') @responses.activate -- 2.16.6