Skip to content

Commit dc2bc22

Browse files
committed
Merge branch 'main' into beta
2 parents 1bf98e5 + 88fd880 commit dc2bc22

5 files changed

Lines changed: 312 additions & 100 deletions

File tree

example/desktop_app.py

Lines changed: 162 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ async def main():
1313
# Connects to the 1Password desktop app.
1414
client = await Client.authenticate(
1515
auth=DesktopAuth(
16-
account_name="YourAccountNameAsShownInTheDesktopApp" # Set to your 1Password account name as shown at the top left sidebar of the app, or your account UUID.
16+
# Set to your 1Password account name as shown at the top left sidebar of the app, or your account UUID.
17+
account_name="YourAccountNameAsShownInTheDesktopApp"
1718
),
1819
# Set the following to your own integration name and version.
1920
integration_name="My 1Password Integration",
@@ -32,65 +33,168 @@ async def main():
3233
print(overview.title)
3334
# [developer-docs.sdk.python.list-items]-end
3435

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
36+
await showcase_vault_operations(client)
37+
38+
await showcase_batch_item_operations(client, vault_id)
39+
40+
group_id = os.environ.get("OP_GROUP_ID")
41+
if group_id is None:
42+
raise Exception("OP_GROUP_ID is required")
43+
44+
await showcase_group_permission_operations(client, vault_id, group_id)
45+
46+
environment_id = os.environ.get("OP_ENVIRONMENT_ID")
47+
if environment_id is not None:
48+
# [developer-docs.sdk.python.get-environment-variables]-start
49+
# Read variables from a 1Password Environment
50+
environment = await client.environments.get_variables(environment_id)
51+
for variable in environment.variables:
52+
print(f"{variable.name}: {variable.value} (masked: {variable.masked})")
53+
# [developer-docs.sdk.python.get-environment-variables]-end
54+
55+
56+
async def showcase_vault_operations(client: Client):
57+
# [developer-docs.sdk.python.create-vault]-start
58+
# Create Vault
59+
vault_create_params = VaultCreateParams(
60+
title="Python SDK Vault",
61+
description="A description",
62+
allow_admins_access=False,
63+
)
64+
created_vault = await client.vaults.create(vault_create_params)
65+
print(f"Created vault: {created_vault.id} - {created_vault.title}")
66+
# [developer-docs.sdk.python.create-vault]-end
67+
68+
# [developer-docs.sdk.python.vault-overview]-start
69+
vault_overview = await client.vaults.get_overview(created_vault.id)
70+
print(vault_overview)
71+
# [developer-docs.sdk.python.vault-overview]-end
72+
73+
# [developer-docs.sdk.python.update-vault]-start
74+
# Update Vault
75+
update_params = VaultUpdateParams(
76+
title="Python SDK Updated Name",
77+
description="Updated description",
78+
)
79+
80+
await client.vaults.update(created_vault.id, update_params)
81+
# [developer-docs.sdk.python.update-vault]-end
4082

4183
# [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)
84+
# Get Vault
85+
get_params = VaultGetParams(
86+
accessors=True,
87+
)
88+
89+
updated_vault = await client.vaults.get(created_vault.id, get_params)
90+
print(f"Updated vault: {updated_vault.id} - {updated_vault.title}")
4591
# [developer-docs.sdk.python.get-vault-details]-end
4692

47-
# [developer-docs.sdk.python.batch-create-items]-start
93+
# [developer-docs.sdk.python.delete-vault]-start
94+
# Delete Vault
95+
await client.vaults.delete(created_vault.id)
96+
# [developer-docs.sdk.python.delete-vault]-end
97+
98+
# [developer-docs.sdk.python.list-vault]-start
99+
# List Vaults
100+
vaults = await client.vaults.list()
101+
for vault in vaults:
102+
print(vault.title)
103+
# [developer-docs.sdk.python.list-vault]-end
104+
105+
106+
async def showcase_group_permission_operations(client: Client, vault_id: str, group_id: str):
107+
108+
# [developer-docs.sdk.python.grant-group-permissions]-start
109+
# Grant Group Permissions
110+
await client.vaults.grant_group_permissions(
111+
vault_id=vault_id,
112+
group_permissions_list=[
113+
GroupAccess(
114+
group_id=group_id,
115+
permissions=READ_ITEMS,
116+
)
117+
],
118+
)
119+
print(f"Granted group {group_id} permissions to vault {vault_id}")
120+
# [developer-docs.sdk.python.grant-group-permissions]-end
121+
122+
# [developer-docs.sdk.python.update-group-permissions]-start
123+
# Update Group Permissions
124+
await client.vaults.update_group_permissions(
125+
group_permissions_list=[
126+
GroupVaultAccess(
127+
vault_id=vault_id,
128+
group_id=group_id,
129+
permissions=READ_ITEMS | CREATE_ITEMS | UPDATE_ITEMS,
130+
)
131+
],
132+
)
133+
print(f"Updated group {group_id} permissions to vault {vault_id}")
134+
# [developer-docs.sdk.python.update-group-permissions]-start
135+
136+
# [developer-docs.sdk.python.revoke-group-permissions]-start
137+
# Revoke Group Permissions
138+
await client.vaults.revoke_group_permissions(
139+
vault_id=vault_id,
140+
group_id=group_id,
141+
)
142+
# [developer-docs.sdk.python.update-group-permissions]-end
143+
144+
# [developer-docs.sdk.python.get-group]-start
145+
# Get a group
146+
group = await client.groups.get(group_id, GroupGetParams(vaultPermissions=False))
147+
print(group)
148+
# [developer-docs.sdk.python.get-group]-end
149+
150+
151+
async def showcase_batch_item_operations(client: Client, vault_id: str):
152+
# [developer-docs.sdk.python.batch-create-items]-start
48153
items_to_create = []
49154
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)
155+
items_to_create.append(
156+
ItemCreateParams(
157+
title="My Login Item {}".format(i),
158+
category=ItemCategory.LOGIN,
159+
vault_id=vault_id,
160+
fields=[
161+
ItemField(
162+
id="username",
163+
title="username",
164+
field_type=ItemFieldType.TEXT,
165+
value="mynameisjeff",
166+
),
167+
ItemField(
168+
id="password",
169+
title="password",
170+
field_type=ItemFieldType.CONCEALED,
171+
value="jeff",
172+
),
173+
ItemField(
174+
id="onetimepassword",
175+
title="one-time-password",
176+
field_type=ItemFieldType.TOTP,
177+
section_id="totpsection",
178+
value="otpauth://totp/my-example-otp?secret=jncrjgbdjnrncbjsr&issuer=1Password",
179+
),
180+
],
181+
sections=[
182+
ItemSection(id="", title=""),
183+
ItemSection(id="totpsection", title=""),
184+
],
185+
tags=["test tag 1", "test tag 2"],
186+
websites=[
187+
Website(
188+
label="my custom website",
189+
url="https://example.com",
190+
autofill_behavior=AutofillBehavior.NEVER,
191+
)
192+
],
193+
)
194+
)
195+
196+
# Create all items in the same vault in a single batch
197+
batchCreateResponse = await client.items.create_all(vault_id, items_to_create)
94198

