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>
+
+<%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}
+
+
+ ${b}-modal>
+
+ % endif
+%def>
+
+<%def name="modify_vue_vars()">
+ ${parent.modify_vue_vars()}
+ % if raw_json:
+
+ % endif
+%def>
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):