ellipsis 3.1.49__tar.gz → 3.1.50__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ellipsis might be problematic. Click here for more details.

Files changed (81) hide show
  1. {ellipsis-3.1.49 → ellipsis-3.1.50}/PKG-INFO +1 -1
  2. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/__init__.py +2 -2
  3. ellipsis-3.1.50/ellipsis/account/__init__.py +4 -0
  4. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/account/root.py +9 -0
  5. ellipsis-3.1.50/ellipsis/compute/__init__.py +1 -0
  6. ellipsis-3.1.50/ellipsis/compute/root.py +112 -0
  7. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/root.py +9 -0
  8. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/sanitize.py +21 -1
  9. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis.egg-info/PKG-INFO +1 -1
  10. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis.egg-info/SOURCES.txt +2 -0
  11. {ellipsis-3.1.49 → ellipsis-3.1.50}/setup.py +1 -1
  12. {ellipsis-3.1.49 → ellipsis-3.1.50}/test/test.py +12 -1
  13. ellipsis-3.1.49/ellipsis/account/__init__.py +0 -4
  14. {ellipsis-3.1.49 → ellipsis-3.1.50}/LICENSE +0 -0
  15. {ellipsis-3.1.49 → ellipsis-3.1.50}/README.md +0 -0
  16. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/account/accessToken/__init__.py +0 -0
  17. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/account/accessToken/root.py +0 -0
  18. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/apiManager.py +0 -0
  19. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/__init__.py +0 -0
  20. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/bookmark/__init__.py +0 -0
  21. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/bookmark/root.py +0 -0
  22. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/file/__init__.py +0 -0
  23. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/file/root.py +0 -0
  24. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/folder/__init__.py +0 -0
  25. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/folder/root.py +0 -0
  26. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/hashtag/__init__.py +0 -0
  27. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/hashtag/root.py +0 -0
  28. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/invite/__init__.py +0 -0
  29. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/invite/root.py +0 -0
  30. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/member/__init__.py +0 -0
  31. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/member/root.py +0 -0
  32. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/pointCloud/__init__.py +0 -0
  33. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/pointCloud/root.py +0 -0
  34. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/pointCloud/timestamp/__init__.py +0 -0
  35. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/pointCloud/timestamp/file/__init__.py +0 -0
  36. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/pointCloud/timestamp/file/root.py +0 -0
  37. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/pointCloud/timestamp/order/__init__.py +0 -0
  38. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/pointCloud/timestamp/order/root.py +0 -0
  39. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/pointCloud/timestamp/root.py +0 -0
  40. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/pointCloud/timestamp/util.py +0 -0
  41. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/__init__.py +0 -0
  42. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/root.py +0 -0
  43. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/style/__init__.py +0 -0
  44. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/style/root.py +0 -0
  45. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/timestamp/__init__.py +0 -0
  46. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/timestamp/file/__init__.py +0 -0
  47. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/timestamp/file/root.py +0 -0
  48. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/timestamp/order/__init__.py +0 -0
  49. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/timestamp/order/root.py +0 -0
  50. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/timestamp/root.py +0 -0
  51. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/raster/timestamp/util.py +0 -0
  52. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/root.py +0 -0
  53. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/setUpTask/__init__.py +0 -0
  54. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/setUpTask/root.py +0 -0
  55. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/usage/__init__.py +0 -0
  56. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/usage/root.py +0 -0
  57. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/__init__.py +0 -0
  58. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/featureProperty/__init__.py +0 -0
  59. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/featureProperty/root.py +0 -0
  60. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/style/__init__.py +0 -0
  61. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/style/root.py +0 -0
  62. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/__init__.py +0 -0
  63. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/feature/__init__.py +0 -0
  64. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/feature/message/__init__.py +0 -0
  65. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/feature/message/root.py +0 -0
  66. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/feature/root.py +0 -0
  67. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/feature/series/__init__.py +0 -0
  68. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/feature/series/root.py +0 -0
  69. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/file/__init__.py +0 -0
  70. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/file/root.py +0 -0
  71. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/order/__init__.py +0 -0
  72. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/order/root.py +0 -0
  73. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/path/vector/timestamp/root.py +0 -0
  74. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/user/__init__.py +0 -0
  75. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/user/root.py +0 -0
  76. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/util/__init__.py +0 -0
  77. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis/util/root.py +0 -0
  78. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis.egg-info/dependency_links.txt +0 -0
  79. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis.egg-info/requires.txt +0 -0
  80. {ellipsis-3.1.49 → ellipsis-3.1.50}/ellipsis.egg-info/top_level.txt +0 -0
  81. {ellipsis-3.1.49 → ellipsis-3.1.50}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ellipsis
3
- Version: 3.1.49
3
+ Version: 3.1.50
4
4
  Summary: Package to interact with the Ellipsis API
5
5
  Home-page: https://github.com/ellipsis-drive-internal/python-package
6
6
  Author: Daniel van der Maas
@@ -5,8 +5,8 @@ from ellipsis import account
5
5
  from ellipsis import user
6
6
  from ellipsis import path
7
7
  from ellipsis import util
8
-
9
- __version__ = '3.1.49'
8
+ from ellipsis import compute
9
+ __version__ = '3.1.50'
10
10
 
11
11
 
12
12
 
@@ -0,0 +1,4 @@
1
+
2
+ from ellipsis.account.root import logIn, listRoot, getInfo
3
+
4
+ from ellipsis.account import accessToken
@@ -24,6 +24,15 @@ def logIn(username, password, validFor = None):
24
24
 
25
25
  return(token)
26
26
 
27
+
28
+ def getInfo(token):
29
+ token = sanitize.validString('token', token, True)
30
+
31
+ r = apiManager.get( '/account', body={}, token=token)
32
+
33
+
34
+ return r
35
+
27
36
  def listRoot(rootName, token, pathTypes= None, pageStart = None, listAll = True):
28
37
  token = sanitize.validString('token', token, True)
29
38
  rootName = sanitize.validString('rootName', rootName, True)
