diff --git a/.gitmodules b/.gitmodules index 0c40dac..e696f6c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,7 +6,7 @@ url = https://github.com/uastech/standards [submodule "interfaces/astm/f3548/v21"] path = interfaces/astm/f3548/v21 - url = https://github.com/astm-utm/Protocol + url = https://github.com/interuss/astm-utm-protocol [submodule "interfaces/interuss/automated_testing"] path = interfaces/interuss/automated_testing url = https://github.com/interuss/automated_testing_interfaces diff --git a/interfaces/astm/f3548/v21 b/interfaces/astm/f3548/v21 index cb7cf96..1d3d8fb 160000 --- a/interfaces/astm/f3548/v21 +++ b/interfaces/astm/f3548/v21 @@ -1 +1 @@ -Subproject commit cb7cf962d3a0c01b5ab12502f5f54789624977bf +Subproject commit 1d3d8fbe75414e23d7e19ce35955770bea5e413f diff --git a/src/uas_standards/astm/f3548/v21/api.py b/src/uas_standards/astm/f3548/v21/api.py index 740556d..2e3f780 100644 --- a/src/uas_standards/astm/f3548/v21/api.py +++ b/src/uas_standards/astm/f3548/v21/api.py @@ -19,6 +19,10 @@ """String whose format matches a version-4 UUID according to RFC 4122.""" +UUIDv7Format = str +"""String whose format matches a version-7 UUID according to RFC 9562.""" + + EntityID = UUIDv4Format @@ -26,6 +30,10 @@ """A token associated with a particular UTM Entity+version created by the DSS upon creation or modification of an Entity reference and provided to the client creating or modifying the Entity reference. The EntityOVN is stored privately by the DSS and then compared against entries in a Key provided to mutate the airspace. The EntityOVN is also provided by the client whenever that client transmits the full information of the Entity (either via GET, or via a subscription notification).""" +EntityVersion = int +"""Numeric version of this entity which increments upon each change in the entity, regardless of whether any field of the entity changes. A USS with the details of this entity when it was at a particular version does not need to retrieve the details again until the version changes.""" + + SubscriptionID = UUIDv4Format @@ -318,7 +326,7 @@ class UserNotificationRecordNotificationTriggeringEvent(str, Enum): CSTP0020 = "CSTP0020" CSTP0025 = "CSTP0025" CSTP0030 = "CSTP0030" - CSTO0035 = "CSTO0035" + CSTP0035 = "CSTP0035" class UserNotificationRecord(ImplicitDict): @@ -565,8 +573,7 @@ class OperationalIntentReference(ImplicitDict): uss_availability: UssAvailabilityState - version: int - """Numeric version of this operational intent which increments upon each change in the operational intent, regardless of whether any field of the operational intent reference changes. A USS with the details of this operational intent when it was at a particular version does not need to retrieve the details again until the version changes.""" + version: EntityVersion state: OperationalIntentState @@ -624,8 +631,7 @@ class ConstraintReference(ImplicitDict): uss_availability: UssAvailabilityState - version: int - """Numeric version of this constraint which increments upon each change in the constraint, regardless of whether any field of the constraint reference changes. A USS with the details of this constraint when it was at a particular version does not need to retrieve the details again until the version changes.""" + version: EntityVersion ovn: Optional[EntityOVN] """Opaque version number of this constraint. Populated only when the ConstraintReference is managed by the USS retrieving or providing it. Not populated when the ConstraintReference is not managed by the USS retrieving or providing it (instead, the USS must obtain the OVN from the details retrieved from the managing USS).""" @@ -916,6 +922,11 @@ class PutOperationalIntentReferenceParameters(ImplicitDict): new_subscription: Optional[ImplicitSubscriptionParameters] """If an existing subscription is not specified in `subscription_id`, and the operational intent is in the Activated, Nonconforming, or Contingent state, then this field must be populated. When this field is populated, an implicit subscription will be created and associated with this operational intent, and will generally be deleted automatically upon the deletion of this operational intent.""" + requested_ovn_suffix: Optional[UUIDv7Format] + """This optional field not part of the original F3548 standard API allows a USS to request a specific OVN when creating or updating an operational intent. When creating an operational intent, this enables a USS to immediately publish the operational intent details with the expected OVN. When updating an operational intent, this enables a USS to immediately make available this new version of the operational intent details if specifically requested by the remote USS. The USS must still wait for the DSS receipt to actually publish the new operational intent details. This allows USSs to obtain correct operational intent details even if the DSS takes a long time to respond and/or the USS processing it. + The requested suffix must be a UUIDv7 string containing a timestamp of the current time. If the suffix is invalid, and notably if the time is too far in the past or the future, the request will be rejected. If the suffix is valid, the DSS will set the OVN of the operational intent to be `{entityid}_{requested_ovn_suffix}`. If no suffix is set, the DSS will proceed as specified by the standard. + """ + class ChangeOperationalIntentReferenceResponse(ImplicitDict): """Response to a request to create, update, or delete an OperationalIntentReference in the DSS."""