diff --git a/db/eolas.db b/db/eolas.db index 2b33bbf..157d529 100644 Binary files a/db/eolas.db and b/db/eolas.db differ diff --git a/src/cli.py b/src/cli.py index d7951f7..8f99429 100644 --- a/src/cli.py +++ b/src/cli.py @@ -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__": diff --git a/src/controllers/controller.py b/src/controllers/controller.py index c33b22e..7083ddb 100644 --- a/src/controllers/controller.py +++ b/src/controllers/controller.py @@ -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() diff --git a/src/services/graph_service.py b/src/services/graph_service.py index a20dad1..ca84eb6 100644 --- a/src/services/graph_service.py +++ b/src/services/graph_service.py @@ -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 diff --git a/src/services/tag_service.py b/src/services/tag_service.py new file mode 100644 index 0000000..d9193d4 --- /dev/null +++ b/src/services/tag_service.py @@ -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