I am facing the issue when I am trying to publish the Speckle app on streamlit.
I am facing issue with
obj_id = commit.referencedObject
error is
AttributeError: ‘SpeckleException’ object has no attribute ‘referencedObject’
I suspect without knowing the message within that SpeckleExcepton that the error thrown by the previous statement will be along the lines of “client is not authenticated” or equivalent.
You will find that running the code locally falls back to using locally stored account credentials that are not present at streamlit runtime.
Suggest you look at
- How you are authenticating the
client
- You have permission to access that Speckle project
There are a few unknowns still, but we’re here to help
This is my github link
The project works well on local but it it sends error when I am trying to run it on streamlit app.
Yes, then what i suggested earlier is what is happening.
You are using the Wrapper to generate a client - this works well locally as it will use accounts on your machine as the authentication reference. When running under the streamlit, there are no such local accounts.
you are actually doing things correctly in the input
section:
# client
client = SpeckleClient(host=speckleServer)
# get account from token
account = get_account_from_token(speckleToken, speckleServer)
# authenciaction
client.authenticate_with_account(account)
but later, where the error occurs:
# wrapper
wrapper = StreamWrapper(commit_url)
# client
client = wrapper.get_client() ### THIS ASSUMES LOCAL ACCOUNTS WHICH DONT EXIST
# trasnport
transport = wrapper.get_transport()
commit = client.commit.get(wrapper.stream_id, wrapper.commit_id)
This wrapper generated client client
is now an unauthenticated client, and the SpeckleException
will be complaining as such with that client commit get
Hence that commit variable is an SpeckleException
object, which naturally doesn’t contain a referencedObject
property.
So, can you help me with the suggestion for the error?
Is there any documentation to handle this?
Replicate what I said was working correctly in your repo code
in short hand, the most straightforward method would be this:
client = SpeckleClient(host=SERVER_URL)
client.authenticate_with_token(ACCESS_TOKEN)
We also have community solutions found here: