146 lines
4.7 KiB
Python
146 lines
4.7 KiB
Python
# [[file:../localapi.org::*Server view and Arroyo Emacs lisp scaffolding][Server view and Arroyo Emacs lisp scaffolding:3]]
|
|
from django.http import HttpRequest, HttpResponse, HttpResponseNotFound, Http404, JsonResponse
|
|
from django.shortcuts import render, get_object_or_404
|
|
|
|
from arcology.models import Page, Feed, Site
|
|
from roam.models import Link
|
|
from localapi.auth import authenticated
|
|
|
|
from prometheus_client import Counter, Histogram
|
|
|
|
import logging
|
|
logger = logging.getLogger(__name__)
|
|
# Server view and Arroyo Emacs lisp scaffolding:3 ends here
|
|
|
|
# [[file:../localapi.org::*Server view and Arroyo Emacs lisp scaffolding][Server view and Arroyo Emacs lisp scaffolding:4]]
|
|
@authenticated
|
|
def index(request):
|
|
return JsonResponse(dict(state="ok :)"))
|
|
# Server view and Arroyo Emacs lisp scaffolding:4 ends here
|
|
|
|
# [[file:../localapi.org::*Keyword metadata][Keyword metadata:1]]
|
|
import roam.models
|
|
|
|
def _json_keywords(keywords):
|
|
return [
|
|
dict(path=kw.path.path, keyword=kw.keyword, value=kw.value)
|
|
for kw in keywords
|
|
]
|
|
# Keyword metadata:1 ends here
|
|
|
|
# [[file:../localapi.org::*/keywords/{key}][/keywords/{key}:1]]
|
|
@authenticated
|
|
def keyword_by_key(request, key):
|
|
keywords = roam.models.Keyword.objects.filter(keyword=key).all()
|
|
return JsonResponse(dict(
|
|
state="ok :)",
|
|
key=key,
|
|
keywords=_json_keywords(keywords),
|
|
))
|
|
# /keywords/{key}:1 ends here
|
|
|
|
# [[file:../localapi.org::*/keywords/{key}/{value}][/keywords/{key}/{value}:1]]
|
|
@authenticated
|
|
def keyword_by_key_value(request, key, value):
|
|
keywords = roam.models.Keyword.objects.filter(keyword=key, value=value).all()
|
|
return JsonResponse(dict(
|
|
state="ok :)",
|
|
key=key,
|
|
value=value,
|
|
keywords=_json_keywords(keywords),
|
|
))
|
|
# /keywords/{key}/{value}:1 ends here
|
|
|
|
# [[file:../localapi.org::*Page and File metadata][Page and File metadata:1]]
|
|
import arcology.models
|
|
|
|
def _json_page(page):
|
|
if page is None:
|
|
return page
|
|
return dict(
|
|
title=page.title,
|
|
url=page.to_url(),
|
|
site=page.site.title,
|
|
keywords={
|
|
kw.keyword: kw.value
|
|
for kw in page.collect_keywords().all()
|
|
},
|
|
tags=list(set([tag.tag for tag in page.collect_tags()])),
|
|
references=[reference.ref for reference in page.collect_references()],
|
|
)
|
|
# Page and File metadata:1 ends here
|
|
|
|
# [[file:../localapi.org::*Page and File metadata][Page and File metadata:3]]
|
|
@authenticated
|
|
def page_metadata(request, route_key):
|
|
page = arcology.models.Page.objects.get(route_key=route_key)
|
|
keywords = page.file.keyword_set.all()
|
|
return JsonResponse(dict(
|
|
state="ok :)",
|
|
route_key=route_key,
|
|
file=page.file.path,
|
|
page=_json_page(page),
|
|
keywords=_json_keywords(keywords)
|
|
))
|
|
# Page and File metadata:3 ends here
|
|
|
|
# [[file:../localapi.org::*Page and File metadata][Page and File metadata:5]]
|
|
from django.conf import settings
|
|
|
|
@authenticated
|
|
def file_metadata(request, file_path):
|
|
final_path = settings.ARCOLOGY_BASE_DIR.joinpath(file_path)
|
|
print(f"1 {final_path}")
|
|
the_file = roam.models.File.objects.get(path=final_path)
|
|
print(f"2 {the_file}")
|
|
page = the_file.page_set.first()
|
|
print(f"3 {page}")
|
|
root_heading = the_file.heading_set.filter(level=0).first()
|
|
print(f"4 {root_heading}")
|
|
return JsonResponse(dict(
|
|
state="ok :)",
|
|
file_path=file_path,
|
|
file=dict(
|
|
path=the_file.path,
|
|
root_heading=dict(
|
|
title=root_heading.title,
|
|
id=root_heading.node_id,
|
|
),
|
|
page=_json_page(page),
|
|
),
|
|
))
|
|
# Page and File metadata:5 ends here
|
|
|
|
# [[file:../localapi.org::*Get all files by tag][Get all files by tag:1]]
|
|
@authenticated
|
|
def files_by_tag(request, key):
|
|
# final_path = settings.ARCOLOGY_BASE_DIR.joinpath(file_path)
|
|
the_tags = roam.models.Tag.objects.filter(tag=key).all()
|
|
return JsonResponse(dict(
|
|
state="ok :)",
|
|
tag=key,
|
|
files=list(set([
|
|
tag.heading.path.path
|
|
for tag in the_tags
|
|
]))
|
|
))
|
|
# Get all files by tag:1 ends here
|
|
|
|
# [[file:../localapi.org::*\[\[id:20231217T154938.132553\]\[Arcology generate Command\]\]][[[id:20231217T154938.132553][Arcology generate Command]]:3]]
|
|
import tempfile
|
|
from django.core.management import call_command
|
|
|
|
@authenticated
|
|
def generate(request, module, role=None):
|
|
f = tempfile.NamedTemporaryFile()
|
|
fn = f.name
|
|
# i hate this!!!
|
|
if role:
|
|
call_command('generate', destination=fn, module=module, role=role)
|
|
else:
|
|
call_command('generate', destination=fn, module=module)
|
|
f.seek(0)
|
|
|
|
return HttpResponse(f)
|
|
# [[id:20231217T154938.132553][Arcology generate Command]]:3 ends here
|