feat: add tag export functionality
This commit is contained in:
parent
81a59122e8
commit
2209fbeb54
5 changed files with 42 additions and 12 deletions
BIN
db/eolas.db
BIN
db/eolas.db
Binary file not shown.
|
@ -6,14 +6,17 @@ from services.database_service import DatabaseService
|
|||
from services.graph_service import GraphService
|
||||
from services.parse_file_service import ParseFileService
|
||||
from services.table_service import TableService
|
||||
from services.tag_service import TagService
|
||||
|
||||
database_service = DatabaseService("eolas")
|
||||
database_connection = database_service.connect()
|
||||
table_service = TableService(database_connection)
|
||||
parse_file_service = ParseFileService(EOLAS_DIRECTORY)
|
||||
graph_service = GraphService(database_connection)
|
||||
tag_service = TagService(database_connection)
|
||||
|
||||
controller = Controller(
|
||||
database_service, table_service, parse_file_service, graph_service
|
||||
database_service, table_service, parse_file_service, graph_service, tag_service
|
||||
)
|
||||
|
||||
|
||||
|
@ -34,8 +37,8 @@ def main():
|
|||
if args.command == "generate-graph":
|
||||
controller.execute("graph")
|
||||
|
||||
# if args.command == "export-tags":
|
||||
# controller.export_tags()
|
||||
if args.command == "export-tags":
|
||||
controller.execute("tags")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -8,13 +8,13 @@ class Controller:
|
|||
table_service,
|
||||
parse_file_service,
|
||||
graph_service,
|
||||
# tag_service,
|
||||
tag_service,
|
||||
):
|
||||
self.database_service = database_service
|
||||
self.table_service = table_service
|
||||
self.parse_file_service = parse_file_service
|
||||
self.graph_service = graph_service
|
||||
# self.tag_service = tag_service
|
||||
self.tag_service = tag_service
|
||||
|
||||
def execute(self, operation):
|
||||
try:
|
||||
|
@ -23,6 +23,8 @@ class Controller:
|
|||
return self.__populate_database()
|
||||
case "graph":
|
||||
return self.__generate_graph()
|
||||
case "tags":
|
||||
return self.__export_tags()
|
||||
except Exception as e:
|
||||
raise Exception(colored(f"ERROR {e}", "red"))
|
||||
finally:
|
||||
|
@ -35,3 +37,6 @@ class Controller:
|
|||
|
||||
def __generate_graph(self):
|
||||
self.graph_service.generate_graph()
|
||||
|
||||
def __export_tags(self):
|
||||
self.tag_service.export_tags()
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
import json
|
||||
from constants import GRAPH_OUTPUT_DIRECTORY
|
||||
from services.sqlite_service import SqliteService
|
||||
from models.graph_node import IGraphNode
|
||||
|
||||
from constants import GRAPH_OUTPUT_DIRECTORY
|
||||
from models.graph_edge import IGraphEdge
|
||||
from models.graph_node import IGraphNode
|
||||
from services.sqlite_service import SqliteService
|
||||
|
||||
|
||||
class GraphService(SqliteService):
|
||||
error_message_stub = "Could not retrieve contents of table:"
|
||||
|
@ -20,7 +22,7 @@ class GraphService(SqliteService):
|
|||
"SELECT title FROM entries",
|
||||
error_message=f"{self.error_message_stub} entries",
|
||||
)
|
||||
|
||||
|
||||
entries = [IGraphNode(id=entry[0], type="entry") for entry in entries]
|
||||
return tags + entries
|
||||
|
||||
|
@ -29,16 +31,18 @@ class GraphService(SqliteService):
|
|||
"SELECT * FROM entries_tags",
|
||||
error_message=f"{self.error_message_stub} entries_tags",
|
||||
)
|
||||
|
||||
|
||||
tags = [IGraphEdge(source=f"#{tag[1]}", target=tag[0]) for tag in tags]
|
||||
|
||||
backlinks = self._query(
|
||||
"SELECT * FROM backlinks",
|
||||
error_message=f"{self.error_message_stub} backlinks",
|
||||
)
|
||||
|
||||
backlinks = [IGraphEdge(source=f"{backlink[0]}", target = backlink[1]) for backlink in backlinks]
|
||||
|
||||
backlinks = [
|
||||
IGraphEdge(source=f"{backlink[0]}", target=backlink[1])
|
||||
for backlink in backlinks
|
||||
]
|
||||
|
||||
return tags + backlinks
|
||||
|
||||
|
|
18
src/services/tag_service.py
Normal file
18
src/services/tag_service.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
from services.sqlite_service import SqliteService
|
||||
|
||||
|
||||
class TagService(SqliteService):
|
||||
def __init__(self, db_connection):
|
||||
super().__init__(db_connection)
|
||||
|
||||
def __retrieve_entries_for_tag(self, tag):
|
||||
entries = self._query("SELECT * FROM entries_tags WHERE tag_name = ?", (tag,))
|
||||
return sorted([entry[0] for entry in entries])
|
||||
|
||||
def export_tags(self):
|
||||
tags = self._query("SELECT * FROM tags")
|
||||
tags = sorted([tag[0] for tag in tags])
|
||||
tag_dict = {}
|
||||
for tag in tags:
|
||||
tag_dict[tag] = self.__retrieve_entries_for_tag(tag)
|
||||
return tag_dict
|
Loading…
Add table
Reference in a new issue