Update API model conversion
This commit is contained in:
parent
0ae5a77844
commit
7e0a95317c
|
@ -422,6 +422,34 @@ def wsgi():
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
|
def to_api_model(item: Item) -> dict:
|
||||||
|
"""
|
||||||
|
Convert an item to a JSON representation for the frontend.
|
||||||
|
"""
|
||||||
|
result = {
|
||||||
|
"source": item.source.source_name,
|
||||||
|
"id": item["id"],
|
||||||
|
"created": item["created"],
|
||||||
|
"active": item["active"],
|
||||||
|
}
|
||||||
|
for unchanged_field in (
|
||||||
|
"title",
|
||||||
|
"author",
|
||||||
|
"body",
|
||||||
|
"link",
|
||||||
|
"time",
|
||||||
|
"tags",
|
||||||
|
"tts",
|
||||||
|
"ttl",
|
||||||
|
"ttd",
|
||||||
|
):
|
||||||
|
if val := item.get(unchanged_field):
|
||||||
|
result[unchanged_field] = val
|
||||||
|
if actions := item.get("action"):
|
||||||
|
result["actions"] = list(actions.keys())
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
@app.get("/api/v1/items")
|
@app.get("/api/v1/items")
|
||||||
# @auth_check
|
# @auth_check
|
||||||
def items():
|
def items():
|
||||||
|
@ -449,9 +477,9 @@ def items():
|
||||||
response = jsonify({"error": "One of channel and source may be specified"})
|
response = jsonify({"error": "One of channel and source may be specified"})
|
||||||
response.status_code = 400
|
response.status_code = 400
|
||||||
return response
|
return response
|
||||||
|
|
||||||
source_names = []
|
source_names = []
|
||||||
|
|
||||||
# If the channel was specified, load the channel defs to get the sources
|
# If the channel was specified, load the channel defs to get the sources
|
||||||
if filter_channel:
|
if filter_channel:
|
||||||
channels_config_path = data_path / "channels.json"
|
channels_config_path = data_path / "channels.json"
|
||||||
|
@ -485,7 +513,7 @@ def items():
|
||||||
for item in source.get_all_items()
|
for item in source.get_all_items()
|
||||||
if not item.is_hidden or show_hidden
|
if not item.is_hidden or show_hidden
|
||||||
],
|
],
|
||||||
key=item_sort_key
|
key=item_sort_key,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Apply paging filters
|
# Apply paging filters
|
||||||
|
@ -496,7 +524,7 @@ def items():
|
||||||
# Return the result set
|
# Return the result set
|
||||||
response_params = {
|
response_params = {
|
||||||
"count": len(paged_items),
|
"count": len(paged_items),
|
||||||
"items": list(map(lambda item: item.as_json(), paged_items)),
|
"items": list(map(to_api_model, paged_items)),
|
||||||
}
|
}
|
||||||
if page > 0:
|
if page > 0:
|
||||||
response_params["prev"] = page - 1
|
response_params["prev"] = page - 1
|
||||||
|
|
|
@ -53,7 +53,6 @@ def update_crontab_entries(data_path: Path):
|
||||||
section_found = False
|
section_found = False
|
||||||
in_section = False
|
in_section = False
|
||||||
for i in range(len(crontab_lines)):
|
for i in range(len(crontab_lines)):
|
||||||
|
|
||||||
if not section_found and crontab_lines[i] == INTAKE_CRON_BEGIN:
|
if not section_found and crontab_lines[i] == INTAKE_CRON_BEGIN:
|
||||||
section_found = True
|
section_found = True
|
||||||
in_section = True
|
in_section = True
|
||||||
|
|
|
@ -109,9 +109,6 @@ class Item:
|
||||||
def serialize(self, indent=True):
|
def serialize(self, indent=True):
|
||||||
return json.dumps(self._item, indent=2 if indent else None)
|
return json.dumps(self._item, indent=2 if indent else None)
|
||||||
|
|
||||||
def as_json(self):
|
|
||||||
return {"source": self.source.source_name, **self._item}
|
|
||||||
|
|
||||||
def update_from(self, updated: "Item") -> None:
|
def update_from(self, updated: "Item") -> None:
|
||||||
for field in (
|
for field in (
|
||||||
"title",
|
"title",
|
||||||
|
|
Loading…
Reference in New Issue