fix: correct UCP version data format in samples#137
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
dipankar1415
left a comment
There was a problem hiding this comment.
Reason of the change:
- Makes accepted version format explicit and unambiguous.
- Clarified parse_ucp_version() in rest/python/server/ucp_version.py to explicitly state that datetime-style version strings (for example YYYY-MM-DDTHH:MM:SSZ) are not supported.
- Added unit tests in rest/python/server/ucp_version_test.py for UCP version parsing behavior.
5d92cfe to
7afcaee
Compare
| ) | ||
|
|
||
|
|
||
| def _version_error_detail(code: str, message: str) -> dict: |
There was a problem hiding this comment.
is this helper function really necessary?
There was a problem hiding this comment.
Also, this error is in the same shape as what UcpVersionError to_detail returns.
Can we have some kind of data class? e.g. UcpErrorDetail(BaseModel) - I guess we can use pydantic. AFAIK FastAPI will also automatically document pydantic models.
| No provision for other formats supported like YYYY-MM-DDTHH:MM:SSZ | ||
|
|
||
| """ | ||
| if not isinstance(version, str): |
There was a problem hiding this comment.
nit: do we need this? version is type-hinted to str - ideally this'd be caught by mypy. If not, version.strip() would throw an error anyway if it's not a str.
Description
Fix UCP version in the Python REST merchant sample (rest/python/server).
validate_ucp_headers previously compared agent and merchant versions with string ordering (agent_version > server_version), which is incorrect for UCP YYYY-MM-DD versions. In discovery_profile.json looks like it is in date format, for example:
"version": "2026-01-23"
This change parses versions as ISO calendar dates, compares datetime.date values, returns VERSION_INVALID_FORMAT (400) for malformed agent versions, and returns VERSION_UNSUPPORTED (400) when the agent version is newer than the merchant. Behavior is unchanged when UCP-Agent omits version= (defaults to merchant version).
Files changed: ucp_version.py (new), exceptions.py (UcpVersionError), dependencies.py (date-based validation).
Note: the tests are not added, can add the tests if instructed to add them at a new tests folder.
Category (Required)
Please select one or more categories that apply to this change.
ucp-schematool (resolver, linter, validator). (Requires Maintainer approval)Related Issues
Checklist
!for breaking changes).Screenshots / Logs (if applicable)
Example response for a newer agent version (version="2027-01-01" vs merchant 2026-01-23):
{
"detail": {
"status": "error",
"errors": [{
"code": "VERSION_UNSUPPORTED",
"message": "Version 2027-01-01 is not supported. This merchant implements version 2026-01-23.",
"severity": "critical"
}]
}
}