Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IndexError: list index out of range on self.get_stores(names=name, workspaces=[workspace])[0] when executing create_coveragestore #20

Open
emilianocastaneda opened this issue Nov 5, 2021 · 1 comment

Comments

@emilianocastaneda
Copy link

emilianocastaneda commented Nov 5, 2021

Describe the bug
Trying to create a coveragestore fails, but the store and layer are created correctly.
It seems the return self.get_stores(names=name, workspaces=[workspace])[0] doesn't find the store, but if you wait a few seconds, running the same sentence returns ok.

To Reproduce
Steps to reproduce the behavior:

Execute the following script createcov.py:

from geoserver.catalog import Catalog
cat = Catalog("http://localhost/geoserver/rest", "admin", "geoserver")
cat.create_coveragestore(name='1', path='./1.tiff', upload_data=True, overwrite=False)

See error:
Traceback (most recent call last):
File "createcoverage.py", line 6, in
cat.create_coveragestore(name='1', workspace='geoplatform', path='./1.tiff', upload_data=True, overwrite=False)
File "/home/administrator/gateways_venv/lib/python3.8/site-packages/geoserver/catalog.py", line 646, in create_coveragestore
return self.get_stores(names=name, workspaces=[workspace])[0]
IndexError: list index out of range

Expected behavior
No exception should be raised as store and layer are created

Screenshots
If applicable, add screenshots to help explain your problem.

OS (please complete the following information):

  • OS: Ubuntu server 18.04
  • Python 3.8.10

Additional context
adding a time.sleep(5) before the line return self.get_stores(names=name, workspaces=[workspace])[0] makes the method work correctly on this script, but this is a not reliable workaround.

@MartinPontius
Copy link

@emilianocastaneda I faced the same problem exactly as you described. I don't know a better way than just waiting. Afaik the requests.response object doesn't contain any information about whether the server (geoserver) finished processing or not. If you want to make sure that the time (5 s) is enough, you could check if the store is created in a loop, e.g.:

if resp.status_code != 201:
    raise FailedRequestError('Failed to create coverage/layer {} for : {}, {}'.format(layer_name, name, resp.status_code, resp.text))

while name not in [store.name for store in self.get_stores(workspaces=[workspace])]:
    time.sleep(1)

This should be after the request status is checked to not end up in an infinite loop.
Any comments/ideas from the developers of the package?

seesteins added a commit to seesteins/geoserver-restconfig that referenced this issue Mar 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants