Enable project_version_update 58/62858/11
authorAric Gardner <agardner@linuxfoundation.org>
Tue, 21 Jan 2020 18:37:26 +0000 (13:37 -0500)
committerAric Gardner <agardner@linuxfoundation.org>
Wed, 22 Jan 2020 20:34:01 +0000 (15:34 -0500)
Typo in the rtd docs api lead this to not be implemented.
corrected endpoint and implemented in CLI

Signed-off-by: Aric Gardner <agardner@linuxfoundation.org>
Change-Id: I09aee9e06e1b54c8f6c143762c501286627098d5

docs/commands/rtd.rst
lftools/api/endpoints/readthedocs.py
lftools/cli/rtd.py
releasenotes/notes/readthedocs-74199dc94515f19f.yaml [new file with mode: 0644]
tests/test_rtd.py

index 4055e76..5919213 100644 (file)
@@ -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
 --------------
 
index fed07ae..1d9f1e2 100644 (file)
@@ -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
 
index 35ab11b..0da70ec 100644 (file)
@@ -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 (file)
index 0000000..3d0b28a
--- /dev/null
@@ -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.
index 22d7edc..8db3047 100644 (file)
@@ -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