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.graph_service import GraphService | ||||||
| from services.parse_file_service import ParseFileService | from services.parse_file_service import ParseFileService | ||||||
| from services.table_service import TableService | from services.table_service import TableService | ||||||
|  | from services.tag_service import TagService | ||||||
| 
 | 
 | ||||||
| database_service = DatabaseService("eolas") | database_service = DatabaseService("eolas") | ||||||
| database_connection = database_service.connect() | database_connection = database_service.connect() | ||||||
| table_service = TableService(database_connection) | table_service = TableService(database_connection) | ||||||
| parse_file_service = ParseFileService(EOLAS_DIRECTORY) | parse_file_service = ParseFileService(EOLAS_DIRECTORY) | ||||||
| graph_service = GraphService(database_connection) | graph_service = GraphService(database_connection) | ||||||
|  | tag_service = TagService(database_connection) | ||||||
|  | 
 | ||||||
| controller = Controller( | 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": |     if args.command == "generate-graph": | ||||||
|         controller.execute("graph") |         controller.execute("graph") | ||||||
| 
 | 
 | ||||||
|     # if args.command == "export-tags": |     if args.command == "export-tags": | ||||||
|     #     controller.export_tags() |         controller.execute("tags") | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|  |  | ||||||
|  | @ -8,13 +8,13 @@ class Controller: | ||||||
|         table_service, |         table_service, | ||||||
|         parse_file_service, |         parse_file_service, | ||||||
|         graph_service, |         graph_service, | ||||||
|         # tag_service, |         tag_service, | ||||||
|     ): |     ): | ||||||
|         self.database_service = database_service |         self.database_service = database_service | ||||||
|         self.table_service = table_service |         self.table_service = table_service | ||||||
|         self.parse_file_service = parse_file_service |         self.parse_file_service = parse_file_service | ||||||
|         self.graph_service = graph_service |         self.graph_service = graph_service | ||||||
|         # self.tag_service = tag_service |         self.tag_service = tag_service | ||||||
| 
 | 
 | ||||||
|     def execute(self, operation): |     def execute(self, operation): | ||||||
|         try: |         try: | ||||||
|  | @ -23,6 +23,8 @@ class Controller: | ||||||
|                     return self.__populate_database() |                     return self.__populate_database() | ||||||
|                 case "graph": |                 case "graph": | ||||||
|                     return self.__generate_graph() |                     return self.__generate_graph() | ||||||
|  |                 case "tags": | ||||||
|  |                     return self.__export_tags() | ||||||
|         except Exception as e: |         except Exception as e: | ||||||
|             raise Exception(colored(f"ERROR {e}", "red")) |             raise Exception(colored(f"ERROR {e}", "red")) | ||||||
|         finally: |         finally: | ||||||
|  | @ -35,3 +37,6 @@ class Controller: | ||||||
| 
 | 
 | ||||||
|     def __generate_graph(self): |     def __generate_graph(self): | ||||||
|         self.graph_service.generate_graph() |         self.graph_service.generate_graph() | ||||||
|  | 
 | ||||||
|  |     def __export_tags(self): | ||||||
|  |         self.tag_service.export_tags() | ||||||
|  |  | ||||||
|  | @ -1,8 +1,10 @@ | ||||||
| import json | import json | ||||||
| from constants import GRAPH_OUTPUT_DIRECTORY  | 
 | ||||||
| from services.sqlite_service import SqliteService | from constants import GRAPH_OUTPUT_DIRECTORY | ||||||
| from models.graph_node import IGraphNode |  | ||||||
| from models.graph_edge import IGraphEdge | from models.graph_edge import IGraphEdge | ||||||
|  | from models.graph_node import IGraphNode | ||||||
|  | from services.sqlite_service import SqliteService | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class GraphService(SqliteService): | class GraphService(SqliteService): | ||||||
|     error_message_stub = "Could not retrieve contents of table:" |     error_message_stub = "Could not retrieve contents of table:" | ||||||
|  | @ -20,7 +22,7 @@ class GraphService(SqliteService): | ||||||
|             "SELECT title FROM entries", |             "SELECT title FROM entries", | ||||||
|             error_message=f"{self.error_message_stub} entries", |             error_message=f"{self.error_message_stub} entries", | ||||||
|         ) |         ) | ||||||
|          | 
 | ||||||
|         entries = [IGraphNode(id=entry[0], type="entry") for entry in entries] |         entries = [IGraphNode(id=entry[0], type="entry") for entry in entries] | ||||||
|         return tags + entries |         return tags + entries | ||||||
| 
 | 
 | ||||||
|  | @ -29,16 +31,18 @@ class GraphService(SqliteService): | ||||||
|             "SELECT * FROM entries_tags", |             "SELECT * FROM entries_tags", | ||||||
|             error_message=f"{self.error_message_stub} entries_tags", |             error_message=f"{self.error_message_stub} entries_tags", | ||||||
|         ) |         ) | ||||||
|      | 
 | ||||||
|         tags = [IGraphEdge(source=f"#{tag[1]}", target=tag[0]) for tag in tags] |         tags = [IGraphEdge(source=f"#{tag[1]}", target=tag[0]) for tag in tags] | ||||||
| 
 | 
 | ||||||
|         backlinks = self._query( |         backlinks = self._query( | ||||||
|             "SELECT * FROM backlinks", |             "SELECT * FROM backlinks", | ||||||
|             error_message=f"{self.error_message_stub} 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 |         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