feat: add "See raw JSON data" button for farmOS API views
This commit is contained in:
parent
9cc7237bfb
commit
09042747a0
13 changed files with 78 additions and 3 deletions
45
src/wuttafarm/web/templates/farmos/master/view.mako
Normal file
45
src/wuttafarm/web/templates/farmos/master/view.mako
Normal file
|
|
@ -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:
|
||||
|
||||
<wutta-tool-panel heading="Tools">
|
||||
<b-button type="is-primary"
|
||||
icon-pack="fas"
|
||||
icon-left="code"
|
||||
@click="viewJsonShowDialog = true">
|
||||
See raw JSON data
|
||||
</b-button>
|
||||
</wutta-tool-panel>
|
||||
|
||||
<${b}-modal :width="1200"
|
||||
% if request.use_oruga:
|
||||
v-model:active="viewJsonShowDialog"
|
||||
% else:
|
||||
:active.sync="viewJsonShowDialog"
|
||||
% endif
|
||||
>
|
||||
<div class="card">
|
||||
<div class="card-content">
|
||||
${rendered_json|n}
|
||||
</div>
|
||||
</div>
|
||||
</${b}-modal>
|
||||
|
||||
% endif
|
||||
</%def>
|
||||
|
||||
<%def name="modify_vue_vars()">
|
||||
${parent.modify_vue_vars()}
|
||||
% if raw_json:
|
||||
<script>
|
||||
ThisPageData.viewJsonShowDialog = false
|
||||
</script>
|
||||
% endif
|
||||
</%def>
|
||||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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"])
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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"):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue