Version history for a component (only version records, no configs)
| 23 | |
| 24 | |
| 25 | class ComponentVersionHistory(BaseModel): |
| 26 | """Version history for a component (only version records, no configs)""" |
| 27 | name: str = Field(description="Name of the component") |
| 28 | component_type: str = Field(description="Type of component (tool, environment, agent)") |
| 29 | current_version: str = Field(description="Current active version") |
| 30 | versions: Dict[str, VersionInfo] = Field(default_factory=dict, description="Version history records") |
| 31 | metadata: Dict[str, Any] = Field(default_factory=dict, description="Component metadata") |
| 32 | |
| 33 | def add_version(self, version: str, description: Optional[str] = None, |
| 34 | metadata: Optional[Dict[str, Any]] = None) -> VersionInfo: |
| 35 | """Add a new version record |
| 36 | |
| 37 | Args: |
| 38 | version: Version string |
| 39 | description: Version description |
| 40 | metadata: Version metadata |
| 41 | |
| 42 | Returns: |
| 43 | VersionInfo: Created version info |
| 44 | """ |
| 45 | if version in self.versions: |
| 46 | logger.warning(f"| ⚠️ Version {version} already exists for {self.name}, updating...") |
| 47 | version_info = self.versions[version] |
| 48 | version_info.updated_at = datetime.now() |
| 49 | if description: |
| 50 | version_info.description = description |
| 51 | if metadata: |
| 52 | version_info.metadata.update(metadata) |
| 53 | else: |
| 54 | version_info = VersionInfo( |
| 55 | version=version, |
| 56 | description=description, |
| 57 | metadata=metadata or {} |
| 58 | ) |
| 59 | self.versions[version] = version_info |
| 60 | |
| 61 | self.current_version = version |
| 62 | |
| 63 | logger.debug(f"| ✅ Added version record {version} for {self.name}") |
| 64 | return version_info |
| 65 | |
| 66 | def list_versions(self) -> List[str]: |
| 67 | """List all available versions |
| 68 | |
| 69 | Returns: |
| 70 | List of version strings |
| 71 | """ |
| 72 | return list(self.versions.keys()) |
| 73 | |
| 74 | def deprecate_version(self, version: str): |
| 75 | """Deprecate a version |
| 76 | |
| 77 | Args: |
| 78 | version: Version string to deprecate |
| 79 | """ |
| 80 | if version not in self.versions: |
| 81 | raise ValueError(f"Version {version} not found for {self.name}") |
| 82 |
no outgoing calls
no test coverage detected