Objects

inv:1e3427 inv:1e3427 prd:c0ff2a prd:c0ff2a inv:1e3427->prd:c0ff2a web prd:0fc184 prd:0fc184 inv:1e3427->prd:0fc184 pops.geojson prd:e1eb00 prd:e1eb00 inv:1e3427->prd:e1eb00 select-buildings prd:066469 prd:066469 inv:1e3427->prd:066469 building-where-clause prd:a6964c prd:a6964c inv:1e3427->prd:a6964c building.shz prd:69d6c9 prd:69d6c9 inv:1e3427->prd:69d6c9 mux prd:90b523 prd:90b523 inv:1e3427->prd:90b523 plan-mux prd:436fcc prd:436fcc inv:1e3427->prd:436fcc transpose prd:d59f03 prd:d59f03 inv:1e3427->prd:d59f03 pops.csv prd:41b26d prd:41b26d inv:1e3427->prd:41b26d fetch-pops.csv prd:8687eb prd:8687eb inv:1e3427->prd:8687eb params res:74ce6d res:74ce6d prd:c0ff2a->res:74ce6d index.html job:503fee job:503fee prd:c0ff2a->job:503fee res:8b4d98 res:8b4d98 prd:c0ff2a->res:8b4d98 pops.geojson res:789c04 res:789c04 prd:c0ff2a->res:789c04 pops/M010023/details.html res:b19235 res:b19235 prd:c0ff2a->res:b19235 pops/M010023/site-plan.png res:f60ac1 res:f60ac1 prd:c0ff2a->res:f60ac1 pops/M050022/details.html res:424237 res:424237 prd:c0ff2a->res:424237 pops/M050022/site-plan.png job:503fee->res:74ce6d index.html job:503fee->res:8b4d98 pops.geojson job:503fee->res:789c04 pops/M010023/details.html job:503fee->res:b19235 pops/M010023/site-plan.png job:503fee->res:f60ac1 pops/M050022/details.html job:503fee->res:424237 pops/M050022/site-plan.png prd:0fc184->res:8b4d98 data job:e0b307 job:e0b307 prd:0fc184->job:e0b307 res:6d2c09 res:6d2c09 job:e0b307->res:6d2c09 _.skip/filter.sh res:fb40ba res:fb40ba job:e0b307->res:fb40ba _.skip/filters/fs res:672aae res:672aae job:e0b307->res:672aae footprints.geojson.fs res:58a74b res:58a74b job:e0b307->res:58a74b raw.skip/csv_to_geojson.py res:399175 res:399175 job:e0b307->res:399175 raw.skip/pops.csv res:3c152b res:3c152b job:e0b307->res:3c152b script prd:e1eb00->res:672aae footprints.geojson.fs job:64c729 job:64c729 prd:e1eb00->job:64c729 job:64c729->res:6d2c09 _.skip/filter.sh job:64c729->res:fb40ba _.skip/filters/fs res:4b4369 res:4b4369 job:64c729->res:4b4369 building.shz.fs res:61e826 res:61e826 job:64c729->res:61e826 script res:1899aa res:1899aa job:64c729->res:1899aa where prd:066469->res:1899aa data job:a1232a job:a1232a prd:066469->job:a1232a job:a1232a->res:399175 pops.csv res:1d7913 res:1d7913 job:a1232a->res:1d7913 script prd:a6964c->res:4b4369 data.fs job:a2a341 job:a2a341 prd:a6964c->job:a2a341 res:597d39 res:597d39 job:a2a341->res:6d2c09 _.skip/filter.sh job:a2a341->res:fb40ba _.skip/filters/fs job:a2a341->res:597d39 $url res:f340c0 res:f340c0 job:a2a341->res:f340c0 script prd:69d6c9->res:789c04 M010023/details.html prd:69d6c9->res:b19235 M010023/site-plan.png prd:69d6c9->res:f60ac1 M050022/details.html prd:69d6c9->res:424237 M050022/site-plan.png job:858682 job:858682 prd:69d6c9->job:858682 res:dda571 res:dda571 job:858682->res:dda571 .knit/files/parts/M010023 res:ee6d55 res:ee6d55 job:858682->res:ee6d55 .knit/files/parts/M050022 res:d0d3b0 res:d0d3b0 job:858682->res:d0d3b0 .knit/files/plan.knit job:858682->res:d0d3b0 .knit/flow res:610f82 res:610f82 job:858682->res:610f82 context/format-details.sh res:66551e res:66551e job:858682->res:66551e context/plan-conditional.sh res:a423a0 res:a423a0 job:858682->res:a423a0 context/plan.knit res:e654a7 res:e654a7 job:858682->res:e654a7 context/process-scrape.knit prd:90b523->res:dda571 parts/M010023 prd:90b523->res:ee6d55 parts/M050022 prd:90b523->res:d0d3b0 plan.knit job:6d97d5 job:6d97d5 prd:90b523->job:6d97d5 res:e3ac69 res:e3ac69 job:6d97d5->res:dda571 parts/M010023 job:6d97d5->res:ee6d55 parts/M050022 job:6d97d5->res:e3ac69 $param res:4f83bb res:4f83bb job:6d97d5->res:4f83bb script prd:436fcc->res:dda571 M010023 prd:436fcc->res:ee6d55 M050022 job:0e9727 job:0e9727 prd:436fcc->job:0e9727 job:0e9727->res:399175 pops.csv res:a9f2d7 res:a9f2d7 job:0e9727->res:a9f2d7 script res:2547ba res:2547ba job:0e9727->res:2547ba transpose.py prd:d59f03->res:399175 data job:2d55fd job:2d55fd prd:d59f03->job:2d55fd res:ff05e7 res:ff05e7 job:2d55fd->res:ff05e7 $limit res:685e01 res:685e01 job:2d55fd->res:685e01 data res:1efd1a res:1efd1a job:2d55fd->res:1efd1a script prd:41b26d->res:685e01 data job:95d598 job:95d598 prd:41b26d->job:95d598 res:707eed res:707eed job:95d598->res:707eed $url res:9bf215 res:9bf215 job:95d598->res:9bf215 script prd:8687eb->res:ff05e7 limit job:bbfa88 job:bbfa88 prd:8687eb->job:bbfa88 job:bbfa88->res:ff05e7 limit

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