Plan
step params: params
limit = "2"
##output limit
partial bash: cmd "/bin/bash\0-e\0in/script"
script = !
step fetch-pops.csv: partial bash
$url = "https://data.cityofnewyork.us/resource/rvih-nhyn.csv"
script = "curl -fsSL \"$url\" > out/data"
##output data
step pops.csv: partial bash
data = fetch-pops.csv:data
$limit = params:limit
script = "if [[ $limit -eq 0 ]]; then cp in/data out/; else head -n $(($limit+1)) in/data > out/data; fi"
##output data
step transpose: partial bash
pops.csv = pops.csv:data
transpose.py = ./transpose.py
script = "python in/transpose.py in/pops.csv out"
##output M010023
##output M050022
step plan-mux: partial bash
script = ./mux.sh
$param = "env"
parts/ = transpose:
##output parts/M010023
##output parts/M050022
##output plan.knit
step mux: flow plan-mux:
context/ = ./scrape-apop/
##output M010023/details.html
##output M010023/site-plan.png
##output M050022/details.html
##output M050022/site-plan.png
# TODO other names to consider: convert, store
partial filter-bash: cmd "/bin/bash\0-e\0in/_.skip/filter.sh"
_.skip/filter.sh = ./filter.sh
_.skip/filters/ = ./filters/
script = !
step building.shz: partial filter-bash
# This limited export only includes polygons not center points.
$url = "https://data.cityofnewyork.us/api/geospatial/qb5r-6dgf?method=export&format=Shapefile"
script = "mkdir save.fs && curl -fsSL \"$url\" > save.fs/data"
##output data.fs
step building-where-clause: partial bash
pops.csv = pops.csv:data
script = "echo -n \"BIN IN ($(< in/pops.csv nix run nixpkgs#xsv select bin | tail -n+2 | grep -vxF '\"\"' | paste -sd, -))\" > out/data"
##output data
step select-buildings: partial filter-bash
building.shz.fs = building.shz:data.fs
where = building-where-clause:data
script = "mkdir save.fs && nix shell nixpkgs#gdalMinimal -c ogr2ogr -f GeoJSON save.fs/footprints.geojson load/building.shz -lco RFC7946=YES -where @in/where"
##output footprints.geojson.fs
step pops.geojson: partial filter-bash
raw.skip/pops.csv = pops.csv:data
footprints.geojson.fs = select-buildings:footprints.geojson.fs
raw.skip/csv_to_geojson.py = ./csv_to_geojson.py
script = "python in/raw.skip/csv_to_geojson.py in/raw.skip/pops.csv out/data load/footprints.geojson"
##output data
step web: identity
index.html = ./map.html
pops.geojson = pops.geojson:data
pops/ = mux:
##output index.html
##output pops.geojson
##output pops/M010023/details.html
##output pops/M010023/site-plan.png
##output pops/M050022/details.html
##output pops/M050022/site-plan.png
# higher level planning interface
# show the unmet requirement (from session?)
# command to inspect a step?
# building_constructed (always Completed?) vs Year Completed
# principal_public_space
# other_required
Details