diff --git a/src/wuttafarm/web/templates/farmos/master/view.mako b/src/wuttafarm/web/templates/farmos/master/view.mako new file mode 100644 index 0000000..5e7bcd0 --- /dev/null +++ b/src/wuttafarm/web/templates/farmos/master/view.mako @@ -0,0 +1,45 @@ +## -*- coding: utf-8; -*- +<%inherit file="/master/view.mako" /> + +<%def name="tool_panels()"> + ${parent.tool_panels()} + ${self.tool_panel_tools()} + + +<%def name="tool_panel_tools()"> + % if raw_json: + + + + See raw JSON data + + + + <${b}-modal :width="1200" + % if request.use_oruga: + v-model:active="viewJsonShowDialog" + % else: + :active.sync="viewJsonShowDialog" + % endif + > +
+
+ ${rendered_json|n} +
+
+ + + % endif + + +<%def name="modify_vue_vars()"> + ${parent.modify_vue_vars()} + % if raw_json: + + % endif + diff --git a/src/wuttafarm/web/views/farmos/animal_types.py b/src/wuttafarm/web/views/farmos/animal_types.py index a974242..0e8e4df 100644 --- a/src/wuttafarm/web/views/farmos/animal_types.py +++ b/src/wuttafarm/web/views/farmos/animal_types.py @@ -79,6 +79,7 @@ class AnimalTypeView(FarmOSMasterView): animal_type = self.farmos_client.resource.get_id( "taxonomy_term", "animal_type", self.request.matchdict["uuid"] ) + self.raw_json = animal_type return self.normalize_animal_type(animal_type["data"]) def get_instance_title(self, animal_type): diff --git a/src/wuttafarm/web/views/farmos/animals.py b/src/wuttafarm/web/views/farmos/animals.py index 8eca5af..029ecfb 100644 --- a/src/wuttafarm/web/views/farmos/animals.py +++ b/src/wuttafarm/web/views/farmos/animals.py @@ -99,6 +99,7 @@ class AnimalView(FarmOSMasterView): animal = self.farmos_client.resource.get_id( "asset", "animal", self.request.matchdict["uuid"] ) + self.raw_json = animal # instance data data = self.normalize_animal(animal["data"]) diff --git a/src/wuttafarm/web/views/farmos/asset_types.py b/src/wuttafarm/web/views/farmos/asset_types.py index 75eebbe..de285e1 100644 --- a/src/wuttafarm/web/views/farmos/asset_types.py +++ b/src/wuttafarm/web/views/farmos/asset_types.py @@ -69,6 +69,7 @@ class AssetTypeView(FarmOSMasterView): asset_type = self.farmos_client.resource.get_id( "asset_type", "asset_type", self.request.matchdict["uuid"] ) + self.raw_json = asset_type return self.normalize_asset_type(asset_type["data"]) def get_instance_title(self, asset_type): diff --git a/src/wuttafarm/web/views/farmos/groups.py b/src/wuttafarm/web/views/farmos/groups.py index 4664a6b..127dd43 100644 --- a/src/wuttafarm/web/views/farmos/groups.py +++ b/src/wuttafarm/web/views/farmos/groups.py @@ -88,11 +88,10 @@ class GroupView(FarmOSMasterView): g.set_renderer("changed", "datetime") def get_instance(self): - group = self.farmos_client.resource.get_id( "asset", "group", self.request.matchdict["uuid"] ) - + self.raw_json = group return self.normalize_group(group["data"]) def get_instance_title(self, group): diff --git a/src/wuttafarm/web/views/farmos/land_assets.py b/src/wuttafarm/web/views/farmos/land_assets.py index a496cc5..5a8cc24 100644 --- a/src/wuttafarm/web/views/farmos/land_assets.py +++ b/src/wuttafarm/web/views/farmos/land_assets.py @@ -95,6 +95,7 @@ class LandAssetView(FarmOSMasterView): land_asset = self.farmos_client.resource.get_id( "asset", "land", self.request.matchdict["uuid"] ) + self.raw_json = land_asset return self.normalize_land_asset(land_asset["data"]) def get_instance_title(self, land_asset): diff --git a/src/wuttafarm/web/views/farmos/land_types.py b/src/wuttafarm/web/views/farmos/land_types.py index aadece8..02c0560 100644 --- a/src/wuttafarm/web/views/farmos/land_types.py +++ b/src/wuttafarm/web/views/farmos/land_types.py @@ -64,6 +64,7 @@ class LandTypeView(FarmOSMasterView): land_type = self.farmos_client.resource.get_id( "land_type", "land_type", self.request.matchdict["uuid"] ) + self.raw_json = land_type return self.normalize_land_type(land_type["data"]) def get_instance_title(self, land_type): diff --git a/src/wuttafarm/web/views/farmos/log_types.py b/src/wuttafarm/web/views/farmos/log_types.py index 6e72f8f..6d25c10 100644 --- a/src/wuttafarm/web/views/farmos/log_types.py +++ b/src/wuttafarm/web/views/farmos/log_types.py @@ -66,6 +66,7 @@ class LogTypeView(FarmOSMasterView): log_type = self.farmos_client.resource.get_id( "log_type", "log_type", self.request.matchdict["uuid"] ) + self.raw_json = log_type return self.normalize_log_type(log_type["data"]) def get_instance_title(self, log_type): diff --git a/src/wuttafarm/web/views/farmos/logs_activity.py b/src/wuttafarm/web/views/farmos/logs_activity.py index 61b4e85..33448ab 100644 --- a/src/wuttafarm/web/views/farmos/logs_activity.py +++ b/src/wuttafarm/web/views/farmos/logs_activity.py @@ -79,6 +79,7 @@ class ActivityLogView(FarmOSMasterView): def get_instance(self): log = self.farmos_client.log.get_id("activity", self.request.matchdict["uuid"]) + self.raw_json = log return self.normalize_log(log["data"]) def get_instance_title(self, log): diff --git a/src/wuttafarm/web/views/farmos/master.py b/src/wuttafarm/web/views/farmos/master.py index 59003d0..955120b 100644 --- a/src/wuttafarm/web/views/farmos/master.py +++ b/src/wuttafarm/web/views/farmos/master.py @@ -23,6 +23,10 @@ Base class for farmOS master views """ +import json + +import markdown + from wuttaweb.views import MasterView from wuttafarm.web.util import save_farmos_oauth2_token @@ -54,6 +58,7 @@ class FarmOSMasterView(MasterView): def __init__(self, request, context=None): super().__init__(request, context=context) self.farmos_client = self.get_farmos_client() + self.raw_json = None def get_farmos_client(self): token = self.request.session.get("farmos.oauth2.token") @@ -71,9 +76,26 @@ class FarmOSMasterView(MasterView): return self.app.get_farmos_client(token=token, token_updater=token_updater) + def get_fallback_templates(self, template): + """ """ + templates = super().get_fallback_templates(template) + + if template == "view": + templates.insert(0, "/farmos/master/view.mako") + + return templates + def get_template_context(self, context): if self.listing and self.farmos_refurl_path: context["farmos_refurl"] = self.app.get_farmos_url(self.farmos_refurl_path) + if self.viewing and self.raw_json: + context["raw_json"] = self.raw_json + code = "```json\n" + json.dumps(self.raw_json, indent=2) + "\n```" + # TODO: this does not seem to be adding syntax highlight + context["rendered_json"] = markdown.markdown( + code, extensions=["fenced_code", "codehilite"] + ) + return context diff --git a/src/wuttafarm/web/views/farmos/structure_types.py b/src/wuttafarm/web/views/farmos/structure_types.py index 3fe4741..6a2342e 100644 --- a/src/wuttafarm/web/views/farmos/structure_types.py +++ b/src/wuttafarm/web/views/farmos/structure_types.py @@ -66,6 +66,7 @@ class StructureTypeView(FarmOSMasterView): structure_type = self.farmos_client.resource.get_id( "structure_type", "structure_type", self.request.matchdict["uuid"] ) + self.raw_json = structure_type return self.normalize_structure_type(structure_type["data"]) def get_instance_title(self, structure_type): diff --git a/src/wuttafarm/web/views/farmos/structures.py b/src/wuttafarm/web/views/farmos/structures.py index bbc4f1f..cb91de5 100644 --- a/src/wuttafarm/web/views/farmos/structures.py +++ b/src/wuttafarm/web/views/farmos/structures.py @@ -94,7 +94,7 @@ class StructureView(FarmOSMasterView): structure = self.farmos_client.resource.get_id( "asset", "structure", self.request.matchdict["uuid"] ) - + self.raw_json = structure data = self.normalize_structure(structure["data"]) if relationships := structure["data"].get("relationships"): diff --git a/src/wuttafarm/web/views/farmos/users.py b/src/wuttafarm/web/views/farmos/users.py index 317bfe3..fa47d34 100644 --- a/src/wuttafarm/web/views/farmos/users.py +++ b/src/wuttafarm/web/views/farmos/users.py @@ -77,6 +77,7 @@ class UserView(FarmOSMasterView): user = self.farmos_client.resource.get_id( "user", "user", self.request.matchdict["uuid"] ) + self.raw_json = user return self.normalize_user(user["data"]) def get_instance_title(self, user):