strongdm 15.2.0__zip → 15.5.0__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. {strongdm-15.2.0 → strongdm-15.5.0}/PKG-INFO +2 -2
  2. {strongdm-15.2.0 → strongdm-15.5.0}/setup.py +2 -2
  3. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflow_approvers_pb2.py +6 -4
  4. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflows_pb2.py +6 -4
  5. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/client.py +18 -18
  6. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/drivers_pb2.py +313 -223
  7. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/managed_secrets_pb2.py +4 -2
  8. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/managed_secrets_pb2_grpc.py +34 -0
  9. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/models.py +357 -0
  10. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/plumbing.py +125 -1
  11. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/svc.py +243 -210
  12. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm.egg-info/PKG-INFO +2 -2
  13. {strongdm-15.2.0 → strongdm-15.5.0}/LICENSE +0 -0
  14. {strongdm-15.2.0 → strongdm-15.5.0}/README.md +0 -0
  15. {strongdm-15.2.0 → strongdm-15.5.0}/setup.cfg +0 -0
  16. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/__init__.py +0 -0
  17. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/access_request_events_history_pb2.py +0 -0
  18. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/access_request_events_history_pb2_grpc.py +0 -0
  19. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/access_requests_history_pb2.py +0 -0
  20. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/access_requests_history_pb2_grpc.py +0 -0
  21. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/access_requests_pb2.py +0 -0
  22. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/access_requests_pb2_grpc.py +0 -0
  23. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_attachments_history_pb2.py +0 -0
  24. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_attachments_history_pb2_grpc.py +0 -0
  25. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_attachments_pb2.py +0 -0
  26. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_attachments_pb2_grpc.py +0 -0
  27. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_grants_history_pb2.py +0 -0
  28. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_grants_history_pb2_grpc.py +0 -0
  29. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_grants_pb2.py +0 -0
  30. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_grants_pb2_grpc.py +0 -0
  31. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_permissions_pb2.py +0 -0
  32. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_permissions_pb2_grpc.py +0 -0
  33. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_resources_history_pb2.py +0 -0
  34. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_resources_history_pb2_grpc.py +0 -0
  35. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_resources_pb2.py +0 -0
  36. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/account_resources_pb2_grpc.py +0 -0
  37. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/accounts_history_pb2.py +0 -0
  38. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/accounts_history_pb2_grpc.py +0 -0
  39. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/accounts_pb2.py +0 -0
  40. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/accounts_pb2_grpc.py +0 -0
  41. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/activities_pb2.py +0 -0
  42. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/activities_pb2_grpc.py +0 -0
  43. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflow_approvers_history_pb2.py +0 -0
  44. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflow_approvers_history_pb2_grpc.py +0 -0
  45. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflow_approvers_pb2_grpc.py +0 -0
  46. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflow_steps_history_pb2.py +0 -0
  47. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflow_steps_history_pb2_grpc.py +0 -0
  48. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflow_steps_pb2.py +0 -0
  49. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflow_steps_pb2_grpc.py +0 -0
  50. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflows_history_pb2.py +0 -0
  51. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflows_history_pb2_grpc.py +0 -0
  52. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/approval_workflows_pb2_grpc.py +0 -0
  53. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/constants.py +0 -0
  54. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/control_panel_pb2.py +0 -0
  55. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/control_panel_pb2_grpc.py +0 -0
  56. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/drivers_pb2_grpc.py +0 -0
  57. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/errors.py +0 -0
  58. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/health_checks_pb2.py +0 -0
  59. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/health_checks_pb2_grpc.py +0 -0
  60. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/identity_aliases_history_pb2.py +0 -0
  61. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/identity_aliases_history_pb2_grpc.py +0 -0
  62. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/identity_aliases_pb2.py +0 -0
  63. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/identity_aliases_pb2_grpc.py +0 -0
  64. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/identity_sets_history_pb2.py +0 -0
  65. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/identity_sets_history_pb2_grpc.py +0 -0
  66. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/identity_sets_pb2.py +0 -0
  67. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/identity_sets_pb2_grpc.py +0 -0
  68. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/nodes_history_pb2.py +0 -0
  69. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/nodes_history_pb2_grpc.py +0 -0
  70. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/nodes_pb2.py +0 -0
  71. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/nodes_pb2_grpc.py +0 -0
  72. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/options_pb2.py +0 -0
  73. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/options_pb2_grpc.py +0 -0
  74. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/organization_history_pb2.py +0 -0
  75. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/organization_history_pb2_grpc.py +0 -0
  76. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/peering_group_nodes_pb2.py +0 -0
  77. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/peering_group_nodes_pb2_grpc.py +0 -0
  78. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/peering_group_peers_pb2.py +0 -0
  79. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/peering_group_peers_pb2_grpc.py +0 -0
  80. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/peering_group_resources_pb2.py +0 -0
  81. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/peering_group_resources_pb2_grpc.py +0 -0
  82. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/peering_groups_pb2.py +0 -0
  83. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/peering_groups_pb2_grpc.py +0 -0
  84. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/policies_history_pb2.py +0 -0
  85. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/policies_history_pb2_grpc.py +0 -0
  86. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/policies_pb2.py +0 -0
  87. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/policies_pb2_grpc.py +0 -0
  88. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/proxy_cluster_keys_pb2.py +0 -0
  89. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/proxy_cluster_keys_pb2_grpc.py +0 -0
  90. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/queries_pb2.py +0 -0
  91. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/queries_pb2_grpc.py +0 -0
  92. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/remote_identities_history_pb2.py +0 -0
  93. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/remote_identities_history_pb2_grpc.py +0 -0
  94. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/remote_identities_pb2.py +0 -0
  95. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/remote_identities_pb2_grpc.py +0 -0
  96. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/remote_identity_groups_history_pb2.py +0 -0
  97. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/remote_identity_groups_history_pb2_grpc.py +0 -0
  98. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/remote_identity_groups_pb2.py +0 -0
  99. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/remote_identity_groups_pb2_grpc.py +0 -0
  100. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/replays_pb2.py +0 -0
  101. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/replays_pb2_grpc.py +0 -0
  102. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/resources_history_pb2.py +0 -0
  103. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/resources_history_pb2_grpc.py +0 -0
  104. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/resources_pb2.py +0 -0
  105. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/resources_pb2_grpc.py +0 -0
  106. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/role_resources_history_pb2.py +0 -0
  107. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/role_resources_history_pb2_grpc.py +0 -0
  108. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/role_resources_pb2.py +0 -0
  109. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/role_resources_pb2_grpc.py +0 -0
  110. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/roles_history_pb2.py +0 -0
  111. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/roles_history_pb2_grpc.py +0 -0
  112. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/roles_pb2.py +0 -0
  113. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/roles_pb2_grpc.py +0 -0
  114. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_engine_policy_pb2.py +0 -0
  115. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_engine_policy_pb2_grpc.py +0 -0
  116. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_engine_types_pb2.py +0 -0
  117. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_engine_types_pb2_grpc.py +0 -0
  118. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_engines_pb2.py +0 -0
  119. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_engines_pb2_grpc.py +0 -0
  120. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_store_healths_pb2.py +0 -0
  121. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_store_healths_pb2_grpc.py +0 -0
  122. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_store_types_pb2.py +0 -0
  123. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_store_types_pb2_grpc.py +0 -0
  124. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_stores_history_pb2.py +0 -0
  125. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_stores_history_pb2_grpc.py +0 -0
  126. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_stores_pb2.py +0 -0
  127. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/secret_stores_pb2_grpc.py +0 -0
  128. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/spec_pb2.py +0 -0
  129. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/spec_pb2_grpc.py +0 -0
  130. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/tags_pb2.py +0 -0
  131. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/tags_pb2_grpc.py +0 -0
  132. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflow_approvers_history_pb2.py +0 -0
  133. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflow_approvers_history_pb2_grpc.py +0 -0
  134. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflow_approvers_pb2.py +0 -0
  135. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflow_approvers_pb2_grpc.py +0 -0
  136. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflow_roles_history_pb2.py +0 -0
  137. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflow_roles_history_pb2_grpc.py +0 -0
  138. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflow_roles_pb2.py +0 -0
  139. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflow_roles_pb2_grpc.py +0 -0
  140. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflows_history_pb2.py +0 -0
  141. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflows_history_pb2_grpc.py +0 -0
  142. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflows_pb2.py +0 -0
  143. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm/workflows_pb2_grpc.py +0 -0
  144. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm.egg-info/SOURCES.txt +0 -0
  145. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm.egg-info/dependency_links.txt +0 -0
  146. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm.egg-info/requires.txt +0 -0
  147. {strongdm-15.2.0 → strongdm-15.5.0}/strongdm.egg-info/top_level.txt +0 -0
