diff --git a/interfaces/interuss/automated_testing b/interfaces/interuss/automated_testing index 3e6060b..1750244 160000 --- a/interfaces/interuss/automated_testing +++ b/interfaces/interuss/automated_testing @@ -1 +1 @@ -Subproject commit 3e6060bd6d5cd665eb5cc60ec7aaeab104547769 +Subproject commit 17502448f450fd9d923577c0667b7d4cb4812620 diff --git a/src/uas_standards/interuss/automated_testing/flight_planning/v1/api.py b/src/uas_standards/interuss/automated_testing/flight_planning/v1/api.py index 881496e..2b3573a 100644 --- a/src/uas_standards/interuss/automated_testing/flight_planning/v1/api.py +++ b/src/uas_standards/interuss/automated_testing/flight_planning/v1/api.py @@ -1,4 +1,4 @@ -"""Data types and operations from Flight Planning Automated Testing Interface 0.5.0 OpenAPI""" +"""Data types and operations from Flight Planning Automated Testing Interface 0.7.0 OpenAPI""" # This file is autogenerated; do not modify manually! @@ -10,7 +10,7 @@ from uas_standards.utils import Operation -API_VERSION = "0.5.0" +API_VERSION = "0.7.0" """Version of Flight Planning Automated Testing Interface OpenAPI specification from which the objects in this package were generated.""" FlightPlanID = str @@ -38,7 +38,7 @@ class StatusResponse(ImplicitDict): """Indication of the API implemented at this URL. Must be "Flight Planning Automated Testing Interface".""" api_version: str | None - """Indication of the API version implemented at this URL. Must be "v0.5.0" when implementing this version of the API.""" + """Indication of the API version implemented at this URL. Must be "v0.7.0" when implementing this version of the API.""" class FlightPlanAdditionalInformation(ImplicitDict): @@ -59,26 +59,10 @@ class BasicFlightPlanInformationUsageState(str, Enum): Closed = "Closed" -class BasicFlightPlanInformationUasState(str, Enum): - """State of the user's UAS associated with this flight plan. - - - `Nominal`: The user or UAS reports or implies that it is performing nominally, or has not indicated - `OffNominal` or `Contingent`. - - - `OffNominal`: The user or UAS reports or implies that it is temporarily not conforming to its intent, - but may expect to be able to recover to normal operation. - - - `Contingent`: The user or UAS reports or implies that it is not conforming to its intent and may be - unable to recover to normal operation. - - - `NotSpecified`: The UAS status is not currently available or known (for instance, if the flight is - planned in the future and the UAS that will be flying has not yet connected to the system). - """ - - Nominal = "Nominal" - OffNominal = "OffNominal" - Contingent = "Contingent" - NotSpecified = "NotSpecified" +SpecificSessionID = str +"""A unique ID intended to identify a specific flight (session) while providing a +greater level of privacy to the operator. Defined, for instance, in ASTM F3411. +""" class ExecutionStyle(str, Enum): @@ -150,20 +134,6 @@ class AdvisoryInclusion(str, Enum): NoAdvisoriesOrConditions = "NoAdvisoriesOrConditions" -class UpsertFlightPlanResponse(ImplicitDict): - planning_result: PlanningActivityResult - """The result of the flight plan creation or update attempt by the emulated user. If any option other than `Completed` is specified, the `notes` field should be populated with the reason for the unsuccessful outcome.""" - - notes: str | None - """Human-readable explanation of the observed result. This explanation may be made available to a human reviewing the test results, and ideally should explain why an undesirable result was obtained. For instance, if the injection attempt Failed, then these notes may indicate that the attempt failed because the DSS indicated 400 to a valid request (perhaps also including the valid request as proof).""" - - flight_plan_status: FlightPlanStatus - """The status of the user's flight plan following the flight planning activity.""" - - includes_advisories: AdvisoryInclusion | None - """Nature of advisories included in the response to the user regarding their attempt to perform this flight planning activity.""" - - class DeleteFlightPlanResponse(ImplicitDict): planning_result: PlanningActivityResult """The result of attempted flight plan cancellation/closure by the USS admin. If any option other than `Completed` is specified, the `notes` field should be populated with the reason for the unsuccessful outcome.""" @@ -197,6 +167,270 @@ class ClearAreaResponse(ImplicitDict): outcome: ClearAreaOutcome +class UAType(str, Enum): + """The UA Type can help infer performance, speed, and duration of flights, for example, a + "fixed wing" can generally fly in a forward direction only (as compared to a multi-rotor). + + `HybridLift` is a fixed wing aircraft that can take off vertically. `Helicopter` includes multirotor. + + `VTOL` is equivalent to HybridLift. + """ + + NotDeclared = "NotDeclared" + Aeroplane = "Aeroplane" + Helicopter = "Helicopter" + Gyroplane = "Gyroplane" + VTOL = "VTOL" + HybridLift = "HybridLift" + Ornithopter = "Ornithopter" + Glider = "Glider" + Kite = "Kite" + FreeBalloon = "FreeBalloon" + CaptiveBalloon = "CaptiveBalloon" + Airship = "Airship" + FreeFallOrParachute = "FreeFallOrParachute" + Rocket = "Rocket" + TetheredPoweredAircraft = "TetheredPoweredAircraft" + GroundObstacle = "GroundObstacle" + Other = "Other" + + +class UASRegistrationNumber(ImplicitDict): + """Number provided by CAA or authorized representative for registering and/or identifying UAS.""" + + authority: str | None = "" + """Authority providing this registration number. If authority represents a country, the ICAO nationality + mark is recommended. + """ + + identifier: str + """Authority-assigned number or identifier.""" + + +class UAClassificationEUCategory(str, Enum): + EUCategoryUndefined = "EUCategoryUndefined" + Open = "Open" + Specific = "Specific" + Certified = "Certified" + + +class UAClassificationEUClass(str, Enum): + EUClassUndefined = "EUClassUndefined" + Class0 = "Class0" + Class1 = "Class1" + Class2 = "Class2" + Class3 = "Class3" + Class4 = "Class4" + Class5 = "Class5" + Class6 = "Class6" + + +UAClassificationEU = dict +"""Expected keys: +* category +* class +""" + + +class OperatorRegistrationNumber(ImplicitDict): + """Number provided by CAA or authorized representative for registering, licensing and/or identifying a remote pilot or operator.""" + + authority: str | None = "" + """Authority providing this registration number. If authority represents a country, the ICAO nationality + mark is recommended. + """ + + type: str | None = "" + """Type of license, registration, identifier, etc.""" + + identifier: str + """Authority-assigned number or identifier.""" + + +Longitude = float +"""Degrees of longitude east of the Prime Meridian, with reference to the WGS84 ellipsoid.""" + + +Latitude = float +"""Degrees of latitude north of the equator, with reference to the WGS84 ellipsoid.""" + + +class AltitudeReference(str, Enum): + """A code indicating the reference for a vertical distance. See AIXM 5.1 and FIXM 4.2.0 for W84 and SFC.""" + + W84 = "W84" + SFC = "SFC" + Takeoff = "Takeoff" + + +class AltitudeUnits(str, Enum): + """The reference quantities used to express the value of altitude. See FIXM 4.2. Currently, UTM only allows meters with no immediate plans to allow other options.""" + + M = "M" + + +class Altitude(ImplicitDict): + value: float + """The numeric value of the altitude. Note that min and max values are added as a sanity check. As use cases evolve and more options are made available in terms of units of measure or reference systems, these bounds may be re-evaluated.""" + + reference: AltitudeReference + """A code indicating the reference for a vertical distance. See AIXM 5.1 and FIXM 4.2.0 for W84 and SFC.""" + + units: AltitudeUnits = AltitudeUnits.M + """The reference quantities used to express the value of altitude. See FIXM 4.2. Currently, UTM only allows meters with no immediate plans to allow other options.""" + + +class TimeFormat(str, Enum): + RFC3339 = "RFC3339" + + +class Time(ImplicitDict): + value: StringBasedDateTime + """RFC3339-formatted time/date string. The time zone must be 'Z'.""" + + format: TimeFormat = TimeFormat.RFC3339 + + +class HorizontalAccuracy(str, Enum): + """This is the NACp enumeration from ADS-B, plus 1m for a more complete range for UAs. + + `HAUnknown`: Unknown horizontal accuracy + + `HA10NMPlus`: > 10NM (18.52km) + + `HA10NM`: < 10NM (18.52km) + + `HA4NM`: < 4NM (7.408km) + + `HA2NM`: < 2NM (3.704km) + + `HA1NM`: < 1NM (1852m) + + `HA05NM`: < 0.5NM (926m) + + `HA03NM`: < 0.3NM (555.6m) + + `HA01NM`: < 0.1NM (185.2m) + + `HA005NM`: < 0.05NM (92.6m) + + `HA30m`: < 30m + + `HA10m`: < 10m + + `HA3m`: < 3m + + `HA1m`: < 1m + """ + + HAUnknown = "HAUnknown" + HA10NMPlus = "HA10NMPlus" + HA10NM = "HA10NM" + HA4NM = "HA4NM" + HA2NM = "HA2NM" + HA1NM = "HA1NM" + HA05NM = "HA05NM" + HA03NM = "HA03NM" + HA01NM = "HA01NM" + HA005NM = "HA005NM" + HA30m = "HA30m" + HA10m = "HA10m" + HA3m = "HA3m" + HA1m = "HA1m" + + +class VerticalAccuracy(str, Enum): + """This is the GVA enumeration from ADS-B, plus some finer values for UAs. + + `VAUnknown`: Unknown vertical accuracy + + `VA150mPlus`: > 150m + + `VA150m`: < 150m + + `VA45m`: < 45m + + `VA25m`: < 25m + + `VA10m`: < 10m + + `VA3m`: < 3m + + `VA1m`: < 1m + """ + + VAUnknown = "VAUnknown" + VA150mPlus = "VA150mPlus" + VA150m = "VA150m" + VA45m = "VA45m" + VA25m = "VA25m" + VA10m = "VA10m" + VA3m = "VA3m" + VA1m = "VA1m" + + +class OperationalStatus(str, Enum): + """Indicates operational status of associated aircraft. + * `Undeclared`: The system does not support acquisition of knowledge about the status of the aircraft. + * `Ground`: The aircraft is reporting status but is not airborne. + * `Airborne`: The aircraft is, or should be considered as, being airborne. + * `Emergency`: The aircraft is reporting an emergency. + * `Unknown`: The system supports acquisition of knowledge about the status of the aircraft, but the status cannot currently be determined. + """ + + Undeclared = "Undeclared" + Ground = "Ground" + Airborne = "Airborne" + Emergency = "Emergency" + Unknown = "Unknown" + + +class FunctionalState(str, Enum): + """Functional state of the user's UAS associated with this flight plan. + + - `Nominal`: The user or UAS reports or implies that it is performing nominally, or has not indicated + `OffNominal` or `Contingent`. + + - `OffNominal`: The user or UAS reports or implies that it is temporarily not performing nominally, but + may expect to be able to recover to normal operation. + + - `Contingent`: The user or UAS reports or implies that it is not performing nominally and may be unable + to recover to normal operation. + + - `NotSpecified`: The UAS status is not currently available or known (for instance, if the flight is + planned in the future and the UAS that will be flying has not yet connected to the system). + """ + + Nominal = "Nominal" + OffNominal = "OffNominal" + Contingent = "Contingent" + NotSpecified = "NotSpecified" + + +class SpeedAccuracy(str, Enum): + """This is the same enumeration scale and values from ADS-B NACv. + + `SAUnknown`: Unknown speed accuracy + + `SA10mpsPlus`: > 10 m/s + + `SA10mps`: < 10 m/s + + `SA3mps`: < 3 m/s + + `SA1mps`: < 1 m/s + + `SA03mps`: < 0.3 m/s + """ + + SAUnknown = "SAUnknown" + SA10mpsPlus = "SA10mpsPlus" + SA10mps = "SA10mps" + SA3mps = "SA3mps" + SA1mps = "SA1mps" + SA03mps = "SA03mps" + + Priority = int """Ordinal priority of the operational intent, as defined in ASTM F3548-21.""" @@ -296,14 +530,6 @@ class RPAS26FlightDetails(ImplicitDict): """Operator number.""" -Longitude = float -"""Degrees of longitude east of the Prime Meridian, with reference to the WGS84 ellipsoid.""" - - -Latitude = float -"""Degrees of latitude north of the equator, with reference to the WGS84 ellipsoid.""" - - class RadiusUnits(str, Enum): """FIXM-compatible units. Only meters ("M") are acceptable for UTM.""" @@ -318,41 +544,6 @@ class Radius(ImplicitDict): """FIXM-compatible units. Only meters ("M") are acceptable for UTM.""" -class AltitudeReference(str, Enum): - """A code indicating the reference for a vertical distance. See AIXM 5.1 and FIXM 4.2.0.""" - - W84 = "W84" - SFC = "SFC" - - -class AltitudeUnits(str, Enum): - """The reference quantities used to express the value of altitude. See FIXM 4.2. Currently, UTM only allows meters with no immediate plans to allow other options.""" - - M = "M" - - -class Altitude(ImplicitDict): - value: float - """The numeric value of the altitude. Note that min and max values are added as a sanity check. As use cases evolve and more options are made available in terms of units of measure or reference systems, these bounds may be re-evaluated.""" - - reference: AltitudeReference - """A code indicating the reference for a vertical distance. See AIXM 5.1 and FIXM 4.2.0.""" - - units: AltitudeUnits = AltitudeUnits.M - """The reference quantities used to express the value of altitude. See FIXM 4.2. Currently, UTM only allows meters with no immediate plans to allow other options.""" - - -class TimeFormat(str, Enum): - RFC3339 = "RFC3339" - - -class Time(ImplicitDict): - value: StringBasedDateTime - """RFC3339-formatted time/date string. The time zone must be 'Z'.""" - - format: TimeFormat = TimeFormat.RFC3339 - - UserNotificationConflicts = str """Conflict status as indicated in the notification. - `Unknown`: Notification doesn't contain information regarding conflicts. @@ -374,6 +565,9 @@ class UserNotification(ImplicitDict): observed_at: Time """Time at which the virtual user observed the notification.""" + message: str | None + """Message presented to the user, description of notification, or other means of helping identify the nature of the notification, for the purpose of increased readability of test reports.""" + conflicts: UserNotificationConflicts | None = "Unknown" """Conflict status as indicated in the notification. - `Unknown`: Notification doesn't contain information regarding conflicts. @@ -390,6 +584,48 @@ class QueryUserNotificationsResponse(ImplicitDict): """List of applicable observed user notifications.""" +class UASInformation(ImplicitDict): + """Information about a UAS that may be provided in flight planning scenarios.""" + + aircraft_type: UAType | None + """Aircraft type of the injected test flight.""" + + serial_number: str | None = "" + """This is generally expressed in the CTA-2063-A Serial Number format.""" + + registration_numbers: list[UASRegistrationNumber] | None = [] + """For each relevant authority with which this UAS is registered, the number/identifier assigned to this UAS.""" + + eu_classification: UAClassificationEU | None + """EU classification of aircraft.""" + + +class LatLngPoint(ImplicitDict): + """Point on the earth's surface.""" + + lng: Longitude + + lat: Latitude + + +class AircraftPosition(ImplicitDict): + """Reported or actual position of an aircraft at a particular time.""" + + location: LatLngPoint | None + + altitudes: list[Altitude] | None + """The single vertical location of the aircraft, potentially reported relative to multiple datums.""" + + accuracy_h: HorizontalAccuracy | None + """Horizontal error that may be be present in this reported position.""" + + accuracy_v: VerticalAccuracy | None + """Vertical error that may be present in this reported position.""" + + pressure_altitude: float | None = 0.0 + """The uncorrected altitude (based on reference standard 29.92 inHg, 1013.25 mb) provides a reference for algorithms that utilize "altitude deltas" between aircraft. This value is provided in meters.""" + + class ASTMF354821OpIntentInformation(ImplicitDict): """Information provided about a flight plan that is necessary for ASTM F3548-21.""" @@ -442,12 +678,12 @@ class FlightAuthorisationData(ImplicitDict): """ -class LatLngPoint(ImplicitDict): - """Point on the earth's surface.""" +class Circle(ImplicitDict): + """A circular area on the surface of the earth.""" - lng: Longitude + center: LatLngPoint | None - lat: Latitude + radius: Radius | None class Polygon(ImplicitDict): @@ -456,12 +692,51 @@ class Polygon(ImplicitDict): vertices: list[LatLngPoint] -class Circle(ImplicitDict): - """A circular area on the surface of the earth.""" +class OperatorInformation(ImplicitDict): + """Information about the operator that may be provided in flight planning scenarios.""" - center: LatLngPoint | None + registration_numbers: list[OperatorRegistrationNumber] | None + """Registration numbers for the remote pilot or operator.""" - radius: Radius | None + location: LatLngPoint | None + """Location of operator.""" + + altitude: Altitude | None + """Altitude of operator.""" + + +class AircraftState(ImplicitDict): + """State of an aircraft for the purposes of simulating the execution of a flight plan.""" + + id: str + """Unique identifier for this aircraft state/telemetry. The content of an AircraftState with a given ID must not change over time. Therefore, if a USS has already queued an aircraft state with this ID as telemetry to be delivered, this state may be ignored.""" + + timestamp: Time + """Time at which this state is valid. This is equivalent to the time of sensor measurement, so the USS's primary system under test should not be aware of this state until after this time.""" + + timestamp_accuracy: float | None = 0.0 + """Declaration of timestamp accuracy, which is the one-sided width of the 95%-confidence interval around `timestamp` for the true time of applicability for any of the data fields.""" + + position: AircraftPosition | None + + operational_status: OperationalStatus | None + + uas_state: FunctionalState | None + """State of the user's UAS associated with this flight plan as reported by the operator. If the UAS reports its own state, that report will be reflected here. If the operator reports the UAS state, that report will be reflected in the BasicFlightPlanInformation. + If a system accepts UAS state reports from both the operator and UAS, it is possible the reported state may differ between those two sources. + """ + + track: float | None = 0.0 + """Direction of flight expressed as a "True North-based" ground track angle. This value is provided in degrees East of North. A value of 360 indicates that the true value is unavailable.""" + + speed: float | None = 0.0 + """Ground speed of flight in meters per second.""" + + speed_accuracy: SpeedAccuracy | None + """Accuracy of horizontal ground speed.""" + + vertical_speed: float | None = 0.0 + """Geodetic vertical speed upward. Units of meters per second.""" class Volume3D(ImplicitDict): @@ -480,6 +755,13 @@ class Volume3D(ImplicitDict): """Maximum bounding altitude of this volume. Must be greater than altitude_lower, if specified.""" +class FlightTelemetry(ImplicitDict): + """When this information is present and the USS supports telemetry ingestion for a flight, the USS receiving this information should enqueue these telemetry reports to be delivered to the system, as if they were coming from the user, at (or soon after) the specified times.""" + + states: list[AircraftState] | None = [] + """The set of telemetry data that should be injected into the system (as if reported by the user or the user's system) at the appropriate times (and not before) for this flight.""" + + class Volume4D(ImplicitDict): """Contiguous block of geographic spacetime.""" @@ -504,20 +786,9 @@ class BasicFlightPlanInformation(ImplicitDict): `Closed`: The user is no longer using, or planning to use, the flight plan. """ - uas_state: BasicFlightPlanInformationUasState - """State of the user's UAS associated with this flight plan. - - - `Nominal`: The user or UAS reports or implies that it is performing nominally, or has not indicated - `OffNominal` or `Contingent`. - - - `OffNominal`: The user or UAS reports or implies that it is temporarily not conforming to its intent, - but may expect to be able to recover to normal operation. - - - `Contingent`: The user or UAS reports or implies that it is not conforming to its intent and may be - unable to recover to normal operation. - - - `NotSpecified`: The UAS status is not currently available or known (for instance, if the flight is - planned in the future and the UAS that will be flying has not yet connected to the system). + uas_state: FunctionalState | None + """State of the user's UAS associated with this flight plan as reported by the operator. If the UAS reports its own state, that report will be reflected in telemetry. If the operator reports the UAS state, that report will be reflected here. + If a system accepts UAS state reports from both the operator and UAS, it is possible the reported state may differ between those two sources. """ area: list[Volume4D] | None = [] @@ -525,6 +796,14 @@ class BasicFlightPlanInformation(ImplicitDict): This means, for instance, that an ASTM F3548-21 operational intent supporting this flight must have volumes that are a superset of this area. If the operational intent did not cover this entire area, then all of the intended flight would not be covered by the operational intent (for at least part of the flight, the operator intends to fly outside the operational intent). """ + description: str | None = "" + """Free-text field that enables the operator to describe the purpose of a flight, if so desired.""" + + utm_id: str | None = "" + """A UTM-provided universally unique ID traceable to a non-obfuscated ID that acts as a "session id" to protect exposure of operationally sensitive information.""" + + specific_session_id: SpecificSessionID | None + class ClearAreaRequest(ImplicitDict): request_id: str @@ -539,6 +818,18 @@ class FlightPlan(ImplicitDict): basic_information: BasicFlightPlanInformation + uas: UASInformation | None + + operator: OperatorInformation | None + + telemetry: FlightTelemetry | None + """Telemetry for the flight (see FlightTelemetry definition). + + If/when the associated flight is canceled or closed, any telemetry not yet delivered to the system should be dequeued and discarded. + + When a FlightPlan is modified, queued telemetry should be overridden by the modification. So, if a FlightPlan that previously contained telemetry has a modification that specifies no telemetry, all queued-but-not-sent AircraftStates should be dequeued and discarded. If a FlightPlan modification does not contain the `id`s of one or more previously-specified AircraftStates for the associated flight, those AircraftStates should be dequeued and discarded. If a FlightPlan modification contains additional `id`s not previously present, those AircraftStates should be enqueued for delivery. A FlightPlan modification should never change the data of a queued AircraftState with a particular ID; if it does, this is an invalid request. Any attempt to created, modify, or delete an already-sent AircraftState, or an AircraftState that should have already been sent, should be ignored. + """ + astm_f3548_21: ASTMF354821OpIntentInformation | None uspace_flight_authorisation: FlightAuthorisationData | None @@ -562,6 +853,23 @@ class UpsertFlightPlanRequest(ImplicitDict): """ID uniquely identifying the upsertion request. If additional requests are received with the same request_id, the response from the first request should be returned, or an error indicated.""" +class UpsertFlightPlanResponse(ImplicitDict): + planning_result: PlanningActivityResult + """The result of the flight plan creation or update attempt by the emulated user. If any option other than `Completed` is specified, the `notes` field should be populated with the reason for the unsuccessful outcome.""" + + notes: str | None + """Human-readable explanation of the observed result. This explanation may be made available to a human reviewing the test results, and ideally should explain why an undesirable result was obtained. For instance, if the injection attempt Failed, then these notes may indicate that the attempt failed because the DSS indicated 400 to a valid request (perhaps also including the valid request as proof).""" + + flight_plan_status: FlightPlanStatus + """The status of the user's flight plan following the flight planning activity.""" + + as_planned: FlightPlan | None + """The flight plan information, as it was actually planned in the system. When the USS modifies any of the requested information (e.g., changing serial number, updating telemetry, or not injecting telemetry), this field should contain all those modifications. If this field is not populated, the USS is indicating the requested flight information was injected with no modifications.""" + + includes_advisories: AdvisoryInclusion | None + """Nature of advisories included in the response to the user regarding their attempt to perform this flight planning activity.""" + + class OperationID(str, Enum): GetStatus = "GetStatus" ClearArea = "ClearArea" diff --git a/src/uas_standards/interuss/automated_testing/rid/v1/injection.py b/src/uas_standards/interuss/automated_testing/rid/v1/injection.py index b104098..40b910a 100644 --- a/src/uas_standards/interuss/automated_testing/rid/v1/injection.py +++ b/src/uas_standards/interuss/automated_testing/rid/v1/injection.py @@ -1,4 +1,4 @@ -"""Data types and operations from Remote ID Test Data Injection 0.5.0 OpenAPI""" +"""Data types and operations from Remote ID Test Data Injection 0.5.1 OpenAPI""" # This file is autogenerated; do not modify manually! @@ -10,7 +10,7 @@ from uas_standards.utils import Operation -API_VERSION = "0.5.0" +API_VERSION = "0.5.1" """Version of Remote ID Test Data Injection OpenAPI specification from which the objects in this package were generated.""" RIDFlightID = str @@ -387,10 +387,10 @@ class RIDFlightDetails(ImplicitDict): auth_data: RIDAuthData | None serial_number: str | None - """Can be specified when no registration ID exists and required by law in a region. This is expressed in the ANSI/CTA-2063-A Physical Serial Number format.""" + """This field is DEPRECATED and will be removed in a future version; use uas_id.serial_number instead. Can be specified when no registration ID exists and required by law in a region. This is expressed in the ANSI/CTA-2063-A Physical Serial Number format.""" registration_number: str | None - """If a CAA provides a method of registering UAS, this number is provided by the CAA or its authorized representative. Required when required by law in a region.""" + """This field is DEPRECATED and will be removed in a future version; use uas_id.registration_number instead. If a CAA provides a method of registering UAS, this number is provided by the CAA or its authorized representative. Required when required by law in a region.""" uas_id: UASID | None diff --git a/tools/openapi_conversion/flattening.py b/tools/openapi_conversion/flattening.py index c9bdbb4..1b0da2e 100644 --- a/tools/openapi_conversion/flattening.py +++ b/tools/openapi_conversion/flattening.py @@ -111,6 +111,7 @@ def _add_object_from_path_and_schema( varpath = path.split("/") varpath = varpath[1:] varname = varpath[-1] + filename = os.path.abspath(filename) if varname in additional_components: # A component by this name has already been added to the flattened schema if additional_components[varname].included_by != filename: