Skip to content

Commit 7904f8a

Browse files
authored
improving bounds efficency (#130)
* improving bounds efficency * typi * adding test for loading stack * adding tilebound call and changing getting sectionId from z * typo * typo
1 parent 6029528 commit 7904f8a

File tree

2 files changed

+52
-4
lines changed

2 files changed

+52
-4
lines changed

integration_tests/test_stack_integrated.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,15 @@ def teststack(request, render, render_example_tilespec_and_transforms):
221221
yield stack
222222
render.run(renderapi.stack.delete_stack, stack)
223223

224+
@pytest.fixture(scope="module")
225+
def teststack_loading(request, render, render_example_tilespec_and_transforms):
226+
(tilespecs, tforms) = render_example_tilespec_and_transforms
227+
stack = 'test_insert_loading'
228+
r = render.run(renderapi.stack.create_stack, stack, force_resolution=True)
229+
render.run(renderapi.client.import_tilespecs, stack, tilespecs,
230+
sharedTransforms=tforms)
231+
yield stack
232+
render.run(renderapi.stack.delete_stack, stack)
224233

225234
def test_stack_bounds(render, teststack):
226235
# check the stack bounds
@@ -415,12 +424,15 @@ def test_get_tile_specs_from_stack(render, teststack,
415424
assert len(ts) == len(tilespecs)
416425

417426

418-
def test_get_sectionId_for_z(render, teststack,
427+
def test_get_sectionId_for_z(render, teststack, teststack_loading,
419428
render_example_tilespec_and_transforms):
420429
(tilespecs, tforms) = render_example_tilespec_and_transforms
421430
sectionId = render.run(
422431
renderapi.stack.get_sectionId_for_z, teststack, tilespecs[0].z)
423432
assert (sectionId == tilespecs[0].layout.sectionId)
433+
sectionId = render.run(
434+
renderapi.stack.get_sectionId_for_z, teststack_loading, tilespecs[0].z)
435+
assert (sectionId == tilespecs[0].layout.sectionId)
424436

425437

426438
def test_get_resolvedtiles_from_z(render, teststack,

renderapi/stack.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,40 @@ def get_stack_bounds(stack, host=None, port=None, owner=None, project=None,
649649
return get_json(session, request_url)
650650

651651

652+
@renderaccess
653+
def get_tilebounds_for_z(stack, z, host=None, port=None, owner=None,
654+
project=None, session=requests.session(),
655+
render=None, **kwargs):
656+
"""returns the bounds for each tile associated with a particular z value
657+
658+
:func:`renderapi.render.renderaccess` decorated function
659+
660+
Parameters
661+
----------
662+
stack : str
663+
stack to look within
664+
sectionId : str
665+
sectionId to find z value
666+
render : renderapi.render.Render
667+
render connect object
668+
session : requests.sessions.Session
669+
session object (default start a new one)
670+
671+
Returns
672+
-------
673+
list
674+
list of dictionaries with tilebounds
675+
676+
Raises
677+
------
678+
RenderError
679+
680+
"""
681+
682+
request_url = format_preamble(
683+
host, port, owner, project, stack) + '/z/{}/tileBounds'.format(z)
684+
return get_json(session, request_url)
685+
652686
@renderaccess
653687
def get_sectionId_for_z(stack, z, host=None, port=None, owner=None,
654688
project=None, session=requests.session(),
@@ -678,10 +712,12 @@ def get_sectionId_for_z(stack, z, host=None, port=None, owner=None,
678712
RenderError
679713
680714
"""
681-
sectionData = get_stack_sectionData(
682-
stack, host, port, owner, project, session)
715+
716+
717+
bounds = get_tilebounds_for_z(stack, z, host, port, owner, project, session)
718+
683719
try:
684-
return next(sd['sectionId'] for sd in sectionData if sd['z'] == z)
720+
return bounds[0]['sectionId']
685721
except Exception as e:
686722
logger.error(e)
687723
raise RenderError('Could not find z value %f in stack %s' % (z, stack))

0 commit comments

Comments
 (0)