@@ -48,6 +48,7 @@ from .approval_workflow_steps_history_pb2 import *
48
48
  from .approval_workflows_pb2 import *
49
49
  from .approval_workflows_history_pb2 import *
50
50
  from .control_panel_pb2 import *
51
+ from .roles_pb2 import *
51
52
  from .health_checks_pb2 import *
52
53
  from .identity_aliases_pb2 import *
53
54
  from .identity_aliases_history_pb2 import *
@@ -74,7 +75,6 @@ from .resources_pb2 import *
74
75
  from .resources_history_pb2 import *
75
76
  from .role_resources_pb2 import *
76
77
  from .role_resources_history_pb2 import *
77
- from .roles_pb2 import *
78
78
  from .roles_history_pb2 import *
79
79
  from .secret_engine_policy_pb2 import *
80
80
  from .secret_engine_types_pb2 import *
@@ -505,6 +505,58 @@ def convert_repeated_aks_user_impersonation_to_porcelain(plumbings):
505
505
  ]
506
506
 
507
507
 
508
+ def convert_amqp_to_porcelain(plumbing):
509
+ if plumbing is None:
510
+ return None
511
+ porcelain = models.AMQP()
512
+ porcelain.bind_interface = (plumbing.bind_interface)
513
+ porcelain.egress_filter = (plumbing.egress_filter)
514
+ porcelain.healthy = (plumbing.healthy)
515
+ porcelain.hostname = (plumbing.hostname)
516
+ porcelain.id = (plumbing.id)
517
+ porcelain.name = (plumbing.name)
518
+ porcelain.password = (plumbing.password)
519
+ porcelain.port = (plumbing.port)
520
+ porcelain.port_override = (plumbing.port_override)
521
+ porcelain.proxy_cluster_id = (plumbing.proxy_cluster_id)
522
+ porcelain.secret_store_id = (plumbing.secret_store_id)
523
+ porcelain.subdomain = (plumbing.subdomain)
524
+ porcelain.tags = convert_tags_to_porcelain(plumbing.tags)
525
+ porcelain.tls_required = (plumbing.tls_required)
526
+ porcelain.username = (plumbing.username)
527
+ return porcelain
528
+
529
+
530
+ def convert_amqp_to_plumbing(porcelain):
531
+ plumbing = AMQP()
532
+ if porcelain is None:
533
+ return plumbing
534
+ plumbing.bind_interface = (porcelain.bind_interface)
535
+ plumbing.egress_filter = (porcelain.egress_filter)
536
+ plumbing.healthy = (porcelain.healthy)
537
+ plumbing.hostname = (porcelain.hostname)
538
+ plumbing.id = (porcelain.id)
539
+ plumbing.name = (porcelain.name)
540
+ plumbing.password = (porcelain.password)
541
+ plumbing.port = (porcelain.port)
542
+ plumbing.port_override = (porcelain.port_override)
543
+ plumbing.proxy_cluster_id = (porcelain.proxy_cluster_id)
544
+ plumbing.secret_store_id = (porcelain.secret_store_id)
545
+ plumbing.subdomain = (porcelain.subdomain)
546
+ plumbing.tags.CopyFrom(convert_tags_to_plumbing(porcelain.tags))
547
+ plumbing.tls_required = (porcelain.tls_required)
548
+ plumbing.username = (porcelain.username)
549
+ return plumbing
550
+
551
+
552
+ def convert_repeated_amqp_to_plumbing(porcelains):
553
+ return [convert_amqp_to_plumbing(porcelain) for porcelain in porcelains]
554
+
555
+
556
+ def convert_repeated_amqp_to_porcelain(plumbings):
557
+ return [convert_amqp_to_porcelain(plumbing) for plumbing in plumbings]
558
+
559
+
508
560
  def convert_aws_to_porcelain(plumbing):
