mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2025-12-18 13:07:12 +00:00
logbook entries json exporter
This commit is contained in:
@@ -1,19 +1,22 @@
|
||||
import json
|
||||
import re
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.serializers import serialize
|
||||
from django.db.models import Q
|
||||
from django.shortcuts import redirect, render
|
||||
from django.views.generic.list import ListView
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
import troggle.settings as settings
|
||||
from troggle.core.models.logbooks import QM, LogbookEntry, PersonLogEntry, writelogbook
|
||||
from troggle.core.models.survex import SurvexBlock, SurvexFile
|
||||
from troggle.core.models.troggle import Expedition, Person
|
||||
from troggle.core.models.wallets import Wallet
|
||||
from troggle.core.utils import TROG, current_expo
|
||||
from troggle.core.utils import TROG, current_expo, add_commit, git_commit
|
||||
from troggle.parsers.imports import import_logbook
|
||||
from troggle.parsers.people import ensure_users_are_persons
|
||||
|
||||
"""These views are for logbook items when they appear in an 'expedition' page
|
||||
and for persons: their individual pages and their perseonexpedition pages.
|
||||
|
||||
@@ -375,3 +378,44 @@ def get_logbook_entries(request, expeditionslug):
|
||||
return render(
|
||||
request, "options.html", {"items": [(le.slug, f"{le.date} - {le.title}") for le in exp.logbookentry_set.all()]}
|
||||
)
|
||||
|
||||
def logbook_entries_export(request, year):
|
||||
exp = Expedition.objects.get(year=year)
|
||||
|
||||
entries = exp.logbookentry_set.all()
|
||||
for e in entries[:3]:
|
||||
print(f"{e}")
|
||||
|
||||
write_entries(entries[:3], year)
|
||||
return redirect(f"/logreport/{year}")
|
||||
|
||||
|
||||
def write_entries(entries, year, git_string=None):
|
||||
if not git_string:
|
||||
git_string = f"troggle <troggle@exposerver.expo>"
|
||||
|
||||
dirpath = settings.EXPOWEB / "years" / year
|
||||
|
||||
for le in entries[:4]:
|
||||
jsondict = { "logbook_entry": le }
|
||||
#print(jsondict)
|
||||
|
||||
jsondict = serialize("json", [le], fields=('date', 'expedition', 'title', 'cave', 'place', 'other_people', 'date_field', 'text', 'slug', 'time_underground'))
|
||||
print(jsondict)
|
||||
filepath = dirpath / le.slug
|
||||
description = f" {le.slug} :: {le.date} - {le.title}"
|
||||
print(filepath, description)
|
||||
try:
|
||||
with open(filepath, 'w', encoding='utf-8') as json_f:
|
||||
json.dump(jsondict, json_f, indent=1)
|
||||
except PermissionError as e:
|
||||
raise PermissionError(
|
||||
f"CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {filepath}. Ask a nerd to fix this: {e}"
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"CANNOT write this file {filepath}. Exception dumping json. Ask a nerd to fix this: {e}")
|
||||
raise e
|
||||
|
||||
commit_msg = f"Exporting logbook entries as individual files"
|
||||
git_commit(dirpath, commit_msg, git_string, commands=[])
|
||||
return True
|
||||
@@ -19,7 +19,10 @@
|
||||
</p>
|
||||
|
||||
<p>(Hover mouse over the date to see the slug for the entry.)
|
||||
{% if logged_in %}<font color="red">Logged in as expoadmin</font>{% endif %}
|
||||
{% if logged_in %}<font color="red">Logged in as expoadmin<br />
|
||||
<a href="/logbook_entries/{{expedition.year}}">Export logbook entries as individual files</a>
|
||||
</font>
|
||||
{% endif %}
|
||||
|
||||
|
||||
<table class="expeditionlogbooks">
|
||||
@@ -82,6 +85,8 @@
|
||||
<li> <a href="/aliases/{{expedition.year}}">alias names</a> for this Expo
|
||||
<li> <a href="/years/{{expedition.year}}/{{expedition.logbookfile}}">full logbook</a> for this Expo
|
||||
<li> <a href="/logbookedit/">new logbook entry</a> for this Expo
|
||||
{% if logged_in %}<li><font color="red"><a href="/logbook_entries/{{expedition.year}}">export logbook entries</a> as individual files in /years/{{expedition.year}}/entries/</font>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
2
urls.py
2
urls.py
@@ -51,6 +51,7 @@ from troggle.core.views.logbooks import (
|
||||
expedition,
|
||||
get_logbook_entries,
|
||||
get_people,
|
||||
logbook_entries_export,
|
||||
logbookentry,
|
||||
logentrydelete,
|
||||
logreport,
|
||||
@@ -240,6 +241,7 @@ trogglepatterns = [
|
||||
# Logbook entries
|
||||
re_path(r'^logbookentry/(?P<date>.*)/(?P<slug>.*)/?$', logbookentry,name="logbookentry"),
|
||||
re_path(r'^logbook$', exportlogbook, name='exportlogbook'),
|
||||
path('logbook_entries/<slug:year>', logbook_entries_export, name='logbook_entries_export'),
|
||||
path('logreport/<slug:year>', logreport, name='logreport'),
|
||||
path('logentrydelete/<slug:year>', logentrydelete, name='logentrydelete'),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user