umap-project 3.3.1__py3-none-any.whl → 3.3.3__py3-none-any.whl

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 umap-project might be problematic. Click here for more details.

umap/__init__.py CHANGED
@@ -1 +1 @@
1
- VERSION = "3.3.1"
1
+ VERSION = "3.3.3"
@@ -43,7 +43,6 @@ export class DataLayer {
43
43
  this._umap = umap
44
44
  this.sync = umap.syncEngine.proxy(this)
45
45
  this.features = new FeatureManager()
46
- this._geojson = null
47
46
  this._propertiesIndex = []
48
47
 
49
48
  this._leafletMap = leafletMap
@@ -306,7 +305,6 @@ export class DataLayer {
306
305
  fromGeoJSON(geojson, sync = true) {
307
306
  if (!geojson) return []
308
307
  const features = this.addData(geojson, sync)
309
- this._geojson = geojson
310
308
  this._needsFetch = false
311
309
  this.onDataLoaded()
312
310
  this.dataChanged()
@@ -331,12 +329,6 @@ export class DataLayer {
331
329
  }
332
330
  }
333
331
 
334
- backupData() {
335
- if (this._geojson) {
336
- this._geojson_bk = Utils.CopyJSON(this._geojson)
337
- }
338
- }
339
-
340
332
  showAtZoom() {
341
333
  const from = Number.parseInt(this.properties.fromZoom, 10)
342
334
  const to = Number.parseInt(this.properties.toZoom, 10)
@@ -751,7 +743,7 @@ export class DataLayer {
751
743
  const properties = Utils.CopyJSON(this.properties)
752
744
  properties.name = translate('Clone of {name}', { name: this.properties.name })
753
745
  delete properties.id
754
- const geojson = Utils.CopyJSON(this._geojson)
746
+ const geojson = Utils.CopyJSON(this.umapGeoJSON())
755
747
  const datalayer = this._umap.createDirtyDataLayer(properties)
756
748
  datalayer.fromGeoJSON(geojson)
757
749
  return datalayer
@@ -1331,7 +1323,6 @@ export class DataLayer {
1331
1323
  ? { 'X-Datalayer-Reference': this._referenceVersion }
1332
1324
  : {}
1333
1325
  const status = await this._trySave(saveURL, headers, formData)
1334
- this._geojson = geojson
1335
1326
  return status
1336
1327
  }
1337
1328
 
@@ -1371,7 +1362,6 @@ export class DataLayer {
1371
1362
 
1372
1363
  this.setReferenceVersion({ response, sync: true })
1373
1364
 
1374
- this.backupData()
1375
1365
  this.connectToMap()
1376
1366
  this.redraw() // Needed for reordering features
1377
1367
  return true
@@ -186,6 +186,12 @@ export const Cluster = FeatureGroup.extend({
186
186
  return this
187
187
  },
188
188
 
189
+ removeLayer: function (layer) {
190
+ if (!layer.getLatLng) return FeatureGroup.prototype.removeLayer.call(this, layer)
191
+ this._bucket = this._bucket.filter((el) => el !== layer)
192
+ return this
193
+ },
194
+
189
195
  onAdd: function (leafletMap) {
190
196
  this.on('click', this.onClick)
191
197
  this.on('mouseover', this.onMouseOver)
@@ -154,6 +154,7 @@ const ControlsMixin = {
154
154
 
155
155
  const ManageTilelayerMixin = {
156
156
  initTileLayers: function () {
157
+ this.pullProperties()
157
158
  this.tilelayers = []
158
159
  for (const props of this.options.tilelayers) {
159
160
  const layer = this.createTileLayer(props)
@@ -29,6 +29,7 @@ const FeatureMixin = {
29
29
  },
30
30
 
31
31
  onRemove: function (map) {
32
+ this.removeInteractions()
32
33
  this.parentClass.prototype.onRemove.call(this, map)
33
34
  if (map._umap.editedFeature === this.feature) {
34
35
  this.feature.endEdit()
@@ -49,6 +50,13 @@ const FeatureMixin = {
49
50
  this.on('mouseover', this.onMouseOver)
50
51
  },
51
52
 
53
+ removeInteractions: function () {
54
+ this.off('contextmenu editable:vertex:contextmenu', this.onContextMenu)
55
+ this.off('click', this.onClick)
56
+ this.off('editable:edited', this.onCommit)
57
+ this.off('mouseover', this.onMouseOver)
58
+ },
59
+
52
60
  onMouseOver: function () {
53
61
  if (this._map._umap.editEnabled && !this._map._umap.editedFeature) {
54
62
  this._map._umap.tooltip.open({
@@ -112,17 +120,28 @@ const PointMixin = {
112
120
 
113
121
  addInteractions() {
114
122
  FeatureMixin.addInteractions.call(this)
115
- this.on('dragend', (event) => {
116
- this.feature.edit(event)
117
- if (this._cluster) {
118
- delete this._originalLatLng
119
- this.feature.datalayer.dataChanged()
120
- }
121
- })
123
+ this.on('dragend', this._onDragEnd)
122
124
  if (!this.feature.isReadOnly()) this.on('mouseover', this._enableDragging)
123
125
  this.on('mouseout', this._onMouseOut)
124
126
  },
125
127
 
128
+ removeInteractions() {
129
+ FeatureMixin.removeInteractions.call(this)
130
+ this.off('dragend', this._onDragEnd)
131
+ if (!this.feature.isReadOnly()) this.off('mouseover', this._enableDragging)
132
+ this.off('mouseout', this._onMouseOut)
133
+ },
134
+
135
+ _onDragEnd(event) {
136
+ if (this._cluster) {
137
+ delete this._originalLatLng
138
+ this.once('editable:edited', () => {
139
+ this.feature.datalayer.dataChanged()
140
+ })
141
+ }
142
+ this.feature.edit(event)
143
+ },
144
+
126
145
  _onMouseOut: function () {
127
146
  if (this.dragging?._draggable && !this.dragging._draggable._moving) {
128
147
  // Do not disable if the mouse went out while dragging
@@ -180,6 +199,12 @@ export const LeafletMarker = Marker.extend({
180
199
  this.on('popupclose', this.resetHighlight)
181
200
  },
182
201
 
202
+ removeInteractions() {
203
+ PointMixin.removeInteractions.call(this)
204
+ this.off('popupopen', this.highlight)
205
+ this.off('popupclose', this.resetHighlight)
206
+ },
207
+
183
208
  onMoveEnd: function () {
184
209
  this._initIcon()
185
210
  this.update()
@@ -298,6 +323,13 @@ const PathMixin = {
298
323
  this.on('popupclose', this._redraw)
299
324
  },
300
325
 
326
+ removeInteractions: function () {
327
+ FeatureMixin.removeInteractions.call(this)
328
+ this.off('drag editable:drag', this._onDrag)
329
+ this.off('popupopen', this.highlightPath)
330
+ this.off('popupclose', this._redraw)
331
+ },
332
+
301
333
  bindTooltip: function (content, options) {
302
334
  options.sticky = !options.permanent
303
335
  this.parentClass.prototype.bindTooltip.call(this, content, options)
@@ -489,6 +521,12 @@ export const LeafletRoute = LeafletPolyline.extend({
489
521
  this.on('editable:vertex:dragend editable:vertex:deleted', this.onDrawingMoved)
490
522
  },
491
523
 
524
+ removeInteractions: function () {
525
+ PathMixin.removeInteractions.call(this)
526
+ this.off('editable:drawing:clicked', this.onDrawingClick)
527
+ this.off('editable:vertex:dragend editable:vertex:deleted', this.onDrawingMoved)
528
+ },
529
+
492
530
  getEditorClass: (tools) => {
493
531
  return RouteEditor
494
532
  },
@@ -595,7 +595,6 @@ const locale = {
595
595
  "Transform to regular line": "Transformer en ligne simple",
596
596
  "Transform to route": "Transformer en route",
597
597
  "Restore route": "Rétablir la route",
598
- "Compute elevation": "Récupérer les altitudes",
599
598
  "Profile": "Moyen de transport",
600
599
  "Compute elevations": "Récupérer les altitudes",
601
600
  "Route preference": "Préférence de routage",
@@ -595,7 +595,6 @@
595
595
  "Transform to regular line": "Transformer en ligne simple",
596
596
  "Transform to route": "Transformer en route",
597
597
  "Restore route": "Rétablir la route",
598
- "Compute elevation": "Récupérer les altitudes",
599
598
  "Profile": "Moyen de transport",
600
599
  "Compute elevations": "Récupérer les altitudes",
601
600
  "Route preference": "Préférence de routage",
@@ -51,3 +51,49 @@ def test_can_open_feature_on_browser_click(live_server, page, map):
51
51
  expect(page.get_by_text("can you see me ?")).to_be_visible()
52
52
  page.get_by_text("again one another point").click()
53
53
  expect(page.get_by_text("and me ?")).to_be_visible()
54
+
55
+
56
+ def test_can_drag_single_marker_in_cluster_layer(live_server, page, tilelayer, openmap):
57
+ DataLayerFactory(map=openmap, data=DATALAYER_DATA)
58
+ page.goto(f"{live_server.url}{openmap.get_absolute_url()}?edit#7/46.920/3.340")
59
+
60
+ marker = page.locator(".umap-div-icon")
61
+ map = page.locator("#map")
62
+
63
+ expect(page.locator(".edit-undo")).to_be_disabled()
64
+ # Drag marker
65
+ old_bbox = marker.bounding_box()
66
+ marker.first.drag_to(map, target_position={"x": 250, "y": 250})
67
+ assert marker.bounding_box() != old_bbox
68
+ expect(page.locator(".edit-undo")).to_be_enabled()
69
+
70
+
71
+ def test_can_drag_marker_in_cluster(live_server, page, tilelayer, openmap):
72
+ DataLayerFactory(map=openmap, data=DATALAYER_DATA)
73
+ page.goto(f"{live_server.url}{openmap.get_absolute_url()}?edit#18/46.92/3.34")
74
+
75
+ marker = page.locator(".umap-div-icon")
76
+ cluster = page.locator(".umap-cluster-icon")
77
+ map = page.locator("#map")
78
+ expect(marker).to_have_count(0)
79
+
80
+ expect(page.locator(".edit-undo")).to_be_disabled()
81
+ cluster.click()
82
+ marker.first.drag_to(map, target_position={"x": 250, "y": 250})
83
+ expect(page.locator(".edit-undo")).to_be_enabled()
84
+ # There is no more cluster
85
+ expect(marker).to_have_count(2)
86
+
87
+
88
+ def test_can_change_datalayer_of_marker_in_cluster(
89
+ live_server, page, datalayer, openmap, tilelayer
90
+ ):
91
+ DataLayerFactory(map=openmap, data=DATALAYER_DATA)
92
+ datalayer.settings["iconClass"] = "Ball"
93
+ datalayer.save()
94
+ page.goto(f"{live_server.url}{openmap.get_absolute_url()}?edit#7/46.920/3.340")
95
+
96
+ expect(page.locator(".umap-ball-icon")).to_have_count(0)
97
+ page.locator(".umap-div-icon").click(modifiers=["Shift"])
98
+ page.get_by_role("combobox").select_option(str(datalayer.pk))
99
+ expect(page.locator(".umap-ball-icon")).to_have_count(1)
@@ -69,6 +69,7 @@ def test_cancel_deleting_datalayer_should_restore(
69
69
 
70
70
 
71
71
  def test_can_clone_datalayer(live_server, openmap, login, datalayer, page):
72
+ assert DataLayer.objects.count() == 1
72
73
  page.goto(f"{live_server.url}{openmap.get_absolute_url()}?edit")
73
74
  page.get_by_title("Open browser").click()
74
75
  layers = page.locator(".umap-browser .datalayer")
@@ -81,6 +82,9 @@ def test_can_clone_datalayer(live_server, openmap, login, datalayer, page):
81
82
  page.get_by_role("button", name="Clone").click()
82
83
  expect(layers).to_have_count(2)
83
84
  expect(markers).to_have_count(2)
85
+ with page.expect_response(re.compile(".*/datalayer/create/.*")):
86
+ page.get_by_role("button", name="Save").click()
87
+ assert DataLayer.objects.count() == 2
84
88
 
85
89
 
86
90
  def test_can_change_icon_class(live_server, openmap, page):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: umap-project
3
- Version: 3.3.1
3
+ Version: 3.3.3
4
4
  Summary: Create maps with OpenStreetMap layers in a minute and embed them in your site.
5
5
  Author-email: Yohan Boniface <yb@enix.org>
6
6
  Maintainer-email: David Larlet <david@larlet.fr>
@@ -35,7 +35,7 @@ Requires-Dist: mkdocs-material==9.6.18; extra == 'dev'
35
35
  Requires-Dist: mkdocs-static-i18n==1.3.0; extra == 'dev'
36
36
  Requires-Dist: mkdocs==1.6.1; extra == 'dev'
37
37
  Requires-Dist: pymdown-extensions==10.16.1; extra == 'dev'
38
- Requires-Dist: ruff==0.12.10; extra == 'dev'
38
+ Requires-Dist: ruff==0.12.11; extra == 'dev'
39
39
  Requires-Dist: vermin==1.6.0; extra == 'dev'
40
40
  Provides-Extra: docker
41
41
  Requires-Dist: uvicorn==0.35.0; extra == 'docker'
@@ -48,7 +48,7 @@ Requires-Dist: websockets==15.0.1; extra == 'sync'
48
48
  Provides-Extra: test
49
49
  Requires-Dist: daphne==4.2.1; extra == 'test'
50
50
  Requires-Dist: factory-boy==3.3.3; extra == 'test'
51
- Requires-Dist: moto[s3]==5.1.10; extra == 'test'
51
+ Requires-Dist: moto[s3]==5.1.11; extra == 'test'
52
52
  Requires-Dist: playwright>=1.39; extra == 'test'
53
53
  Requires-Dist: pytest-django==4.11.1; extra == 'test'
54
54
  Requires-Dist: pytest-playwright==0.7.0; extra == 'test'
@@ -1,4 +1,4 @@
1
- umap/__init__.py,sha256=P-LYADqNpYK0atH4JUdWBBlQqMSI8J0AD5JUh0pP-UY,18
1
+ umap/__init__.py,sha256=vV4bfYEs3TOb4gVNa58JkphnoCUIFIMbaMSuoX5gwAs,18
2
2
  umap/admin.py,sha256=YlK4CgEWb2eFYRKiklsKouxeiQ8z_b-H2Fv2XCaiGFQ,3014
3
3
  umap/apps.py,sha256=5ssKqPUuNJlapaBmr4LY_HDb7J1NFCT3wzythxQOOfs,109
4
4
  umap/asgi.py,sha256=sJkGqDLgMoPkq2nMRyRE_Hz3ZLJm1X5lgXiQJu6rYt0,660
@@ -264,7 +264,7 @@ umap/static/umap/js/modules/umap.js,sha256=_9A2AjVY4vkeprghMtEmL0J6XmOnMUyeGjU14
264
264
  umap/static/umap/js/modules/urls.js,sha256=76cFqycj2O8huuoYYBvxnVt2Fc2UDbgrRsiv6lQmcSY,890
265
265
  umap/static/umap/js/modules/utils.js,sha256=rT_RILODFUWAvvgjFpT5TtNbu8A9jzn0mlkpHEB8QqM,16044
266
266
  umap/static/umap/js/modules/data/features.js,sha256=FAOZjITU5U9dpezWLF9EMF-pFGtvGva0sckvzwlcT58,38266
267
- umap/static/umap/js/modules/data/layer.js,sha256=Z1eSIFIvNrTC5RDSryB6ycprj2W4c_GuLEYv8vRmEws,43873
267
+ umap/static/umap/js/modules/data/layer.js,sha256=popFJ6SNeIYQm6h2-poSGIxrMZUbHCkzSeNP1x0GPXg,43665
268
268
  umap/static/umap/js/modules/form/builder.js,sha256=akRoO8VpKXqWr3LO4Y_B1zr9gXJL2S5RCJqRDREweq8,6452
269
269
  umap/static/umap/js/modules/form/fields.js,sha256=yUEUPDHF3tgnpDv7UdfMXHsabCMaGsUDXQq2-Qe1krg,36152
270
270
  umap/static/umap/js/modules/importers/banfr.js,sha256=TBwL3GQJdzYtaDtxeHxyPQ7Ycy5zTaQyvzXa55X7n2I,2932
@@ -277,13 +277,13 @@ umap/static/umap/js/modules/importers/openrouteservice.js,sha256=RGHMXDaDpgXg-6L
277
277
  umap/static/umap/js/modules/importers/overpass.js,sha256=cY2kb3Fs8tA6PqBjGyc5bI0mg7L1ijapIAkVGwEhSwI,3341
278
278
  umap/static/umap/js/modules/rendering/controls.js,sha256=7dPxGdfA3zhVfN26ZoTkO-Fg-Mp6QNUIbyoDznHBFN8,10631
279
279
  umap/static/umap/js/modules/rendering/icon.js,sha256=c4kTghfdjku03Ey825LIp9sZ9MS5e4MD8TsV8y33MOo,8910
280
- umap/static/umap/js/modules/rendering/map.js,sha256=zdBF7153X_vE-k0pZhcsNJKIc3nvLT3K0g_VHPfaMDE,12796
280
+ umap/static/umap/js/modules/rendering/map.js,sha256=frdccjuaoK9-PMCNAGGk0y_rG5DVUKWxPkeAQm_F_B4,12822
281
281
  umap/static/umap/js/modules/rendering/popup.js,sha256=OtQYpjhWCoW20XBFeeSKCXMqN-szohaX1TKWhPc9eBo,2577
282
282
  umap/static/umap/js/modules/rendering/template.js,sha256=n74YzbZOS_4CeK3-Jn7NXbkzqsh4zjCbEX9w15QxKu0,11468
283
- umap/static/umap/js/modules/rendering/ui.js,sha256=d4CkbXjTcLxKm7eg45t5qZvKWxwFO48ehapzlhUFw3c,16403
283
+ umap/static/umap/js/modules/rendering/ui.js,sha256=paCAAAwtqwgLbgFUpRXEgObMyklkyK_BTaMbJJdI4-g,17613
284
284
  umap/static/umap/js/modules/rendering/layers/base.js,sha256=G9H41vTrh-6Yn5H9UhKj5BOx03Xp2jcevpZINTDCtHI,2528
285
285
  umap/static/umap/js/modules/rendering/layers/classified.js,sha256=CLktnkjf5_6CzkKVyZcx5wAKvhsRp4pRpCIBauwKeO0,15068
286
- umap/static/umap/js/modules/rendering/layers/cluster.js,sha256=y0wO6K3CMFxXLA4xub0wTJi5gQ3e9O7ZNf2pfVfx-cE,7789
286
+ umap/static/umap/js/modules/rendering/layers/cluster.js,sha256=YT1SPsYxRnIA6us48-oKC5Pl9NEb73krG7h7S1u8psY,7992
287
287
  umap/static/umap/js/modules/rendering/layers/heat.js,sha256=K_LsxnfpGImy2HlneV5nK0cBu1FxDmPNxR5VmsV4LaM,4975
288
288
  umap/static/umap/js/modules/sync/engine.js,sha256=LDB7HHCmfVb0Cz30yVXBSV0f-1CGG5bkzrPtaT5RePM,18390
289
289
  umap/static/umap/js/modules/sync/hlc.js,sha256=XeJz3x7qiDz7v-mcgGIynj5ks34FpWx_oSPUPFd_ZGA,2991
@@ -329,8 +329,8 @@ umap/static/umap/locale/fa_IR.js,sha256=cegs43aHAEsBXoMitji9KVhRLYX7aa7o9FYPMpD_
329
329
  umap/static/umap/locale/fa_IR.json,sha256=cRPc42Z0Rfelxc_Ebs3QEoiFrORBO5ZU1UfYLwv8o70,43132
330
330
  umap/static/umap/locale/fi.js,sha256=rfjcFAXpG1KHQphGys1l24hYPITYpZ6065J5utEyrVk,35706
331
331
  umap/static/umap/locale/fi.json,sha256=ks77grVEgGxcjbT0Re5gFrhXPB5wDtKHazCwqppn89E,35641
332
- umap/static/umap/locale/fr.js,sha256=wWtShv8yIokLC1y-eyucDlmsTzkrXCtfOPzq1yOqiPs,38350
333
- umap/static/umap/locale/fr.json,sha256=xaBCmTS5m5iRdO0QWFIcIYRBvOpU07PetlzUm5d4Q9g,38285
332
+ umap/static/umap/locale/fr.js,sha256=qSHGEQ5clGPrMY_4FE5NAn-qm_8-5ILLienZJdCJdII,38296
333
+ umap/static/umap/locale/fr.json,sha256=a4z-rjHqm-iybaM-eu49ltqKkDVDk9MVRRnGe8vJE74,38231
334
334
  umap/static/umap/locale/gl.js,sha256=UI2AACApwGhYluuJcGPE_f7389T6tEpytrwLsWawgKY,37745
335
335
  umap/static/umap/locale/gl.json,sha256=3LN5rMA1FB9KxR_4rolTJdr-k99qDUYYLK6vfMk1rig,37680
336
336
  umap/static/umap/locale/he.js,sha256=5GeT5SQloXbq-tAu_g19LungnjzMfg1yvJrDD4-22O8,38091
@@ -563,14 +563,14 @@ umap/tests/integration/test_caption.py,sha256=9JHQvTju2W-IoV2UBrEUAH4nV2W7eKN2hJ
563
563
  umap/tests/integration/test_categorized_layer.py,sha256=XCCK62fBljTEbt0EKoGsHf9hY2bCEIkyeuPxyhEGJDs,5381
564
564
  umap/tests/integration/test_choropleth.py,sha256=Lsd7tszSIua_GUeXhosB-JWk35zYN-3WKRVYI0ZrNSM,3777
565
565
  umap/tests/integration/test_circles_layer.py,sha256=PjYGmCvAd9qDnldnbiw6nomJs1YgUdX181a9xrWSUYE,2396
566
- umap/tests/integration/test_cluster.py,sha256=AK4t1k0nur2-gSSFPvkhnq7Ki81PgfvYv1AQcZmr5iQ,1680
566
+ umap/tests/integration/test_cluster.py,sha256=H-4sVmI3VnnRgaHYCEGxnUzCnXA0JB14bWQ4cHH5erY,3476
567
567
  umap/tests/integration/test_conditional_rules.py,sha256=D1vs3-fcxmLvlKK17Xf0i6dDkOK1UQWqBBFKodxfm0c,15657
568
568
  umap/tests/integration/test_dashboard.py,sha256=LClLBc8lgDM1-NGhkvUSUMLmMuKt3sR1ubt2Eo-Iq7A,1550
569
569
  umap/tests/integration/test_datalayer.py,sha256=CNxT97ZVB-pPjgXh77i3n3hJKgi4Sm0rYh5SbHB9ZWE,5752
570
570
  umap/tests/integration/test_draw_polygon.py,sha256=WNKXcxMqlTmwI0Yro_PbdpTi-M4gZNeIVa-fSXpS6rE,25298
571
571
  umap/tests/integration/test_draw_polyline.py,sha256=RgivhjEzjHVE6niPG5uAxJjtmEVD11ftuU4Tb47bXh8,14717
572
572
  umap/tests/integration/test_draw_route.py,sha256=hxa_uVqHLLEbbSsEIMsPsq5fMCNoKWY7cRCpMwqudmM,7276
573
- umap/tests/integration/test_edit_datalayer.py,sha256=Ayp4GbCbGTrNaKXBqKLKBApSm4QdMIT8QMC7zgk0LNw,10015
573
+ umap/tests/integration/test_edit_datalayer.py,sha256=l5DwzpWXsy80HxMKrF7z7HZPZi1RtFluONpjDrUBqb8,10224
574
574
  umap/tests/integration/test_edit_map.py,sha256=0TXwrjgSKok7nxa-wy7WjVb8-lG0-zfS8s-f9klmqOQ,8784
575
575
  umap/tests/integration/test_edit_marker.py,sha256=hnKsitnSYJdMEPPRGrfODsCxJx3KfFGbD__wfVjiFns,5271
576
576
  umap/tests/integration/test_edit_polygon.py,sha256=l2CxnTnblRYUiiBV3ERwPkZ-VQTEWzFSFWhAzTF9BgA,5252
@@ -602,8 +602,8 @@ umap/tests/integration/test_view_marker.py,sha256=NFCwNez__E_WsE1DuW5RuB0HVKDP4C
602
602
  umap/tests/integration/test_view_polygon.py,sha256=NMJC6Nt9VpQ8FIU9Pqq2OspHv49xsWlsoXCr8iBa0VA,2060
603
603
  umap/tests/integration/test_view_polyline.py,sha256=aJoXKmLhJaN0yhPdDCVskZNGx3q3mLDkjVPhZ30cadA,13959
604
604
  umap/tests/integration/test_websocket_sync.py,sha256=n3Nd9cDdYMfJjMIkGUidqeceAW2loM8nx17Bh57m0fo,28341
605
- umap_project-3.3.1.dist-info/METADATA,sha256=40YRcftApH08jDGwcfbfBunpp4xfqDPQwnIYB5hlC4w,5747
606
- umap_project-3.3.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
607
- umap_project-3.3.1.dist-info/entry_points.txt,sha256=gz-KDQfEsMLBae8ABOD3foJsCYGPW1tA4Y394R_1RW8,39
608
- umap_project-3.3.1.dist-info/licenses/LICENSE,sha256=kQtrtRKgiPhcl7aO0-lmvbrNAXu7WHyiXvPrUk-TD2Q,820
609
- umap_project-3.3.1.dist-info/RECORD,,
605
+ umap_project-3.3.3.dist-info/METADATA,sha256=tShpwvu_lDd8ZwrVa8NLgSTBf32Bn3DohUdSgOkzQ9k,5747
606
+ umap_project-3.3.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
607
+ umap_project-3.3.3.dist-info/entry_points.txt,sha256=gz-KDQfEsMLBae8ABOD3foJsCYGPW1tA4Y394R_1RW8,39
608
+ umap_project-3.3.3.dist-info/licenses/LICENSE,sha256=kQtrtRKgiPhcl7aO0-lmvbrNAXu7WHyiXvPrUk-TD2Q,820
609
+ umap_project-3.3.3.dist-info/RECORD,,