509
561
  if plumbing is None:
510
562
  return None
@@ -3994,6 +4046,68 @@ def convert_repeated_azure_mysql_to_porcelain(plumbings):
3994
4046
  ]
3995
4047
 
3996
4048
 
4049
+ def convert_azure_mysql_managed_identity_to_porcelain(plumbing):
4050
+ if plumbing is None:
4051
+ return None
4052
+ porcelain = models.AzureMysqlManagedIdentity()
4053
+ porcelain.bind_interface = (plumbing.bind_interface)
4054
+ porcelain.database = (plumbing.database)
4055
+ porcelain.egress_filter = (plumbing.egress_filter)
4056
+ porcelain.healthy = (plumbing.healthy)
4057
+ porcelain.hostname = (plumbing.hostname)
4058
+ porcelain.id = (plumbing.id)
4059
+ porcelain.name = (plumbing.name)
4060
+ porcelain.password = (plumbing.password)
4061
+ porcelain.port = (plumbing.port)
4062
+ porcelain.port_override = (plumbing.port_override)
4063
+ porcelain.proxy_cluster_id = (plumbing.proxy_cluster_id)
4064
+ porcelain.secret_store_id = (plumbing.secret_store_id)
4065
+ porcelain.subdomain = (plumbing.subdomain)
4066
+ porcelain.tags = convert_tags_to_porcelain(plumbing.tags)
4067
+ porcelain.use_azure_single_server_usernames = (
4068
+ plumbing.use_azure_single_server_usernames)
4069
+ porcelain.username = (plumbing.username)
4070
+ return porcelain
4071
+
4072
+
4073
+ def convert_azure_mysql_managed_identity_to_plumbing(porcelain):
4074
+ plumbing = AzureMysqlManagedIdentity()
4075
+ if porcelain is None:
4076
+ return plumbing
4077
+ plumbing.bind_interface = (porcelain.bind_interface)
4078
+ plumbing.database = (porcelain.database)
4079
+ plumbing.egress_filter = (porcelain.egress_filter)
4080
+ plumbing.healthy = (porcelain.healthy)
4081
+ plumbing.hostname = (porcelain.hostname)
4082
+ plumbing.id = (porcelain.id)
4083
+ plumbing.name = (porcelain.name)
4084
+ plumbing.password = (porcelain.password)
4085
+ plumbing.port = (porcelain.port)
4086
+ plumbing.port_override = (porcelain.port_override)
4087
+ plumbing.proxy_cluster_id = (porcelain.proxy_cluster_id)
4088
+ plumbing.secret_store_id = (porcelain.secret_store_id)
4089
+ plumbing.subdomain = (porcelain.subdomain)
4090
+ plumbing.tags.CopyFrom(convert_tags_to_plumbing(porcelain.tags))
4091
+ plumbing.use_azure_single_server_usernames = (
4092
+ porcelain.use_azure_single_server_usernames)
4093
+ plumbing.username = (porcelain.username)
4094
+ return plumbing
4095
+
4096
+
4097
+ def convert_repeated_azure_mysql_managed_identity_to_plumbing(porcelains):
4098
+ return [
4099
+ convert_azure_mysql_managed_identity_to_plumbing(porcelain)
4100
+ for porcelain in porcelains
4101
+ ]
4102
+
4103
+
4104
+ def convert_repeated_azure_mysql_managed_identity_to_porcelain(plumbings):
4105
+ return [
4106
+ convert_azure_mysql_managed_identity_to_porcelain(plumbing)
4107
+ for plumbing in plumbings
4108
+ ]
4109
+
4110
+
3997
4111
  def convert_azure_postgres_to_porcelain(plumbing):
3998
4112
  if plumbing is None:
3999
4113
  return None
@@ -12165,6 +12279,8 @@ def convert_resource_to_plumbing(porcelain):
12165
12279
  if isinstance(porcelain, models.AmazonMQAMQP091):
12166
12280
  plumbing.amazon_mqamqp_091.CopyFrom(
12167
12281
  convert_amazon_mqamqp_091_to_plumbing(porcelain))
12282
+ if isinstance(porcelain, models.AMQP):
12283
+ plumbing.amqp.CopyFrom(convert_amqp_to_plumbing(porcelain))
12168
12284
  if isinstance(porcelain, models.Athena):
12169
12285
  plumbing.athena.CopyFrom(convert_athena_to_plumbing(porcelain))
12170
12286
  if isinstance(porcelain, models.AthenaIAM):
@@ -12203,6 +12319,9 @@ def convert_resource_to_plumbing(porcelain):
12203
12319
  if isinstance(porcelain, models.AzureMysql):
12204
12320
  plumbing.azure_mysql.CopyFrom(
12205
12321
  convert_azure_mysql_to_plumbing(porcelain))
12322
+ if isinstance(porcelain, models.AzureMysqlManagedIdentity):
12323
+ plumbing.azure_mysql_managed_identity.CopyFrom(
12324
+ convert_azure_mysql_managed_identity_to_plumbing(porcelain))
12206
12325
  if isinstance(porcelain, models.AzurePostgres):
12207
12326
  plumbing.azure_postgres.CopyFrom(
12208
12327
  convert_azure_postgres_to_plumbing(porcelain))
@@ -12441,6 +12560,8 @@ def convert_resource_to_porcelain(plumbing):
12441
12560
  if plumbing.HasField('amazon_mqamqp_091'):
12442
12561
  return convert_amazon_mqamqp_091_to_porcelain(
12443
12562
  plumbing.amazon_mqamqp_091)
12563
+ if plumbing.HasField('amqp'):
12564
+ return convert_amqp_to_porcelain(plumbing.amqp)
12444
12565
  if plumbing.HasField('athena'):
12445
12566
  return convert_athena_to_porcelain(plumbing.athena)
12446
12567
  if plumbing.HasField('athena_iam'):
@@ -12473,6 +12594,9 @@ def convert_resource_to_porcelain(plumbing):
12473
12594
  return convert_azure_console_to_porcelain(plumbing.azure_console)
12474
12595
  if plumbing.HasField('azure_mysql'):
12475
12596
  return convert_azure_mysql_to_porcelain(plumbing.azure_mysql)
12597
+ if plumbing.HasField('azure_mysql_managed_identity'):
12598
+ return convert_azure_mysql_managed_identity_to_porcelain(
12599
+ plumbing.azure_mysql_managed_identity)
12476
12600
  if plumbing.HasField('azure_postgres'):
12477
12601
  return convert_azure_postgres_to_porcelain(plumbing.azure_postgres)
12478
12602
  if plumbing.HasField('azure_postgres_managed_identity'):
@@ -66,6 +66,8 @@ from .approval_workflows_history_pb2 import *
66
66
  from .approval_workflows_history_pb2_grpc import *
67
67
  from .control_panel_pb2 import *
68
68
  from .control_panel_pb2_grpc import *
69
+ from .roles_pb2 import *
70
+ from .roles_pb2_grpc import *
69
71
  from .health_checks_pb2 import *
70
72
  from .health_checks_pb2_grpc import *
71
73
  from .identity_aliases_pb2 import *
@@ -118,8 +120,6 @@ from .role_resources_pb2 import *
118
120
  from .role_resources_pb2_grpc import *
119
121
  from .role_resources_history_pb2 import *
120
122
  from .role_resources_history_pb2_grpc import *
