Skip to content

Commit

Permalink
use tempfile module
Browse files Browse the repository at this point in the history
  • Loading branch information
gerdie committed Feb 6, 2020
1 parent 7a1dbd4 commit ee30e21
Showing 1 changed file with 19 additions and 16 deletions.
35 changes: 19 additions & 16 deletions tilesets/scripts/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import os
import json
import requests
import tempfile

import click
import cligj
Expand Down Expand Up @@ -302,12 +303,12 @@ def validate_source(features):
@cli.command("add-source")
@click.argument("username", required=True, type=str)
@click.argument("id", required=True, type=str)
@click.argument("filename", required=True, type=str)
@cligj.features_in_arg
@click.option("--no-validation", is_flag=True, help="Bypass source file validation")
@click.option("--token", "-t", required=False, type=str, help="Mapbox access token")
@click.option("--indent", type=int, default=None, help="Indent for JSON output")
@click.pass_context
def add_source(ctx, username, id, filename, no_validation, token=None, indent=None):
def add_source(ctx, username, id, features, no_validation, token=None, indent=None):
"""Create/add a tileset source
tilesets add-source <username> <id> <path/to/source/data>
Expand All @@ -318,20 +319,22 @@ def add_source(ctx, username, id, filename, no_validation, token=None, indent=No
f"{mapbox_api}/tilesets/v1/sources/{username}/{id}?access_token={mapbox_token}"
)

if not no_validation:
with open(filename) as ld_geojson_file:
for line in ld_geojson_file:
utils.validate_geojson(json.loads(line))

m = MultipartEncoder(fields={"file": ("file", open(filename, "rb"))})
resp = requests.post(
url,
data=m,
headers={
"Content-Disposition": "multipart/form-data",
"Content-type": m.content_type,
},
)
with tempfile.TemporaryFile() as file:
for feature in features:
if not no_validation:
utils.validate_geojson(feature)
file.write((json.dumps(feature) + "\n").encode("utf-8"))

file.seek(0)
m = MultipartEncoder(fields={"file": ("file", file)})
resp = requests.post(
url,
data=m,
headers={
"Content-Disposition": "multipart/form-data",
"Content-type": m.content_type,
},
)

if resp.status_code == 200:
click.echo(json.dumps(resp.json(), indent=indent))
Expand Down

0 comments on commit ee30e21

Please sign in to comment.