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
	
	 thomasabishop
						thomasabishop