1Password / connect-sdk-python

Python SDK for 1Password Connect
https://developer.1password.com/docs/connect
MIT License
200 stars 31 forks source link

load_dict fails when looking up keys with periods in them #44

Open Joe-Still opened 2 years ago

Joe-Still commented 2 years ago

Your environment

SDK Version: 1.2.0

What happened?

Using load_dict against a key with a period in it generates an error: onepasswordconnectsdk.config.InvalidFieldPathException

What did you expect to happen?

Retrieval of value matching that key

Steps to reproduce

Attempt to retreive a value matching a key with a . in it. My case has been part of a Section. ` from onepasswordconnectsdk.client import ( Client, new_client_from_environment, new_client ) from onepasswordconnectsdk import ( load_dict )

client: Client = new_client_from_environment() account="test.name@gmail.com" creds = load_dict(client, { "pass": { "opitem": "My Account", "opfield": "Main Login." + account } }) `

Notes & Logs

Traceback (most recent call last): File "test.py", line 45, in creds = load_dict(client, { File "/home/dev1/.local/lib/python3.8/site-packages/onepasswordconnectsdk/config.py", line 80, in load_dict _set_values_for_item(client=client, File "/home/dev1/.local/lib/python3.8/site-packages/onepasswordconnectsdk/config.py", line 185, in _set_values_for_item raise InvalidFieldPathException( onepasswordconnectsdk.config.InvalidFieldPathException: Invalid field path format for pass

It's understandable that the '.' is normally chaining fields to get one field deeper but keys with email addresses are common and keys with ip addresses are not uncommon in our particular setup. I would expect either an attempt to look for keys with '.'s in them if it fails or a way to wrap it to escape the '.'s

edif2008 commented 2 years ago

Hey @Joe-Still,

Currently the way load_dict works for the opfield is based on the following syntax: section.field. Therefore, having one or more dots in your field's name would throw an error in your case.

I do understand your use case and I've raised this with my team. We will update you when we make a new release with this fix.

Thank you for your patience 😄