Best Python code snippet using fMBT_python
__init__.py
Source:__init__.py  
1# coding=utf-82# --------------------------------------------------------------------------3# Copyright (c) Microsoft Corporation. All rights reserved.4# Licensed under the MIT License. See License.txt in the project root for license information.5# Code generated by Microsoft (R) AutoRest Code Generator.6# Changes may cause incorrect behavior and will be lost if the code is regenerated.7# --------------------------------------------------------------------------8try:9    from ._models_py3 import A2AAddDisksInput10    from ._models_py3 import A2AApplyRecoveryPointInput11    from ._models_py3 import A2AContainerCreationInput12    from ._models_py3 import A2AContainerMappingInput13    from ._models_py3 import A2ACreateProtectionIntentInput14    from ._models_py3 import A2ACrossClusterMigrationApplyRecoveryPointInput15    from ._models_py3 import A2ACrossClusterMigrationContainerCreationInput16    from ._models_py3 import A2ACrossClusterMigrationEnableProtectionInput17    from ._models_py3 import A2ACrossClusterMigrationPolicyCreationInput18    from ._models_py3 import A2ACrossClusterMigrationReplicationDetails19    from ._models_py3 import A2AEnableProtectionInput20    from ._models_py3 import A2AEventDetails21    from ._models_py3 import A2APolicyCreationInput22    from ._models_py3 import A2APolicyDetails23    from ._models_py3 import A2AProtectedDiskDetails24    from ._models_py3 import A2AProtectedManagedDiskDetails25    from ._models_py3 import A2AProtectionContainerMappingDetails26    from ._models_py3 import A2AProtectionIntentDiskInputDetails27    from ._models_py3 import A2AProtectionIntentManagedDiskInputDetails28    from ._models_py3 import A2ARecoveryPointDetails29    from ._models_py3 import A2ARemoveDisksInput30    from ._models_py3 import A2AReplicationDetails31    from ._models_py3 import A2AReplicationIntentDetails32    from ._models_py3 import A2AReprotectInput33    from ._models_py3 import A2ASwitchProtectionInput34    from ._models_py3 import A2ATestFailoverInput35    from ._models_py3 import A2AUnplannedFailoverInput36    from ._models_py3 import A2AUnprotectedDiskDetails37    from ._models_py3 import A2AUpdateContainerMappingInput38    from ._models_py3 import A2AUpdateReplicationProtectedItemInput39    from ._models_py3 import A2AVmDiskInputDetails40    from ._models_py3 import A2AVmManagedDiskInputDetails41    from ._models_py3 import A2AVmManagedDiskUpdateDetails42    from ._models_py3 import A2AZoneDetails43    from ._models_py3 import ASRTask44    from ._models_py3 import AddDisksInput45    from ._models_py3 import AddDisksInputProperties46    from ._models_py3 import AddDisksProviderSpecificInput47    from ._models_py3 import AddRecoveryServicesProviderInput48    from ._models_py3 import AddRecoveryServicesProviderInputProperties49    from ._models_py3 import AddVCenterRequest50    from ._models_py3 import AddVCenterRequestProperties51    from ._models_py3 import AgentDetails52    from ._models_py3 import AgentDiskDetails53    from ._models_py3 import Alert54    from ._models_py3 import AlertCollection55    from ._models_py3 import AlertProperties56    from ._models_py3 import ApplyRecoveryPointInput57    from ._models_py3 import ApplyRecoveryPointInputProperties58    from ._models_py3 import ApplyRecoveryPointProviderSpecificInput59    from ._models_py3 import AsrJobDetails60    from ._models_py3 import AutomationRunbookTaskDetails61    from ._models_py3 import AzureFabricCreationInput62    from ._models_py3 import AzureFabricSpecificDetails63    from ._models_py3 import AzureToAzureCreateNetworkMappingInput64    from ._models_py3 import AzureToAzureNetworkMappingSettings65    from ._models_py3 import AzureToAzureUpdateNetworkMappingInput66    from ._models_py3 import AzureToAzureVmSyncedConfigDetails67    from ._models_py3 import AzureVmDiskDetails68    from ._models_py3 import ComputeSizeErrorDetails69    from ._models_py3 import ConfigurationSettings70    from ._models_py3 import ConfigureAlertRequest71    from ._models_py3 import ConfigureAlertRequestProperties72    from ._models_py3 import ConsistencyCheckTaskDetails73    from ._models_py3 import CreateNetworkMappingInput74    from ._models_py3 import CreateNetworkMappingInputProperties75    from ._models_py3 import CreatePolicyInput76    from ._models_py3 import CreatePolicyInputProperties77    from ._models_py3 import CreateProtectionContainerInput78    from ._models_py3 import CreateProtectionContainerInputProperties79    from ._models_py3 import CreateProtectionContainerMappingInput80    from ._models_py3 import CreateProtectionContainerMappingInputProperties81    from ._models_py3 import CreateProtectionIntentInput82    from ._models_py3 import CreateProtectionIntentProperties83    from ._models_py3 import CreateProtectionIntentProviderSpecificDetails84    from ._models_py3 import CreateRecoveryPlanInput85    from ._models_py3 import CreateRecoveryPlanInputProperties86    from ._models_py3 import CurrentJobDetails87    from ._models_py3 import CurrentScenarioDetails88    from ._models_py3 import DataStore89    from ._models_py3 import DisableProtectionInput90    from ._models_py3 import DisableProtectionInputProperties91    from ._models_py3 import DisableProtectionProviderSpecificInput92    from ._models_py3 import DiscoverProtectableItemRequest93    from ._models_py3 import DiscoverProtectableItemRequestProperties94    from ._models_py3 import DiskDetails95    from ._models_py3 import DiskEncryptionInfo96    from ._models_py3 import DiskEncryptionKeyInfo97    from ._models_py3 import DiskVolumeDetails98    from ._models_py3 import Display99    from ._models_py3 import DraDetails100    from ._models_py3 import EnableMigrationInput101    from ._models_py3 import EnableMigrationInputProperties102    from ._models_py3 import EnableMigrationProviderSpecificInput103    from ._models_py3 import EnableProtectionInput104    from ._models_py3 import EnableProtectionInputProperties105    from ._models_py3 import EnableProtectionProviderSpecificInput106    from ._models_py3 import EncryptionDetails107    from ._models_py3 import Event108    from ._models_py3 import EventCollection109    from ._models_py3 import EventProperties110    from ._models_py3 import EventProviderSpecificDetails111    from ._models_py3 import EventQueryParameter112    from ._models_py3 import EventSpecificDetails113    from ._models_py3 import ExistingProtectionProfile114    from ._models_py3 import ExistingRecoveryAvailabilitySet115    from ._models_py3 import ExistingRecoveryProximityPlacementGroup116    from ._models_py3 import ExistingRecoveryResourceGroup117    from ._models_py3 import ExistingRecoveryVirtualNetwork118    from ._models_py3 import ExistingStorageAccount119    from ._models_py3 import ExportJobDetails120    from ._models_py3 import Fabric121    from ._models_py3 import FabricCollection122    from ._models_py3 import FabricCreationInput123    from ._models_py3 import FabricCreationInputProperties124    from ._models_py3 import FabricProperties125    from ._models_py3 import FabricQueryParameter126    from ._models_py3 import FabricReplicationGroupTaskDetails127    from ._models_py3 import FabricSpecificCreateNetworkMappingInput128    from ._models_py3 import FabricSpecificCreationInput129    from ._models_py3 import FabricSpecificDetails130    from ._models_py3 import FabricSpecificUpdateNetworkMappingInput131    from ._models_py3 import FailoverJobDetails132    from ._models_py3 import FailoverProcessServerRequest133    from ._models_py3 import FailoverProcessServerRequestProperties134    from ._models_py3 import FailoverReplicationProtectedItemDetails135    from ._models_py3 import GroupTaskDetails136    from ._models_py3 import HealthError137    from ._models_py3 import HealthErrorSummary138    from ._models_py3 import HyperVHostDetails139    from ._models_py3 import HyperVReplica2012EventDetails140    from ._models_py3 import HyperVReplica2012R2EventDetails141    from ._models_py3 import HyperVReplicaAzureApplyRecoveryPointInput142    from ._models_py3 import HyperVReplicaAzureDiskInputDetails143    from ._models_py3 import HyperVReplicaAzureEnableProtectionInput144    from ._models_py3 import HyperVReplicaAzureEventDetails145    from ._models_py3 import HyperVReplicaAzureFailbackProviderInput146    from ._models_py3 import HyperVReplicaAzureManagedDiskDetails147    from ._models_py3 import HyperVReplicaAzurePlannedFailoverProviderInput148    from ._models_py3 import HyperVReplicaAzurePolicyDetails149    from ._models_py3 import HyperVReplicaAzurePolicyInput150    from ._models_py3 import HyperVReplicaAzureReplicationDetails151    from ._models_py3 import HyperVReplicaAzureReprotectInput152    from ._models_py3 import HyperVReplicaAzureTestFailoverInput153    from ._models_py3 import HyperVReplicaAzureUnplannedFailoverInput154    from ._models_py3 import HyperVReplicaAzureUpdateReplicationProtectedItemInput155    from ._models_py3 import HyperVReplicaBaseEventDetails156    from ._models_py3 import HyperVReplicaBasePolicyDetails157    from ._models_py3 import HyperVReplicaBaseReplicationDetails158    from ._models_py3 import HyperVReplicaBluePolicyDetails159    from ._models_py3 import HyperVReplicaBluePolicyInput160    from ._models_py3 import HyperVReplicaBlueReplicationDetails161    from ._models_py3 import HyperVReplicaPolicyDetails162    from ._models_py3 import HyperVReplicaPolicyInput163    from ._models_py3 import HyperVReplicaReplicationDetails164    from ._models_py3 import HyperVSiteDetails165    from ._models_py3 import HyperVVirtualMachineDetails166    from ._models_py3 import IPConfigDetails167    from ._models_py3 import IPConfigInputDetails168    from ._models_py3 import IdentityProviderDetails169    from ._models_py3 import IdentityProviderInput170    from ._models_py3 import InMageAgentDetails171    from ._models_py3 import InMageAzureV2ApplyRecoveryPointInput172    from ._models_py3 import InMageAzureV2DiskInputDetails173    from ._models_py3 import InMageAzureV2EnableProtectionInput174    from ._models_py3 import InMageAzureV2EventDetails175    from ._models_py3 import InMageAzureV2ManagedDiskDetails176    from ._models_py3 import InMageAzureV2PolicyDetails177    from ._models_py3 import InMageAzureV2PolicyInput178    from ._models_py3 import InMageAzureV2ProtectedDiskDetails179    from ._models_py3 import InMageAzureV2RecoveryPointDetails180    from ._models_py3 import InMageAzureV2ReplicationDetails181    from ._models_py3 import InMageAzureV2ReprotectInput182    from ._models_py3 import InMageAzureV2TestFailoverInput183    from ._models_py3 import InMageAzureV2UnplannedFailoverInput184    from ._models_py3 import InMageAzureV2UpdateReplicationProtectedItemInput185    from ._models_py3 import InMageBasePolicyDetails186    from ._models_py3 import InMageDisableProtectionProviderSpecificInput187    from ._models_py3 import InMageDiskDetails188    from ._models_py3 import InMageDiskExclusionInput189    from ._models_py3 import InMageDiskSignatureExclusionOptions190    from ._models_py3 import InMageEnableProtectionInput191    from ._models_py3 import InMagePolicyDetails192    from ._models_py3 import InMagePolicyInput193    from ._models_py3 import InMageProtectedDiskDetails194    from ._models_py3 import InMageRcmAgentUpgradeBlockingErrorDetails195    from ._models_py3 import InMageRcmApplyRecoveryPointInput196    from ._models_py3 import InMageRcmDiscoveredProtectedVmDetails197    from ._models_py3 import InMageRcmDiskInput198    from ._models_py3 import InMageRcmDisksDefaultInput199    from ._models_py3 import InMageRcmEnableProtectionInput200    from ._models_py3 import InMageRcmEventDetails201    from ._models_py3 import InMageRcmFabricCreationInput202    from ._models_py3 import InMageRcmFabricSpecificDetails203    from ._models_py3 import InMageRcmFailbackDiscoveredProtectedVmDetails204    from ._models_py3 import InMageRcmFailbackEventDetails205    from ._models_py3 import InMageRcmFailbackMobilityAgentDetails206    from ._models_py3 import InMageRcmFailbackNicDetails207    from ._models_py3 import InMageRcmFailbackPlannedFailoverProviderInput208    from ._models_py3 import InMageRcmFailbackPolicyCreationInput209    from ._models_py3 import InMageRcmFailbackPolicyDetails210    from ._models_py3 import InMageRcmFailbackProtectedDiskDetails211    from ._models_py3 import InMageRcmFailbackReplicationDetails212    from ._models_py3 import InMageRcmFailbackReprotectInput213    from ._models_py3 import InMageRcmFailbackSyncDetails214    from ._models_py3 import InMageRcmLastAgentUpgradeErrorDetails215    from ._models_py3 import InMageRcmMobilityAgentDetails216    from ._models_py3 import InMageRcmNicDetails217    from ._models_py3 import InMageRcmNicInput218    from ._models_py3 import InMageRcmPolicyCreationInput219    from ._models_py3 import InMageRcmPolicyDetails220    from ._models_py3 import InMageRcmProtectedDiskDetails221    from ._models_py3 import InMageRcmProtectionContainerMappingDetails222    from ._models_py3 import InMageRcmRecoveryPointDetails223    from ._models_py3 import InMageRcmReplicationDetails224    from ._models_py3 import InMageRcmReprotectInput225    from ._models_py3 import InMageRcmSyncDetails226    from ._models_py3 import InMageRcmTestFailoverInput227    from ._models_py3 import InMageRcmUnplannedFailoverInput228    from ._models_py3 import InMageRcmUpdateApplianceForReplicationProtectedItemInput229    from ._models_py3 import InMageRcmUpdateContainerMappingInput230    from ._models_py3 import InMageRcmUpdateReplicationProtectedItemInput231    from ._models_py3 import InMageReplicationDetails232    from ._models_py3 import InMageReprotectInput233    from ._models_py3 import InMageTestFailoverInput234    from ._models_py3 import InMageUnplannedFailoverInput235    from ._models_py3 import InMageVolumeExclusionOptions236    from ._models_py3 import InconsistentVmDetails237    from ._models_py3 import InitialReplicationDetails238    from ._models_py3 import InlineWorkflowTaskDetails239    from ._models_py3 import InnerHealthError240    from ._models_py3 import InputEndpoint241    from ._models_py3 import Job242    from ._models_py3 import JobCollection243    from ._models_py3 import JobDetails244    from ._models_py3 import JobEntity245    from ._models_py3 import JobErrorDetails246    from ._models_py3 import JobProperties247    from ._models_py3 import JobQueryParameter248    from ._models_py3 import JobStatusEventDetails249    from ._models_py3 import JobTaskDetails250    from ._models_py3 import KeyEncryptionKeyInfo251    from ._models_py3 import LogicalNetwork252    from ._models_py3 import LogicalNetworkCollection253    from ._models_py3 import LogicalNetworkProperties254    from ._models_py3 import ManualActionTaskDetails255    from ._models_py3 import MarsAgentDetails256    from ._models_py3 import MasterTargetServer257    from ._models_py3 import MigrateInput258    from ._models_py3 import MigrateInputProperties259    from ._models_py3 import MigrateProviderSpecificInput260    from ._models_py3 import MigrationItem261    from ._models_py3 import MigrationItemCollection262    from ._models_py3 import MigrationItemProperties263    from ._models_py3 import MigrationItemsQueryParameter264    from ._models_py3 import MigrationProviderSpecificSettings265    from ._models_py3 import MigrationRecoveryPoint266    from ._models_py3 import MigrationRecoveryPointCollection267    from ._models_py3 import MigrationRecoveryPointProperties268    from ._models_py3 import MobilityServiceUpdate269    from ._models_py3 import Network270    from ._models_py3 import NetworkCollection271    from ._models_py3 import NetworkMapping272    from ._models_py3 import NetworkMappingCollection273    from ._models_py3 import NetworkMappingFabricSpecificSettings274    from ._models_py3 import NetworkMappingProperties275    from ._models_py3 import NetworkProperties276    from ._models_py3 import NewProtectionProfile277    from ._models_py3 import NewRecoveryVirtualNetwork278    from ._models_py3 import OSDetails279    from ._models_py3 import OSDiskDetails280    from ._models_py3 import OSVersionWrapper281    from ._models_py3 import OperationsDiscovery282    from ._models_py3 import OperationsDiscoveryCollection283    from ._models_py3 import PlannedFailoverInput284    from ._models_py3 import PlannedFailoverInputProperties285    from ._models_py3 import PlannedFailoverProviderSpecificFailoverInput286    from ._models_py3 import Policy287    from ._models_py3 import PolicyCollection288    from ._models_py3 import PolicyProperties289    from ._models_py3 import PolicyProviderSpecificDetails290    from ._models_py3 import PolicyProviderSpecificInput291    from ._models_py3 import ProcessServer292    from ._models_py3 import ProcessServerDetails293    from ._models_py3 import ProtectableItem294    from ._models_py3 import ProtectableItemCollection295    from ._models_py3 import ProtectableItemProperties296    from ._models_py3 import ProtectableItemQueryParameter297    from ._models_py3 import ProtectedItemsQueryParameter298    from ._models_py3 import ProtectionContainer299    from ._models_py3 import ProtectionContainerCollection300    from ._models_py3 import ProtectionContainerFabricSpecificDetails301    from ._models_py3 import ProtectionContainerMapping302    from ._models_py3 import ProtectionContainerMappingCollection303    from ._models_py3 import ProtectionContainerMappingProperties304    from ._models_py3 import ProtectionContainerMappingProviderSpecificDetails305    from ._models_py3 import ProtectionContainerProperties306    from ._models_py3 import ProtectionProfileCustomDetails307    from ._models_py3 import ProviderError308    from ._models_py3 import ProviderSpecificRecoveryPointDetails309    from ._models_py3 import PushInstallerDetails310    from ._models_py3 import RcmProxyDetails311    from ._models_py3 import RecoveryAvailabilitySetCustomDetails312    from ._models_py3 import RecoveryPlan313    from ._models_py3 import RecoveryPlanA2ADetails314    from ._models_py3 import RecoveryPlanA2AFailoverInput315    from ._models_py3 import RecoveryPlanA2AInput316    from ._models_py3 import RecoveryPlanAction317    from ._models_py3 import RecoveryPlanActionDetails318    from ._models_py3 import RecoveryPlanAutomationRunbookActionDetails319    from ._models_py3 import RecoveryPlanCollection320    from ._models_py3 import RecoveryPlanGroup321    from ._models_py3 import RecoveryPlanGroupTaskDetails322    from ._models_py3 import RecoveryPlanHyperVReplicaAzureFailbackInput323    from ._models_py3 import RecoveryPlanHyperVReplicaAzureFailoverInput324    from ._models_py3 import RecoveryPlanInMageAzureV2FailoverInput325    from ._models_py3 import RecoveryPlanInMageFailoverInput326    from ._models_py3 import RecoveryPlanInMageRcmFailbackFailoverInput327    from ._models_py3 import RecoveryPlanInMageRcmFailoverInput328    from ._models_py3 import RecoveryPlanManualActionDetails329    from ._models_py3 import RecoveryPlanPlannedFailoverInput330    from ._models_py3 import RecoveryPlanPlannedFailoverInputProperties331    from ._models_py3 import RecoveryPlanProperties332    from ._models_py3 import RecoveryPlanProtectedItem333    from ._models_py3 import RecoveryPlanProviderSpecificDetails334    from ._models_py3 import RecoveryPlanProviderSpecificFailoverInput335    from ._models_py3 import RecoveryPlanProviderSpecificInput336    from ._models_py3 import RecoveryPlanScriptActionDetails337    from ._models_py3 import RecoveryPlanShutdownGroupTaskDetails338    from ._models_py3 import RecoveryPlanTestFailoverCleanupInput339    from ._models_py3 import RecoveryPlanTestFailoverCleanupInputProperties340    from ._models_py3 import RecoveryPlanTestFailoverInput341    from ._models_py3 import RecoveryPlanTestFailoverInputProperties342    from ._models_py3 import RecoveryPlanUnplannedFailoverInput343    from ._models_py3 import RecoveryPlanUnplannedFailoverInputProperties344    from ._models_py3 import RecoveryPoint345    from ._models_py3 import RecoveryPointCollection346    from ._models_py3 import RecoveryPointProperties347    from ._models_py3 import RecoveryProximityPlacementGroupCustomDetails348    from ._models_py3 import RecoveryResourceGroupCustomDetails349    from ._models_py3 import RecoveryServicesProvider350    from ._models_py3 import RecoveryServicesProviderCollection351    from ._models_py3 import RecoveryServicesProviderProperties352    from ._models_py3 import RecoveryVirtualNetworkCustomDetails353    from ._models_py3 import RemoveDisksInput354    from ._models_py3 import RemoveDisksInputProperties355    from ._models_py3 import RemoveDisksProviderSpecificInput356    from ._models_py3 import RemoveProtectionContainerMappingInput357    from ._models_py3 import RemoveProtectionContainerMappingInputProperties358    from ._models_py3 import RenewCertificateInput359    from ._models_py3 import RenewCertificateInputProperties360    from ._models_py3 import ReplicationAgentDetails361    from ._models_py3 import ReplicationEligibilityResults362    from ._models_py3 import ReplicationEligibilityResultsCollection363    from ._models_py3 import ReplicationEligibilityResultsErrorInfo364    from ._models_py3 import ReplicationEligibilityResultsProperties365    from ._models_py3 import ReplicationGroupDetails366    from ._models_py3 import ReplicationProtectedItem367    from ._models_py3 import ReplicationProtectedItemCollection368    from ._models_py3 import ReplicationProtectedItemProperties369    from ._models_py3 import ReplicationProtectionIntent370    from ._models_py3 import ReplicationProtectionIntentCollection371    from ._models_py3 import ReplicationProtectionIntentProperties372    from ._models_py3 import ReplicationProtectionIntentProviderSpecificSettings373    from ._models_py3 import ReplicationProviderContainerUnmappingInput374    from ._models_py3 import ReplicationProviderSpecificContainerCreationInput375    from ._models_py3 import ReplicationProviderSpecificContainerMappingInput376    from ._models_py3 import ReplicationProviderSpecificSettings377    from ._models_py3 import ReplicationProviderSpecificUpdateContainerMappingInput378    from ._models_py3 import ReprotectAgentDetails379    from ._models_py3 import ResolveHealthError380    from ._models_py3 import ResolveHealthInput381    from ._models_py3 import ResolveHealthInputProperties382    from ._models_py3 import Resource383    from ._models_py3 import ResourceHealthSummary384    from ._models_py3 import ResumeJobParams385    from ._models_py3 import ResumeJobParamsProperties386    from ._models_py3 import ResyncInput387    from ._models_py3 import ResyncInputProperties388    from ._models_py3 import ResyncProviderSpecificInput389    from ._models_py3 import RetentionVolume390    from ._models_py3 import ReverseReplicationInput391    from ._models_py3 import ReverseReplicationInputProperties392    from ._models_py3 import ReverseReplicationProviderSpecificInput393    from ._models_py3 import RoleAssignment394    from ._models_py3 import RunAsAccount395    from ._models_py3 import ScriptActionTaskDetails396    from ._models_py3 import ServiceError397    from ._models_py3 import StorageAccountCustomDetails398    from ._models_py3 import StorageClassification399    from ._models_py3 import StorageClassificationCollection400    from ._models_py3 import StorageClassificationMapping401    from ._models_py3 import StorageClassificationMappingCollection402    from ._models_py3 import StorageClassificationMappingInput403    from ._models_py3 import StorageClassificationMappingProperties404    from ._models_py3 import StorageClassificationProperties405    from ._models_py3 import StorageMappingInputProperties406    from ._models_py3 import Subnet407    from ._models_py3 import SupportedOSDetails408    from ._models_py3 import SupportedOSProperties409    from ._models_py3 import SupportedOSProperty410    from ._models_py3 import SupportedOperatingSystems411    from ._models_py3 import SwitchProtectionInput412    from ._models_py3 import SwitchProtectionInputProperties413    from ._models_py3 import SwitchProtectionJobDetails414    from ._models_py3 import SwitchProtectionProviderSpecificInput415    from ._models_py3 import TargetComputeSize416    from ._models_py3 import TargetComputeSizeCollection417    from ._models_py3 import TargetComputeSizeProperties418    from ._models_py3 import TaskTypeDetails419    from ._models_py3 import TestFailoverCleanupInput420    from ._models_py3 import TestFailoverCleanupInputProperties421    from ._models_py3 import TestFailoverInput422    from ._models_py3 import TestFailoverInputProperties423    from ._models_py3 import TestFailoverJobDetails424    from ._models_py3 import TestFailoverProviderSpecificInput425    from ._models_py3 import TestMigrateCleanupInput426    from ._models_py3 import TestMigrateCleanupInputProperties427    from ._models_py3 import TestMigrateInput428    from ._models_py3 import TestMigrateInputProperties429    from ._models_py3 import TestMigrateProviderSpecificInput430    from ._models_py3 import UnplannedFailoverInput431    from ._models_py3 import UnplannedFailoverInputProperties432    from ._models_py3 import UnplannedFailoverProviderSpecificInput433    from ._models_py3 import UpdateApplianceForReplicationProtectedItemInput434    from ._models_py3 import UpdateApplianceForReplicationProtectedItemInputProperties435    from ._models_py3 import UpdateApplianceForReplicationProtectedItemProviderSpecificInput436    from ._models_py3 import UpdateDiskInput437    from ._models_py3 import UpdateMigrationItemInput438    from ._models_py3 import UpdateMigrationItemInputProperties439    from ._models_py3 import UpdateMigrationItemProviderSpecificInput440    from ._models_py3 import UpdateMobilityServiceRequest441    from ._models_py3 import UpdateMobilityServiceRequestProperties442    from ._models_py3 import UpdateNetworkMappingInput443    from ._models_py3 import UpdateNetworkMappingInputProperties444    from ._models_py3 import UpdatePolicyInput445    from ._models_py3 import UpdatePolicyInputProperties446    from ._models_py3 import UpdateProtectionContainerMappingInput447    from ._models_py3 import UpdateProtectionContainerMappingInputProperties448    from ._models_py3 import UpdateRecoveryPlanInput449    from ._models_py3 import UpdateRecoveryPlanInputProperties450    from ._models_py3 import UpdateReplicationProtectedItemInput451    from ._models_py3 import UpdateReplicationProtectedItemInputProperties452    from ._models_py3 import UpdateReplicationProtectedItemProviderInput453    from ._models_py3 import UpdateVCenterRequest454    from ._models_py3 import UpdateVCenterRequestProperties455    from ._models_py3 import VCenter456    from ._models_py3 import VCenterCollection457    from ._models_py3 import VCenterProperties458    from ._models_py3 import VMNicDetails459    from ._models_py3 import VMNicInputDetails460    from ._models_py3 import VMwareCbtContainerCreationInput461    from ._models_py3 import VMwareCbtContainerMappingInput462    from ._models_py3 import VMwareCbtDiskInput463    from ._models_py3 import VMwareCbtEnableMigrationInput464    from ._models_py3 import VMwareCbtEventDetails465    from ._models_py3 import VMwareCbtMigrateInput466    from ._models_py3 import VMwareCbtMigrationDetails467    from ._models_py3 import VMwareCbtNicDetails468    from ._models_py3 import VMwareCbtNicInput469    from ._models_py3 import VMwareCbtPolicyCreationInput470    from ._models_py3 import VMwareCbtProtectedDiskDetails471    from ._models_py3 import VMwareCbtProtectionContainerMappingDetails472    from ._models_py3 import VMwareCbtResyncInput473    from ._models_py3 import VMwareCbtTestMigrateInput474    from ._models_py3 import VMwareCbtUpdateDiskInput475    from ._models_py3 import VMwareCbtUpdateMigrationItemInput476    from ._models_py3 import VMwareDetails477    from ._models_py3 import VMwareV2FabricCreationInput478    from ._models_py3 import VMwareV2FabricSpecificDetails479    from ._models_py3 import VMwareVirtualMachineDetails480    from ._models_py3 import VaultHealthDetails481    from ._models_py3 import VaultHealthProperties482    from ._models_py3 import VaultSetting483    from ._models_py3 import VaultSettingCollection484    from ._models_py3 import VaultSettingCreationInput485    from ._models_py3 import VaultSettingCreationInputProperties486    from ._models_py3 import VaultSettingProperties487    from ._models_py3 import VersionDetails488    from ._models_py3 import VirtualMachineTaskDetails489    from ._models_py3 import VmNicUpdatesTaskDetails490    from ._models_py3 import VmmDetails491    from ._models_py3 import VmmToAzureCreateNetworkMappingInput492    from ._models_py3 import VmmToAzureNetworkMappingSettings493    from ._models_py3 import VmmToAzureUpdateNetworkMappingInput494    from ._models_py3 import VmmToVmmCreateNetworkMappingInput495    from ._models_py3 import VmmToVmmNetworkMappingSettings496    from ._models_py3 import VmmToVmmUpdateNetworkMappingInput497    from ._models_py3 import VmmVirtualMachineDetails498    from ._models_py3 import VmwareCbtPolicyDetails499except (SyntaxError, ImportError):500    from ._models import A2AAddDisksInput  # type: ignore501    from ._models import A2AApplyRecoveryPointInput  # type: ignore502    from ._models import A2AContainerCreationInput  # type: ignore503    from ._models import A2AContainerMappingInput  # type: ignore504    from ._models import A2ACreateProtectionIntentInput  # type: ignore505    from ._models import A2ACrossClusterMigrationApplyRecoveryPointInput  # type: ignore506    from ._models import A2ACrossClusterMigrationContainerCreationInput  # type: ignore507    from ._models import A2ACrossClusterMigrationEnableProtectionInput  # type: ignore508    from ._models import A2ACrossClusterMigrationPolicyCreationInput  # type: ignore509    from ._models import A2ACrossClusterMigrationReplicationDetails  # type: ignore510    from ._models import A2AEnableProtectionInput  # type: ignore511    from ._models import A2AEventDetails  # type: ignore512    from ._models import A2APolicyCreationInput  # type: ignore513    from ._models import A2APolicyDetails  # type: ignore514    from ._models import A2AProtectedDiskDetails  # type: ignore515    from ._models import A2AProtectedManagedDiskDetails  # type: ignore516    from ._models import A2AProtectionContainerMappingDetails  # type: ignore517    from ._models import A2AProtectionIntentDiskInputDetails  # type: ignore518    from ._models import A2AProtectionIntentManagedDiskInputDetails  # type: ignore519    from ._models import A2ARecoveryPointDetails  # type: ignore520    from ._models import A2ARemoveDisksInput  # type: ignore521    from ._models import A2AReplicationDetails  # type: ignore522    from ._models import A2AReplicationIntentDetails  # type: ignore523    from ._models import A2AReprotectInput  # type: ignore524    from ._models import A2ASwitchProtectionInput  # type: ignore525    from ._models import A2ATestFailoverInput  # type: ignore526    from ._models import A2AUnplannedFailoverInput  # type: ignore527    from ._models import A2AUnprotectedDiskDetails  # type: ignore528    from ._models import A2AUpdateContainerMappingInput  # type: ignore529    from ._models import A2AUpdateReplicationProtectedItemInput  # type: ignore530    from ._models import A2AVmDiskInputDetails  # type: ignore531    from ._models import A2AVmManagedDiskInputDetails  # type: ignore532    from ._models import A2AVmManagedDiskUpdateDetails  # type: ignore533    from ._models import A2AZoneDetails  # type: ignore534    from ._models import ASRTask  # type: ignore535    from ._models import AddDisksInput  # type: ignore536    from ._models import AddDisksInputProperties  # type: ignore537    from ._models import AddDisksProviderSpecificInput  # type: ignore538    from ._models import AddRecoveryServicesProviderInput  # type: ignore539    from ._models import AddRecoveryServicesProviderInputProperties  # type: ignore540    from ._models import AddVCenterRequest  # type: ignore541    from ._models import AddVCenterRequestProperties  # type: ignore542    from ._models import AgentDetails  # type: ignore543    from ._models import AgentDiskDetails  # type: ignore544    from ._models import Alert  # type: ignore545    from ._models import AlertCollection  # type: ignore546    from ._models import AlertProperties  # type: ignore547    from ._models import ApplyRecoveryPointInput  # type: ignore548    from ._models import ApplyRecoveryPointInputProperties  # type: ignore549    from ._models import ApplyRecoveryPointProviderSpecificInput  # type: ignore550    from ._models import AsrJobDetails  # type: ignore551    from ._models import AutomationRunbookTaskDetails  # type: ignore552    from ._models import AzureFabricCreationInput  # type: ignore553    from ._models import AzureFabricSpecificDetails  # type: ignore554    from ._models import AzureToAzureCreateNetworkMappingInput  # type: ignore555    from ._models import AzureToAzureNetworkMappingSettings  # type: ignore556    from ._models import AzureToAzureUpdateNetworkMappingInput  # type: ignore557    from ._models import AzureToAzureVmSyncedConfigDetails  # type: ignore558    from ._models import AzureVmDiskDetails  # type: ignore559    from ._models import ComputeSizeErrorDetails  # type: ignore560    from ._models import ConfigurationSettings  # type: ignore561    from ._models import ConfigureAlertRequest  # type: ignore562    from ._models import ConfigureAlertRequestProperties  # type: ignore563    from ._models import ConsistencyCheckTaskDetails  # type: ignore564    from ._models import CreateNetworkMappingInput  # type: ignore565    from ._models import CreateNetworkMappingInputProperties  # type: ignore566    from ._models import CreatePolicyInput  # type: ignore567    from ._models import CreatePolicyInputProperties  # type: ignore568    from ._models import CreateProtectionContainerInput  # type: ignore569    from ._models import CreateProtectionContainerInputProperties  # type: ignore570    from ._models import CreateProtectionContainerMappingInput  # type: ignore571    from ._models import CreateProtectionContainerMappingInputProperties  # type: ignore572    from ._models import CreateProtectionIntentInput  # type: ignore573    from ._models import CreateProtectionIntentProperties  # type: ignore574    from ._models import CreateProtectionIntentProviderSpecificDetails  # type: ignore575    from ._models import CreateRecoveryPlanInput  # type: ignore576    from ._models import CreateRecoveryPlanInputProperties  # type: ignore577    from ._models import CurrentJobDetails  # type: ignore578    from ._models import CurrentScenarioDetails  # type: ignore579    from ._models import DataStore  # type: ignore580    from ._models import DisableProtectionInput  # type: ignore581    from ._models import DisableProtectionInputProperties  # type: ignore582    from ._models import DisableProtectionProviderSpecificInput  # type: ignore583    from ._models import DiscoverProtectableItemRequest  # type: ignore584    from ._models import DiscoverProtectableItemRequestProperties  # type: ignore585    from ._models import DiskDetails  # type: ignore586    from ._models import DiskEncryptionInfo  # type: ignore587    from ._models import DiskEncryptionKeyInfo  # type: ignore588    from ._models import DiskVolumeDetails  # type: ignore589    from ._models import Display  # type: ignore590    from ._models import DraDetails  # type: ignore591    from ._models import EnableMigrationInput  # type: ignore592    from ._models import EnableMigrationInputProperties  # type: ignore593    from ._models import EnableMigrationProviderSpecificInput  # type: ignore594    from ._models import EnableProtectionInput  # type: ignore595    from ._models import EnableProtectionInputProperties  # type: ignore596    from ._models import EnableProtectionProviderSpecificInput  # type: ignore597    from ._models import EncryptionDetails  # type: ignore598    from ._models import Event  # type: ignore599    from ._models import EventCollection  # type: ignore600    from ._models import EventProperties  # type: ignore601    from ._models import EventProviderSpecificDetails  # type: ignore602    from ._models import EventQueryParameter  # type: ignore603    from ._models import EventSpecificDetails  # type: ignore604    from ._models import ExistingProtectionProfile  # type: ignore605    from ._models import ExistingRecoveryAvailabilitySet  # type: ignore606    from ._models import ExistingRecoveryProximityPlacementGroup  # type: ignore607    from ._models import ExistingRecoveryResourceGroup  # type: ignore608    from ._models import ExistingRecoveryVirtualNetwork  # type: ignore609    from ._models import ExistingStorageAccount  # type: ignore610    from ._models import ExportJobDetails  # type: ignore611    from ._models import Fabric  # type: ignore612    from ._models import FabricCollection  # type: ignore613    from ._models import FabricCreationInput  # type: ignore614    from ._models import FabricCreationInputProperties  # type: ignore615    from ._models import FabricProperties  # type: ignore616    from ._models import FabricQueryParameter  # type: ignore617    from ._models import FabricReplicationGroupTaskDetails  # type: ignore618    from ._models import FabricSpecificCreateNetworkMappingInput  # type: ignore619    from ._models import FabricSpecificCreationInput  # type: ignore620    from ._models import FabricSpecificDetails  # type: ignore621    from ._models import FabricSpecificUpdateNetworkMappingInput  # type: ignore622    from ._models import FailoverJobDetails  # type: ignore623    from ._models import FailoverProcessServerRequest  # type: ignore624    from ._models import FailoverProcessServerRequestProperties  # type: ignore625    from ._models import FailoverReplicationProtectedItemDetails  # type: ignore626    from ._models import GroupTaskDetails  # type: ignore627    from ._models import HealthError  # type: ignore628    from ._models import HealthErrorSummary  # type: ignore629    from ._models import HyperVHostDetails  # type: ignore630    from ._models import HyperVReplica2012EventDetails  # type: ignore631    from ._models import HyperVReplica2012R2EventDetails  # type: ignore632    from ._models import HyperVReplicaAzureApplyRecoveryPointInput  # type: ignore633    from ._models import HyperVReplicaAzureDiskInputDetails  # type: ignore634    from ._models import HyperVReplicaAzureEnableProtectionInput  # type: ignore635    from ._models import HyperVReplicaAzureEventDetails  # type: ignore636    from ._models import HyperVReplicaAzureFailbackProviderInput  # type: ignore637    from ._models import HyperVReplicaAzureManagedDiskDetails  # type: ignore638    from ._models import HyperVReplicaAzurePlannedFailoverProviderInput  # type: ignore639    from ._models import HyperVReplicaAzurePolicyDetails  # type: ignore640    from ._models import HyperVReplicaAzurePolicyInput  # type: ignore641    from ._models import HyperVReplicaAzureReplicationDetails  # type: ignore642    from ._models import HyperVReplicaAzureReprotectInput  # type: ignore643    from ._models import HyperVReplicaAzureTestFailoverInput  # type: ignore644    from ._models import HyperVReplicaAzureUnplannedFailoverInput  # type: ignore645    from ._models import HyperVReplicaAzureUpdateReplicationProtectedItemInput  # type: ignore646    from ._models import HyperVReplicaBaseEventDetails  # type: ignore647    from ._models import HyperVReplicaBasePolicyDetails  # type: ignore648    from ._models import HyperVReplicaBaseReplicationDetails  # type: ignore649    from ._models import HyperVReplicaBluePolicyDetails  # type: ignore650    from ._models import HyperVReplicaBluePolicyInput  # type: ignore651    from ._models import HyperVReplicaBlueReplicationDetails  # type: ignore652    from ._models import HyperVReplicaPolicyDetails  # type: ignore653    from ._models import HyperVReplicaPolicyInput  # type: ignore654    from ._models import HyperVReplicaReplicationDetails  # type: ignore655    from ._models import HyperVSiteDetails  # type: ignore656    from ._models import HyperVVirtualMachineDetails  # type: ignore657    from ._models import IPConfigDetails  # type: ignore658    from ._models import IPConfigInputDetails  # type: ignore659    from ._models import IdentityProviderDetails  # type: ignore660    from ._models import IdentityProviderInput  # type: ignore661    from ._models import InMageAgentDetails  # type: ignore662    from ._models import InMageAzureV2ApplyRecoveryPointInput  # type: ignore663    from ._models import InMageAzureV2DiskInputDetails  # type: ignore664    from ._models import InMageAzureV2EnableProtectionInput  # type: ignore665    from ._models import InMageAzureV2EventDetails  # type: ignore666    from ._models import InMageAzureV2ManagedDiskDetails  # type: ignore667    from ._models import InMageAzureV2PolicyDetails  # type: ignore668    from ._models import InMageAzureV2PolicyInput  # type: ignore669    from ._models import InMageAzureV2ProtectedDiskDetails  # type: ignore670    from ._models import InMageAzureV2RecoveryPointDetails  # type: ignore671    from ._models import InMageAzureV2ReplicationDetails  # type: ignore672    from ._models import InMageAzureV2ReprotectInput  # type: ignore673    from ._models import InMageAzureV2TestFailoverInput  # type: ignore674    from ._models import InMageAzureV2UnplannedFailoverInput  # type: ignore675    from ._models import InMageAzureV2UpdateReplicationProtectedItemInput  # type: ignore676    from ._models import InMageBasePolicyDetails  # type: ignore677    from ._models import InMageDisableProtectionProviderSpecificInput  # type: ignore678    from ._models import InMageDiskDetails  # type: ignore679    from ._models import InMageDiskExclusionInput  # type: ignore680    from ._models import InMageDiskSignatureExclusionOptions  # type: ignore681    from ._models import InMageEnableProtectionInput  # type: ignore682    from ._models import InMagePolicyDetails  # type: ignore683    from ._models import InMagePolicyInput  # type: ignore684    from ._models import InMageProtectedDiskDetails  # type: ignore685    from ._models import InMageRcmAgentUpgradeBlockingErrorDetails  # type: ignore686    from ._models import InMageRcmApplyRecoveryPointInput  # type: ignore687    from ._models import InMageRcmDiscoveredProtectedVmDetails  # type: ignore688    from ._models import InMageRcmDiskInput  # type: ignore689    from ._models import InMageRcmDisksDefaultInput  # type: ignore690    from ._models import InMageRcmEnableProtectionInput  # type: ignore691    from ._models import InMageRcmEventDetails  # type: ignore692    from ._models import InMageRcmFabricCreationInput  # type: ignore693    from ._models import InMageRcmFabricSpecificDetails  # type: ignore694    from ._models import InMageRcmFailbackDiscoveredProtectedVmDetails  # type: ignore695    from ._models import InMageRcmFailbackEventDetails  # type: ignore696    from ._models import InMageRcmFailbackMobilityAgentDetails  # type: ignore697    from ._models import InMageRcmFailbackNicDetails  # type: ignore698    from ._models import InMageRcmFailbackPlannedFailoverProviderInput  # type: ignore699    from ._models import InMageRcmFailbackPolicyCreationInput  # type: ignore700    from ._models import InMageRcmFailbackPolicyDetails  # type: ignore701    from ._models import InMageRcmFailbackProtectedDiskDetails  # type: ignore702    from ._models import InMageRcmFailbackReplicationDetails  # type: ignore703    from ._models import InMageRcmFailbackReprotectInput  # type: ignore704    from ._models import InMageRcmFailbackSyncDetails  # type: ignore705    from ._models import InMageRcmLastAgentUpgradeErrorDetails  # type: ignore706    from ._models import InMageRcmMobilityAgentDetails  # type: ignore707    from ._models import InMageRcmNicDetails  # type: ignore708    from ._models import InMageRcmNicInput  # type: ignore709    from ._models import InMageRcmPolicyCreationInput  # type: ignore710    from ._models import InMageRcmPolicyDetails  # type: ignore711    from ._models import InMageRcmProtectedDiskDetails  # type: ignore712    from ._models import InMageRcmProtectionContainerMappingDetails  # type: ignore713    from ._models import InMageRcmRecoveryPointDetails  # type: ignore714    from ._models import InMageRcmReplicationDetails  # type: ignore715    from ._models import InMageRcmReprotectInput  # type: ignore716    from ._models import InMageRcmSyncDetails  # type: ignore717    from ._models import InMageRcmTestFailoverInput  # type: ignore718    from ._models import InMageRcmUnplannedFailoverInput  # type: ignore719    from ._models import InMageRcmUpdateApplianceForReplicationProtectedItemInput  # type: ignore720    from ._models import InMageRcmUpdateContainerMappingInput  # type: ignore721    from ._models import InMageRcmUpdateReplicationProtectedItemInput  # type: ignore722    from ._models import InMageReplicationDetails  # type: ignore723    from ._models import InMageReprotectInput  # type: ignore724    from ._models import InMageTestFailoverInput  # type: ignore725    from ._models import InMageUnplannedFailoverInput  # type: ignore726    from ._models import InMageVolumeExclusionOptions  # type: ignore727    from ._models import InconsistentVmDetails  # type: ignore728    from ._models import InitialReplicationDetails  # type: ignore729    from ._models import InlineWorkflowTaskDetails  # type: ignore730    from ._models import InnerHealthError  # type: ignore731    from ._models import InputEndpoint  # type: ignore732    from ._models import Job  # type: ignore733    from ._models import JobCollection  # type: ignore734    from ._models import JobDetails  # type: ignore735    from ._models import JobEntity  # type: ignore736    from ._models import JobErrorDetails  # type: ignore737    from ._models import JobProperties  # type: ignore738    from ._models import JobQueryParameter  # type: ignore739    from ._models import JobStatusEventDetails  # type: ignore740    from ._models import JobTaskDetails  # type: ignore741    from ._models import KeyEncryptionKeyInfo  # type: ignore742    from ._models import LogicalNetwork  # type: ignore743    from ._models import LogicalNetworkCollection  # type: ignore744    from ._models import LogicalNetworkProperties  # type: ignore745    from ._models import ManualActionTaskDetails  # type: ignore746    from ._models import MarsAgentDetails  # type: ignore747    from ._models import MasterTargetServer  # type: ignore748    from ._models import MigrateInput  # type: ignore749    from ._models import MigrateInputProperties  # type: ignore750    from ._models import MigrateProviderSpecificInput  # type: ignore751    from ._models import MigrationItem  # type: ignore752    from ._models import MigrationItemCollection  # type: ignore753    from ._models import MigrationItemProperties  # type: ignore754    from ._models import MigrationItemsQueryParameter  # type: ignore755    from ._models import MigrationProviderSpecificSettings  # type: ignore756    from ._models import MigrationRecoveryPoint  # type: ignore757    from ._models import MigrationRecoveryPointCollection  # type: ignore758    from ._models import MigrationRecoveryPointProperties  # type: ignore759    from ._models import MobilityServiceUpdate  # type: ignore760    from ._models import Network  # type: ignore761    from ._models import NetworkCollection  # type: ignore762    from ._models import NetworkMapping  # type: ignore763    from ._models import NetworkMappingCollection  # type: ignore764    from ._models import NetworkMappingFabricSpecificSettings  # type: ignore765    from ._models import NetworkMappingProperties  # type: ignore766    from ._models import NetworkProperties  # type: ignore767    from ._models import NewProtectionProfile  # type: ignore768    from ._models import NewRecoveryVirtualNetwork  # type: ignore769    from ._models import OSDetails  # type: ignore770    from ._models import OSDiskDetails  # type: ignore771    from ._models import OSVersionWrapper  # type: ignore772    from ._models import OperationsDiscovery  # type: ignore773    from ._models import OperationsDiscoveryCollection  # type: ignore774    from ._models import PlannedFailoverInput  # type: ignore775    from ._models import PlannedFailoverInputProperties  # type: ignore776    from ._models import PlannedFailoverProviderSpecificFailoverInput  # type: ignore777    from ._models import Policy  # type: ignore778    from ._models import PolicyCollection  # type: ignore779    from ._models import PolicyProperties  # type: ignore780    from ._models import PolicyProviderSpecificDetails  # type: ignore781    from ._models import PolicyProviderSpecificInput  # type: ignore782    from ._models import ProcessServer  # type: ignore783    from ._models import ProcessServerDetails  # type: ignore784    from ._models import ProtectableItem  # type: ignore785    from ._models import ProtectableItemCollection  # type: ignore786    from ._models import ProtectableItemProperties  # type: ignore787    from ._models import ProtectableItemQueryParameter  # type: ignore788    from ._models import ProtectedItemsQueryParameter  # type: ignore789    from ._models import ProtectionContainer  # type: ignore790    from ._models import ProtectionContainerCollection  # type: ignore791    from ._models import ProtectionContainerFabricSpecificDetails  # type: ignore792    from ._models import ProtectionContainerMapping  # type: ignore793    from ._models import ProtectionContainerMappingCollection  # type: ignore794    from ._models import ProtectionContainerMappingProperties  # type: ignore795    from ._models import ProtectionContainerMappingProviderSpecificDetails  # type: ignore796    from ._models import ProtectionContainerProperties  # type: ignore797    from ._models import ProtectionProfileCustomDetails  # type: ignore798    from ._models import ProviderError  # type: ignore799    from ._models import ProviderSpecificRecoveryPointDetails  # type: ignore800    from ._models import PushInstallerDetails  # type: ignore801    from ._models import RcmProxyDetails  # type: ignore802    from ._models import RecoveryAvailabilitySetCustomDetails  # type: ignore803    from ._models import RecoveryPlan  # type: ignore804    from ._models import RecoveryPlanA2ADetails  # type: ignore805    from ._models import RecoveryPlanA2AFailoverInput  # type: ignore806    from ._models import RecoveryPlanA2AInput  # type: ignore807    from ._models import RecoveryPlanAction  # type: ignore808    from ._models import RecoveryPlanActionDetails  # type: ignore809    from ._models import RecoveryPlanAutomationRunbookActionDetails  # type: ignore810    from ._models import RecoveryPlanCollection  # type: ignore811    from ._models import RecoveryPlanGroup  # type: ignore812    from ._models import RecoveryPlanGroupTaskDetails  # type: ignore813    from ._models import RecoveryPlanHyperVReplicaAzureFailbackInput  # type: ignore814    from ._models import RecoveryPlanHyperVReplicaAzureFailoverInput  # type: ignore815    from ._models import RecoveryPlanInMageAzureV2FailoverInput  # type: ignore816    from ._models import RecoveryPlanInMageFailoverInput  # type: ignore817    from ._models import RecoveryPlanInMageRcmFailbackFailoverInput  # type: ignore818    from ._models import RecoveryPlanInMageRcmFailoverInput  # type: ignore819    from ._models import RecoveryPlanManualActionDetails  # type: ignore820    from ._models import RecoveryPlanPlannedFailoverInput  # type: ignore821    from ._models import RecoveryPlanPlannedFailoverInputProperties  # type: ignore822    from ._models import RecoveryPlanProperties  # type: ignore823    from ._models import RecoveryPlanProtectedItem  # type: ignore824    from ._models import RecoveryPlanProviderSpecificDetails  # type: ignore825    from ._models import RecoveryPlanProviderSpecificFailoverInput  # type: ignore826    from ._models import RecoveryPlanProviderSpecificInput  # type: ignore827    from ._models import RecoveryPlanScriptActionDetails  # type: ignore828    from ._models import RecoveryPlanShutdownGroupTaskDetails  # type: ignore829    from ._models import RecoveryPlanTestFailoverCleanupInput  # type: ignore830    from ._models import RecoveryPlanTestFailoverCleanupInputProperties  # type: ignore831    from ._models import RecoveryPlanTestFailoverInput  # type: ignore832    from ._models import RecoveryPlanTestFailoverInputProperties  # type: ignore833    from ._models import RecoveryPlanUnplannedFailoverInput  # type: ignore834    from ._models import RecoveryPlanUnplannedFailoverInputProperties  # type: ignore835    from ._models import RecoveryPoint  # type: ignore836    from ._models import RecoveryPointCollection  # type: ignore837    from ._models import RecoveryPointProperties  # type: ignore838    from ._models import RecoveryProximityPlacementGroupCustomDetails  # type: ignore839    from ._models import RecoveryResourceGroupCustomDetails  # type: ignore840    from ._models import RecoveryServicesProvider  # type: ignore841    from ._models import RecoveryServicesProviderCollection  # type: ignore842    from ._models import RecoveryServicesProviderProperties  # type: ignore843    from ._models import RecoveryVirtualNetworkCustomDetails  # type: ignore844    from ._models import RemoveDisksInput  # type: ignore845    from ._models import RemoveDisksInputProperties  # type: ignore846    from ._models import RemoveDisksProviderSpecificInput  # type: ignore847    from ._models import RemoveProtectionContainerMappingInput  # type: ignore848    from ._models import RemoveProtectionContainerMappingInputProperties  # type: ignore849    from ._models import RenewCertificateInput  # type: ignore850    from ._models import RenewCertificateInputProperties  # type: ignore851    from ._models import ReplicationAgentDetails  # type: ignore852    from ._models import ReplicationEligibilityResults  # type: ignore853    from ._models import ReplicationEligibilityResultsCollection  # type: ignore854    from ._models import ReplicationEligibilityResultsErrorInfo  # type: ignore855    from ._models import ReplicationEligibilityResultsProperties  # type: ignore856    from ._models import ReplicationGroupDetails  # type: ignore857    from ._models import ReplicationProtectedItem  # type: ignore858    from ._models import ReplicationProtectedItemCollection  # type: ignore859    from ._models import ReplicationProtectedItemProperties  # type: ignore860    from ._models import ReplicationProtectionIntent  # type: ignore861    from ._models import ReplicationProtectionIntentCollection  # type: ignore862    from ._models import ReplicationProtectionIntentProperties  # type: ignore863    from ._models import ReplicationProtectionIntentProviderSpecificSettings  # type: ignore864    from ._models import ReplicationProviderContainerUnmappingInput  # type: ignore865    from ._models import ReplicationProviderSpecificContainerCreationInput  # type: ignore866    from ._models import ReplicationProviderSpecificContainerMappingInput  # type: ignore867    from ._models import ReplicationProviderSpecificSettings  # type: ignore868    from ._models import ReplicationProviderSpecificUpdateContainerMappingInput  # type: ignore869    from ._models import ReprotectAgentDetails  # type: ignore870    from ._models import ResolveHealthError  # type: ignore871    from ._models import ResolveHealthInput  # type: ignore872    from ._models import ResolveHealthInputProperties  # type: ignore873    from ._models import Resource  # type: ignore874    from ._models import ResourceHealthSummary  # type: ignore875    from ._models import ResumeJobParams  # type: ignore876    from ._models import ResumeJobParamsProperties  # type: ignore877    from ._models import ResyncInput  # type: ignore878    from ._models import ResyncInputProperties  # type: ignore879    from ._models import ResyncProviderSpecificInput  # type: ignore880    from ._models import RetentionVolume  # type: ignore881    from ._models import ReverseReplicationInput  # type: ignore882    from ._models import ReverseReplicationInputProperties  # type: ignore883    from ._models import ReverseReplicationProviderSpecificInput  # type: ignore884    from ._models import RoleAssignment  # type: ignore885    from ._models import RunAsAccount  # type: ignore886    from ._models import ScriptActionTaskDetails  # type: ignore887    from ._models import ServiceError  # type: ignore888    from ._models import StorageAccountCustomDetails  # type: ignore889    from ._models import StorageClassification  # type: ignore890    from ._models import StorageClassificationCollection  # type: ignore891    from ._models import StorageClassificationMapping  # type: ignore892    from ._models import StorageClassificationMappingCollection  # type: ignore893    from ._models import StorageClassificationMappingInput  # type: ignore894    from ._models import StorageClassificationMappingProperties  # type: ignore895    from ._models import StorageClassificationProperties  # type: ignore896    from ._models import StorageMappingInputProperties  # type: ignore897    from ._models import Subnet  # type: ignore898    from ._models import SupportedOSDetails  # type: ignore899    from ._models import SupportedOSProperties  # type: ignore900    from ._models import SupportedOSProperty  # type: ignore901    from ._models import SupportedOperatingSystems  # type: ignore902    from ._models import SwitchProtectionInput  # type: ignore903    from ._models import SwitchProtectionInputProperties  # type: ignore904    from ._models import SwitchProtectionJobDetails  # type: ignore905    from ._models import SwitchProtectionProviderSpecificInput  # type: ignore906    from ._models import TargetComputeSize  # type: ignore907    from ._models import TargetComputeSizeCollection  # type: ignore908    from ._models import TargetComputeSizeProperties  # type: ignore909    from ._models import TaskTypeDetails  # type: ignore910    from ._models import TestFailoverCleanupInput  # type: ignore911    from ._models import TestFailoverCleanupInputProperties  # type: ignore912    from ._models import TestFailoverInput  # type: ignore913    from ._models import TestFailoverInputProperties  # type: ignore914    from ._models import TestFailoverJobDetails  # type: ignore915    from ._models import TestFailoverProviderSpecificInput  # type: ignore916    from ._models import TestMigrateCleanupInput  # type: ignore917    from ._models import TestMigrateCleanupInputProperties  # type: ignore918    from ._models import TestMigrateInput  # type: ignore919    from ._models import TestMigrateInputProperties  # type: ignore920    from ._models import TestMigrateProviderSpecificInput  # type: ignore921    from ._models import UnplannedFailoverInput  # type: ignore922    from ._models import UnplannedFailoverInputProperties  # type: ignore923    from ._models import UnplannedFailoverProviderSpecificInput  # type: ignore924    from ._models import UpdateApplianceForReplicationProtectedItemInput  # type: ignore925    from ._models import UpdateApplianceForReplicationProtectedItemInputProperties  # type: ignore926    from ._models import UpdateApplianceForReplicationProtectedItemProviderSpecificInput  # type: ignore927    from ._models import UpdateDiskInput  # type: ignore928    from ._models import UpdateMigrationItemInput  # type: ignore929    from ._models import UpdateMigrationItemInputProperties  # type: ignore930    from ._models import UpdateMigrationItemProviderSpecificInput  # type: ignore931    from ._models import UpdateMobilityServiceRequest  # type: ignore932    from ._models import UpdateMobilityServiceRequestProperties  # type: ignore933    from ._models import UpdateNetworkMappingInput  # type: ignore934    from ._models import UpdateNetworkMappingInputProperties  # type: ignore935    from ._models import UpdatePolicyInput  # type: ignore936    from ._models import UpdatePolicyInputProperties  # type: ignore937    from ._models import UpdateProtectionContainerMappingInput  # type: ignore938    from ._models import UpdateProtectionContainerMappingInputProperties  # type: ignore939    from ._models import UpdateRecoveryPlanInput  # type: ignore940    from ._models import UpdateRecoveryPlanInputProperties  # type: ignore941    from ._models import UpdateReplicationProtectedItemInput  # type: ignore942    from ._models import UpdateReplicationProtectedItemInputProperties  # type: ignore943    from ._models import UpdateReplicationProtectedItemProviderInput  # type: ignore944    from ._models import UpdateVCenterRequest  # type: ignore945    from ._models import UpdateVCenterRequestProperties  # type: ignore946    from ._models import VCenter  # type: ignore947    from ._models import VCenterCollection  # type: ignore948    from ._models import VCenterProperties  # type: ignore949    from ._models import VMNicDetails  # type: ignore950    from ._models import VMNicInputDetails  # type: ignore951    from ._models import VMwareCbtContainerCreationInput  # type: ignore952    from ._models import VMwareCbtContainerMappingInput  # type: ignore953    from ._models import VMwareCbtDiskInput  # type: ignore954    from ._models import VMwareCbtEnableMigrationInput  # type: ignore955    from ._models import VMwareCbtEventDetails  # type: ignore956    from ._models import VMwareCbtMigrateInput  # type: ignore957    from ._models import VMwareCbtMigrationDetails  # type: ignore958    from ._models import VMwareCbtNicDetails  # type: ignore959    from ._models import VMwareCbtNicInput  # type: ignore960    from ._models import VMwareCbtPolicyCreationInput  # type: ignore961    from ._models import VMwareCbtProtectedDiskDetails  # type: ignore962    from ._models import VMwareCbtProtectionContainerMappingDetails  # type: ignore963    from ._models import VMwareCbtResyncInput  # type: ignore964    from ._models import VMwareCbtTestMigrateInput  # type: ignore965    from ._models import VMwareCbtUpdateDiskInput  # type: ignore966    from ._models import VMwareCbtUpdateMigrationItemInput  # type: ignore967    from ._models import VMwareDetails  # type: ignore968    from ._models import VMwareV2FabricCreationInput  # type: ignore969    from ._models import VMwareV2FabricSpecificDetails  # type: ignore970    from ._models import VMwareVirtualMachineDetails  # type: ignore971    from ._models import VaultHealthDetails  # type: ignore972    from ._models import VaultHealthProperties  # type: ignore973    from ._models import VaultSetting  # type: ignore974    from ._models import VaultSettingCollection  # type: ignore975    from ._models import VaultSettingCreationInput  # type: ignore976    from ._models import VaultSettingCreationInputProperties  # type: ignore977    from ._models import VaultSettingProperties  # type: ignore978    from ._models import VersionDetails  # type: ignore979    from ._models import VirtualMachineTaskDetails  # type: ignore980    from ._models import VmNicUpdatesTaskDetails  # type: ignore981    from ._models import VmmDetails  # type: ignore982    from ._models import VmmToAzureCreateNetworkMappingInput  # type: ignore983    from ._models import VmmToAzureNetworkMappingSettings  # type: ignore984    from ._models import VmmToAzureUpdateNetworkMappingInput  # type: ignore985    from ._models import VmmToVmmCreateNetworkMappingInput  # type: ignore986    from ._models import VmmToVmmNetworkMappingSettings  # type: ignore987    from ._models import VmmToVmmUpdateNetworkMappingInput  # type: ignore988    from ._models import VmmVirtualMachineDetails  # type: ignore989    from ._models import VmwareCbtPolicyDetails  # type: ignore990from ._site_recovery_management_client_enums import (991    A2ARecoveryAvailabilityType,992    A2ARpRecoveryPointType,993    AgentAutoUpdateStatus,994    AgentUpgradeBlockedReason,995    AgentVersionStatus,996    AlternateLocationRecoveryOption,997    AutoProtectionOfDataDisk,998    DataSyncStatus,999    DisableProtectionReason,1000    DiskAccountType,1001    DiskReplicationProgressHealth,1002    EthernetAddressType,1003    ExportJobOutputSerializationType,1004    FailoverDeploymentModel,1005    HealthErrorCategory,1006    HealthErrorCustomerResolvability,1007    HyperVReplicaAzureRpRecoveryPointType,1008    InMageRcmFailbackRecoveryPointType,1009    InMageV2RpRecoveryPointType,1010    LicenseType,1011    MigrationItemOperation,1012    MigrationRecoveryPointType,1013    MigrationState,1014    MobilityAgentUpgradeState,1015    MultiVmGroupCreateOption,1016    MultiVmSyncPointOption,1017    PlannedFailoverStatus,1018    PossibleOperationsDirections,1019    PresenceStatus,1020    ProtectionHealth,1021    RcmComponentStatus,1022    RecoveryPlanActionLocation,1023    RecoveryPlanGroupType,1024    RecoveryPlanPointType,1025    RecoveryPointSyncType,1026    RecoveryPointType,1027    ReplicationProtectedItemOperation,1028    ResyncState,1029    RpInMageRecoveryPointType,1030    SetMultiVmSyncStatus,1031    Severity,1032    SourceSiteOperations,1033    SqlServerLicenseType,1034    TestMigrationState,1035    VmEncryptionType,1036    VmReplicationProgressHealth,1037)1038__all__ = [1039    'A2AAddDisksInput',1040    'A2AApplyRecoveryPointInput',1041    'A2AContainerCreationInput',1042    'A2AContainerMappingInput',1043    'A2ACreateProtectionIntentInput',1044    'A2ACrossClusterMigrationApplyRecoveryPointInput',1045    'A2ACrossClusterMigrationContainerCreationInput',1046    'A2ACrossClusterMigrationEnableProtectionInput',1047    'A2ACrossClusterMigrationPolicyCreationInput',1048    'A2ACrossClusterMigrationReplicationDetails',1049    'A2AEnableProtectionInput',1050    'A2AEventDetails',1051    'A2APolicyCreationInput',1052    'A2APolicyDetails',1053    'A2AProtectedDiskDetails',1054    'A2AProtectedManagedDiskDetails',1055    'A2AProtectionContainerMappingDetails',1056    'A2AProtectionIntentDiskInputDetails',1057    'A2AProtectionIntentManagedDiskInputDetails',1058    'A2ARecoveryPointDetails',1059    'A2ARemoveDisksInput',1060    'A2AReplicationDetails',1061    'A2AReplicationIntentDetails',1062    'A2AReprotectInput',1063    'A2ASwitchProtectionInput',1064    'A2ATestFailoverInput',1065    'A2AUnplannedFailoverInput',1066    'A2AUnprotectedDiskDetails',1067    'A2AUpdateContainerMappingInput',1068    'A2AUpdateReplicationProtectedItemInput',1069    'A2AVmDiskInputDetails',1070    'A2AVmManagedDiskInputDetails',1071    'A2AVmManagedDiskUpdateDetails',1072    'A2AZoneDetails',1073    'ASRTask',1074    'AddDisksInput',1075    'AddDisksInputProperties',1076    'AddDisksProviderSpecificInput',1077    'AddRecoveryServicesProviderInput',1078    'AddRecoveryServicesProviderInputProperties',1079    'AddVCenterRequest',1080    'AddVCenterRequestProperties',1081    'AgentDetails',1082    'AgentDiskDetails',1083    'Alert',1084    'AlertCollection',1085    'AlertProperties',1086    'ApplyRecoveryPointInput',1087    'ApplyRecoveryPointInputProperties',1088    'ApplyRecoveryPointProviderSpecificInput',1089    'AsrJobDetails',1090    'AutomationRunbookTaskDetails',1091    'AzureFabricCreationInput',1092    'AzureFabricSpecificDetails',1093    'AzureToAzureCreateNetworkMappingInput',1094    'AzureToAzureNetworkMappingSettings',1095    'AzureToAzureUpdateNetworkMappingInput',1096    'AzureToAzureVmSyncedConfigDetails',1097    'AzureVmDiskDetails',1098    'ComputeSizeErrorDetails',1099    'ConfigurationSettings',1100    'ConfigureAlertRequest',1101    'ConfigureAlertRequestProperties',1102    'ConsistencyCheckTaskDetails',1103    'CreateNetworkMappingInput',1104    'CreateNetworkMappingInputProperties',1105    'CreatePolicyInput',1106    'CreatePolicyInputProperties',1107    'CreateProtectionContainerInput',1108    'CreateProtectionContainerInputProperties',1109    'CreateProtectionContainerMappingInput',1110    'CreateProtectionContainerMappingInputProperties',1111    'CreateProtectionIntentInput',1112    'CreateProtectionIntentProperties',1113    'CreateProtectionIntentProviderSpecificDetails',1114    'CreateRecoveryPlanInput',1115    'CreateRecoveryPlanInputProperties',1116    'CurrentJobDetails',1117    'CurrentScenarioDetails',1118    'DataStore',1119    'DisableProtectionInput',1120    'DisableProtectionInputProperties',1121    'DisableProtectionProviderSpecificInput',1122    'DiscoverProtectableItemRequest',1123    'DiscoverProtectableItemRequestProperties',1124    'DiskDetails',1125    'DiskEncryptionInfo',1126    'DiskEncryptionKeyInfo',1127    'DiskVolumeDetails',1128    'Display',1129    'DraDetails',1130    'EnableMigrationInput',1131    'EnableMigrationInputProperties',1132    'EnableMigrationProviderSpecificInput',1133    'EnableProtectionInput',1134    'EnableProtectionInputProperties',1135    'EnableProtectionProviderSpecificInput',1136    'EncryptionDetails',1137    'Event',1138    'EventCollection',1139    'EventProperties',1140    'EventProviderSpecificDetails',1141    'EventQueryParameter',1142    'EventSpecificDetails',1143    'ExistingProtectionProfile',1144    'ExistingRecoveryAvailabilitySet',1145    'ExistingRecoveryProximityPlacementGroup',1146    'ExistingRecoveryResourceGroup',1147    'ExistingRecoveryVirtualNetwork',1148    'ExistingStorageAccount',1149    'ExportJobDetails',1150    'Fabric',1151    'FabricCollection',1152    'FabricCreationInput',1153    'FabricCreationInputProperties',1154    'FabricProperties',1155    'FabricQueryParameter',1156    'FabricReplicationGroupTaskDetails',1157    'FabricSpecificCreateNetworkMappingInput',1158    'FabricSpecificCreationInput',1159    'FabricSpecificDetails',1160    'FabricSpecificUpdateNetworkMappingInput',1161    'FailoverJobDetails',1162    'FailoverProcessServerRequest',1163    'FailoverProcessServerRequestProperties',1164    'FailoverReplicationProtectedItemDetails',1165    'GroupTaskDetails',1166    'HealthError',1167    'HealthErrorSummary',1168    'HyperVHostDetails',1169    'HyperVReplica2012EventDetails',1170    'HyperVReplica2012R2EventDetails',1171    'HyperVReplicaAzureApplyRecoveryPointInput',1172    'HyperVReplicaAzureDiskInputDetails',1173    'HyperVReplicaAzureEnableProtectionInput',1174    'HyperVReplicaAzureEventDetails',1175    'HyperVReplicaAzureFailbackProviderInput',1176    'HyperVReplicaAzureManagedDiskDetails',1177    'HyperVReplicaAzurePlannedFailoverProviderInput',1178    'HyperVReplicaAzurePolicyDetails',1179    'HyperVReplicaAzurePolicyInput',1180    'HyperVReplicaAzureReplicationDetails',1181    'HyperVReplicaAzureReprotectInput',1182    'HyperVReplicaAzureTestFailoverInput',1183    'HyperVReplicaAzureUnplannedFailoverInput',1184    'HyperVReplicaAzureUpdateReplicationProtectedItemInput',1185    'HyperVReplicaBaseEventDetails',1186    'HyperVReplicaBasePolicyDetails',1187    'HyperVReplicaBaseReplicationDetails',1188    'HyperVReplicaBluePolicyDetails',1189    'HyperVReplicaBluePolicyInput',1190    'HyperVReplicaBlueReplicationDetails',1191    'HyperVReplicaPolicyDetails',1192    'HyperVReplicaPolicyInput',1193    'HyperVReplicaReplicationDetails',1194    'HyperVSiteDetails',1195    'HyperVVirtualMachineDetails',1196    'IPConfigDetails',1197    'IPConfigInputDetails',1198    'IdentityProviderDetails',1199    'IdentityProviderInput',1200    'InMageAgentDetails',1201    'InMageAzureV2ApplyRecoveryPointInput',1202    'InMageAzureV2DiskInputDetails',1203    'InMageAzureV2EnableProtectionInput',1204    'InMageAzureV2EventDetails',1205    'InMageAzureV2ManagedDiskDetails',1206    'InMageAzureV2PolicyDetails',1207    'InMageAzureV2PolicyInput',1208    'InMageAzureV2ProtectedDiskDetails',1209    'InMageAzureV2RecoveryPointDetails',1210    'InMageAzureV2ReplicationDetails',1211    'InMageAzureV2ReprotectInput',1212    'InMageAzureV2TestFailoverInput',1213    'InMageAzureV2UnplannedFailoverInput',1214    'InMageAzureV2UpdateReplicationProtectedItemInput',1215    'InMageBasePolicyDetails',1216    'InMageDisableProtectionProviderSpecificInput',1217    'InMageDiskDetails',1218    'InMageDiskExclusionInput',1219    'InMageDiskSignatureExclusionOptions',1220    'InMageEnableProtectionInput',1221    'InMagePolicyDetails',1222    'InMagePolicyInput',1223    'InMageProtectedDiskDetails',1224    'InMageRcmAgentUpgradeBlockingErrorDetails',1225    'InMageRcmApplyRecoveryPointInput',1226    'InMageRcmDiscoveredProtectedVmDetails',1227    'InMageRcmDiskInput',1228    'InMageRcmDisksDefaultInput',1229    'InMageRcmEnableProtectionInput',1230    'InMageRcmEventDetails',1231    'InMageRcmFabricCreationInput',1232    'InMageRcmFabricSpecificDetails',1233    'InMageRcmFailbackDiscoveredProtectedVmDetails',1234    'InMageRcmFailbackEventDetails',1235    'InMageRcmFailbackMobilityAgentDetails',1236    'InMageRcmFailbackNicDetails',1237    'InMageRcmFailbackPlannedFailoverProviderInput',1238    'InMageRcmFailbackPolicyCreationInput',1239    'InMageRcmFailbackPolicyDetails',1240    'InMageRcmFailbackProtectedDiskDetails',1241    'InMageRcmFailbackReplicationDetails',1242    'InMageRcmFailbackReprotectInput',1243    'InMageRcmFailbackSyncDetails',1244    'InMageRcmLastAgentUpgradeErrorDetails',1245    'InMageRcmMobilityAgentDetails',1246    'InMageRcmNicDetails',1247    'InMageRcmNicInput',1248    'InMageRcmPolicyCreationInput',1249    'InMageRcmPolicyDetails',1250    'InMageRcmProtectedDiskDetails',1251    'InMageRcmProtectionContainerMappingDetails',1252    'InMageRcmRecoveryPointDetails',1253    'InMageRcmReplicationDetails',1254    'InMageRcmReprotectInput',1255    'InMageRcmSyncDetails',1256    'InMageRcmTestFailoverInput',1257    'InMageRcmUnplannedFailoverInput',1258    'InMageRcmUpdateApplianceForReplicationProtectedItemInput',1259    'InMageRcmUpdateContainerMappingInput',1260    'InMageRcmUpdateReplicationProtectedItemInput',1261    'InMageReplicationDetails',1262    'InMageReprotectInput',1263    'InMageTestFailoverInput',1264    'InMageUnplannedFailoverInput',1265    'InMageVolumeExclusionOptions',1266    'InconsistentVmDetails',1267    'InitialReplicationDetails',1268    'InlineWorkflowTaskDetails',1269    'InnerHealthError',1270    'InputEndpoint',1271    'Job',1272    'JobCollection',1273    'JobDetails',1274    'JobEntity',1275    'JobErrorDetails',1276    'JobProperties',1277    'JobQueryParameter',1278    'JobStatusEventDetails',1279    'JobTaskDetails',1280    'KeyEncryptionKeyInfo',1281    'LogicalNetwork',1282    'LogicalNetworkCollection',1283    'LogicalNetworkProperties',1284    'ManualActionTaskDetails',1285    'MarsAgentDetails',1286    'MasterTargetServer',1287    'MigrateInput',1288    'MigrateInputProperties',1289    'MigrateProviderSpecificInput',1290    'MigrationItem',1291    'MigrationItemCollection',1292    'MigrationItemProperties',1293    'MigrationItemsQueryParameter',1294    'MigrationProviderSpecificSettings',1295    'MigrationRecoveryPoint',1296    'MigrationRecoveryPointCollection',1297    'MigrationRecoveryPointProperties',1298    'MobilityServiceUpdate',1299    'Network',1300    'NetworkCollection',1301    'NetworkMapping',1302    'NetworkMappingCollection',1303    'NetworkMappingFabricSpecificSettings',1304    'NetworkMappingProperties',1305    'NetworkProperties',1306    'NewProtectionProfile',1307    'NewRecoveryVirtualNetwork',1308    'OSDetails',1309    'OSDiskDetails',1310    'OSVersionWrapper',1311    'OperationsDiscovery',1312    'OperationsDiscoveryCollection',1313    'PlannedFailoverInput',1314    'PlannedFailoverInputProperties',1315    'PlannedFailoverProviderSpecificFailoverInput',1316    'Policy',1317    'PolicyCollection',1318    'PolicyProperties',1319    'PolicyProviderSpecificDetails',1320    'PolicyProviderSpecificInput',1321    'ProcessServer',1322    'ProcessServerDetails',1323    'ProtectableItem',1324    'ProtectableItemCollection',1325    'ProtectableItemProperties',1326    'ProtectableItemQueryParameter',1327    'ProtectedItemsQueryParameter',1328    'ProtectionContainer',1329    'ProtectionContainerCollection',1330    'ProtectionContainerFabricSpecificDetails',1331    'ProtectionContainerMapping',1332    'ProtectionContainerMappingCollection',1333    'ProtectionContainerMappingProperties',1334    'ProtectionContainerMappingProviderSpecificDetails',1335    'ProtectionContainerProperties',1336    'ProtectionProfileCustomDetails',1337    'ProviderError',1338    'ProviderSpecificRecoveryPointDetails',1339    'PushInstallerDetails',1340    'RcmProxyDetails',1341    'RecoveryAvailabilitySetCustomDetails',1342    'RecoveryPlan',1343    'RecoveryPlanA2ADetails',1344    'RecoveryPlanA2AFailoverInput',1345    'RecoveryPlanA2AInput',1346    'RecoveryPlanAction',1347    'RecoveryPlanActionDetails',1348    'RecoveryPlanAutomationRunbookActionDetails',1349    'RecoveryPlanCollection',1350    'RecoveryPlanGroup',1351    'RecoveryPlanGroupTaskDetails',1352    'RecoveryPlanHyperVReplicaAzureFailbackInput',1353    'RecoveryPlanHyperVReplicaAzureFailoverInput',1354    'RecoveryPlanInMageAzureV2FailoverInput',1355    'RecoveryPlanInMageFailoverInput',1356    'RecoveryPlanInMageRcmFailbackFailoverInput',1357    'RecoveryPlanInMageRcmFailoverInput',1358    'RecoveryPlanManualActionDetails',1359    'RecoveryPlanPlannedFailoverInput',1360    'RecoveryPlanPlannedFailoverInputProperties',1361    'RecoveryPlanProperties',1362    'RecoveryPlanProtectedItem',1363    'RecoveryPlanProviderSpecificDetails',1364    'RecoveryPlanProviderSpecificFailoverInput',1365    'RecoveryPlanProviderSpecificInput',1366    'RecoveryPlanScriptActionDetails',1367    'RecoveryPlanShutdownGroupTaskDetails',1368    'RecoveryPlanTestFailoverCleanupInput',1369    'RecoveryPlanTestFailoverCleanupInputProperties',1370    'RecoveryPlanTestFailoverInput',1371    'RecoveryPlanTestFailoverInputProperties',1372    'RecoveryPlanUnplannedFailoverInput',1373    'RecoveryPlanUnplannedFailoverInputProperties',1374    'RecoveryPoint',1375    'RecoveryPointCollection',1376    'RecoveryPointProperties',1377    'RecoveryProximityPlacementGroupCustomDetails',1378    'RecoveryResourceGroupCustomDetails',1379    'RecoveryServicesProvider',1380    'RecoveryServicesProviderCollection',1381    'RecoveryServicesProviderProperties',1382    'RecoveryVirtualNetworkCustomDetails',1383    'RemoveDisksInput',1384    'RemoveDisksInputProperties',1385    'RemoveDisksProviderSpecificInput',1386    'RemoveProtectionContainerMappingInput',1387    'RemoveProtectionContainerMappingInputProperties',1388    'RenewCertificateInput',1389    'RenewCertificateInputProperties',1390    'ReplicationAgentDetails',1391    'ReplicationEligibilityResults',1392    'ReplicationEligibilityResultsCollection',1393    'ReplicationEligibilityResultsErrorInfo',1394    'ReplicationEligibilityResultsProperties',1395    'ReplicationGroupDetails',1396    'ReplicationProtectedItem',1397    'ReplicationProtectedItemCollection',1398    'ReplicationProtectedItemProperties',1399    'ReplicationProtectionIntent',1400    'ReplicationProtectionIntentCollection',1401    'ReplicationProtectionIntentProperties',1402    'ReplicationProtectionIntentProviderSpecificSettings',1403    'ReplicationProviderContainerUnmappingInput',1404    'ReplicationProviderSpecificContainerCreationInput',1405    'ReplicationProviderSpecificContainerMappingInput',1406    'ReplicationProviderSpecificSettings',1407    'ReplicationProviderSpecificUpdateContainerMappingInput',1408    'ReprotectAgentDetails',1409    'ResolveHealthError',1410    'ResolveHealthInput',1411    'ResolveHealthInputProperties',1412    'Resource',1413    'ResourceHealthSummary',1414    'ResumeJobParams',1415    'ResumeJobParamsProperties',1416    'ResyncInput',1417    'ResyncInputProperties',1418    'ResyncProviderSpecificInput',1419    'RetentionVolume',1420    'ReverseReplicationInput',1421    'ReverseReplicationInputProperties',1422    'ReverseReplicationProviderSpecificInput',1423    'RoleAssignment',1424    'RunAsAccount',1425    'ScriptActionTaskDetails',1426    'ServiceError',1427    'StorageAccountCustomDetails',1428    'StorageClassification',1429    'StorageClassificationCollection',1430    'StorageClassificationMapping',1431    'StorageClassificationMappingCollection',1432    'StorageClassificationMappingInput',1433    'StorageClassificationMappingProperties',1434    'StorageClassificationProperties',1435    'StorageMappingInputProperties',1436    'Subnet',1437    'SupportedOSDetails',1438    'SupportedOSProperties',1439    'SupportedOSProperty',1440    'SupportedOperatingSystems',1441    'SwitchProtectionInput',1442    'SwitchProtectionInputProperties',1443    'SwitchProtectionJobDetails',1444    'SwitchProtectionProviderSpecificInput',1445    'TargetComputeSize',1446    'TargetComputeSizeCollection',1447    'TargetComputeSizeProperties',1448    'TaskTypeDetails',1449    'TestFailoverCleanupInput',1450    'TestFailoverCleanupInputProperties',1451    'TestFailoverInput',1452    'TestFailoverInputProperties',1453    'TestFailoverJobDetails',1454    'TestFailoverProviderSpecificInput',1455    'TestMigrateCleanupInput',1456    'TestMigrateCleanupInputProperties',1457    'TestMigrateInput',1458    'TestMigrateInputProperties',1459    'TestMigrateProviderSpecificInput',1460    'UnplannedFailoverInput',1461    'UnplannedFailoverInputProperties',1462    'UnplannedFailoverProviderSpecificInput',1463    'UpdateApplianceForReplicationProtectedItemInput',1464    'UpdateApplianceForReplicationProtectedItemInputProperties',1465    'UpdateApplianceForReplicationProtectedItemProviderSpecificInput',1466    'UpdateDiskInput',1467    'UpdateMigrationItemInput',1468    'UpdateMigrationItemInputProperties',1469    'UpdateMigrationItemProviderSpecificInput',1470    'UpdateMobilityServiceRequest',1471    'UpdateMobilityServiceRequestProperties',1472    'UpdateNetworkMappingInput',1473    'UpdateNetworkMappingInputProperties',1474    'UpdatePolicyInput',1475    'UpdatePolicyInputProperties',1476    'UpdateProtectionContainerMappingInput',1477    'UpdateProtectionContainerMappingInputProperties',1478    'UpdateRecoveryPlanInput',1479    'UpdateRecoveryPlanInputProperties',1480    'UpdateReplicationProtectedItemInput',1481    'UpdateReplicationProtectedItemInputProperties',1482    'UpdateReplicationProtectedItemProviderInput',1483    'UpdateVCenterRequest',1484    'UpdateVCenterRequestProperties',1485    'VCenter',1486    'VCenterCollection',1487    'VCenterProperties',1488    'VMNicDetails',1489    'VMNicInputDetails',1490    'VMwareCbtContainerCreationInput',1491    'VMwareCbtContainerMappingInput',1492    'VMwareCbtDiskInput',1493    'VMwareCbtEnableMigrationInput',1494    'VMwareCbtEventDetails',1495    'VMwareCbtMigrateInput',1496    'VMwareCbtMigrationDetails',1497    'VMwareCbtNicDetails',1498    'VMwareCbtNicInput',1499    'VMwareCbtPolicyCreationInput',1500    'VMwareCbtProtectedDiskDetails',1501    'VMwareCbtProtectionContainerMappingDetails',1502    'VMwareCbtResyncInput',1503    'VMwareCbtTestMigrateInput',1504    'VMwareCbtUpdateDiskInput',1505    'VMwareCbtUpdateMigrationItemInput',1506    'VMwareDetails',1507    'VMwareV2FabricCreationInput',1508    'VMwareV2FabricSpecificDetails',1509    'VMwareVirtualMachineDetails',1510    'VaultHealthDetails',1511    'VaultHealthProperties',1512    'VaultSetting',1513    'VaultSettingCollection',1514    'VaultSettingCreationInput',1515    'VaultSettingCreationInputProperties',1516    'VaultSettingProperties',1517    'VersionDetails',1518    'VirtualMachineTaskDetails',1519    'VmNicUpdatesTaskDetails',1520    'VmmDetails',1521    'VmmToAzureCreateNetworkMappingInput',1522    'VmmToAzureNetworkMappingSettings',1523    'VmmToAzureUpdateNetworkMappingInput',1524    'VmmToVmmCreateNetworkMappingInput',1525    'VmmToVmmNetworkMappingSettings',1526    'VmmToVmmUpdateNetworkMappingInput',1527    'VmmVirtualMachineDetails',1528    'VmwareCbtPolicyDetails',1529    'A2ARecoveryAvailabilityType',1530    'A2ARpRecoveryPointType',1531    'AgentAutoUpdateStatus',1532    'AgentUpgradeBlockedReason',1533    'AgentVersionStatus',1534    'AlternateLocationRecoveryOption',1535    'AutoProtectionOfDataDisk',1536    'DataSyncStatus',1537    'DisableProtectionReason',1538    'DiskAccountType',1539    'DiskReplicationProgressHealth',1540    'EthernetAddressType',1541    'ExportJobOutputSerializationType',1542    'FailoverDeploymentModel',1543    'HealthErrorCategory',1544    'HealthErrorCustomerResolvability',1545    'HyperVReplicaAzureRpRecoveryPointType',1546    'InMageRcmFailbackRecoveryPointType',1547    'InMageV2RpRecoveryPointType',1548    'LicenseType',1549    'MigrationItemOperation',1550    'MigrationRecoveryPointType',1551    'MigrationState',1552    'MobilityAgentUpgradeState',1553    'MultiVmGroupCreateOption',1554    'MultiVmSyncPointOption',1555    'PlannedFailoverStatus',1556    'PossibleOperationsDirections',1557    'PresenceStatus',1558    'ProtectionHealth',1559    'RcmComponentStatus',1560    'RecoveryPlanActionLocation',1561    'RecoveryPlanGroupType',1562    'RecoveryPlanPointType',1563    'RecoveryPointSyncType',1564    'RecoveryPointType',1565    'ReplicationProtectedItemOperation',1566    'ResyncState',1567    'RpInMageRecoveryPointType',1568    'SetMultiVmSyncStatus',1569    'Severity',1570    'SourceSiteOperations',1571    'SqlServerLicenseType',1572    'TestMigrationState',1573    'VmEncryptionType',1574    'VmReplicationProgressHealth',...jira-manglr.py
Source:jira-manglr.py  
1#!/usr/bin/env python32import argparse3import collections4import fnmatch5import io6import json7import logging8import sys9import yaml10import xml.etree.ElementTree as ET11ENCODING = 'UTF-8'12log = logging.getLogger('jira-manglr')13__doc__ = """14Mangle Jira imports15"""16def split_xml_root(e, encoding=ENCODING, default_namespace=None):17    out = io.BytesIO()18    # output root element open19    et = ET.ElementTree(e)20    et.write(out,21        short_empty_elements = False,22        encoding = encoding,23        xml_declaration = True,24        default_namespace = default_namespace,25    )26    xml = out.getvalue()27    xml_open, xml_close1, xml_close2 = xml.partition(b'</')28    return xml_open, xml_close1 + xml_close229def parse_xml(file, count_interval=10000):30    """31        Iterate over all top-level elements32    """33    count = 034    root = None35    level = 036    for event, e in ET.iterparse(file, events=['start', 'end']):37        if event == 'start':38            level += 139        elif event == 'end':40            level -= 141        log.debug("%2d %10s %s", level, event, e.tag)42        if level == 1 and event == 'start':43            # process root element44            root = e45        elif level == 2 and event == 'start':46            count += 147            if count % count_interval == 0:48                log.info("Processing %d elements...", count)49        elif level == 1 and event == 'end':50            # process each top-level element51            yield e52            e.clear()53def process_xml(filter, input, output, count_interval=10000, count_total=None, encoding=ENCODING, default_namespace=None):54    """55        Process all all top-level elements56    """57    level = 058    root_close = None59    input_count = 060    input_counts = collections.defaultdict(int)61    output_count = 062    output_counts = collections.defaultdict(int)63    for event, e in ET.iterparse(input, events=['start', 'end']):64        if event == 'start':65            level += 166        elif event == 'end':67            level -= 168        log.debug("%2d %10s %s", level, event, e.tag)69        if level == 1 and event == 'start':70            # clone just the top-level element71            root = ET.Element(e.tag, e.attrib)72            root.text = '\n\t'73            root.tail = '\n'74            # output root element open75            root_open, root_close = split_xml_root(root, encoding=encoding, default_namespace=default_namespace)76            log.debug("ROOT %s => %s + %s", e, root_open, root_close)77            output.write(root_open)78        elif level == 2 and event == 'start':79            input_count += 180            input_counts[e.tag] += 181            if input_count % count_interval == 0:82                if count_total:83                    log.info("Processing %d/%d elements...", input_count, count_total)84                else:85                    log.info("Processing %d elements...", input_count)86        elif level == 1 and event == 'end':87            ref = e # for cleanup88            # process each top-level element89            e = filter(e)90            if e is None:91                pass92            else:93                output_count += 194                output_counts[e.tag] += 195                e.tail = '\n\t'96                et = ET.ElementTree(e)97                et.write(output,98                    encoding = encoding,99                    xml_declaration = False,100                    default_namespace = default_namespace,101                )102            ref.clear()103        elif level == 0 and event == 'end':104            # output root element close105            output.write(root_close)106    log.info("Stats: %d/%d items = %.2f%%", output_count, input_count, output_count/input_count*100)107    for tag in input_counts:108        i = input_counts[tag]109        o = output_counts[tag]110        log.info("\t%-30s: %8d/%8d = %.2f%%", tag, o, i, o/i*100)111def filter_attr_set(e, attrs, rewrite=None):112    """113        attrs   - { attr: set(values) }114    """115    values = {attr: e.get(attr) for attr in attrs}116    if any((attrs[attr] is not None) and (e.get(attr) not in attrs[attr]) for attr in attrs):117        log.info("DROP %s %s", e.tag, values)118        return None119    if rewrite:120        for attr, map in rewrite.items():121            if map is not None:122                old = e.get(attr)123                new = map.get(old)124                if new:125                    log.info("REWRITE %s %s: %s -> %s", e.tag, attr, old, new)126                    e.set(attr, new)127    log.debug("KEEP %s %s", e.tag, values)128    return e129def filter_attr_drop_set(e, attrs):130    """131        attrs   - { attr: set(values) }132    """133    values = {attr: e.get(attr) for attr in attrs}134    if any((attrs[attr] is not None) and (e.get(attr) in attrs[attr]) for attr in attrs):135        log.info("DROP %s %s", e.tag, values)136        return None137    log.debug("KEEP %s %s", e.tag, values)138    return e139def filter_attr_glob(e, attr, globs):140    value = e.get(attr)141    if any(fnmatch.fnmatch(value, pattern) for pattern in globs):142        log.info("DROP %s %s=%s", e.tag, attr, value)143        return None144    else:145        log.debug("KEEP %s %s=%s", e.tag, attr, value)146        return e147class EntityMangler:148    DEFAULT_PERMISSON_SCHEME = "0"149    DEFAULT_FIELDSCREEN_IDS = {'1', '2', '3'}150    DEFAULT_FIELDCONFIGSCHEME = '1'151    def __init__(self, keep_project_users=None, keep_users=None, drop_users=None, rewrite_users=None, keep_groups=None, modify_users=None, rewrite_directories=None, drop_osproperty=None, rewrite_osproperty=None):152        self.element_count = 0153        self.projects_ids = set()154        self.all_users = set()155        self.project_users = set()156        self.internal_directory_id = None157        self.remap_directory_id = None158        self.drop_osproperty_ids = set()159        self.osproperties = {}160        self.scheme_ids = collections.defaultdict(set)161        self.scheme_ids['PermissionScheme'].add(self.DEFAULT_PERMISSON_SCHEME)162        self.scheme_ids['FieldScreen'].update(self.DEFAULT_FIELDSCREEN_IDS)163        self.scheme_ids['FieldConfigScheme'].add(self.DEFAULT_FIELDCONFIGSCHEME)164        self.workflows = set()165        self.keep_project_users = keep_project_users166        self.keep_users = None167        self.drop_users = None168        self.rewrite_users = None169        self.keep_groups = None170        self.modify_users = None171        self.keep_directories = None172        self.filter_directories = None173        self.rewrite_directories = None174        self.drop_osproperty = [] # globs175        self.rewrite_osproperty = {} # { name/key: ... }176        if keep_users:177            self.keep_users = set(keep_users)178        if rewrite_users:179            self.rewrite_users = dict(rewrite_users)180            self.keep_users |= set(rewrite_users.keys())181        if drop_users:182            self.drop_users = set(drop_users)183        if keep_groups:184            self.keep_groups = set(keep_groups)185        if modify_users:186            self.modify_users = dict(modify_users)187        if rewrite_directories:188            self.keep_directories = {str(id) for id in rewrite_directories.values()}189            self.filter_directories = {str(id) for id in rewrite_directories.keys()}190            self.rewrite_directories = {str(k): str(v) for k, v in rewrite_directories.items()}191        if drop_osproperty:192            self.drop_osproperty = list(drop_osproperty)193        if rewrite_osproperty:194            self.rewrite_osproperty = dict(rewrite_osproperty)195    def save_state(self):196        return {197            'element_count': self.element_count,198            'projects_ids': list(self.projects_ids),199            'all_users': list(self.all_users),200            'project_users': list(self.project_users),201            'internal_directory_id': self.internal_directory_id,202            'drop_osproperty_ids': list(self.drop_osproperty_ids),203            'osproperties': dict(self.osproperties),204            'scheme_ids': {k: list(s) for k, s in self.scheme_ids.items()},205            'workflows': list(self.workflows),206        }207    def load_state(self, state):208        self.element_count = state['element_count']209        if 'projects_ids' in state:210            self.projects_ids = set(state['projects_ids'])211        if 'project_role_actor_users' in state:212            self.project_users = set(state['project_role_actor_users'])213        else:214            self.project_users = set(state['project_users'])215        if 'all_users' in state:216            self.all_users = set(state['all_users'])217        if 'internal_directory_id' in state:218            self.internal_directory_id = state['internal_directory_id']219        if 'drop_osproperty_ids' in state:220            self.drop_osproperty_ids = set(state['drop_osproperty_ids'])221        if 'osproperties' in state:222            self.osproperties = dict(state['osproperties'])223        if 'scheme_ids' in state:224            for k, v in state['scheme_ids'].items():225                self.scheme_ids[k] = set(v)226        if 'workflows' in state:227            self.workflows = set(state['workflows'])228        if self.keep_project_users:229            if not self.keep_users:230                self.keep_users = set()231            self.keep_users |= self.project_users232            if self.drop_users:233                self.keep_users -= self.drop_users234    def filter(self, e):235        if e.tag in ('AuditChangedValue', 'AuditItem', 'AuditLog'):236            return None237        elif e.tag in ('OAuthConsumer', 'OAuthServiceProviderConsumer', 'OAuthServiceProviderToken'):238            return None239        elif e.tag == 'FilterSubscription':240            # not used241            return None242        elif e.tag == 'Action':243            return filter_attr_set(e, {},244                rewrite = {'author': self.rewrite_users, 'updateauthor': self.rewrite_users},245            )246        elif e.tag == 'Avatar' and e.get('avatarType') == 'user' and e.get('owner'):247            return filter_attr_set(e, {'owner': self.keep_users},248                rewrite = {'owner': self.rewrite_users},249            )250        elif e.tag == 'User':251            e = filter_attr_set(e, {'userName': self.keep_users, 'directoryId': self.filter_directories},252                rewrite = {'directoryId': self.rewrite_directories, 'userName': self.rewrite_users, 'lowerUserName': self.rewrite_users},253            )254            if (e is not None) and self.modify_users and e.get('userName') in self.modify_users:255                log.info("MODIFY %s userName=%s", e.tag, e.get('userName'))256                for attr, value in self.modify_users[e.get('userName')].items():257                    log.info("MODIFY %s userName=%s: %s=%s -> %s", e.tag, e.get('userName'), attr, e.get(attr), value)258                    e.set(attr, value)259            return e260        elif e.tag == 'ApplicationUser':261            return filter_attr_set(e,  {'userKey': self.keep_users},262                rewrite = {'userKey': self.rewrite_users, 'lowerUserName': self.rewrite_users},263            )264        elif e.tag == 'Group':265            return filter_attr_set(e, {'groupName': self.keep_groups, 'directoryId': self.filter_directories},266                rewrite = {'directoryId': self.rewrite_directories},267            )268        elif e.tag == 'Membership' and e.get('membershipType') == 'GROUP_USER':269            return filter_attr_set(e, {'childName': self.keep_users, 'parentName': self.keep_groups, 'directoryId': self.filter_directories},270                rewrite = {'directoryId': self.rewrite_directories, 'childName': self.rewrite_users, 'lowerChildName': self.rewrite_users},271            )272        elif e.tag == 'UserAttribute':273            return filter_attr_set(e, {'directoryId': self.filter_directories},274                rewrite = {'directoryId': self.rewrite_directories},275            )276        elif e.tag == 'UserHistoryItem':277            return filter_attr_set(e, {'username': self.keep_users},278                rewrite = {'entityId': self.rewrite_users, 'username': self.rewrite_users},279            )280        elif e.tag == 'SearchRequest':281            return filter_attr_set(e, {'author': self.keep_users},282                rewrite = {'author': self.rewrite_users, 'user': self.rewrite_users},283            )284        elif e.tag == 'SharePermissions' and e.get('type') == 'group':285            return filter_attr_set(e, {'param1': self.keep_groups})286        elif e.tag == 'RememberMeToken':287            return filter_attr_set(e, {'username': self.keep_users},288                rewrite = {'username': self.rewrite_users},289            )290        elif e.tag == 'ChangeGroup':291            return filter_attr_set(e, {},292                rewrite = {'author': self.rewrite_users},293            )294        elif e.tag == 'ChangeItem' and e.get('field') in ('assignee', 'reporter'):295            return filter_attr_set(e, {},296                rewrite = {'newvalue': self.rewrite_users, 'oldvalue': self.rewrite_users},297            )298        elif e.tag == 'FileAttachment':299            return filter_attr_set(e, {},300                rewrite = {'author': self.rewrite_users},301            )302        elif e.tag == 'Issue':303            return filter_attr_set(e, {},304                rewrite = {'assignee': self.rewrite_users, 'creator': self.rewrite_users, 'reporter': self.rewrite_users},305            )306        elif e.tag == 'Project':307            return filter_attr_set(e, {},308                rewrite = {'lead': self.rewrite_users},309            )310        elif e.tag == 'UserAssociation':311            return filter_attr_set(e, {'sourceName': self.keep_users},312                rewrite = {'sourceName': self.rewrite_users},313            )314        elif e.tag == 'ProjectRoleActor' and e.get('roletype') == 'atlassian-user-role-actor':315            return filter_attr_set(e, {'roletypeparameter': self.keep_users},316                rewrite = {'roletypeparameter': self.rewrite_users},317            )318        elif e.tag == 'PortalPage' and e.get('username'):319            return filter_attr_set(e, {'username': self.keep_users},320                rewrite = {'username': self.rewrite_users},321            )322        elif e.tag == 'ColumnLayout' and e.get('username'):323            return filter_attr_set(e, {'username': self.keep_users},324                rewrite = {'username': self.rewrite_users},325            )326        elif e.tag == 'ExternalEntity':327            # TODO: drop all?328            return filter_attr_set(e, {'name': self.keep_users},329                rewrite = {'name': self.rewrite_users},330            )331        elif e.tag == 'FavouriteAssociations':332            return filter_attr_set(e, {'username': self.keep_users},333                rewrite = {'username': self.rewrite_users},334            )335        elif e.tag == 'Feature' and e.get('featureType') == 'user':336            return filter_attr_set(e, {'userKey': self.keep_users})337        elif e.tag == 'FilterSubscription':338            return filter_attr_set(e, {'username': self.keep_users})339        elif e.tag == 'Notification' and e.get('type') == 'Single_User':340            return filter_attr_set(e, {'parameter': self.keep_users})341        elif e.tag == 'SchemePermissions' and e.get('type') == 'user':342            return filter_attr_set(e, {'parameter': self.keep_users})343        elif e.tag == 'SchemePermissions' and e.get('type') == 'group':344            return filter_attr_set(e, {'parameter': self.keep_groups})345        elif e.tag == 'OSHistoryStep' and e.get('caller'):346            return filter_attr_set(e, {'caller': self.keep_users},347                rewrite = {'caller': self.rewrite_users},348            )349        elif e.tag == 'OSPropertyEntry' and self.drop_osproperty:350            return filter_attr_drop_set(e, {'id': self.drop_osproperty_ids})351        elif e.tag in ('OSPropertyDecimal', 'OSPropertyNumber', 'OSPropertyString', 'OSPropertyText'):352            id = e.get('id')353            e =  filter_attr_drop_set(e, {'id': self.drop_osproperty_ids})354            if (e is not None) and (id in self.osproperties):355                p = self.osproperties[id]356                if p in self.rewrite_osproperty:357                    old = e.get('value')358                    new = self.rewrite_osproperty[p]359                    log.info("REWRITE %s id=%s (%s): %s => %s", e.tag, id, p, old, new)360                    e.set('value', new)361            return e362        elif e.tag == 'Directory':363            return filter_attr_set(e, {'id': self.keep_directories})364        elif e.tag in ('DirectoryAttribute', 'DirectoryOperation'):365            return filter_attr_set(e, {'directoryId': self.keep_directories})366        elif e.tag == 'MailServer':367            return None368        elif e.tag == 'ProjectCategory':369            return None # TODO: map projects?370        elif e.tag == 'IssueSecurityScheme':371            return filter_attr_set(e, {'id': self.scheme_ids['IssueSecurityScheme']})372        elif e.tag == 'SchemeIssueSecurities':373            return filter_attr_set(e, {'scheme': self.scheme_ids['IssueSecurityScheme']})374        elif e.tag == 'SchemeIssueSecurityLevels':375            return filter_attr_set(e, {'scheme': self.scheme_ids['IssueSecurityScheme']})376        elif e.tag == 'NotificationScheme':377            return filter_attr_set(e, {'id': self.scheme_ids['NotificationScheme']})378        elif e.tag == 'Notification':379            return filter_attr_set(e, {'scheme': self.scheme_ids['NotificationScheme']})380        elif e.tag == 'PermissionScheme':381            return filter_attr_set(e, {'id': self.scheme_ids['PermissionScheme']})382        elif e.tag == 'SchemePermissions':383            return filter_attr_set(e, {'scheme': self.scheme_ids['PermissionScheme']})384        elif e.tag == 'IssueTypeScreenScheme':385            return filter_attr_set(e, {'id': self.scheme_ids['IssueTypeScreenScheme']})386        elif e.tag == 'IssueTypeScreenSchemeEntity':387            return filter_attr_set(e, {'scheme': self.scheme_ids['IssueTypeScreenScheme']})388        elif e.tag == 'FieldLayoutScheme':389            return filter_attr_set(e, {'id': self.scheme_ids['FieldLayoutScheme']})390        elif e.tag == 'FieldLayoutSchemeEntity':391            return filter_attr_set(e, {'scheme': self.scheme_ids['FieldLayoutScheme']})392        elif e.tag == 'WorkflowScheme':393            return filter_attr_set(e, {'id': self.scheme_ids['WorkflowScheme']})394        elif e.tag == 'WorkflowSchemeEntity':395            return filter_attr_set(e, {'scheme': self.scheme_ids['WorkflowScheme']})396        elif e.tag == 'FieldScreenScheme':397            return filter_attr_set(e, {'id': self.scheme_ids['FieldScreenScheme']})398        elif e.tag == 'FieldScreenSchemeItem':399            return filter_attr_set(e, {'fieldscreenscheme': self.scheme_ids['FieldScreenScheme']})400        elif e.tag == 'FieldScreen':401            return filter_attr_set(e, {'id': self.scheme_ids['FieldScreen']})402        elif e.tag == 'FieldScreenTab':403            return filter_attr_set(e, {'fieldscreen': self.scheme_ids['FieldScreen']})404        elif e.tag == 'FieldScreenLayoutItem':405            return filter_attr_set(e, {'fieldscreentab': self.scheme_ids['FieldScreenTab']})406        elif e.tag == 'FieldLayout':407            if e.get('type') == 'default':408                return e409            else:410                return filter_attr_set(e, {'id': self.scheme_ids['FieldLayout']})411        elif e.tag == 'FieldLayoutItem':412            return filter_attr_set(e, {'fieldlayout': self.scheme_ids['FieldLayout']})413        elif e.tag == 'Workflow':414            return filter_attr_set(e, {'name': self.workflows})415        elif e.tag == 'Status':416            return filter_attr_set(e, {'id': self.scheme_ids['Status']})417        elif e.tag == 'FieldConfigScheme' and e.get('fieldid') == 'issuetype':418            return filter_attr_set(e, {'id': self.scheme_ids['FieldConfigScheme']})419        elif e.tag == 'FieldConfigSchemeIssueType':420            return filter_attr_set(e, {'fieldconfigscheme': self.scheme_ids['FieldConfigScheme']})421        elif e.tag == 'FieldConfiguration':422            return filter_attr_set(e, {'id': self.scheme_ids['FieldConfiguration']})423        elif e.tag == 'OptionConfiguration' and e.get('fieldid') == 'issuetype': # TODO: customfields?424            return filter_attr_set(e, {'fieldconfig': self.scheme_ids['FieldConfiguration']})425        elif e.tag == 'IssueType':426            return filter_attr_set(e, {'id': self.scheme_ids['IssueType']})427        else:428            return e429    def scan(self, file):430        IssueTypeScreenSchemeEntity_FieldScreenScheme = collections.defaultdict(set)431        IssueTypeScreenSchemeEntity_issuetype = collections.defaultdict(set)432        FieldLayoutSchemeEntity_FieldLayout = collections.defaultdict(set)433        WorkflowSchemeEntity_workflow = collections.defaultdict(set)434        FieldScreenSchemeItem_fieldscreen = collections.defaultdict(set)435        Workflow_fieldscreen = collections.defaultdict(set)436        Workflow_status = collections.defaultdict(set)437        fieldscreen_FieldScreenTab = collections.defaultdict(set)438        project_issuetype_fieldconfigscheme = collections.defaultdict(set) # ConfigurationContext439        customfield_FieldConfigScheme = collections.defaultdict(set)440        fieldconfigscheme_FieldConfigSchemeIssueType_fieldconfiguration = collections.defaultdict(set)441        fieldconfig_OptionConfiguration_issuetype = collections.defaultdict(set)442        for e in parse_xml(file):443            self.element_count += 1444            if e.tag == 'Directory' and e.get('type') == 'INTERNAL':445                id = e.get('id')446                log.info("SCAN internal_directory_id %s", id)447                self.internal_directory_id = id448            if e.tag == 'User':449                self.all_users.add(e.get('userName'))450            elif e.tag == 'Project':451                self.projects_ids.add(e.get('id'))452            elif e.tag == 'ProjectRoleActor':453                roletype = e.get('roletype')454                roletypeparameter = e.get('roletypeparameter')455                if roletype == 'atlassian-user-role-actor':456                    log.info("SCAN project_role_actor_users %s", roletypeparameter)457                    self.project_users.add(roletypeparameter)458            elif e.tag == 'OSPropertyEntry':459                id = e.get('id')460                name = e.get('entityName')461                key = e.get('propertyKey')462                p = f'{name}/{key}'463                if p in self.rewrite_osproperty:464                    log.info("SCAN rewrite_osproperty %s => id=%s", p, id)465                    self.osproperties[id] = p466                if any(fnmatch.fnmatch(p, pattern) for pattern in self.drop_osproperty):467                    log.info("SCAN drop_osproperty %s => id=%s", p, id)468                    self.drop_osproperty_ids.add(id)469            elif e.tag == 'NodeAssociation' and e.get('associationType') == 'ProjectScheme':470                entity = e.get('sinkNodeEntity')471                id = e.get('sinkNodeId')472                log.info("SCAN scheme_ids %s => %s", entity, id)473                self.scheme_ids[entity].add(id)474            elif e.tag == 'IssueTypeScreenSchemeEntity':475                IssueTypeScreenSchemeEntity_FieldScreenScheme[e.get('scheme')].add(e.get('fieldscreenscheme'))476                if e.get('issuetype'):477                    IssueTypeScreenSchemeEntity_issuetype[e.get('scheme')].add(e.get('issuetype'))478            elif e.tag == 'FieldLayoutSchemeEntity' and e.get('fieldlayout'):479                FieldLayoutSchemeEntity_FieldLayout[e.get('scheme')].add(e.get('fieldlayout'))480            elif e.tag == 'WorkflowSchemeEntity':481                WorkflowSchemeEntity_workflow[e.get('scheme')].add(e.get('workflow'))482            elif e.tag == 'FieldScreenSchemeItem':483                FieldScreenSchemeItem_fieldscreen[e.get('fieldscreenscheme')].add(e.get('fieldscreen'))484            elif e.tag == 'Workflow':485                workflow = ET.fromstring(e.findtext('descriptor'))486                name = e.get('name')487                for action in workflow.iter('action'):488                    if action.get('view') == 'fieldscreen':489                        for meta in action.iter('meta'):490                            if meta.get('name') == 'jira.fieldscreen.id':491                                Workflow_fieldscreen[name].add(meta.text.strip())492                for step in workflow.iter('step'):493                    for meta in step.iter('meta'):494                        if meta.get('name') == 'jira.status.id':495                            Workflow_status[name].add(meta.text.strip())496            elif e.tag == 'FieldScreenTab':497                fieldscreen_FieldScreenTab[e.get('fieldscreen')].add(e.get('id'))498            elif e.tag == 'ConfigurationContext' and e.get('key') == 'issuetype':499                project_issuetype_fieldconfigscheme[e.get('project')] = e.get('fieldconfigscheme')500            elif e.tag == 'FieldConfigScheme' and e.get('fieldid').startswith('customfield_'):501                # XXX: all customfields502                customfield_FieldConfigScheme[e.get('fieldid')].add(e.get('id'))503            elif e.tag == 'FieldConfigSchemeIssueType':504                fieldconfigscheme_FieldConfigSchemeIssueType_fieldconfiguration[e.get('fieldconfigscheme')].add(e.get('fieldconfiguration'))505            elif e.tag == 'OptionConfiguration' and e.get('fieldid') == 'issuetype':506                fieldconfig_OptionConfiguration_issuetype[e.get('fieldconfig')].add(e.get('optionid'))507        # indirect references508        for id in self.scheme_ids['IssueTypeScreenScheme']:509            for schema_id in IssueTypeScreenSchemeEntity_FieldScreenScheme[id]:510                self.scheme_ids['FieldScreenScheme'].add(schema_id)511            for issuetype in IssueTypeScreenSchemeEntity_issuetype[id]:512                self.scheme_ids['IssueType'].add(issuetype)513        for id in self.scheme_ids['FieldLayoutScheme']:514            for schema_id in FieldLayoutSchemeEntity_FieldLayout[id]:515                self.scheme_ids['FieldLayout'].add(schema_id)516        for scheme in self.scheme_ids['WorkflowScheme']:517            for workflow in WorkflowSchemeEntity_workflow[scheme]:518                self.workflows.add(workflow)519        for fieldscreenscheme in self.scheme_ids['FieldScreenScheme']:520            for fieldscreen in FieldScreenSchemeItem_fieldscreen[fieldscreenscheme]:521                self.scheme_ids['FieldScreen'].add(fieldscreen)522        for workflow in self.workflows:523            for fieldscreen in Workflow_fieldscreen[workflow]:524                self.scheme_ids['FieldScreen'].add(fieldscreen)525        for fieldscreen in self.scheme_ids['FieldScreen']:526            for fieldscreentag in fieldscreen_FieldScreenTab[fieldscreen]:527                self.scheme_ids['FieldScreenTab'].add(fieldscreentag)528        for workflow in self.workflows:529            for status in Workflow_status[workflow]:530                self.scheme_ids['Status'].add(status)531        for project in self.projects_ids:532            self.scheme_ids['FieldConfigScheme'].add(project_issuetype_fieldconfigscheme[project])533        for customfield in customfield_FieldConfigScheme:534            # TODO: only used customfields535            for fieldconfiguration in customfield_FieldConfigScheme[customfield]:536                self.scheme_ids['FieldConfigScheme'].add(fieldconfiguration)537        for fieldconfigscheme in self.scheme_ids['FieldConfigScheme']:538            for fieldconfiguration in fieldconfigscheme_FieldConfigSchemeIssueType_fieldconfiguration[fieldconfigscheme]:539                self.scheme_ids['FieldConfiguration'].add(fieldconfiguration)540        for fieldconfig in self.scheme_ids['FieldConfiguration']:541            for issuetype in fieldconfig_OptionConfiguration_issuetype[fieldconfig]:542                self.scheme_ids['IssueType'].add(issuetype)543    def process(self, input, output):544        process_xml(self.filter, input, output, count_total=self.element_count)545    def verify(self, file):546        """547            Log any tags having attributes with dropped usernames548        """549        reject_users = self.all_users - self.keep_users550        reject_users -= set(self.rewrite_users.values())551        reject_users |= self.rewrite_users.keys()552        total_count = 0553        total_counts = collections.defaultdict(int)554        count = 0555        counts = collections.defaultdict(int)556        for e in parse_xml(file):557            total_count += 1558            total_counts[e.tag] += 1559            attrs = {k: v for k, v in e.attrib.items() if v in reject_users}560            if attrs:561                log.warn("USER %s %s", e.tag, ', '.join(f'{k}<{v}>' for k, v in attrs.items()))562                count += 1563                counts[e.tag] += 1564        log.info("Summary: %d/%d = %.2f%% items", count, total_count, count/total_count*100)565        for tag in counts:566            log.info("\t%-30s: %8d/%8d = %.2f%%", tag, counts[tag], total_counts[tag], counts[tag]/total_counts[tag]*100)567def rewrite_data_rows(e, match, rewrite={}):568    table = e.get('tableName')569    cols = []570    for c in e.iterfind('{http://www.atlassian.com/ao}column'):571        cols.append(c.get('name'))572    log.debug("SCAN %s %r", table, cols)573    for row in e.iterfind('{http://www.atlassian.com/ao}row'):574        elements = {}575        for c, item in zip(cols, row):576            elements[c] = item577        if any(elements[c].text != v for c, v in match.items()):578            log.debug("SKIP %s %s", table, {c: e.text for c, e in elements.items() if c in match})579            continue580        for attr, map in rewrite.items():581            old = elements[attr].text582            new = map.get(old)583            if new:584                log.info("REWRITE %s %s=%s => %s", table, attr, old, new)585                elements[attr].text = new586    return e587class ActiveObjectMangler:588    XMLNS = 'http://www.atlassian.com/ao'589    DATA = '{http://www.atlassian.com/ao}data'590    def __init__(self, clear_tables=None, rewrite_users=None):591        self.clear_tables = []592        self.rewrite_users = None593        if clear_tables:594            self.clear_tables = list(clear_tables)595        if rewrite_users:596            self.rewrite_users = dict(rewrite_users)597    def filter(self, e):598        if e.tag == self.DATA and e.get('tableName') == 'AO_60DB71_BOARDADMINS':599            return rewrite_data_rows(e, {'TYPE': 'USER'}, {'KEY': self.rewrite_users})600        elif e.tag == self.DATA and e.get('tableName') == 'AO_60DB71_AUDITENTRY':601            return rewrite_data_rows(e, {}, {'USER': self.rewrite_users})602        elif e.tag == self.DATA and e.get('tableName') == 'AO_60DB71_RAPIDVIEW':603            return rewrite_data_rows(e, {}, {'OWNER_USER_NAME': self.rewrite_users})604        elif e.tag == self.DATA and e.get('tableName') == 'AO_8BAD1B_STATISTICS':605            return rewrite_data_rows(e, {}, {'C_USERKEY': self.rewrite_users})606        elif e.tag == self.DATA:607            return filter_attr_glob(e, 'tableName', self.clear_tables)608        else:609            return e610    def process(self, input, output):611        ET.register_namespace('', self.XMLNS)612        process_xml(self.filter, input, output, count_interval=10, default_namespace='')613def main():614    parser = argparse.ArgumentParser(615        formatter_class = argparse.ArgumentDefaultsHelpFormatter,616        description     = __doc__,617    )618    parser.set_defaults(log_level=logging.WARN)619    parser.add_argument('-q', '--quiet', action='store_const', dest='log_level', const=logging.ERROR, help="Do not log warnings")620    parser.add_argument('-v', '--verbose', action='store_const', dest='log_level', const=logging.INFO, help="Log info messages")621    parser.add_argument('--debug', action='store_const', dest='log_level', const=logging.DEBUG, help="Log debug messages")622    parser.add_argument('--config', metavar='PATH', help="YAML config")623    parser.add_argument('--input-entities') # must be a re-openable path, not a File or sys.stdin624    parser.add_argument('--load-state', metavar='PATH')625    parser.add_argument('--save-state', metavar='PATH')626    parser.add_argument('--verify', action='store_true', help="Log any tags with dropped usernames")627    parser.add_argument('--output-entities', type=argparse.FileType('wb'))628    parser.add_argument('--input-activeobjects') # must be a re-openable path, not a File or sys.stdin629    parser.add_argument('--output-activeobjects', type=argparse.FileType('wb'), default=sys.stdout)630    args = parser.parse_args()631    logging.basicConfig(632        level       = args.log_level,633        stream      = sys.stderr,634        format      = "%(asctime)s %(levelname)5s %(module)s: %(message)s",635    )636    config = {}637    if args.config:638        with open(args.config) as file:639            config = yaml.safe_load(file)640    entities_config = config['entities']641    activeobjects_config = config['activeobjects']642    if args.input_entities:643        app = EntityMangler(**entities_config)644        if args.load_state:645            with open(args.load_state, 'r') as file:646                app.load_state(json.load(file))647        else:648            app.scan(args.input_entities)649        if args.save_state:650            with open(args.save_state, 'w') as file:651                json.dump(app.save_state(), file)652        if args.verify:653            app.verify(args.input_entities)654        if args.output_entities:655            app.process(args.input_entities, args.output_entities)656    if args.input_activeobjects:657        app = ActiveObjectMangler(rewrite_users=entities_config['rewrite_users'], **activeobjects_config)658        if args.output_activeobjects:659            app.process(args.input_activeobjects, args.output_activeobjects)660if __name__ == '__main__':...Properties.py
Source:Properties.py  
1# -*- coding: utf-8 -*-2import wx.propgrid3from dfvfs.helpers import source_scanner4from dfvfs.lib import definitions5from dfvfs.volume import volume_system6from dfvfs.volume import vshadow_volume_system7from dfvfs.resolver import resolver8from dfvfs.vfs import ntfs_file_system9from dfvfs.vfs import tsk_file_entry10def EnumerateProperties(property_grid_1,node):11    # Clear previous properties12    property_grid_1.Clear()13    properties = []14    if isinstance(node,source_scanner.SourceScanNode):15        if node.type_indicator == definitions.TYPE_INDICATOR_OS:16            properties = OsProperties(node)17        elif node.type_indicator == definitions.TYPE_INDICATOR_EWF:18            properties = EwfProperties(node)19        elif node.type_indicator == definitions.TYPE_INDICATOR_TSK_PARTITION:20            properties = TskPartitionProperties(node)21        elif node.type_indicator == definitions.TYPE_INDICATOR_TSK:22            properties = TskProperties(node)23        elif node.type_indicator == definitions.TYPE_INDICATOR_VSHADOW:24            properties = VshadowProperties(node)25        else:26            raise Exception(u'Unhandled type enumeration. type: {}'.format(node.type_indicator))27    elif isinstance(node,tsk_file_entry.TSKFileEntry):28            properties = TskFileEntryProperties(node)29            pass30    else:31        raise Exception(u'Unhandled Class in Property Enumeration. type: {}'.format(str(type(node))))32    for property in properties:33        property_grid_1.Append(property)34class OsProperties(list):35    def __init__(self,node):36        self.append(wx.propgrid.PropertyCategory("OS Path Spec"))37        self.append(wx.propgrid.StringProperty("Location", value=getattr(node.path_spec,'location',None)))38        pass39class TskFileEntryProperties(list):40    def __init__(self,node):41        self.append(wx.propgrid.StringProperty("Full Path",42            value=u'{}'.format(node.full_path.encode('utf-8', u'replace'))))43        self.append(wx.propgrid.PropertyCategory("TSK File Meta Info"))44        meta = node._tsk_file.info.meta45        self.append(wx.propgrid.StringProperty(46            "Type", value=u'{}'.format(meta.type)))47        self.append(wx.propgrid.StringProperty(48            "Flags", value=u'{}'.format(meta.flags)))49        self.append(wx.propgrid.UIntProperty(50            "Address",value=meta.addr))51        self.append(wx.propgrid.IntProperty(52            "Sequence", value=meta.seq))53        self.append(wx.propgrid.UIntProperty(54            "Creation Time", value=meta.crtime))55        self.append(wx.propgrid.UIntProperty(56            "MFT Change Time", value=meta.ctime))57        self.append(wx.propgrid.UIntProperty(58            "Modified Time", value=meta.mtime))59        self.append(wx.propgrid.UIntProperty(60            "Access Time", value=meta.atime))61        self.append(wx.propgrid.UIntProperty(62            "Size", value=meta.size))63class EwfProperties(list):64    def __init__(self,node):65        ewf = resolver.Resolver.OpenFileObject(node.path_spec)66        self.append(wx.propgrid.PropertyCategory("EWF Information"))67        self.append(wx.propgrid.StringProperty("Header Codepage",68            value=u'{}'.format(getattr(ewf._file_object, 'header_codepage', None))))69        self.append(wx.propgrid.StringProperty("Media Size",70             value=u'{}'.format(getattr(ewf._file_object, 'media_size', None))))71        dict_hash = ewf._file_object.get_hash_values()72        for key in dict_hash:73            value = dict_hash[key]74            self.append(wx.propgrid.StringProperty(key, value=u'{}'.format(value)))75        header_values = ewf._file_object.get_header_values()76        for key in header_values:77            value = header_values[key]78            self.append(wx.propgrid.StringProperty(key, value=u'{}'.format(value)))79class TskPartitionProperties(list):80    def __init__(self,node):81        file_system = resolver.Resolver.OpenFileSystem(node.path_spec)82        for volume in file_system._tsk_volume:83            if volume.addr == node.path_spec.part_index:84                # TSK Partition Info85                self.append(wx.propgrid.PropertyCategory("TSK Partition Info"))86                self.append(wx.propgrid.StringProperty("Partition Address",87                                                       value=u'{}'.format(getattr(volume, 'addr', None))))88                self.append(wx.propgrid.StringProperty("Description",89                                                       value=getattr(volume, 'desc', None)))90                self.append(wx.propgrid.StringProperty("Size",91                                                       value=u'{}'.format(getattr(volume, 'len', None))))92                self.append(wx.propgrid.StringProperty("Slot Number",93                                                       value=u'{}'.format(getattr(volume, 'slot_num', None))))94                self.append(wx.propgrid.StringProperty("Starting Offset",95                                                       value=u'{}'.format(getattr(volume, 'start', ''))))96                self.append(wx.propgrid.StringProperty("Table Number",97                                                       value=u'{}'.format(getattr(volume, 'table_num', None))))98                self.append(wx.propgrid.StringProperty("Tag",99                                                       value=u'{}'.format(getattr(volume, 'tag', None))))100                pass101class TskProperties(list):102    def __init__(self,node):103        try:104            file_system = resolver.Resolver.OpenFileSystem(node.path_spec)105        except Exception as error:106            self.append(wx.propgrid.PropertyCategory("Info"))107            self.append(wx.propgrid.StringProperty("Description",108                                                   value=u'Cannot open filesystem.'))109            self.append(wx.propgrid.StringProperty("Error",110                                                   value=u'{}'.format(error)))111            return112        if file_system is not None:113            tsk_fs_info = file_system._tsk_file_system.info114            self.append(wx.propgrid.PropertyCategory("TSK File System Info"))115            self.append(wx.propgrid.StringProperty(116                "Block Count",value=u'{}'.format(getattr(tsk_fs_info, 'block_count', None))))117            self.append(wx.propgrid.StringProperty(118                "Block Post Size", value=u'{}'.format(getattr(tsk_fs_info, 'block_post_size', None))))119            self.append(wx.propgrid.StringProperty(120                "Block Pre Size", value=u'{}'.format(getattr(tsk_fs_info, 'block_pre_size', None))))121            self.append(wx.propgrid.StringProperty(122                "Block Size", value=u'{}'.format(getattr(tsk_fs_info, 'block_size', None))))123            self.append(wx.propgrid.StringProperty(124                "Dev Block Size", value=u'{}'.format(getattr(tsk_fs_info, 'dev_bsize', None))))125            self.append(wx.propgrid.StringProperty(126                "Endian", value=u'{}'.format(getattr(tsk_fs_info, 'endian', None))))127            self.append(wx.propgrid.StringProperty(128                "First Block", value=u'{}'.format(getattr(tsk_fs_info, 'first_block', None))))129            self.append(wx.propgrid.StringProperty(130                "First Inode", value=u'{}'.format(getattr(tsk_fs_info, 'first_inode', None))))131            self.append(wx.propgrid.StringProperty(132                "Flags", value=u'{}'.format(getattr(tsk_fs_info, 'flags', None))))133            self.append(wx.propgrid.StringProperty(134                "File System ID Used", value=u'{}'.format(getattr(tsk_fs_info, 'fs_id_used', None))))135            self.append(wx.propgrid.StringProperty(136                "File System Type", value=u'{}'.format(getattr(tsk_fs_info, 'ftype', None))))137            self.append(wx.propgrid.StringProperty(138                "Inode Count", value=u'{}'.format(getattr(tsk_fs_info, 'inum_count', None))))139            self.append(wx.propgrid.StringProperty(140                "Journal Inode", value=u'{}'.format(getattr(tsk_fs_info, 'journ_inum', None))))141            self.append(wx.propgrid.StringProperty(142                "Last Block", value=u'{}'.format(getattr(tsk_fs_info, 'last_block', None))))143            self.append(wx.propgrid.StringProperty(144                "Last Block Actual", value=u'{}'.format(getattr(tsk_fs_info, 'last_block_act', None))))145            self.append(wx.propgrid.StringProperty(146                "Last Inode", value=u'{}'.format(getattr(tsk_fs_info, 'last_inum', None))))147            self.append(wx.propgrid.StringProperty(148                "Offset", value=u'{}'.format(getattr(tsk_fs_info, 'offset', None))))149            self.append(wx.propgrid.StringProperty(150                "Orphan Dir", value=u'{}'.format(getattr(tsk_fs_info, 'orphan_dir', None))))151            self.append(wx.propgrid.StringProperty(152                "Root Inode", value=u'{}'.format(getattr(tsk_fs_info, 'root_inum', None))))153            self.append(wx.propgrid.StringProperty(154                "Tag", value=u'{}'.format(getattr(tsk_fs_info, 'tag', None))))155        pass156class VshadowProperties(list):157    def __init__(self,node):158        if node.path_spec.store_index is None:159            # VSS Root160            vss = vshadow_volume_system.VShadowVolumeSystem()161            vss.Open(node.path_spec)162            for shadow_volume in vss.volumes:163                self.append(164                    wx.propgrid.PropertyCategory(165                        u'{}'.format(shadow_volume.identifier)166                    )167                )168                for attribute in shadow_volume.attributes:169                    self.append(170                        wx.propgrid.StringProperty(171                            u'{} {}'.format(shadow_volume.identifier, attribute.identifier),172                            value=u'{}'.format(attribute.value)173                        )174                    )175        else:176            # VSS Index177            vss = vshadow_volume_system.VShadowVolumeSystem()178            vss.Open(node.path_spec)179            vss_index = node.path_spec.store_index180            vss_label = node.path_spec.location[1:]181            _vss_cnt = 0182            for shadow_volume in vss.volumes:183                if vss_label == shadow_volume.identifier:184                    self.append(185                        wx.propgrid.PropertyCategory(186                            u'{}'.format(shadow_volume.identifier)187                        )188                    )189                    for attribute in shadow_volume.attributes:190                        self.append(191                            wx.propgrid.StringProperty(192                                u'{} {}'.format(shadow_volume.identifier, attribute.identifier),193                                value=u'{}'.format(attribute.value)194                            )195                        )...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
