Skip to content

Commit 49d1327

Browse files
authored
Merge pull request #206 from 1Password/morgan/add-vault-group-perms-examples
Updated Example Files to Include Vault CRUDL and Group Permissions Management
2 parents a99922d + 51c6c09 commit 49d1327

2 files changed

Lines changed: 289 additions & 83 deletions

File tree

example/desktop_app.py

Lines changed: 150 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -32,107 +32,186 @@ async def main():
3232
print(overview.title)
3333
# [developer-docs.sdk.python.list-items]-end
3434

35-
# [developer-docs.sdk.python.get-vault-overview]-start
36-
# Get vault overview
37-
vaultOverview = await client.vaults.get_overview(vault_id)
38-
print(vaultOverview)
39-
# [developer-docs.sdk.python.get-vault-overview]-end
35+
await showcase_vault_operations(client)
36+
37+
await showcase_batch_item_operations(client, vault_id)
38+
39+
group_id = os.environ.get("OP_GROUP_ID")
40+
if group_id is None:
41+
raise Exception("OP_GROUP_ID is required")
42+
43+
await showcase_group_permission_operations(client, vault_id, group_id)
44+
45+
async def showcase_vault_operations(client: Client):
46+
# [developer-docs.sdk.python.create-vault]-start
47+
# Create Vault
48+
vault_create_params = VaultCreateParams(
49+
title="Python SDK Vault",
50+
description="A description",
51+
allow_admins_access=False,
52+
)
53+
created_vault = await client.vaults.create(vault_create_params)
54+
print(f"Created vault: {created_vault.id} - {created_vault.title}")
55+
# [developer-docs.sdk.python.create-vault]-end
56+
57+
# [developer-docs.sdk.python.vault-overview]-start
58+
vault_overview = await client.vaults.get_overview(created_vault.id)
59+
print(vault_overview)
60+
# [developer-docs.sdk.python.vault-overview]-end
61+
62+
# [developer-docs.sdk.python.update-vault]-start
63+
# Update Vault
64+
update_params = VaultUpdateParams(
65+
title="Python SDK Updated Name",
66+
description="Updated description",
67+
)
68+
69+
await client.vaults.update(created_vault.id, update_params)
70+
# [developer-docs.sdk.python.update-vault]-end
4071

4172
# [developer-docs.sdk.python.get-vault-details]-start
42-
# Get vault details
43-
vault = await client.vaults.get(vaultOverview.id, VaultGetParams(accessors=False))
44-
print(vault)
73+
# Get Vault
74+
get_params = VaultGetParams(
75+
accessors=True,
76+
)
77+
78+
updated_vault = await client.vaults.get(created_vault.id, get_params)
79+
print(f"Updated vault: {updated_vault.id} - {updated_vault.title}")
4580
# [developer-docs.sdk.python.get-vault-details]-end
4681

