mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 16:48:31 +02:00
Add tags to json and xml exporters (#975)
* tag array for json * add tags to entry in xml * xml test * json test * black * removed called
This commit is contained in:
parent
c1b93cf81b
commit
be38cfa87a
4 changed files with 30 additions and 4 deletions
|
@ -9,6 +9,8 @@ Feature: Exporting a Journal
|
||||||
And "tags" in the json output should contain "@idea"
|
And "tags" in the json output should contain "@idea"
|
||||||
And "tags" in the json output should contain "@journal"
|
And "tags" in the json output should contain "@journal"
|
||||||
And "tags" in the json output should contain "@dan"
|
And "tags" in the json output should contain "@dan"
|
||||||
|
And entry 1 should have an array "tags" with 2 elements
|
||||||
|
And entry 2 should have an array "tags" with 2 elements
|
||||||
|
|
||||||
Scenario: Exporting using filters should only export parts of the journal
|
Scenario: Exporting using filters should only export parts of the journal
|
||||||
Given we use the config "tags.yaml"
|
Given we use the config "tags.yaml"
|
||||||
|
@ -89,6 +91,7 @@ Feature: Exporting a Journal
|
||||||
Then the output should be a valid XML string
|
Then the output should be a valid XML string
|
||||||
And "entries" node in the xml output should have 2 elements
|
And "entries" node in the xml output should have 2 elements
|
||||||
And "tags" in the xml output should contain ["@idea", "@journal", "@dan"]
|
And "tags" in the xml output should contain ["@idea", "@journal", "@dan"]
|
||||||
|
And there should be 7 "tag" elements
|
||||||
|
|
||||||
Scenario: Exporting tags
|
Scenario: Exporting tags
|
||||||
Given we use the config "tags.yaml"
|
Given we use the config "tags.yaml"
|
||||||
|
|
|
@ -65,6 +65,16 @@ def check_json_output_path(context, path, value=None):
|
||||||
assert struct is not None
|
assert struct is not None
|
||||||
|
|
||||||
|
|
||||||
|
@then(
|
||||||
|
'entry {entry_number:d} should have an array "{name}" with {items_number:d} elements'
|
||||||
|
)
|
||||||
|
def entry_array_count(context, entry_number, name, items_number):
|
||||||
|
# note that entry_number is 1-indexed.
|
||||||
|
out = context.stdout_capture.getvalue()
|
||||||
|
out_json = json.loads(out)
|
||||||
|
assert len(out_json["entries"][entry_number - 1][name]) == items_number
|
||||||
|
|
||||||
|
|
||||||
@then("the output should be a valid XML string")
|
@then("the output should be a valid XML string")
|
||||||
def assert_valid_xml_string(context):
|
def assert_valid_xml_string(context):
|
||||||
output = context.stdout_capture.getvalue()
|
output = context.stdout_capture.getvalue()
|
||||||
|
@ -72,18 +82,25 @@ def assert_valid_xml_string(context):
|
||||||
assert xml_tree, output
|
assert xml_tree, output
|
||||||
|
|
||||||
|
|
||||||
@then('"entries" node in the xml output should have {number:d} elements')
|
@then('"{item}" node in the xml output should have {number:d} elements')
|
||||||
def assert_xml_output_entries_count(context, number):
|
def assert_xml_output_entries_count(context, item, number):
|
||||||
output = context.stdout_capture.getvalue()
|
output = context.stdout_capture.getvalue()
|
||||||
xml_tree = ElementTree.fromstring(output)
|
xml_tree = ElementTree.fromstring(output)
|
||||||
|
|
||||||
xml_tags = (node.tag for node in xml_tree)
|
xml_tags = (node.tag for node in xml_tree)
|
||||||
assert "entries" in xml_tags, str(list(xml_tags))
|
assert item in xml_tags, str(list(xml_tags))
|
||||||
|
|
||||||
actual_entry_count = len(xml_tree.find("entries"))
|
actual_entry_count = len(xml_tree.find(item))
|
||||||
assert actual_entry_count == number, actual_entry_count
|
assert actual_entry_count == number, actual_entry_count
|
||||||
|
|
||||||
|
|
||||||
|
@then('there should be {number:d} "{item}" elements')
|
||||||
|
def count_elements(context, number, item):
|
||||||
|
output = context.stdout_capture.getvalue()
|
||||||
|
xml_tree = ElementTree.fromstring(output)
|
||||||
|
assert len(xml_tree.findall(".//" + item)) == number
|
||||||
|
|
||||||
|
|
||||||
@then('"tags" in the xml output should contain {expected_tags_json_list}')
|
@then('"tags" in the xml output should contain {expected_tags_json_list}')
|
||||||
def assert_xml_output_tags(context, expected_tags_json_list):
|
def assert_xml_output_tags(context, expected_tags_json_list):
|
||||||
output = context.stdout_capture.getvalue()
|
output = context.stdout_capture.getvalue()
|
||||||
|
|
|
@ -20,6 +20,7 @@ class JSONExporter(TextExporter):
|
||||||
"body": entry.body,
|
"body": entry.body,
|
||||||
"date": entry.date.strftime("%Y-%m-%d"),
|
"date": entry.date.strftime("%Y-%m-%d"),
|
||||||
"time": entry.date.strftime("%H:%M"),
|
"time": entry.date.strftime("%H:%M"),
|
||||||
|
"tags": entry.tags,
|
||||||
"starred": entry.starred,
|
"starred": entry.starred,
|
||||||
}
|
}
|
||||||
if hasattr(entry, "uuid"):
|
if hasattr(entry, "uuid"):
|
||||||
|
|
|
@ -35,6 +35,11 @@ class XMLExporter(JSONExporter):
|
||||||
if hasattr(entry, "uuid"):
|
if hasattr(entry, "uuid"):
|
||||||
entry_el.setAttribute("uuid", entry.uuid)
|
entry_el.setAttribute("uuid", entry.uuid)
|
||||||
entry_el.setAttribute("starred", entry.starred)
|
entry_el.setAttribute("starred", entry.starred)
|
||||||
|
tags = entry.tags
|
||||||
|
for tag in tags:
|
||||||
|
tag_el = doc.createElement("tag")
|
||||||
|
tag_el.setAttribute("name", tag)
|
||||||
|
entry_el.appendChild(tag_el)
|
||||||
entry_el.appendChild(doc.createTextNode(entry.fulltext))
|
entry_el.appendChild(doc.createTextNode(entry.fulltext))
|
||||||
return entry_el
|
return entry_el
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue