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(
|
animal_type = self.farmos_client.resource.get_id(
|
||||||
"taxonomy_term", "animal_type", self.request.matchdict["uuid"]
|
"taxonomy_term", "animal_type", self.request.matchdict["uuid"]
|
||||||
)
|
)
|
||||||
|
self.raw_json = animal_type
|
||||||
return self.normalize_animal_type(animal_type["data"])
|
return self.normalize_animal_type(animal_type["data"])
|
||||||
|
|
||||||
def get_instance_title(self, animal_type):
|
def get_instance_title(self, animal_type):
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ class AnimalView(FarmOSMasterView):
|
||||||
animal = self.farmos_client.resource.get_id(
|
animal = self.farmos_client.resource.get_id(
|
||||||
"asset", "animal", self.request.matchdict["uuid"]
|
"asset", "animal", self.request.matchdict["uuid"]
|
||||||
)
|
)
|
||||||
|
self.raw_json = animal
|
||||||
|
|
||||||
# instance data
|
# instance data
|
||||||
data = self.normalize_animal(animal["data"])
|
data = self.normalize_animal(animal["data"])
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@ class AssetTypeView(FarmOSMasterView):
|
||||||
asset_type = self.farmos_client.resource.get_id(
|
asset_type = self.farmos_client.resource.get_id(
|
||||||
"asset_type", "asset_type", self.request.matchdict["uuid"]
|
"asset_type", "asset_type", self.request.matchdict["uuid"]
|
||||||
)
|
)
|
||||||
|
self.raw_json = asset_type
|
||||||
return self.normalize_asset_type(asset_type["data"])
|
return self.normalize_asset_type(asset_type["data"])
|
||||||
|
|
||||||
def get_instance_title(self, asset_type):
|
def get_instance_title(self, asset_type):
|
||||||
|
|
|
||||||
|
|
@ -88,11 +88,10 @@ class GroupView(FarmOSMasterView):
|
||||||
g.set_renderer("changed", "datetime")
|
g.set_renderer("changed", "datetime")
|
||||||
|
|
||||||
def get_instance(self):
|
def get_instance(self):
|
||||||
|
|
||||||
group = self.farmos_client.resource.get_id(
|
group = self.farmos_client.resource.get_id(
|
||||||
"asset", "group", self.request.matchdict["uuid"]
|
"asset", "group", self.request.matchdict["uuid"]
|
||||||
)
|
)
|
||||||
|
self.raw_json = group
|
||||||
return self.normalize_group(group["data"])
|
return self.normalize_group(group["data"])
|
||||||
|
|
||||||
def get_instance_title(self, group):
|
def get_instance_title(self, group):
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,7 @@ class LandAssetView(FarmOSMasterView):
|
||||||
land_asset = self.farmos_client.resource.get_id(
|
land_asset = self.farmos_client.resource.get_id(
|
||||||
"asset", "land", self.request.matchdict["uuid"]
|
"asset", "land", self.request.matchdict["uuid"]
|
||||||
)
|
)
|
||||||
|
self.raw_json = land_asset
|
||||||
return self.normalize_land_asset(land_asset["data"])
|
return self.normalize_land_asset(land_asset["data"])
|
||||||
|
|
||||||
def get_instance_title(self, land_asset):
|
def get_instance_title(self, land_asset):
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,7 @@ class LandTypeView(FarmOSMasterView):
|
||||||
land_type = self.farmos_client.resource.get_id(
|
land_type = self.farmos_client.resource.get_id(
|
||||||
"land_type", "land_type", self.request.matchdict["uuid"]
|
"land_type", "land_type", self.request.matchdict["uuid"]
|
||||||
)
|
)
|
||||||
|
self.raw_json = land_type
|
||||||
return self.normalize_land_type(land_type["data"])
|
return self.normalize_land_type(land_type["data"])
|
||||||
|
|
||||||
def get_instance_title(self, land_type):
|
def get_instance_title(self, land_type):
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@ class LogTypeView(FarmOSMasterView):
|
||||||
log_type = self.farmos_client.resource.get_id(
|
log_type = self.farmos_client.resource.get_id(
|
||||||
"log_type", "log_type", self.request.matchdict["uuid"]
|
"log_type", "log_type", self.request.matchdict["uuid"]
|
||||||
)
|
)
|
||||||
|
self.raw_json = log_type
|
||||||
return self.normalize_log_type(log_type["data"])
|
return self.normalize_log_type(log_type["data"])
|
||||||
|
|
||||||
def get_instance_title(self, log_type):
|
def get_instance_title(self, log_type):
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,7 @@ class ActivityLogView(FarmOSMasterView):
|
||||||
|
|
||||||
def get_instance(self):
|
def get_instance(self):
|
||||||
log = self.farmos_client.log.get_id("activity", self.request.matchdict["uuid"])
|
log = self.farmos_client.log.get_id("activity", self.request.matchdict["uuid"])
|
||||||
|
self.raw_json = log
|
||||||
return self.normalize_log(log["data"])
|
return self.normalize_log(log["data"])
|
||||||
|
|
||||||
def get_instance_title(self, log):
|
def get_instance_title(self, log):
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,10 @@
|
||||||
Base class for farmOS master views
|
Base class for farmOS master views
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
import markdown
|
||||||
|
|
||||||
from wuttaweb.views import MasterView
|
from wuttaweb.views import MasterView
|
||||||
|
|
||||||
from wuttafarm.web.util import save_farmos_oauth2_token
|
from wuttafarm.web.util import save_farmos_oauth2_token
|
||||||
|
|
@ -54,6 +58,7 @@ class FarmOSMasterView(MasterView):
|
||||||
def __init__(self, request, context=None):
|
def __init__(self, request, context=None):
|
||||||
super().__init__(request, context=context)
|
super().__init__(request, context=context)
|
||||||
self.farmos_client = self.get_farmos_client()
|
self.farmos_client = self.get_farmos_client()
|
||||||
|
self.raw_json = None
|
||||||
|
|
||||||
def get_farmos_client(self):
|
def get_farmos_client(self):
|
||||||
token = self.request.session.get("farmos.oauth2.token")
|
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)
|
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):
|
def get_template_context(self, context):
|
||||||
|
|
||||||
if self.listing and self.farmos_refurl_path:
|
if self.listing and self.farmos_refurl_path:
|
||||||
context["farmos_refurl"] = self.app.get_farmos_url(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
|
return context
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@ class StructureTypeView(FarmOSMasterView):
|
||||||
structure_type = self.farmos_client.resource.get_id(
|
structure_type = self.farmos_client.resource.get_id(
|
||||||
"structure_type", "structure_type", self.request.matchdict["uuid"]
|
"structure_type", "structure_type", self.request.matchdict["uuid"]
|
||||||
)
|
)
|
||||||
|
self.raw_json = structure_type
|
||||||
return self.normalize_structure_type(structure_type["data"])
|
return self.normalize_structure_type(structure_type["data"])
|
||||||
|
|
||||||
def get_instance_title(self, structure_type):
|
def get_instance_title(self, structure_type):
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ class StructureView(FarmOSMasterView):
|
||||||
structure = self.farmos_client.resource.get_id(
|
structure = self.farmos_client.resource.get_id(
|
||||||
"asset", "structure", self.request.matchdict["uuid"]
|
"asset", "structure", self.request.matchdict["uuid"]
|
||||||
)
|
)
|
||||||
|
self.raw_json = structure
|
||||||
data = self.normalize_structure(structure["data"])
|
data = self.normalize_structure(structure["data"])
|
||||||
|
|
||||||
if relationships := structure["data"].get("relationships"):
|
if relationships := structure["data"].get("relationships"):
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,7 @@ class UserView(FarmOSMasterView):
|
||||||
user = self.farmos_client.resource.get_id(
|
user = self.farmos_client.resource.get_id(
|
||||||
"user", "user", self.request.matchdict["uuid"]
|
"user", "user", self.request.matchdict["uuid"]
|
||||||
)
|
)
|
||||||
|
self.raw_json = user
|
||||||
return self.normalize_user(user["data"])
|
return self.normalize_user(user["data"])
|
||||||
|
|
||||||
def get_instance_title(self, user):
|
def get_instance_title(self, user):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue