mirror of
https://github.com/umap-project/umap.git
synced 2025-05-19 12:10:36 +02:00
Compare commits
6 commits
c5ee9fc283
...
815ff046ff
Author | SHA1 | Date | |
---|---|---|---|
![]() |
815ff046ff | ||
![]() |
76c13a61a6 | ||
![]() |
ad51f674ef | ||
![]() |
8949d6fa71 | ||
![]() |
009b32c818 | ||
![]() |
9af74b0a4e |
6 changed files with 81 additions and 6 deletions
|
@ -22,6 +22,15 @@ location / {
|
|||
}
|
||||
```
|
||||
|
||||
Also add this mapping for the `$connection_upgrade` variable:
|
||||
|
||||
```
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
```
|
||||
|
||||
## Uvicorn
|
||||
|
||||
Uvicorn must be installed in the umap virtualenv:
|
||||
|
|
|
@ -564,6 +564,10 @@ class Feature {
|
|||
return false
|
||||
}
|
||||
|
||||
isEmpty() {
|
||||
return !this.coordinates.length
|
||||
}
|
||||
|
||||
clone() {
|
||||
const geojson = this.toGeoJSON()
|
||||
delete geojson.id
|
||||
|
@ -951,10 +955,6 @@ export class LineString extends Path {
|
|||
return { coordinates, type }
|
||||
}
|
||||
|
||||
isEmpty() {
|
||||
return !this.coordinates.length
|
||||
}
|
||||
|
||||
getUIClass() {
|
||||
return super.getUIClass() || LeafletPolyline
|
||||
}
|
||||
|
|
|
@ -522,7 +522,7 @@ export class DataLayer extends ServerStored {
|
|||
})
|
||||
)
|
||||
}
|
||||
if (feature) {
|
||||
if (feature && !feature.isEmpty()) {
|
||||
this.addFeature(feature)
|
||||
if (sync) feature.onCommit()
|
||||
return feature
|
||||
|
|
|
@ -1251,6 +1251,7 @@ Fields.Range = class extends Fields.FloatInput {
|
|||
|
||||
Fields.ManageOwner = class extends BaseElement {
|
||||
build() {
|
||||
super.build()
|
||||
const options = {
|
||||
className: 'edit-owner',
|
||||
on_select: L.bind(this.onSelect, this),
|
||||
|
@ -1281,6 +1282,7 @@ Fields.ManageOwner = class extends BaseElement {
|
|||
|
||||
Fields.ManageEditors = class extends BaseElement {
|
||||
build() {
|
||||
super.build()
|
||||
const options = {
|
||||
className: 'edit-editors',
|
||||
on_select: L.bind(this.onSelect, this),
|
||||
|
|
|
@ -119,7 +119,7 @@ const PointMixin = {
|
|||
this.on('dragend', (event) => {
|
||||
this.isDirty = true
|
||||
this.feature.edit(event)
|
||||
this.feature.pullGeometry()
|
||||
this.feature.pullGeometry(false)
|
||||
})
|
||||
if (!this.feature.isReadOnly()) this.on('mouseover', this._enableDragging)
|
||||
this.on('mouseout', this._onMouseOut)
|
||||
|
|
|
@ -500,6 +500,70 @@ def test_import_multipolyline(live_server, page, tilelayer):
|
|||
expect(paths).to_have_count(1)
|
||||
|
||||
|
||||
def test_should_not_import_empty_coordinates(live_server, page, tilelayer):
|
||||
data = {
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {"name": "An empty polygon"},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [],
|
||||
},
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {"name": "An empty linestring"},
|
||||
"geometry": {
|
||||
"type": "LineString",
|
||||
"coordinates": [],
|
||||
},
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {"name": "An empty point"},
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [],
|
||||
},
|
||||
},
|
||||
{
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [6.922931671142578, 47.481161607175736],
|
||||
},
|
||||
"type": "Feature",
|
||||
"properties": {"name": "A point"},
|
||||
},
|
||||
{
|
||||
"geometry": {
|
||||
"type": "LineString",
|
||||
"coordinates": [
|
||||
[2.4609375, 48.88639177703194],
|
||||
[2.48291015625, 48.76343113791796],
|
||||
[2.164306640625, 48.719961222646276],
|
||||
],
|
||||
},
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"name": "A linestring",
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
page.goto(f"{live_server.url}/map/new/")
|
||||
page.get_by_title("Open browser").click()
|
||||
page.get_by_title("Import data").click()
|
||||
textarea = page.locator(".umap-import textarea")
|
||||
textarea.fill(json.dumps(data))
|
||||
page.locator('select[name="format"]').select_option("geojson")
|
||||
page.get_by_role("button", name="Import data", exact=True).click()
|
||||
page.locator("#map").click(button="right")
|
||||
page.get_by_role("button", name="browse data").click()
|
||||
expect(page.locator("li.feature")).to_have_count(2)
|
||||
|
||||
|
||||
def test_import_csv_without_valid_latlon_headers(tilelayer, live_server, page):
|
||||
page.goto(f"{live_server.url}/map/new/")
|
||||
page.get_by_title("Open browser").click()
|
||||
|
|
Loading…
Reference in a new issue