From fedb801487e78b97c9b51346d9bd21693647497f Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Wed, 12 Apr 2023 10:55:40 +0200 Subject: [PATCH 1/2] APIv3: add `analytics` field to `Project` object New `analytics` field that exposes: - the Google code if the project has it configured - whether or not the global Google/Plausible Read the Docs analytics is enabled This field is going to be useful for the new "Analytics Addon". Related #10216 --- readthedocs/api/v3/serializers.py | 44 ++++++++++++------- .../v3/tests/responses/projects-detail.json | 8 ++++ 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/readthedocs/api/v3/serializers.py b/readthedocs/api/v3/serializers.py index faebc0a234f..1c5b300ef19 100644 --- a/readthedocs/api/v3/serializers.py +++ b/readthedocs/api/v3/serializers.py @@ -605,6 +605,18 @@ class ProjectUpdateSerializer(SettingsOverrideObject): _default_class = ProjectUpdateSerializerBase +class AnalyticsSerializer(serializers.Serializer): + + readthedocs = serializers.SerializerMethodField() + google = serializers.SerializerMethodField() + + def get_readthedocs(self, obj): + return {"enabled": not obj.analytics_disabled} + + def get_google(self, obj): + return {"code": obj.analytics_code} + + class ProjectSerializer(FlexFieldsModelSerializer): """ @@ -616,6 +628,7 @@ class ProjectSerializer(FlexFieldsModelSerializer): But we have organization.owners. """ + analytics = AnalyticsSerializer(source="*") homepage = serializers.SerializerMethodField() language = LanguageSerializer() programming_language = ProgrammingLanguageSerializer() @@ -637,21 +650,22 @@ class ProjectSerializer(FlexFieldsModelSerializer): class Meta: model = Project fields = [ - 'id', - 'name', - 'slug', - 'created', - 'modified', - 'language', - 'programming_language', - 'homepage', - 'repository', - 'default_version', - 'default_branch', - 'subproject_of', - 'translation_of', - 'urls', - 'tags', + "id", + "name", + "slug", + "created", + "modified", + "language", + "programming_language", + "analytics", + "homepage", + "repository", + "default_version", + "default_branch", + "subproject_of", + "translation_of", + "urls", + "tags", "privacy_level", "external_builds_privacy_level", diff --git a/readthedocs/api/v3/tests/responses/projects-detail.json b/readthedocs/api/v3/tests/responses/projects-detail.json index a525b737f5b..dd70a3bb7a0 100644 --- a/readthedocs/api/v3/tests/responses/projects-detail.json +++ b/readthedocs/api/v3/tests/responses/projects-detail.json @@ -76,6 +76,14 @@ "translations": "https://readthedocs.org/api/v3/projects/project/translations/", "versions": "https://readthedocs.org/api/v3/projects/project/versions/" }, + "analytics": { + "google": { + "code": null + }, + "readthedocs": { + "enabled": true + } + }, "modified": "2019-04-29T12:00:00Z", "name": "project", "programming_language": { From d1eade85872ab50bc2bb79556090de3b78bcd6ef Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Wed, 12 Apr 2023 11:01:21 +0200 Subject: [PATCH 2/2] Docs: show `analytics` field in docs --- docs/user/api/v3.rst | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/user/api/v3.rst b/docs/user/api/v3.rst index 4a0570467c9..40a6b270299 100644 --- a/docs/user/api/v3.rst +++ b/docs/user/api/v3.rst @@ -174,6 +174,14 @@ Projects list "latest": "{VERSION}", "19.0.2": "{VERSION}" }, + "analytics": { + "google": { + "code": "UA-XXXXX" + }, + "readthedocs": { + "enabled": true + } + } "_links": { "_self": "/api/v3/projects/pip/", "versions": "/api/v3/projects/pip/versions/", @@ -279,6 +287,14 @@ Project details }, "privacy_level": "public", "external_builds_privacy_level": "public", + "analytics": { + "google": { + "code": "UA-XXXXX" + }, + "readthedocs": { + "enabled": true + } + } "_links": { "_self": "/api/v3/projects/pip/", "versions": "/api/v3/projects/pip/versions/",