Add serialization, html

This commit is contained in:
Roland Thomas Jr 2024-06-13 19:03:57 -04:00
parent 15e8953712
commit cf55dd1446
Signed by: roland
GPG Key ID: 7C3C2B085A4C2872
2 changed files with 32 additions and 2 deletions

View File

@ -1,3 +1,4 @@
import pickle
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import List, Dict, Any, Optional from typing import List, Dict, Any, Optional
from rich.console import Console from rich.console import Console
@ -118,6 +119,23 @@ class ItemManager:
console.print(table) console.print(table)
def save_to_file(self, filename: str):
with open(filename, 'wb') as f:
pickle.dump(self, f)
print(f"ItemManager saved to {filename}")
@staticmethod
def load_from_file(filename: str) -> 'ItemManager':
with open(filename, 'rb') as f:
item_manager = pickle.load(f)
print(f"ItemManager loaded from {filename}")
return item_manager
@classmethod
def from_json_list(cls, json_list: List[Dict[str, Any]]):
item_manager = cls()
item_manager.add_items_from_json_list(json_list)
return item_manager
item_manager = ItemManager() item_manager = ItemManager()
@ -137,3 +155,12 @@ json_list_2 = [
item_manager.add_items_from_json_list(json_list_2, data_type='old') item_manager.add_items_from_json_list(json_list_2, data_type='old')
item_manager.print_items_as_table() item_manager.print_items_as_table()
# Save to file
item_manager.save_to_file('item_manager.pkl')
# Load from file
loaded_item_manager = ItemManager.load_from_file('item_manager.pkl')
# Print loaded items as table
loaded_item_manager.print_items_as_table()

View File

@ -12,6 +12,7 @@ from prompt_toolkit.lexers import PygmentsLexer
from prompt_toolkit.shortcuts import confirm from prompt_toolkit.shortcuts import confirm
from prompt_toolkit.styles import Style from prompt_toolkit.styles import Style
from prompt_toolkit.validation import ValidationError, Validator from prompt_toolkit.validation import ValidationError, Validator
from prompt_toolkit.formatted_text import HTML, merge_formatted_text
from pygments.lexer import RegexLexer from pygments.lexer import RegexLexer
from pygments.token import (Error, Keyword, Name, from pygments.token import (Error, Keyword, Name,
Operator, Punctuation, Operator, Punctuation,
@ -351,10 +352,12 @@ class JQLPrompt:
def get_query_count(self): def get_query_count(self):
space = self.console.width // 3 space = self.console.width // 3
query_count_str = f"Query Count: {self.query_count}" if self.query_count else "" query_count_str = f"Query Count: {self.query_count}" if self.query_count else ""
query_count_html = HTML(f"<b><style fg='#2E3440' bg='#88C0D0'>{query_count_str:^{space}}</style></b>")
issue_count_str = f"Issues Added: {self.issue_count}" if self.issue_count else "" issue_count_str = f"Issues Added: {self.issue_count}" if self.issue_count else ""
issue_count_html = HTML(f"<b><style fg='#2E3440' bg='#B48EAD'>{issue_count_str:^{space}}</style></b>")
total_issue_count_str = f"Total Issues: {self.total_issue_count}" if self.total_issue_count else "" total_issue_count_str = f"Total Issues: {self.total_issue_count}" if self.total_issue_count else ""
plain_text = f"{query_count_str:^{space}}{issue_count_str:^{space}}{total_issue_count_str:^{space}}" total_issue_count_html = HTML(f"<b><style fg='#2E3440' bg='#D8DEE9'>{total_issue_count_str:^{space}}</style></b>")
return [("bg:#2E3440 #D8DEE9", plain_text)] return merge_formatted_text([query_count_html, issue_count_html, total_issue_count_html])
def create_jql_prompt_session(self): def create_jql_prompt_session(self):
completer: JQLCompleter = JQLCompleter(completions) completer: JQLCompleter = JQLCompleter(completions)