Skip to main content

VecLess CLI

Command-line tool for managing vector data in the VecLess platform.

Features

  • Layer Management: Create, list, update, and delete layers (vector and point cloud)
  • Vector Data Upload: Upload vector data with automatic format conversion (GeoJSON, GeoPackage, Shapefile)
  • Point Cloud Upload: Direct upload of LAS/LAZ/COPC files (LAS 1.0-1.4) without processing
  • Async Processing: Background conversion to FlatGeobuf and PMTiles for vector data
  • Status Tracking: Monitor processing status, view logs, and retry failed uploads
  • Access Control: Manage tokens and permissions
  • Style Management: Create and assign Mapbox GL styles
  • Multiple Output Formats: Table, JSON, or YAML output

Installation

Requirements

  • Python 3.12+
  • AWS credentials configured (via aws configure or environment variables)
  • Access to VecLess infrastructure (dev/test/prod)

Install from source

git clone https://github.com/your-org/vecless-cli.git
cd vecless-cli
uv sync --all-groups --all-extras

Install as package

pip install vecless-cli

Quick Start

1. Create a layer

Vector layer:

vecless --env dev layer create \
  --client acme-corp \
  --product buildings \
  --title "Building Footprints 2024" \
  --layer-type vector \
  --geometry-type Polygon \
  --description "Building footprints from aerial imagery"

Point cloud layer:

vecless --env dev layer create \
  --client acme-corp \
  --product lidar \
  --title "LiDAR Point Cloud 2024" \
  --layer-type pointcloud \
  --description "LiDAR data from aerial survey"

2. Upload data

Upload vector data:

vecless --env dev data upload \
  --layer-id acme-corp:buildings \
  --datetime 2024-01-15T10:00:00 \
  --file buildings.geojson

The CLI will:

  • Extract bounds and attributes from your file
  • Create a timestep in DynamoDB
  • Upload the file to S3
  • Trigger background processing (FlatGeobuf + PMTiles)

Upload point cloud data:

vecless --env dev data upload \
  --layer-id acme-corp:lidar \
  --datetime 2024-01-15T10:00:00 \
  --file pointcloud.las

The CLI will:

  • Validate LAS/LAZ/COPC format and version (1.0-1.4)
  • Extract bounds and dimensions from the file
  • Upload directly to data bucket
  • Set status to completed (no processing needed)

3. Check processing status

vecless --env dev data status \
  --layer-id acme-corp:buildings \
  --datetime 2024-01-15T10:00:00

Command Structure

vecless --env [dev|test|prod]
│
├── layer          # Manage layers
│   ├── create
│   ├── list
│   ├── get
│   ├── update
│   ├── delete
│   └── exists
│
├── data           # Manage vector data
│   ├── upload
│   ├── list-timesteps
│   ├── get-timestep
│   ├── delete-timestep
│   ├── status
│   ├── logs
│   └── retry
│
├── style          # Manage Mapbox GL styles
│   ├── create
│   ├── list
│   ├── get
│   ├── update
│   ├── delete
│   └── assign
│
├── auth           # Manage access tokens
│   ├── create-token
│   ├── list-tokens
│   ├── delete-token
│   └── validate-token
│
└── permission     # Manage permissions
    ├── grant
    ├── revoke
    ├── list
    └── check

Configuration

VecLess CLI uses AWS credentials from your environment. Make sure you have configured:

aws configure

Or set environment variables:

export AWS_ACCESS_KEY_ID=your-key
export AWS_SECRET_ACCESS_KEY=your-secret
export AWS_DEFAULT_REGION=eu-central-1

Output Formats

All commands support multiple output formats:

# Table format (default)
vecless --env dev layer list

# JSON format
vecless --env dev layer list --format json

# YAML format
vecless --env dev layer list --format yaml

Common Workflows

Upload and monitor workflow

# Upload data
vecless --env dev data upload \
  --layer-id acme-corp:buildings \
  --datetime 2024-01-15T10:00:00 \
  --file buildings.geojson

# Check status
vecless --env dev data status \
  --layer-id acme-corp:buildings \
  --datetime 2024-01-15T10:00:00

# If failed, view logs
vecless --env dev data logs \
  --layer-id acme-corp:buildings \
  --datetime 2024-01-15T10:00:00

# Fix and retry
vecless --env dev data retry \
  --layer-id acme-corp:buildings \
  --datetime 2024-01-15T10:00:00 \
  --file buildings_fixed.geojson

Access control workflow

# Create token for specific layers
vecless --env prod auth create-token \
  --layer-ids acme-corp:buildings,acme-corp:roads \
  --ttl 86400

# Grant permission to role
vecless --env prod permission grant \
  --role client:acme-corp:viewer \
  --layer-ids acme-corp:buildings

# Check permissions
vecless --env prod permission list \
  --role client:acme-corp:viewer

Development

Setup

git clone https://github.com/your-org/vecless-cli.git
cd vecless-cli
uv sync --all-groups --all-extras

Run tests

# All tests
uv run pytest tests -v

# With coverage
uv run pytest tests --cov=vecless_cli --cov-report=html

# Specific test file
uv run pytest tests/unit/test_metadata.py -v

Code quality

# Format code
uv run ruff format .

# Lint and fix
uv run ruff check . --fix

Architecture

VecLess CLI follows a clean separation of concerns:

vecless_cli/
├── cli/          # Click commands (user interaction)
├── commands/     # Business logic (pure Python)
├── core/         # Utilities (metadata, formatting)
├── aws/          # AWS client wrappers
└── models/       # Data models

This architecture ensures:

  • Business logic is testable without CLI framework
  • Functions can be reused in other contexts (CI/CD, notebooks)
  • Clear separation between UI and logic

Support

License

MIT

Metadata

Release files for vecless-cli 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vecless-cli 0.2.1
File Size Uploaded
vecless_cli-0.2.1.tar.gz 148.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vecless-cli 0.2.1
File Interpreter ABI Platform
vecless_cli-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 173.9 kB

Release files / vecless_cli-0.2.1.tar.gz

Download URL vecless_cli-0.2.1.tar.gz
Size 148.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b973488d589c8a7d6032d3a43df46efa380a6ec6c0acefd0b3cccfd5acc6f823
BLAKE2b-256 checksum
How to use checksums
c835abc80457d2797dd60fbd1e7bec79d492c8657083ad82cb0c06522ffcc900
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / vecless_cli-0.2.1-py3-none-any.whl

Download URL vecless_cli-0.2.1-py3-none-any.whl
Size 25.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
038fd7c6f0493793dd353dc6d97205fc9ca89a9656a0d80677043ac726fe239a
BLAKE2b-256 checksum
How to use checksums
527ec4d2edd1ebb09e6111a21784aa01ef7e37e704bfccf1774c1ca5c3521f62
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page