95199
item_ids = []
96200
for res in batchCreateResponse.individual_responses:
@@ -103,8 +207,8 @@ async def main():
103207
# [developer-docs.sdk.python.batch-create-items]-end
104208

105209
# [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)
210+
# Get multiple items form the same vault in a single batch
211+
batchGetReponse = await client.items.get_all(vault_id, item_ids)
108212
for res in batchGetReponse.individual_responses:
109213
if res.content is not None:
110214
print('Obtained item "{}" ({})'.format(
@@ -114,34 +218,14 @@ async def main():
114218
# [developer-docs.sdk.python.batch-get-items]-end
115219

116220
# [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)
221+
# Delete multiple items from the same vault in a single batch
222+
batchDeleteResponse = await client.items.delete_all(vault_id, item_ids)
119223
for id, res in batchDeleteResponse.individual_responses.items():
120224
if res.error is not None:
121225
print("[Batch delete] Something went wrong: {}".format(res.error))
122226
else:
123227
print("Deleted item {}".format(id))
124228
# [developer-docs.sdk.python.batch-delete-items]-end
125229

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-
136-
environment_id = os.environ.get("OP_ENVIRONMENT_ID")
137-
if environment_id is not None:
138-
# [developer-docs.sdk.python.get-environment-variables]-start
139-
# Read variables from a 1Password Environment
140-
environment = await client.environments.get_variables(environment_id)
141-
for variable in environment.variables:
142-
print(f"{variable.name}: {variable.value} (masked: {variable.masked})")
143-
# [developer-docs.sdk.python.get-environment-variables]-end
144-
145-
146230
if __name__ == "__main__":
147231
asyncio.run(main())

0 commit comments

Comments
 (0)