@@ -0,0 +1 @@
1
+ from ellipsis.compute.root import createCluster
@@ -0,0 +1,112 @@
1
+ import dill
2
+ import base64
3
+ import time
4
+
5
+ from ellipsis.util.root import recurse
6
+ from ellipsis import sanitize
7
+ from ellipsis import apiManager
8
+ from ellipsis.account import getInfo
9
+
10
+
11
+
12
+ def createCluster(layers, token, nodes=None, interpreter='python3.12', requirements= [], awaitTillStarted = True):
13
+
14
+ layers = sanitize.validDictArray('layers', layers, True)
15
+ token = sanitize.validString('token', token, True)
16
+ nodes = sanitize.validInt('nodes', nodes, False)
17
+ interpreter = sanitize.validString('interpreter', interpreter, True)
18
+ requirements = sanitize.validStringArray('requirements', requirements, False)
19
+
20
+ if type(nodes) == type(None):
21
+ info = getInfo(token=token)
22
+ nodes = info['plan']['maxComputeNodes']
23
+ if nodes == 0:
24
+ raise ValueError('You have no compute nodes in your plan. Please update your subscription')
25
+
26
+ requirements = "\n".join(requirements)
27
+
28
+ body = {'layers':layers, 'interpreter':interpreter, 'nodes':nodes, 'requirements':requirements}
29
+ r = apiManager.post('/compute', body, token)
30
+
31
+ clusterId = r['id']
32
+ while awaitTillStarted:
33
+ res = listClusters(token=token)['result']
34
+ r = [x for x in res if x['id'] == clusterId][0]
35
+
36
+ if r['status'] == 'available':
37
+ break
38
+ time.sleep(1)
39
+
40
+ return {'id':clusterId}
41
+
42
+
43
+ def execute(clusterId, f, token, awaitTillCompleted=True):
44
+ clusterId = sanitize.validUuid('clusterId', clusterId, True)
45
+ token = sanitize.validString('token', token, True)
46
+
47
+ if str(type(f)) != "<class 'function'>":
48
+ raise ValueError('parameter f must be a function')
49
+
50
+ f_bytes = dill.dumps(f)
51
+ f_string = base64.b64encode(f_bytes)
52
+
53
+ body = { 'file':f_string}
54
+ apiManager.post('/compute/' + clusterId + '/execute', body, token)
55
+
56
+ while awaitTillCompleted:
57
+ res = listClusters(token=token)['result']
58
+ r = [x for x in res if x['id'] == clusterId][0]
59
+ if r['status'] == 'completed':
60
+ break
61
+ time.sleep(1)
62
+
63
+ return r['result']
64
+
65
+ def parseResults(r):
66
+ results = []
67
+ for x in r:
68
+ x = base64.b64decode(x)
69
+ x = dill.loads(x)
70
+ results = results + x
71
+
72
+ return results
73
+
74
+ def terminateCluster(clusterId, token, awaitTillTerminated = True):
75
+ clusterId = sanitize.validUuid('clusterId', clusterId, True)
76
+ token = sanitize.validString('token', token, True)
77
+
78
+
79
+ r = apiManager.post('/compute/' + clusterId + '/terminate', {}, token)
80
+
81
+ while awaitTillTerminated:
82
+ res = listClusters(token=token)['result']
83
+ z = [x for x in res if x['id'] == clusterId][0]
84
+ if z['status'] == 'stopped':
85
+ break
86
+ time.sleep(1)
87
+
88
+ return r
89
+
90
+ def getClusterInfo(clusterId, token):
91
+ res = listClusters(token=token)['result']
92
+ r = [x for x in res if x['id'] == clusterId]
93
+ if len(r) ==0:
94
+ raise ValueError('No cluster found for given id')
95
+ return r[0]
96
+
97
+ def listClusters(token, pageStart = None, listAll = True):
98
+ token = sanitize.validString('token', token, True)
99
+
100
+
101
+ body = { 'pageStart':pageStart }
102
+
103
+
104
+ def f(body):
105
+ return apiManager.get('/compute', body, token)
106
+
107
+ r = recurse(f, body, listAll)
108
+ for i in range(len(r['result'])):
109
+ if 'result' in r['result'][i]:
110
+ r['result'][i]['result'] = parseResults(r['result'][i]['result'])
111
+ return r
112
+
@@ -12,6 +12,15 @@ def add( name, token, parentId = None, publicAccess =None, metadata=None):
12
12
 
13
13
  return apiManager.post('/path/vector', body, token)
14
14
 
15
+ def editRendering(pathId, maxZoom, token):
16
+ token = sanitize.validString('token', token, True)
17
+ pathId = sanitize.validUuid('parentId', pathId, True)
18
+ maxZoom = sanitize.validInt('maxZoom', maxZoom, True)
19
+
20
+ body = {"method":"vector tiles","parameters":{"zoom":maxZoom,"mb":2,"step":1000,"amount":1000},"centerPointOnly":False,"lod":6}
21
+ r = apiManager.put('/path/' + pathId + '/vector/renderOptions' , body, token)
22
+ return r
23
+
15
24
 
16
25
  def editFilter(pathId, propertyFilter, token):
17
26
  pathId = sanitize.validUuid('pathId', pathId, True)
@@ -81,7 +81,7 @@ def validString(name, value, required):
81
81
  return
82
82
 
83
83
  if type(value) != type('x'):
84
- raise ValueError(name + 'must be of type string')
84
+ raise ValueError(name + ' must be of type string')
85
85
  return(value)
86
86
 
87
87
  def validShapely(name, value, required):