121
- from .roles_pb2 import *
122
- from .roles_pb2_grpc import *
123
123
  from .roles_history_pb2 import *
124
124
  from .roles_history_pb2_grpc import *
125
125
  from .secret_engine_policy_pb2 import *
@@ -2181,6 +2181,214 @@ class ControlPanel:
2181
2181
  return resp
2182
2182
 
2183
2183
 
2184
+ class Roles:
2185
+ '''
2186
+ A Role has a list of access rules which determine which Resources the members
2187
+ of the Role have access to. An Account can be a member of multiple Roles via
2188
+ AccountAttachments.
2189
+ See `strongdm.models.Role`.
2190
+ '''
2191
+ def __init__(self, channel, client):
2192
+ self.parent = client
2193
+ self.stub = RolesStub(channel)
2194
+
2195
+ def create(self, role, timeout=None):
2196
+ '''
2197
+ Create registers a new Role.
2198
+ '''
2199
+ deadline = None if timeout is None else time.time() + timeout
2200
+ req = RoleCreateRequest()
2201
+
2202
+ if role is not None:
2203
+ req.role.CopyFrom(plumbing.convert_role_to_plumbing(role))
2204
+ tries = 0
2205
+ plumbing_response = None
2206
+ while True:
2207
+ t = None if deadline is None else deadline - time.time()
2208
+ try:
2209
+ plumbing_response = self.stub.Create(
2210
+ req,
2211
+ metadata=self.parent.get_metadata('Roles.Create', req),
2212
+ timeout=t)
2213
+ except Exception as e:
2214
+ if self.parent.shouldRetry(tries, e, deadline):
2215
+ tries += 1
2216
+ time.sleep(self.parent.exponentialBackoff(tries, deadline))
2217
+ continue
2218
+ raise plumbing.convert_error_to_porcelain(e) from e
2219
+ break
2220
+
2221
+ resp = models.RoleCreateResponse()
2222
+ resp.meta = plumbing.convert_create_response_metadata_to_porcelain(
2223
+ plumbing_response.meta)
2224
+ resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
2225
+ plumbing_response.rate_limit)
2226
+ resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role)
2227
+ return resp
2228
+
2229
+ def get(self, id, timeout=None):
2230
+ '''
2231
+ Get reads one Role by ID.
2232
+ '''
2233
+ deadline = None if timeout is None else time.time() + timeout
2234
+ req = RoleGetRequest()
2235
+ if self.parent.snapshot_datetime is not None:
2236
+ req.meta.CopyFrom(GetRequestMetadata())
2237
+ req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
2238
+
2239
+ req.id = (id)
2240
+ tries = 0
2241
+ plumbing_response = None
2242
+ while True:
2243
+ t = None if deadline is None else deadline - time.time()
2244
+ try:
2245
+ plumbing_response = self.stub.Get(
2246
+ req,
2247
+ metadata=self.parent.get_metadata('Roles.Get', req),
2248
+ timeout=t)
2249
+ except Exception as e:
2250
+ if self.parent.shouldRetry(tries, e, deadline):
2251
+ tries += 1
2252
+ time.sleep(self.parent.exponentialBackoff(tries, deadline))
2253
+ continue
2254
+ raise plumbing.convert_error_to_porcelain(e) from e
2255
+ break
2256
+
2257
+ resp = models.RoleGetResponse()
2258
+ resp.meta = plumbing.convert_get_response_metadata_to_porcelain(
2259
+ plumbing_response.meta)
2260
+ resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
2261
+ plumbing_response.rate_limit)
2262
+ resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role)
2263
+ return resp
2264
+
2265
+ def update(self, role, timeout=None):
2266
+ '''
2267
+ Update replaces all the fields of a Role by ID.
2268
+ '''
2269
+ deadline = None if timeout is None else time.time() + timeout
2270
+ req = RoleUpdateRequest()
2271
+
2272
+ if role is not None:
2273
+ req.role.CopyFrom(plumbing.convert_role_to_plumbing(role))
2274
+ tries = 0
2275
+ plumbing_response = None
2276
+ while True:
2277
+ t = None if deadline is None else deadline - time.time()
2278
+ try:
2279
+ plumbing_response = self.stub.Update(
2280
+ req,
2281
+ metadata=self.parent.get_metadata('Roles.Update', req),
2282
+ timeout=t)
2283
+ except Exception as e:
2284
+ if self.parent.shouldRetry(tries, e, deadline):
2285
+ tries += 1
2286
+ time.sleep(self.parent.exponentialBackoff(tries, deadline))
2287
+ continue
2288
+ raise plumbing.convert_error_to_porcelain(e) from e
2289
+ break
2290
+
2291
+ resp = models.RoleUpdateResponse()
2292
+ resp.meta = plumbing.convert_update_response_metadata_to_porcelain(
2293
+ plumbing_response.meta)
2294
+ resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
2295
+ plumbing_response.rate_limit)
2296
+ resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role)
2297
+ return resp
2298
+
2299
+ def delete(self, id, timeout=None):
2300
+ '''
2301
+ Delete removes a Role by ID.
2302
+ '''
2303
+ deadline = None if timeout is None else time.time() + timeout
2304
+ req = RoleDeleteRequest()
2305
+
2306
+ req.id = (id)
2307
+ tries = 0
2308
+ plumbing_response = None
2309
+ while True:
2310
+ t = None if deadline is None else deadline - time.time()
2311
+ try:
2312
+ plumbing_response = self.stub.Delete(
2313
+ req,
2314
+ metadata=self.parent.get_metadata('Roles.Delete', req),
2315
+ timeout=t)
2316
+ except Exception as e:
2317
+ if self.parent.shouldRetry(tries, e, deadline):
2318
+ tries += 1
2319
+ time.sleep(self.parent.exponentialBackoff(tries, deadline))
2320
+ continue
2321
+ raise plumbing.convert_error_to_porcelain(e) from e
2322
+ break
2323
+
2324
+ resp = models.RoleDeleteResponse()
2325
+ resp.meta = plumbing.convert_delete_response_metadata_to_porcelain(
2326
+ plumbing_response.meta)
2327
+ resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
2328
+ plumbing_response.rate_limit)
2329
+ return resp
2330
+
2331
+ def list(self, filter, *args, timeout=None):
2332
+ '''
2333
+ List gets a list of Roles matching a given set of criteria.
2334
+ '''
2335
+ deadline = None if timeout is None else time.time() + timeout
2336
+ req = RoleListRequest()
2337
+ req.meta.CopyFrom(ListRequestMetadata())
2338
+ if self.parent.page_limit > 0:
2339
+ req.meta.limit = self.parent.page_limit
2340
+ if self.parent.snapshot_datetime is not None:
2341
+ req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
2342
+
2343
+ req.filter = plumbing.quote_filter_args(filter, *args)
2344
+
2345
+ def generator(svc, req):
2346
+ tries = 0
2347
+ while True:
2348
+ t = None if deadline is None else deadline - time.time()
2349
+ try:
2350
+ plumbing_response = svc.stub.List(
2351
+ req,
2352
+ metadata=svc.parent.get_metadata('Roles.List', req),
2353
+ timeout=t)
2354
+ except Exception as e:
2355
+ if self.parent.shouldRetry(tries, e, deadline):
2356
+ tries += 1
2357
+ time.sleep(
2358
+ self.parent.exponentialBackoff(tries, deadline))
2359
+ continue
2360
+ raise plumbing.convert_error_to_porcelain(e) from e
2361
+ tries = 0
2362
+ for plumbing_item in plumbing_response.roles:
2363
+ yield plumbing.convert_role_to_porcelain(plumbing_item)
2364
+ if plumbing_response.meta.next_cursor == '':
2365
+ break
2366
+ req.meta.cursor = plumbing_response.meta.next_cursor
2367
+
2368
+ return generator(self, req)
2369
+
2370
+
2371
+ class SnapshotRoles:
2372
+ '''
2373
+ SnapshotRoles exposes the read only methods of the Roles
2374
+ service for historical queries.
2375
+ '''
2376
+ def __init__(self, roles):
2377
+ self.roles = roles
2378
+
2379
+ def get(self, id, timeout=None):
2380
+ '''
2381
+ Get reads one Role by ID.
2382
+ '''
2383
+ return self.roles.get(id, timeout=timeout)
2384
+
2385
+ def list(self, filter, *args, timeout=None):
2386
+ '''
2387
+ List gets a list of Roles matching a given set of criteria.
2388
+ '''
2389
+ return self.roles.list(filter, *args, timeout=timeout)
2390
+
2391
+
2184
2392
  class HealthChecks:
2185
2393
  '''
2186
2394
  HealthChecks lists the last healthcheck between each node and resource.
@@ -3001,6 +3209,37 @@ class ManagedSecrets:
3001
3209
  plumbing_response.rate_limit)
3002
3210
  return resp
3003
3211
 
3212
+ def force_delete(self, id, timeout=None):
3213
+ '''
3214
+ ForceDelete deletes a Managed Secret regardless of errors on external system
3215
+ '''
3216
+ deadline = None if timeout is None else time.time() + timeout
3217
+ req = ManagedSecretDeleteRequest()
3218
+
3219
+ req.id = (id)
3220
+ tries = 0
3221
+ plumbing_response = None
3222
+ while True:
3223
+ t = None if deadline is None else deadline - time.time()
3224
+ try:
3225
+ plumbing_response = self.stub.ForceDelete(
3226
+ req,
3227
+ metadata=self.parent.get_metadata(
3228
+ 'ManagedSecrets.ForceDelete', req),
3229
+ timeout=t)
3230
+ except Exception as e:
3231
+ if self.parent.shouldRetry(tries, e, deadline):
3232
+ tries += 1
3233
+ time.sleep(self.parent.exponentialBackoff(tries, deadline))
3234
+ continue
3235
+ raise plumbing.convert_error_to_porcelain(e) from e
3236
+ break
3237
+
3238
+ resp = models.ManagedSecretDeleteResponse()
3239
+ resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
3240
+ plumbing_response.rate_limit)
3241
+ return resp
3242
+
3004
3243
  def get(self, id, timeout=None):
3005
3244
  '''
