Prettier debug json (#260)
This commit is contained in:
parent
4339b09dd4
commit
5536397bdb
|
@ -1,4 +1,4 @@
|
||||||
import pprint
|
import json
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
from asgiref.sync import async_to_sync
|
from asgiref.sync import async_to_sync
|
||||||
|
@ -23,28 +23,42 @@ class JsonViewer(FormView):
|
||||||
)
|
)
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
raw_result = ""
|
|
||||||
uri = form.cleaned_data["uri"]
|
uri = form.cleaned_data["uri"]
|
||||||
if "://" not in uri:
|
if "://" not in uri:
|
||||||
uri = "https://" + uri
|
uri = "https://" + uri
|
||||||
|
|
||||||
|
# Render results
|
||||||
|
context = self.get_context_data(form=form)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = async_to_sync(SystemActor().signed_request)(
|
response = async_to_sync(SystemActor().signed_request)(
|
||||||
method="get",
|
method="get",
|
||||||
uri=uri,
|
uri=uri,
|
||||||
)
|
)
|
||||||
except httpx.RequestError:
|
except httpx.RequestError as ex:
|
||||||
result = "Request Error"
|
result = f"Request Error: {str(ex)}"
|
||||||
else:
|
else:
|
||||||
raw_result = response.text
|
context.update(
|
||||||
|
{
|
||||||
|
"status_code": response.status_code,
|
||||||
|
"content_type": response.headers["content-type"],
|
||||||
|
"num_bytes_downloaded": response.num_bytes_downloaded,
|
||||||
|
"charset_encoding": response.charset_encoding,
|
||||||
|
"raw_result": response.text,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
if response.status_code >= 400:
|
if response.status_code >= 400:
|
||||||
result = f"Error response: {response.status_code}\n{response.content}"
|
result = f"Error response: {response.status_code}\n{response.content}"
|
||||||
else:
|
else:
|
||||||
document = canonicalise(response.json(), include_security=True)
|
try:
|
||||||
result = pprint.pformat(document)
|
document = canonicalise(response.json(), include_security=True)
|
||||||
# Render results
|
except json.JSONDecodeError as ex:
|
||||||
context = self.get_context_data(form=form)
|
result = str(ex)
|
||||||
|
else:
|
||||||
|
result = json.dumps(document, indent=4, sort_keys=True)
|
||||||
|
# result = pprint.pformat(document)
|
||||||
context["result"] = result
|
context["result"] = result
|
||||||
context["raw_result"] = raw_result
|
|
||||||
return self.render_to_response(context)
|
return self.render_to_response(context)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1516,3 +1516,45 @@ form .post {
|
||||||
position: static;
|
position: static;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Debug */
|
||||||
|
.debug {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.debug h2 {
|
||||||
|
text-align: center;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
.debug-section {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.debug-section .field.payload,
|
||||||
|
#canonical_response,
|
||||||
|
#raw_response {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
#canonical_response, #raw_response {
|
||||||
|
background-color: var(--color-bg-box);
|
||||||
|
overflow: scroll;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.debug-section .field .name {
|
||||||
|
display: inline-block;
|
||||||
|
min-width: 49%;
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
.debug-section .field .value {
|
||||||
|
display: inline-block;
|
||||||
|
min-width: 49%;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.debug-section {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.debug-section .hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
|
@ -16,10 +16,76 @@
|
||||||
</form>
|
</form>
|
||||||
{% if result %}
|
{% if result %}
|
||||||
|
|
||||||
<p>Canonacalized Response: (view source for raw)</p>
|
<div class="debug">
|
||||||
<div id="raw-json-result" style="display: none;">
|
<h2>Summary</h2>
|
||||||
{{ raw_result|escape }}
|
<div class="debug-section">
|
||||||
|
<div class="field">
|
||||||
|
<span class="name">Status Code:</span>
|
||||||
|
<span class="value">{{ status_code }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<span class="name">Content-Type:</span>
|
||||||
|
<span class="value">{{ content_type }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<span class="name">Bytes Downloaded:</span>
|
||||||
|
<span class="value">{{ num_bytes_downloaded }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<pre>{{ result }}</pre>
|
|
||||||
|
<h2>Payload</h2>
|
||||||
|
|
||||||
|
<div class="debug-section">
|
||||||
|
<div class="field payload">
|
||||||
|
<span class="name">Raw Response:
|
||||||
|
<a title="Copy Content"
|
||||||
|
class="copy"
|
||||||
|
_="on click
|
||||||
|
writeText(#raw_response.innerText) into the navigator's clipboard
|
||||||
|
then add .copied
|
||||||
|
wait 2s
|
||||||
|
then remove .copied">
|
||||||
|
<i class="fa-solid fa-copy"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<span class="value">
|
||||||
|
<a _="on click
|
||||||
|
toggle .hidden on #raw_response
|
||||||
|
then
|
||||||
|
if my.innerText is 'Hide' set my.innerText to 'Show'
|
||||||
|
else set my.innerText to 'Hide'
|
||||||
|
">Show</a></span>
|
||||||
|
</div>
|
||||||
|
<div id="raw_response" class="hidden">
|
||||||
|
|
||||||
|
{{ raw_result|escape }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field payload">
|
||||||
|
<span class="name">Canonical:
|
||||||
|
<a title="Copy Content"
|
||||||
|
class="copy"
|
||||||
|
_="on click
|
||||||
|
writeText(#canonical_response.innerText) into the navigator's clipboard
|
||||||
|
then add .copied
|
||||||
|
wait 2s
|
||||||
|
then remove .copied">
|
||||||
|
<i class="fa-solid fa-copy"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<span class="value">
|
||||||
|
<a _="on click
|
||||||
|
toggle .hidden on #canonical_response
|
||||||
|
then
|
||||||
|
if my.innerText is 'Hide' set my.innerText to 'Show'
|
||||||
|
else set my.innerText to 'Hide'
|
||||||
|
">Show</a></span>
|
||||||
|
</div>
|
||||||
|
<pre id="canonical_response" class="hidden">{{ result }}</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -642,6 +642,10 @@ class Identity(StatorModel):
|
||||||
)
|
)
|
||||||
except httpx.RequestError:
|
except httpx.RequestError:
|
||||||
return False
|
return False
|
||||||
|
content_type = response.headers.get("content-type")
|
||||||
|
if content_type and "html" in content_type:
|
||||||
|
# Some servers don't properly handle "application/activity+json"
|
||||||
|
return False
|
||||||
if response.status_code == 410:
|
if response.status_code == 410:
|
||||||
# Their account got deleted, so let's do the same.
|
# Their account got deleted, so let's do the same.
|
||||||
if self.pk:
|
if self.pk:
|
||||||
|
|
Loading…
Reference in New Issue