@@ -317,6 +317,26 @@ def validFloatArray(name, value, required):
317
317
  return value
318
318
 
319
319
 
320
+ def validDictArray(name, value, required):
321
+ if not required and type(value) == type(None):
322
+ return
323
+
324
+ try:
325
+ value = list(value)
326
+
327
+ except:
328
+ raise ValueError(name + ' must be an iterable')
329
+
330
+ types = np.array([(not 'dict' in str(type(x))) for x in value])
331
+
332
+ if np.sum(types) > 0:
333
+ raise ValueError(name + ' must be a list of dictionaries')
334
+
335
+
336
+ return value
337
+
338
+
339
+
320
340
  def validIntArray(name, value, required):
321
341
  if not required and type(value) == type(None):
322
342
  return
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ellipsis
3
- Version: 3.1.49
3
+ Version: 3.1.50
4
4
  Summary: Package to interact with the Ellipsis API
5
5
  Home-page: https://github.com/ellipsis-drive-internal/python-package
6
6
  Author: Daniel van der Maas
@@ -13,6 +13,8 @@ ellipsis/account/__init__.py
13
13
  ellipsis/account/root.py
14
14
  ellipsis/account/accessToken/__init__.py
15
15
  ellipsis/account/accessToken/root.py
16
+ ellipsis/compute/__init__.py
17
+ ellipsis/compute/root.py
16
18
  ellipsis/path/__init__.py
17
19
  ellipsis/path/root.py
18
20
  ellipsis/path/bookmark/__init__.py
@@ -6,7 +6,7 @@ with open("README.md", "r") as fh:
6
6
 
7
7
  setuptools.setup(
8
8
  name="ellipsis",
9
- version="3.1.49",
9
+ version="3.1.50",
10
10
  author="Daniel van der Maas",
11
11
  author_email="daniel@ellipsis-drive.com",
12
12
  description="Package to interact with the Ellipsis API",
@@ -70,7 +70,18 @@ setDomains(pathId = pathId, token = daan_token, domains = ['hoi'])
70
70
  setDomains(pathId = pathId, token = daan_token, domains = None)
71
71
 
72
72
 
73
+ ####account
74
+ token = logIn('admin', 'k67cFGK1ued6aPP')
73
75
 
76
+ layers = [{'pathId':'07c6ad34-9e0b-494f-9c8c-3f5cfbc1b76f', 'timestampId':'7cf1c34b-b863-419f-9dd5-33eb6ab8b2ac'}]
77
+ clusterId = createCluster(layers = layers, token=token, requirements = ['numpy'], nodes = 2)['id']
78
+
79
+ def f(params):
80
+ r = params['7cf1c34b-b863-419f-9dd5-33eb6ab8b2ac']['raster']
81
+ z = np.max(r)
82
+ return z
83
+
84
+ out = execute(clusterId=clusterId, f=f, token = token)
74
85
 
75
86
 
76
87
  ###files
@@ -571,7 +582,7 @@ el.path.raster.timestamp.file.add(pathId = 'f3f55c63-4f22-4dac-8d96-cd9a38069ee2
571
582
  sh = gpd.read_file('/home/daniel/Ellipsis/db/testset/buildings_mini')
572
583
  b = BytesIO()
573
584
  out = el.util.saveVector(features = sh, targetFile = b)
574
-
585
+ el.util.saveRaster()
575
586
  el.path.vector.timestamp.file.add(pathId = 'c6a341e1-59bf-44f8-a0d7-0962415a8fa2', timestampId= 'ad490f78-0cf0-426e-9238-e0ef803c7371', token = token, fileFormat='gpkg', memFile=out, name = 'test.gpkg')
576
587
 
577
588
 
@@ -1,4 +0,0 @@
1
-
2
- from ellipsis.account.root import logIn, listRoot
3
-
4
- from ellipsis.account import accessToken
File without changes
File without changes
File without changes