3006
3245
  Get gets details of a Managed Secret without sensitive data
@@ -5096,6 +5335,7 @@ class Resources:
5096
5335
  `strongdm.models.AmazonES`
5097
5336
  `strongdm.models.AmazonESIAM`
5098
5337
  `strongdm.models.AmazonMQAMQP091`
5338
+ `strongdm.models.AMQP`
5099
5339
  `strongdm.models.Athena`
5100
5340
  `strongdm.models.AthenaIAM`
5101
5341
  `strongdm.models.AuroraMysql`
@@ -5110,6 +5350,7 @@ class Resources:
5110
5350
  `strongdm.models.AzureCertificate`
5111
5351
  `strongdm.models.AzureConsole`
5112
5352
  `strongdm.models.AzureMysql`
5353
+ `strongdm.models.AzureMysqlManagedIdentity`
5113
5354
  `strongdm.models.AzurePostgres`
5114
5355
  `strongdm.models.AzurePostgresManagedIdentity`
5115
5356
  `strongdm.models.BigQuery`
@@ -5642,214 +5883,6 @@ class RoleResourcesHistory:
5642
5883
  return generator(self, req)
5643
5884
 
5644
5885
 
5645
- class Roles:
5646
- '''
5647
- A Role has a list of access rules which determine which Resources the members
5648
- of the Role have access to. An Account can be a member of multiple Roles via
5649
- AccountAttachments.
5650
- See `strongdm.models.Role`.
5651
- '''
5652
- def __init__(self, channel, client):
5653
- self.parent = client
5654
- self.stub = RolesStub(channel)
5655
-
5656
- def create(self, role, timeout=None):
5657
- '''
5658
- Create registers a new Role.
5659
- '''
5660
- deadline = None if timeout is None else time.time() + timeout
5661
- req = RoleCreateRequest()
5662
-
5663
- if role is not None:
5664
- req.role.CopyFrom(plumbing.convert_role_to_plumbing(role))
5665
- tries = 0
5666
- plumbing_response = None
5667
- while True:
5668
- t = None if deadline is None else deadline - time.time()
5669
- try:
5670
- plumbing_response = self.stub.Create(
5671
- req,
5672
- metadata=self.parent.get_metadata('Roles.Create', req),
5673
- timeout=t)
5674
- except Exception as e:
5675
- if self.parent.shouldRetry(tries, e, deadline):
5676
- tries += 1
5677
- time.sleep(self.parent.exponentialBackoff(tries, deadline))
5678
- continue
5679
- raise plumbing.convert_error_to_porcelain(e) from e
5680
- break
5681
-
5682
- resp = models.RoleCreateResponse()
5683
- resp.meta = plumbing.convert_create_response_metadata_to_porcelain(
5684
- plumbing_response.meta)
5685
- resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
5686
- plumbing_response.rate_limit)
5687
- resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role)
5688
- return resp
5689
-
5690
- def get(self, id, timeout=None):
5691
- '''
5692
- Get reads one Role by ID.
5693
- '''
5694
- deadline = None if timeout is None else time.time() + timeout
5695
- req = RoleGetRequest()
5696
- if self.parent.snapshot_datetime is not None:
5697
- req.meta.CopyFrom(GetRequestMetadata())
5698
- req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
5699
-
5700
- req.id = (id)
5701
- tries = 0
5702
- plumbing_response = None
5703
- while True:
5704
- t = None if deadline is None else deadline - time.time()
5705
- try:
5706
- plumbing_response = self.stub.Get(
5707
- req,
5708
- metadata=self.parent.get_metadata('Roles.Get', req),
5709
- timeout=t)
5710
- except Exception as e:
5711
- if self.parent.shouldRetry(tries, e, deadline):
5712
- tries += 1
5713
- time.sleep(self.parent.exponentialBackoff(tries, deadline))
5714
- continue
5715
- raise plumbing.convert_error_to_porcelain(e) from e
5716
- break
5717
-
5718
- resp = models.RoleGetResponse()
5719
- resp.meta = plumbing.convert_get_response_metadata_to_porcelain(
5720
- plumbing_response.meta)
5721
- resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
5722
- plumbing_response.rate_limit)
5723
- resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role)
5724
- return resp
5725
-
5726
- def update(self, role, timeout=None):
5727
- '''
5728
- Update replaces all the fields of a Role by ID.
5729
- '''
5730
- deadline = None if timeout is None else time.time() + timeout
5731
- req = RoleUpdateRequest()
5732
-
5733
- if role is not None:
5734
- req.role.CopyFrom(plumbing.convert_role_to_plumbing(role))
5735
- tries = 0
5736
- plumbing_response = None
5737
- while True:
5738
- t = None if deadline is None else deadline - time.time()
5739
- try:
5740
- plumbing_response = self.stub.Update(
5741
- req,
5742
- metadata=self.parent.get_metadata('Roles.Update', req),
5743
- timeout=t)
5744
- except Exception as e:
5745
- if self.parent.shouldRetry(tries, e, deadline):
5746
- tries += 1
5747
- time.sleep(self.parent.exponentialBackoff(tries, deadline))
5748
- continue
5749
- raise plumbing.convert_error_to_porcelain(e) from e
5750
- break
5751
-
5752
- resp = models.RoleUpdateResponse()
5753
- resp.meta = plumbing.convert_update_response_metadata_to_porcelain(
5754
- plumbing_response.meta)
5755
- resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
5756
- plumbing_response.rate_limit)
5757
- resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role)
5758
- return resp
5759
-
5760
- def delete(self, id, timeout=None):
5761
- '''
5762
- Delete removes a Role by ID.
5763
- '''
5764
- deadline = None if timeout is None else time.time() + timeout
5765
- req = RoleDeleteRequest()
5766
-
5767
- req.id = (id)
5768
- tries = 0
5769
- plumbing_response = None
5770
- while True:
5771
- t = None if deadline is None else deadline - time.time()
5772
- try:
5773
- plumbing_response = self.stub.Delete(
5774
- req,
5775
- metadata=self.parent.get_metadata('Roles.Delete', req),
5776
- timeout=t)
5777
- except Exception as e:
5778
- if self.parent.shouldRetry(tries, e, deadline):
5779
- tries += 1
5780
- time.sleep(self.parent.exponentialBackoff(tries, deadline))
5781
- continue
5782
- raise plumbing.convert_error_to_porcelain(e) from e
5783
- break
5784
-
5785
- resp = models.RoleDeleteResponse()
5786
- resp.meta = plumbing.convert_delete_response_metadata_to_porcelain(
5787
- plumbing_response.meta)
5788
- resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
5789
- plumbing_response.rate_limit)
5790
- return resp
5791
-
5792
- def list(self, filter, *args, timeout=None):
5793
- '''
5794
- List gets a list of Roles matching a given set of criteria.
5795
- '''
5796
- deadline = None if timeout is None else time.time() + timeout
5797
- req = RoleListRequest()
5798
- req.meta.CopyFrom(ListRequestMetadata())
5799
- if self.parent.page_limit > 0:
5800
- req.meta.limit = self.parent.page_limit
5801
- if self.parent.snapshot_datetime is not None:
5802
- req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
5803
-
5804
- req.filter = plumbing.quote_filter_args(filter, *args)
5805
-
5806
- def generator(svc, req):
5807
- tries = 0
5808
- while True:
5809
- t = None if deadline is None else deadline - time.time()
5810
- try:
5811
- plumbing_response = svc.stub.List(
5812
- req,
5813
- metadata=svc.parent.get_metadata('Roles.List', req),
5814
- timeout=t)
5815
- except Exception as e:
5816
- if self.parent.shouldRetry(tries, e, deadline):
5817
- tries += 1
5818
- time.sleep(
5819
- self.parent.exponentialBackoff(tries, deadline))
5820
- continue
5821
- raise plumbing.convert_error_to_porcelain(e) from e
5822
- tries = 0
5823
- for plumbing_item in plumbing_response.roles:
5824
- yield plumbing.convert_role_to_porcelain(plumbing_item)
5825
- if plumbing_response.meta.next_cursor == '':
5826
- break
5827
- req.meta.cursor = plumbing_response.meta.next_cursor
5828
-
5829
- return generator(self, req)
5830
-
5831
-
5832
- class SnapshotRoles:
5833
- '''
5834
- SnapshotRoles exposes the read only methods of the Roles
5835
- service for historical queries.
5836
- '''
5837
- def __init__(self, roles):
5838
- self.roles = roles
5839
-
5840
- def get(self, id, timeout=None):
5841
- '''
5842
- Get reads one Role by ID.
5843
- '''
5844
- return self.roles.get(id, timeout=timeout)
5845
-
5846
- def list(self, filter, *args, timeout=None):
5847
- '''
5848
- List gets a list of Roles matching a given set of criteria.
5849
- '''
5850
- return self.roles.list(filter, *args, timeout=timeout)
5851
-
5852
-
5853
5886
  class RolesHistory:
5854
5887
  '''
5855
5888
  RolesHistory records all changes to the state of a Role.
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strongdm
3
- Version: 15.2.0
3
+ Version: 15.5.0
4
4
  Summary: strongDM SDK for the Python programming language.
5
5
  Home-page: https://github.com/strongdm/strongdm-sdk-python
6
6
  Author: strongDM Team
7
7
  Author-email: sdk-feedback@strongdm.com
8
8
  License: apache-2.0
9
- Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v15.2.0.tar.gz
9
+ Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v15.5.0.tar.gz
10
10
  Keywords: strongDM,sdm,api,automation,security,audit,database,server,ssh,rdp
11
11
  Platform: UNKNOWN
12
12
  Classifier: Development Status :: 4 - Beta
File without changes
File without changes
File without changes