|
""" |
|
Create a Markdown document containing details about the team. |
|
|
|
PROMPT> python -m src.team.team_markdown_document |
|
""" |
|
import json |
|
from typing import Optional |
|
|
|
class TeamMarkdownDocumentBuilder: |
|
""" |
|
A class to build a Markdown document containing details about the team. |
|
""" |
|
def __init__(self): |
|
self.rows = [] |
|
|
|
def append_separator(self): |
|
self.rows.append("\n---\n") |
|
|
|
def append_plan_prompt(self, plan_prompt: str): |
|
"""The main topic text to include in the Markdown""" |
|
self.rows.append("# The plan\n") |
|
self.rows.append(plan_prompt.strip()) |
|
|
|
def append_role(self, entry: dict, role_index: int): |
|
self.rows.append(f"\n## {role_index}. {entry['category']}") |
|
if 'contract_type' in entry: |
|
self.rows.append(f"\n**Contract Type**: `{entry['contract_type']}`") |
|
if 'contract_type_justification' in entry: |
|
self.rows.append(f"\n**Contract Type Justification**: {entry['contract_type_justification']}") |
|
if 'explanation' in entry: |
|
self.rows.append(f"\n**Explanation**:\n{entry['explanation']}") |
|
if 'consequences' in entry: |
|
self.rows.append(f"\n**Consequences**:\n{entry['consequences']}") |
|
if 'count' in entry: |
|
self.rows.append(f"\n**People Count**:\n{entry['count']}") |
|
if 'typical_job_activities' in entry: |
|
self.rows.append(f"\n**Typical Activities**:\n{entry['typical_job_activities']}") |
|
if 'background_story' in entry: |
|
self.rows.append(f"\n**Background Story**:\n{entry['background_story']}") |
|
if 'equipment_needs' in entry: |
|
self.rows.append(f"\n**Equipment Needs**:\n{entry['equipment_needs']}") |
|
if 'facility_needs' in entry: |
|
self.rows.append(f"\n**Facility Needs**:\n{entry['facility_needs']}") |
|
|
|
def append_roles(self, roles_list: list[dict], title: Optional[str] = "Roles"): |
|
if isinstance(title, str): |
|
self.rows.append(f"# {title}") |
|
for entry_index, entry in enumerate(roles_list, start=1): |
|
self.append_role(entry, entry_index) |
|
|
|
def append_review_item(self, review_item: dict, review_index: int): |
|
issue = review_item.get('issue', "Missing Review Issue") |
|
self.rows.append(f"\n## {review_index}. {issue}") |
|
if 'explanation' in review_item: |
|
self.rows.append(f"\n{review_item['explanation']}") |
|
if 'recommendation' in review_item: |
|
self.rows.append(f"\n**Recommendation**:\n{review_item['recommendation']}") |
|
|
|
def append_review_items(self, review_items: list[dict], title: Optional[str] = "Review Items"): |
|
if isinstance(title, str): |
|
self.rows.append(f"# {title}") |
|
for review_index, review_item in enumerate(review_items, start=1): |
|
self.append_review_item(review_item, review_index) |
|
|
|
def append_full_review(self, review: dict): |
|
review_omissions = review.get('omissions', []) |
|
self.append_review_items(review_omissions, title="Omissions") |
|
self.append_separator() |
|
review_potential_improvements = review.get('potential_improvements', []) |
|
self.append_review_items(review_potential_improvements, title="Potential Improvements") |
|
|
|
def to_string(self) -> str: |
|
return "\n".join(self.rows) |
|
|
|
def write_to_file(self, output_file_path: str): |
|
markdown_representation = self.to_string() |
|
with open(output_file_path, 'w', encoding='utf-8') as out_f: |
|
out_f.write(markdown_representation) |
|
|
|
if __name__ == "__main__": |
|
import os |
|
|
|
plan_prompt = "Establish a solar farm in Denmark." |
|
|
|
path1 = os.path.join(os.path.dirname(__file__), 'test_data', "solarfarm_roles_list.json") |
|
with open(path1, 'r', encoding='utf-8') as f: |
|
roles_list = json.load(f) |
|
|
|
path2 = os.path.join(os.path.dirname(__file__), 'test_data', "solarfarm_team_review.json") |
|
with open(path2, 'r', encoding='utf-8') as f: |
|
team_review = json.load(f) |
|
|
|
builder2 = TeamMarkdownDocumentBuilder() |
|
builder2.append_plan_prompt(plan_prompt) |
|
builder2.append_separator() |
|
builder2.append_roles(roles_list) |
|
builder2.append_separator() |
|
builder2.append_full_review(team_review) |
|
|
|
print(builder2.to_string()) |
|
|