47-
# [developer-docs.sdk.python.batch-create-items]-start
82+
# [developer-docs.sdk.python.delete-vault]-start
83+
# Delete Vault
84+
await client.vaults.delete(created_vault.id)
85+
# [developer-docs.sdk.python.delete-vault]-end
86+
87+
# [developer-docs.sdk.python.list-vault]-start
88+
# List Vaults
89+
vaults = await client.vaults.list()
90+
for vault in vaults:
91+
print(vault.title)
92+
# [developer-docs.sdk.python.list-vault]-end
93+
94+
async def showcase_group_permission_operations(client: Client, vault_id: str, group_id: str):
95+
96+
# [developer-docs.sdk.python.grant-group-permissions]-start
97+
# Grant Group Permissions
98+
await client.vaults.grant_group_permissions(
99+
vault_id=vault_id,
100+
group_permissions_list=[
101+
GroupAccess(
102+
group_id=group_id,
103+
permissions=READ_ITEMS,
104+
)
105+
],
106+
)
107+
print(f"Granted group {group_id} permissions to vault {vault_id}")
108+
# [developer-docs.sdk.python.grant-group-permissions]-end
109+
110+
# [developer-docs.sdk.python.update-group-permissions]-start
111+
# Update Group Permissions
112+
await client.vaults.update_group_permissions(
113+
group_permissions_list=[
114+
GroupVaultAccess(
115+
vault_id=vault_id,
116+
group_id=group_id,
117+
permissions= READ_ITEMS | CREATE_ITEMS | UPDATE_ITEMS,
118+
)
119+
],
120+
)
121+
print(f"Updated group {group_id} permissions to vault {vault_id}")
122+
# [developer-docs.sdk.python.update-group-permissions]-start
123+
124+
# [developer-docs.sdk.python.revoke-group-permissions]-start
125+
# Revoke Group Permissions
126+
await client.vaults.revoke_group_permissions(
127+
vault_id=vault_id,
128+
group_id=group_id,
129+
)
130+
# [developer-docs.sdk.python.update-group-permissions]-end
131+
132+
# [developer-docs.sdk.python.get-group]-start
133+
# Get a group
134+
group = await client.groups.get(group_id, GroupGetParams(vaultPermissions=False))
135+
print(group)
136+
# [developer-docs.sdk.python.get-group]-end
137+
138+
async def showcase_batch_item_operations(client: Client, vault_id: str):
139+
# [developer-docs.sdk.python.batch-create-items]-start
48140
items_to_create = []
49141
for i in range(1, 4):
50-
items_to_create.append(ItemCreateParams(
51-
title="My Login Item {}".format(i),
52-
category=ItemCategory.LOGIN,
53-
vault_id=vault.id,
54-
fields=[
55-
ItemField(
56-
id="username",
57-
title="username",
58-
field_type=ItemFieldType.TEXT,
59-
value="mynameisjeff",
60-
),
61-
ItemField(
62-
id="password",
63-
title="password",
64-
field_type=ItemFieldType.CONCEALED,
65-
value="jeff",
66-
),
67-
ItemField(
68-
id="onetimepassword",
69-
title="one-time-password",
70-
field_type=ItemFieldType.TOTP,
71-
section_id="totpsection",
72-
value="otpauth://totp/my-example-otp?secret=jncrjgbdjnrncbjsr&issuer=1Password",
73-
),
74-
],
75-
sections=[
76-
ItemSection(
77-
id="", title=""),
78-
ItemSection(
79-
id="totpsection", title=""),
80-
],
81-
tags=[
82-
"test tag 1", "test tag 2"],
83-
websites=[
84-
Website(
85-
label="my custom website",
86-
url="https://example.com",
87-
autofill_behavior=AutofillBehavior.NEVER,
88-
)
89-
],
90-
))
91-
92-
# Create all items in the same vault in a single batch
93-
batchCreateResponse = await client.items.create_all(vault.id, items_to_create)
142+
items_to_create.append(
143+
ItemCreateParams(
144+
title="My Login Item {}".format(i),
145+
category=ItemCategory.LOGIN,
146+
vault_id=vault_id,
147+
fields=[
148+
ItemField(
149+
id="username",
150+
title="username",
151+
field_type=ItemFieldType.TEXT,
152+
value="mynameisjeff",
153+
),
154+
ItemField(
155+
id="password",
156+
title="password",
157+
field_type=ItemFieldType.CONCEALED,
158+
value="jeff",
159+
),
160+
ItemField(
161+
id="onetimepassword",
162+
title="one-time-password",
163+
field_type=ItemFieldType.TOTP,
164+
section_id="totpsection",
165+
value="otpauth://totp/my-example-otp?secret=jncrjgbdjnrncbjsr&issuer=1Password",
166+
),
167+
],
168+
sections=[
169+
ItemSection(id="", title=""),
170+
ItemSection(id="totpsection", title=""),
171+
],
172+
tags=["test tag 1", "test tag 2"],
173+
websites=[
174+
Website(
175+
label="my custom website",
176+
url="https://example.com",
177+
autofill_behavior=AutofillBehavior.NEVER,
178+
)
179+
],
180+
)
181+
)
182+
183+
# Create all items in the same vault in a single batch
184+
batchCreateResponse = await client.items.create_all(vault_id, items_to_create)
94185

95186
item_ids = []
96187
for res in batchCreateResponse.individual_responses:
97188
if res.content is not None:
98-
print('Created item "{}" ({})'.format(
99-
res.content.title, res.content.id))
189+
print('Created item "{}" ({})'.format(res.content.title, res.content.id))
100190
item_ids.append(res.content.id)
101191
elif res.error is not None:
102192
print("[Batch create] Something went wrong: {}".format(res.error))
103193
# [developer-docs.sdk.python.batch-create-items]-end
104194

105195
# [developer-docs.sdk.python.batch-get-items]-start
106-
# Get multiple items form the same vault in a single batch
107-
batchGetReponse = await client.items.get_all(vault.id, item_ids)
196+
# Get multiple items form the same vault in a single batch
197+
batchGetReponse = await client.items.get_all(vault_id, item_ids)
108198
for res in batchGetReponse.individual_responses:
109199
if res.content is not None:
110-
print('Obtained item "{}" ({})'.format(
111-
res.content.title, res.content.id))
200+
print('Obtained item "{}" ({})'.format(res.content.title, res.content.id))
112201
elif res.error is not None:
113202
print("[Batch get] Something went wrong: {}".format(res.error))
114203
# [developer-docs.sdk.python.batch-get-items]-end
115204

116205
# [developer-docs.sdk.python.batch-delete-items]-start
117-
# Delete multiple items from the same vault in a single batch
118-
batchDeleteResponse = await client.items.delete_all(vault.id, item_ids)
206+
# Delete multiple items from the same vault in a single batch
207+
batchDeleteResponse = await client.items.delete_all(vault_id, item_ids)
119208
for id, res in batchDeleteResponse.individual_responses.items():
120209
if res.error is not None:
121210
print("[Batch delete] Something went wrong: {}".format(res.error))
122211
else:
123212
print("Deleted item {}".format(id))
124213
# [developer-docs.sdk.python.batch-delete-items]-end
125214

126-
group_id = os.environ.get("OP_GROUP_ID")
127-
if group_id is None:
128-
raise Exception("OP_GROUP_ID is required")
129-
130-
# [developer-docs.sdk.python.get-group]-start
131-
# Get a group
132-
group = await client.groups.get(group_id, GroupGetParams(vaultPermissions=False))
133-
print(group)
134-
# [developer-docs.sdk.python.get-group]-end
135-
136215

137216
if __name__ == "__main__":
138217
asyncio.run(main())

0 commit comments

Comments
 (0)