Implement appearance and current outfit services (#65)
This commit is contained in:
87
tools/check_milestone_09_issue_65.py
Normal file
87
tools/check_milestone_09_issue_65.py
Normal file
@@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Audit issue 65's wearable, attachment, COF, and policy boundary."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
import re
|
||||
|
||||
import generate_api_shims
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
APPEARANCE = ROOT / "crates" / "libremetaverse" / "src" / "appearance_manager.rs"
|
||||
COF = ROOT / "crates" / "libremetaverse" / "src" / "current_outfit.rs"
|
||||
CLIENT = ROOT / "crates" / "libremetaverse" / "src" / "client_core.rs"
|
||||
COMPAT = ROOT / "tests" / "compat" / "tests"
|
||||
LINK_TESTS = ROOT / "crates" / "libremetaverse" / "src" / "batch_link_internal_semantics.rs"
|
||||
DOC = ROOT / "docs" / "appearance.md"
|
||||
STUB_RE = re.compile(r"\b(?:not_implemented|unimplemented_api)\b|\b(?:todo|unimplemented)!\s*\(")
|
||||
|
||||
REQUIRED_TYPES = {
|
||||
"T:LibreMetaverse.AppearanceManager",
|
||||
"T:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy",
|
||||
"T:LibreMetaverse.Appearance.CurrentOutfitFolder",
|
||||
}
|
||||
|
||||
REQUIRED_MEMBERS = {
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.AddToOutfitAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Boolean,System.Threading.CancellationToken)",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.AttachAsync(LibreMetaverse.InventoryItem,LibreMetaverse.AttachmentPoint,System.Boolean,System.Threading.CancellationToken)",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.DetachAsync(LibreMetaverse.InventoryItem,System.Threading.CancellationToken)",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.GetCurrentOutfitLinksAsync(System.Threading.CancellationToken)",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.GetWornAtAsync(LibreMetaverse.WearableType,System.Threading.CancellationToken)",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.ReplaceOutfitAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)",
|
||||
"M:LibreMetaverse.AppearanceManager.Attach(LibreMetaverse.InventoryItem,LibreMetaverse.AttachmentPoint,System.Boolean)",
|
||||
"M:LibreMetaverse.AppearanceManager.GetAttachmentsByAttachmentPointAsync(System.Threading.CancellationToken)",
|
||||
"M:LibreMetaverse.AppearanceManager.GetFolderWearablesAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)",
|
||||
"M:LibreMetaverse.AppearanceManager.SendOutfitToCurrentSimulatorAsync(System.Threading.CancellationToken)",
|
||||
}
|
||||
|
||||
|
||||
def require_markers(path: Path, markers: tuple[str, ...]) -> None:
|
||||
text = path.read_text()
|
||||
missing = [marker for marker in markers if marker not in text]
|
||||
if missing:
|
||||
raise SystemExit(f"{path.name}: audit evidence missing: " + ", ".join(missing))
|
||||
|
||||
|
||||
def main() -> None:
|
||||
native = set(generate_api_shims.NATIVE_TYPES) | set(generate_api_shims.NATIVE_DECLARATIONS)
|
||||
missing_types = sorted(REQUIRED_TYPES - native)
|
||||
if missing_types:
|
||||
raise SystemExit("issue 65 native types missing: " + ", ".join(missing_types))
|
||||
missing_members = sorted(REQUIRED_MEMBERS - set(generate_api_shims.NATIVE_MEMBER_BODIES))
|
||||
if missing_members:
|
||||
raise SystemExit("issue 65 native members missing: " + ", ".join(missing_members))
|
||||
for source in (APPEARANCE, COF):
|
||||
if STUB_RE.search(source.read_text()):
|
||||
raise SystemExit(f"issue 65 owned Rust stubs remain in {source.name}")
|
||||
|
||||
require_markers(APPEARANCE, (
|
||||
"MAX_WEARABLE_LAYERS", "MAX_FOLDER_TRAVERSAL",
|
||||
"AgentIsNowWearing", "RezSingleAttachmentFromInv",
|
||||
"DetachAttachmentIntoInv", "permissions.everyone_mask",
|
||||
"native_attachments_at", "emit_with",
|
||||
"attachment_packet_and_replacement_state_preserve_inventory_fields",
|
||||
"wearable_layers_are_bounded_and_bodyparts_replace_by_slot",
|
||||
))
|
||||
require_markers(COF, (
|
||||
"MAX_CLOTHING_LAYERS", "MAX_ANCESTRY_DEPTH", "shadow_links",
|
||||
"tokio::sync::Semaphore", "token.cancelled()", "snapshot()",
|
||||
"create_links", "remove_links", "native_resolve_inventory_link",
|
||||
"failed_replace_keeps_old_shadow_state_and_records_compensation",
|
||||
"attach_creates_cof_link_before_network_execution",
|
||||
"attachment_replace_removes_displaced_link_after_new_attachment",
|
||||
"cancelled_operation_does_not_reach_backend",
|
||||
))
|
||||
require_markers(CLIENT, ("native_appearance", "native_set_appearance"))
|
||||
require_markers(COMPAT / "current_outfit_folder_semantics.rs", ("parity-case", "get_current_outfit_links"))
|
||||
require_markers(COMPAT / "current_outfit_policy_semantics.rs", ("parity-case", "report_item_change"))
|
||||
require_markers(COMPAT / "appearance_semantics.rs", ("wearable_type_to_asset_type", "last_update_received_cof_version"))
|
||||
require_markers(LINK_TESTS, ("get_cof_link_description", "clothing_wearable"))
|
||||
require_markers(DOC, ("60", "256", "create replacement links before removing old links", "no state or subscriber lock", "compensation"))
|
||||
print("issue 65 audit: native wearable/attachment state, transactional COF links, policy snapshots, cancellation, documentation, and focused fake/compatibility evidence are present")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -291,6 +291,9 @@ NATIVE_TYPES = {
|
||||
# hand-written, while its fixed public methods remain generator-audited.
|
||||
NATIVE_DECLARATIONS = {
|
||||
"T:LibreMetaverse.AgentManager": "crate::agent_manager::AgentManager",
|
||||
"T:LibreMetaverse.AppearanceManager": "crate::appearance_manager::AppearanceManager",
|
||||
"T:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy": "crate::current_outfit::CompositeCurrentOutfitPolicy",
|
||||
"T:LibreMetaverse.Appearance.CurrentOutfitFolder": "crate::current_outfit::CurrentOutfitFolder",
|
||||
"T:LibreMetaverse.GridClient": "crate::client_core::GridClient",
|
||||
"T:LibreMetaverse.InventoryManager": "crate::inventory_manager::InventoryManager",
|
||||
"T:LibreMetaverse.InventoryAISClient": "crate::inventory_ais::InventoryAISClient",
|
||||
@@ -302,6 +305,146 @@ NATIVE_DECLARATIONS = {
|
||||
}
|
||||
|
||||
NATIVE_MEMBER_BODIES = {
|
||||
"M:LibreMetaverse.NameValue.#ctor(System.String,LibreMetaverse.NameValue.ValueType,LibreMetaverse.NameValue.ClassType,LibreMetaverse.NameValue.SendtoType,System.Object)":
|
||||
"Ok(crate::NameValue { class_: class_type, name, sendto: sendto_type, type_: value_type, value: Some(value) })",
|
||||
"M:LibreMetaverse.Primitive.#ctor":
|
||||
"Ok(crate::current_outfit::primitive_defaults())",
|
||||
"M:LibreMetaverse.Appearance.ICurrentOutfitPolicy.CanAttach(LibreMetaverse.InventoryItem)":
|
||||
"crate::current_outfit::default_policy_decision(item)",
|
||||
"M:LibreMetaverse.Appearance.ICurrentOutfitPolicy.CanDetach(LibreMetaverse.InventoryItem)":
|
||||
"crate::current_outfit::default_policy_decision(item)",
|
||||
"M:LibreMetaverse.Appearance.ICurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken)":
|
||||
"crate::current_outfit::default_policy_report(added_items, removed_items, cancellation_token)",
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.#ctor":
|
||||
"crate::current_outfit::CompositeCurrentOutfitPolicy::native_new()",
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.AddPolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy)":
|
||||
"self.native_add_policy(policy_to_add)",
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.CanAttach(LibreMetaverse.InventoryItem)":
|
||||
"self.native_can_attach(item)",
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.CanDetach(LibreMetaverse.InventoryItem)":
|
||||
"self.native_can_detach(item)",
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.RemovePolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy)":
|
||||
"self.native_remove_policy(policy_to_remove)",
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken)":
|
||||
"self.native_report_item_change(added_items, removed_items, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.#ctor(LibreMetaverse.GridClient)":
|
||||
"crate::current_outfit::CurrentOutfitFolder::native_new(client)",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.AddPolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy)":
|
||||
"self.native_add_policy(policy_to_add)",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.AddToOutfitAsync(LibreMetaverse.InventoryItem,System.Boolean,System.Threading.CancellationToken)":
|
||||
"self.native_add_to_outfit(vec![item], replace, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.AddToOutfitAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Boolean,System.Threading.CancellationToken)":
|
||||
"self.native_add_to_outfit(requested_items_to_add, replace, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.AttachAsync(LibreMetaverse.InventoryItem,LibreMetaverse.AttachmentPoint,System.Boolean,System.Threading.CancellationToken)":
|
||||
"self.native_attach(item, point, replace, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.CanAttachItemAsync(LibreMetaverse.InventoryItem,System.Threading.CancellationToken)":
|
||||
"self.native_can_attach_item(item, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.CanDetachItemAsync(LibreMetaverse.InventoryItem,System.Threading.CancellationToken)":
|
||||
"self.native_can_detach_item(item, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.DetachAsync(LibreMetaverse.InventoryItem,System.Threading.CancellationToken)":
|
||||
"self.native_detach(item, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.Dispose":
|
||||
"self.native_dispose()",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.FetchParentAsync(LibreMetaverse.InventoryBase,System.Threading.CancellationToken)":
|
||||
"self.native_fetch_parent(item, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.GetAttachmentItemID(LibreMetaverse.Primitive)":
|
||||
"crate::current_outfit::CurrentOutfitFolder::native_get_attachment_item_id(prim)",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.GetCurrentOutfitLinksAsync(System.Threading.CancellationToken)":
|
||||
"self.native_get_current_outfit_links(cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.GetWornAtAsync(LibreMetaverse.WearableType,System.Threading.CancellationToken)":
|
||||
"self.native_get_worn_at(type_, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.IsObjectDescendentOfAsync(LibreMetaverse.InventoryBase,LibreMetaverse.UUID,System.Threading.CancellationToken)":
|
||||
"self.native_is_object_descendent_of(item, parent_id, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.RemoveFromOutfitAsync(LibreMetaverse.InventoryItem,System.Threading.CancellationToken)":
|
||||
"self.native_remove_from_outfit(vec![item], cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.RemoveFromOutfitAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken)":
|
||||
"self.native_remove_from_outfit(requested_items_to_remove, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.RemovePolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy)":
|
||||
"self.native_remove_policy(policy_to_remove)",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.ReplaceOutfitAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)":
|
||||
"self.native_replace_outfit(new_outfit_folder_id, cancellation_token).await",
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.ResolveInventoryLink(LibreMetaverse.InventoryItem)":
|
||||
"self.native_resolve_inventory_link(item_link)",
|
||||
"P:LibreMetaverse.Appearance.CurrentOutfitFolder.COF":
|
||||
"self.native_cof()",
|
||||
"P:LibreMetaverse.Appearance.CurrentOutfitFolder.COF#set":
|
||||
"self.native_set_cof(value)",
|
||||
"P:LibreMetaverse.Appearance.CurrentOutfitFolder.MaxClothingLayers":
|
||||
"crate::current_outfit::MAX_CLOTHING_LAYERS",
|
||||
"M:LibreMetaverse.AppearanceManager.#ctor(LibreMetaverse.GridClient)":
|
||||
"crate::appearance_manager::AppearanceManager::native_new(client)",
|
||||
"E:LibreMetaverse.AppearanceManager.AgentWearablesReply":
|
||||
"self.native_subscribe_agent_wearables_reply(handler)",
|
||||
"E:LibreMetaverse.AppearanceManager.AppearanceSet":
|
||||
"self.native_subscribe_appearance_set(handler)",
|
||||
"M:LibreMetaverse.AppearanceManager.AddAttachments(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Boolean,System.Boolean)":
|
||||
"self.native_add_attachments(attachments, remove_existing_first, replace.unwrap_or(false))",
|
||||
"M:LibreMetaverse.AppearanceManager.AddToOutfit(LibreMetaverse.InventoryItem,System.Boolean)":
|
||||
"self.native_add_to_outfit(vec![wearable_item], replace.unwrap_or(false))",
|
||||
"M:LibreMetaverse.AppearanceManager.AddToOutfit(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Boolean)":
|
||||
"self.native_add_to_outfit(wearable_items, replace.unwrap_or(false))",
|
||||
"M:LibreMetaverse.AppearanceManager.Attach(LibreMetaverse.InventoryItem,LibreMetaverse.AttachmentPoint,System.Boolean)":
|
||||
"self.native_attach(item, attach_point, replace.unwrap_or(false))",
|
||||
"M:LibreMetaverse.AppearanceManager.Attach(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.String,LibreMetaverse.Permissions,System.UInt32,LibreMetaverse.AttachmentPoint,System.Boolean)":
|
||||
"self.native_attach_fields(item_id, owner_id, name, description, perms, item_flags, attach_point, replace.unwrap_or(false))",
|
||||
"M:LibreMetaverse.AppearanceManager.Detach(LibreMetaverse.InventoryItem)":
|
||||
"self.native_detach(item.base.uuid())",
|
||||
"M:LibreMetaverse.AppearanceManager.Detach(LibreMetaverse.UUID)":
|
||||
"self.native_detach(item_id)",
|
||||
"M:LibreMetaverse.AppearanceManager.Dispose":
|
||||
"self.native_dispose()",
|
||||
"M:LibreMetaverse.AppearanceManager.GetAttachments":
|
||||
"self.native_get_attachments()",
|
||||
"M:LibreMetaverse.AppearanceManager.GetAttachmentsByAttachmentPointAsync(System.Threading.CancellationToken)":
|
||||
"self.native_get_attachments_by_point(cancellation_token).await",
|
||||
"M:LibreMetaverse.AppearanceManager.GetAttachmentsByInventoryItem":
|
||||
"self.native_get_attachments_by_item()",
|
||||
"M:LibreMetaverse.AppearanceManager.GetAttachmentsByItemId":
|
||||
"self.native_get_attachments_by_id()",
|
||||
"M:LibreMetaverse.AppearanceManager.GetCurrentOutfitFolderAsync(System.Threading.CancellationToken)":
|
||||
"self.native_get_current_outfit_folder(cancellation_token).await",
|
||||
"M:LibreMetaverse.AppearanceManager.GetFolderWearablesAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)":
|
||||
"self.native_get_folder_wearables(folder, cancellation_token).await",
|
||||
"M:LibreMetaverse.AppearanceManager.GetWearableAssets(LibreMetaverse.WearableType)":
|
||||
"self.native_get_wearable_assets(type_)",
|
||||
"M:LibreMetaverse.AppearanceManager.GetWearables":
|
||||
"self.native_get_wearables()",
|
||||
"M:LibreMetaverse.AppearanceManager.GetWearablesByType":
|
||||
"self.native_get_wearables_by_type()",
|
||||
"M:LibreMetaverse.AppearanceManager.IsItemWorn(LibreMetaverse.InventoryItem)":
|
||||
"self.native_is_item_worn(item.base.uuid())",
|
||||
"M:LibreMetaverse.AppearanceManager.IsItemWorn(LibreMetaverse.UUID)":
|
||||
"Ok(self.native_is_item_worn(item_id)? != libremetaverse_types::WearableType::Invalid)",
|
||||
"M:LibreMetaverse.AppearanceManager.RemoveFromOutfit(LibreMetaverse.InventoryItem)":
|
||||
"self.native_remove_from_outfit(vec![wearable_item])",
|
||||
"M:LibreMetaverse.AppearanceManager.RemoveFromOutfit(System.Collections.Generic.List{LibreMetaverse.InventoryItem})":
|
||||
"self.native_remove_from_outfit(wearable_items)",
|
||||
"M:LibreMetaverse.AppearanceManager.ReplaceOutfitAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem})":
|
||||
"self.native_replace_outfit(wearable_items, false).await",
|
||||
"M:LibreMetaverse.AppearanceManager.ReplaceOutfitAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Boolean)":
|
||||
"self.native_replace_outfit(wearable_items, safe).await",
|
||||
"M:LibreMetaverse.AppearanceManager.RequestAgentWornAsync(System.Threading.CancellationToken)":
|
||||
"self.native_request_agent_worn(cancellation_token).await",
|
||||
"M:LibreMetaverse.AppearanceManager.SendOutfitToCurrentSimulatorAsync(System.Threading.CancellationToken)":
|
||||
"self.native_send_outfit(cancellation_token).await",
|
||||
"M:LibreMetaverse.AppearanceManager.UpdateLastReceivedCOFVersion(System.Int32)":
|
||||
"self.native_update_cof_version(cof_version)",
|
||||
"M:LibreMetaverse.AppearanceManager.WearOutfitAsync(System.Collections.Generic.List{LibreMetaverse.InventoryBase},System.Boolean)":
|
||||
"self.native_wear_outfit(wearables, replace_items).await",
|
||||
"M:LibreMetaverse.AppearanceManager.WearableTypeToAssetType(LibreMetaverse.WearableType)":
|
||||
"Ok(crate::appearance_manager::wearable_type_to_asset_type(type_))",
|
||||
"M:LibreMetaverse.AppearanceManager.isItemAttached(LibreMetaverse.InventoryItem)":
|
||||
"Ok(self.native_is_item_attached(item.base.uuid()))",
|
||||
"M:LibreMetaverse.AppearanceManager.isItemAttached(LibreMetaverse.UUID)":
|
||||
"Ok(self.native_is_item_attached(key))",
|
||||
"P:LibreMetaverse.AppearanceManager.LastUpdateReceivedCOFVersion":
|
||||
"self.native_last_cof_version()",
|
||||
"P:LibreMetaverse.AppearanceManager.ManagerBusy":
|
||||
"self.native_manager_busy()",
|
||||
"P:LibreMetaverse.GridClient.Appearance":
|
||||
"self.native_appearance().unwrap_or_else(|_| panic!(\"failed to construct AppearanceManager\"))",
|
||||
"P:LibreMetaverse.GridClient.Appearance#set":
|
||||
"self.native_set_appearance(value)",
|
||||
"M:LibreMetaverse.Avatar.AvatarProperties.FromOSD(LibreMetaverse.StructuredData.OSD)":
|
||||
"crate::agent_messages::avatar_properties_from_osd(o)",
|
||||
"M:LibreMetaverse.Avatar.AvatarProperties.GetOSD":
|
||||
@@ -1892,6 +2035,7 @@ PRIVATE_LAYOUTS = {
|
||||
}
|
||||
VALUE_DERIVES = {
|
||||
"T:LibreMetaverse.AgentSettings": "Clone, Debug, Eq, PartialEq",
|
||||
"T:LibreMetaverse.AppearanceManager.WearableData": "Clone, Debug",
|
||||
"T:LibreMetaverse.AssetCacheSettings": "Clone, Debug, Eq, PartialEq",
|
||||
"T:LibreMetaverse.BuddyListEntry": "Clone, Debug, Eq, PartialEq",
|
||||
"T:LibreMetaverse.ConnectionSettings": "Clone, Eq, PartialEq",
|
||||
@@ -2390,6 +2534,8 @@ def render_type(item: dict, type_row: dict, member_rows: dict[str, dict[str, str
|
||||
# of receiving an invalid empty generated impl.
|
||||
if f"T:{base}" in NATIVE_TYPES:
|
||||
continue
|
||||
if item["doc_id"] in NATIVE_DECLARATIONS:
|
||||
continue
|
||||
if item["doc_id"] == "T:LibreMetaverse.GridClient" and base == "LibreMetaverse.IGridClient":
|
||||
continue
|
||||
mapped_arguments = [mapper.type(argument, None, set(names)) for argument in arguments]
|
||||
|
||||
@@ -989,6 +989,7 @@ def validate_generated_shims() -> None:
|
||||
"crate::asset_manager::",
|
||||
"crate::asset_material::",
|
||||
"crate::asset_models::",
|
||||
"crate::appearance_manager::",
|
||||
"crate::byte_order::",
|
||||
"crate::attention_catalog::",
|
||||
"crate::binary::",
|
||||
@@ -1000,8 +1001,10 @@ def validate_generated_shims() -> None:
|
||||
"crate::inventory::",
|
||||
"crate::inventory_ais::",
|
||||
"crate::inventory_manager::",
|
||||
"crate::current_outfit::",
|
||||
"crate::message_codec::",
|
||||
"crate::message_decoder::",
|
||||
"crate::NameValue {",
|
||||
"crate::object_material::",
|
||||
"crate::notation::",
|
||||
"crate::packet_catalog::",
|
||||
@@ -1020,8 +1023,16 @@ def validate_generated_shims() -> None:
|
||||
if uses_standardized_or_native_path:
|
||||
continue
|
||||
if FAKE_BODY.search(body):
|
||||
raise ValueError(f"generated shim returns a plausible fallback: {path.relative_to(ROOT)}")
|
||||
raise ValueError(f"generated shim function does not use the standardized failure: {path.relative_to(ROOT)}")
|
||||
excerpt = " ".join(body.strip().split())[:160]
|
||||
raise ValueError(
|
||||
"generated shim returns a plausible fallback: "
|
||||
f"{path.relative_to(ROOT)}: {excerpt}"
|
||||
)
|
||||
excerpt = " ".join(body.strip().split())[:160]
|
||||
raise ValueError(
|
||||
"generated shim function does not use the standardized failure: "
|
||||
f"{path.relative_to(ROOT)}: {excerpt}"
|
||||
)
|
||||
|
||||
|
||||
def build_type_rows(catalog: dict) -> tuple[list[dict[str, str]], dict[str, str]]:
|
||||
|
||||
Reference in New Issue
Block a user