|
8 | 8 | import re |
9 | 9 | import textwrap |
10 | 10 | from datetime import datetime |
| 11 | +from importlib.metadata import version |
11 | 12 | from pathlib import Path |
12 | 13 | from typing import Any |
13 | 14 |
|
@@ -109,6 +110,19 @@ def generate( |
109 | 110 |
|
110 | 111 | return project |
111 | 112 |
|
| 113 | + def _get_metaspec_version(self) -> str: |
| 114 | + """ |
| 115 | + Get the MetaSpec package version from metadata. |
| 116 | +
|
| 117 | + Returns: |
| 118 | + Version string (e.g., "0.5.1") |
| 119 | + """ |
| 120 | + try: |
| 121 | + return version("meta-spec") |
| 122 | + except Exception: |
| 123 | + # Fallback to a default version if package metadata is not available |
| 124 | + return "0.0.0" |
| 125 | + |
112 | 126 | def _create_template_context(self, meta_spec: MetaSpecDefinition) -> dict[str, Any]: |
113 | 127 | """ |
114 | 128 | Create template rendering context from MetaSpecDefinition. |
@@ -188,7 +202,7 @@ def _create_template_context(self, meta_spec: MetaSpecDefinition) -> dict[str, A |
188 | 202 | "dependencies": meta_spec.dependencies or [], |
189 | 203 | "year": datetime.now().year, |
190 | 204 | "date": datetime.now().date().isoformat(), |
191 | | - "metaspec_version": "0.1.0", # TODO: Get from package metadata |
| 205 | + "metaspec_version": self._get_metaspec_version(), |
192 | 206 | } |
193 | 207 |
|
194 | 208 | def _select_templates(self, meta_spec: MetaSpecDefinition) -> dict[str, str]: |
@@ -497,18 +511,34 @@ def {cmd_name}(): |
497 | 511 | ) |
498 | 512 | else: |
499 | 513 | # Generate function with options if present |
| 514 | + params_list = ["spec_file: str"] |
| 515 | + option_prints = ['console.print(f"[green]{cmd_name.title()}:[/green] {{spec_file}}")'] |
| 516 | + |
500 | 517 | if cmd.get("options"): |
501 | | - # TODO: Handle options properly |
502 | | - params = "spec_file: str" |
503 | | - else: |
504 | | - params = "spec_file: str" |
| 518 | + for opt in cmd["options"]: |
| 519 | + opt_name = opt["name"] |
| 520 | + opt_type = opt["type"] |
| 521 | + opt_required = opt.get("required", False) |
| 522 | + |
| 523 | + # Build parameter declaration |
| 524 | + if opt_required: |
| 525 | + params_list.append(f"{opt_name}: {opt_type}") |
| 526 | + else: |
| 527 | + # Optional parameter with default None |
| 528 | + params_list.append(f"{opt_name}: {opt_type} = None") |
| 529 | + |
| 530 | + # Add print statement for the option |
| 531 | + option_prints.append(f'console.print(f"[blue]{opt_name.title()}:[/blue] {{{opt_name}}}")') |
| 532 | + |
| 533 | + params = ", ".join(params_list) |
| 534 | + option_code = "\n ".join(option_prints) |
505 | 535 |
|
506 | 536 | command_functions.append( |
507 | 537 | textwrap.dedent(f''' |
508 | 538 | @app.command() |
509 | 539 | def {cmd_name}({params}): |
510 | 540 | """{cmd_desc}""" |
511 | | - console.print(f"[green]{cmd_name.title()}:[/green] {{spec_file}}") |
| 541 | + {option_code} |
512 | 542 | # TODO: Implement {cmd_name} |
513 | 543 | ''').strip() |
514 | 544 | ) |
|
0 commit comments