From f1a3fa76d666f9e4cdacbc05c778f4e46c73e4c6 Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Thu, 27 Apr 2023 11:14:57 +1200 Subject: [PATCH 1/8] examples/csv: Use WKT for node locations and span routes --- examples/csv/nodes.csv | 6 +++--- examples/csv/spans.csv | 4 ++-- examples/csv/template/nodes.csv | 2 +- examples/csv/template/spans.csv | 2 +- tests/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 209 bytes tests/__pycache__/schema.cpython-311.pyc | Bin 0 -> 2773 bytes .../test_csv.cpython-311-pytest-7.2.0.pyc | Bin 0 -> 8736 bytes ...t_examples_json.cpython-311-pytest-7.2.0.pyc | Bin 0 -> 7047 bytes .../test_json.cpython-311-pytest-7.2.0.pyc | Bin 0 -> 13380 bytes 9 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 tests/__pycache__/__init__.cpython-311.pyc create mode 100644 tests/__pycache__/schema.cpython-311.pyc create mode 100644 tests/__pycache__/test_csv.cpython-311-pytest-7.2.0.pyc create mode 100644 tests/__pycache__/test_examples_json.cpython-311-pytest-7.2.0.pyc create mode 100644 tests/__pycache__/test_json.cpython-311-pytest-7.2.0.pyc diff --git a/examples/csv/nodes.csv b/examples/csv/nodes.csv index c663e72..168aae4 100644 --- a/examples/csv/nodes.csv +++ b/examples/csv/nodes.csv @@ -1,3 +1,3 @@ -id,nodes/0/id,nodes/0/name,nodes/0/phase/id,nodes/0/phase/name,nodes/0/status,nodes/0/location/type,nodes/0/location/coordinates,nodes/0/address/streetAddress,nodes/0/address/locality,nodes/0/address/region,nodes/0/address/postalCode,nodes/0/address/country,nodes/0/type,nodes/0/accessPoint,nodes/0/power,nodes/0/technologies,nodes/0/physicalInfrastructureProvider/id,nodes/0/physicalInfrastructureProvider/name -a096d627-72e1-4f9b-b129-951b1737bff4,1,Accra,1,NextGen Phase 1,operational,Point,-0.174;5.625,Boundary Rd,Shiashie,Accra,12345,GH,pop,True,True,ip,GH-RGD-CS111111111,FibreCo -a096d627-72e1-4f9b-b129-951b1737bff4,2,Kumasi,1,NextGen Phase 1,operational,Point,-1.628;6.711,Kejetia Road,Bantama,Kumasi,00000,GH,pop,False,True,ip,GH-RGD-CS111111111,FibreCo +id,nodes/0/id,nodes/0/name,nodes/0/phase/id,nodes/0/phase/name,nodes/0/status,nodes/0/address/streetAddress,nodes/0/address/locality,nodes/0/address/region,nodes/0/address/postalCode,nodes/0/address/country,nodes/0/type,nodes/0/accessPoint,nodes/0/power,nodes/0/technologies,nodes/0/physicalInfrastructureProvider/id,nodes/0/physicalInfrastructureProvider/name,nodes/0/location +a096d627-72e1-4f9b-b129-951b1737bff4,1,Accra,1,NextGen Phase 1,operational,Boundary Rd,Shiashie,Accra,12345,GH,pop,True,True,ip,GH-RGD-CS111111111,FibreCo,POINT (-0.174 5.625) +a096d627-72e1-4f9b-b129-951b1737bff4,2,Kumasi,1,NextGen Phase 1,operational,Kejetia Road,Bantama,Kumasi,00000,GH,pop,False,True,ip,GH-RGD-CS111111111,FibreCo,POINT (-1.628 6.711) diff --git a/examples/csv/spans.csv b/examples/csv/spans.csv index d2eb49f..82c304f 100644 --- a/examples/csv/spans.csv +++ b/examples/csv/spans.csv @@ -1,2 +1,2 @@ -id,spans/0/id,spans/0/name,spans/0/phase/id,spans/0/phase/name,spans/0/status,spans/0/readyForServiceDate,spans/0/start,spans/0/end,spans/0/directed,spans/0/route/type,spans/0/route/coordinates,spans/0/physicalInfrastructureProvider/id,spans/0/physicalInfrastructureProvider/name,spans/0/supplier/id,spans/0/supplier/name,spans/0/transmissionMedium,spans/0/deployment,spans/0/deploymentDetails/description,spans/0/darkFibre,spans/0/fibreType,spans/0/fibreTypeDetails/fibreSubtype,spans/0/fibreTypeDetails/description,spans/0/fibreCount,spans/0/fibreLength,spans/0/technologies,spans/0/capacity,spans/0/capacityDetails/description,spans/0/countries -a096d627-72e1-4f9b-b129-951b1737bff4,1,Accra to Kumasi,1,NextGen Phase 1,operational,2018-01-01,1,2,False,LineString,"-0.173,5.626;-0.178,5.807;-0.112,5.971;-0.211,5.963;-0.321,6.17;-0.488,6.29;-0.56,6.421;-0.752,6.533;-0.867,6.607;-1.101,6.585;-1.304,6.623;-1.461,6.727;-1.628,6.713",GH-RGD-CS111111111,FibreCo,GH-RGD-CS333333333,ProjectCo,fibre,belowGround,Buried in ducts,True,G.652,G.652.D,"CABLED STANDARD ENHANCED SINGLEMODE FIBRE ESMF, LOW WATER PEAK SINGLE MODE FIBRE G.652.D, OS2",24,276000,sdh,4.976,2xSTM-16,GH +id,spans/0/id,spans/0/name,spans/0/phase/id,spans/0/phase/name,spans/0/status,spans/0/readyForServiceDate,spans/0/start,spans/0/end,spans/0/directed,spans/0/physicalInfrastructureProvider/id,spans/0/physicalInfrastructureProvider/name,spans/0/supplier/id,spans/0/supplier/name,spans/0/transmissionMedium,spans/0/deployment,spans/0/deploymentDetails/description,spans/0/darkFibre,spans/0/fibreType,spans/0/fibreTypeDetails/fibreSubtype,spans/0/fibreTypeDetails/description,spans/0/fibreCount,spans/0/fibreLength,spans/0/technologies,spans/0/capacity,spans/0/capacityDetails/description,spans/0/countries,spans/0/route +a096d627-72e1-4f9b-b129-951b1737bff4,1,Accra to Kumasi,1,NextGen Phase 1,operational,2018-01-01,1,2,False,GH-RGD-CS111111111,FibreCo,GH-RGD-CS333333333,ProjectCo,fibre,belowGround,Buried in ducts,True,G.652,G.652.D,"CABLED STANDARD ENHANCED SINGLEMODE FIBRE ESMF, LOW WATER PEAK SINGLE MODE FIBRE G.652.D, OS2",24,276000,sdh,4.976,2xSTM-16,GH,"LINESTRING (-0.173 5.626,-0.178 5.807,-0.112 5.971,-0.211 5.963,-0.321 6.17,-0.488 6.29,-0.56 6.421,-0.752 6.533,-0.867 6.607,-1.101 6.585,-1.304 6.623,-1.461 6.727,-1.628 6.713)" diff --git a/examples/csv/template/nodes.csv b/examples/csv/template/nodes.csv index 34237c7..0114db3 100644 --- a/examples/csv/template/nodes.csv +++ b/examples/csv/template/nodes.csv @@ -1 +1 @@ -id,nodes/0/id,nodes/0/name,nodes/0/phase/id,nodes/0/phase/name,nodes/0/status,nodes/0/location/type,nodes/0/location/coordinates,nodes/0/address/streetAddress,nodes/0/address/locality,nodes/0/address/region,nodes/0/address/postalCode,nodes/0/address/country,nodes/0/type,nodes/0/accessPoint,nodes/0/power,nodes/0/technologies,nodes/0/physicalInfrastructureProvider/id,nodes/0/physicalInfrastructureProvider/name +id,nodes/0/id,nodes/0/name,nodes/0/phase/id,nodes/0/phase/name,nodes/0/status,nodes/0/location,nodes/0/address/streetAddress,nodes/0/address/locality,nodes/0/address/region,nodes/0/address/postalCode,nodes/0/address/country,nodes/0/type,nodes/0/accessPoint,nodes/0/power,nodes/0/technologies,nodes/0/physicalInfrastructureProvider/id,nodes/0/physicalInfrastructureProvider/name diff --git a/examples/csv/template/spans.csv b/examples/csv/template/spans.csv index e8a23d8..5c3621c 100644 --- a/examples/csv/template/spans.csv +++ b/examples/csv/template/spans.csv @@ -1 +1 @@ -id,spans/0/id,spans/0/name,spans/0/phase/id,spans/0/phase/name,spans/0/status,spans/0/readyForServiceDate,spans/0/start,spans/0/end,spans/0/directed,spans/0/route/type,spans/0/route/coordinates,spans/0/physicalInfrastructureProvider/id,spans/0/physicalInfrastructureProvider/name,spans/0/supplier/id,spans/0/supplier/name,spans/0/transmissionMedium,spans/0/deployment,spans/0/deploymentDetails/description,spans/0/darkFibre,spans/0/fibreType,spans/0/fibreTypeDetails/fibreSubtype,spans/0/fibreTypeDetails/description,spans/0/fibreCount,spans/0/fibreLength,spans/0/technologies,spans/0/capacity,spans/0/capacityDetails/description,spans/0/countries +id,spans/0/id,spans/0/name,spans/0/phase/id,spans/0/phase/name,spans/0/status,spans/0/readyForServiceDate,spans/0/start,spans/0/end,spans/0/directed,spans/0/route,spans/0/physicalInfrastructureProvider/id,spans/0/physicalInfrastructureProvider/name,spans/0/supplier/id,spans/0/supplier/name,spans/0/transmissionMedium,spans/0/deployment,spans/0/deploymentDetails/description,spans/0/darkFibre,spans/0/fibreType,spans/0/fibreTypeDetails/fibreSubtype,spans/0/fibreTypeDetails/description,spans/0/fibreCount,spans/0/fibreLength,spans/0/technologies,spans/0/capacity,spans/0/capacityDetails/description,spans/0/countries diff --git a/tests/__pycache__/__init__.cpython-311.pyc b/tests/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aef8e9c0ddbd04e1924154a105f6ce2c7ca5ff01 GIT binary patch literal 209 zcmZ3^%ge<81SeH*B!lS3AOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnuN3{;C8@&;oK?&Z SBt9@RGBSQ(fDuK^KrsL{aW!H9 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/schema.cpython-311.pyc b/tests/__pycache__/schema.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04d9115ee9b2071d3e98120eed05fa4a2ad3d1af GIT binary patch literal 2773 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_examples_json.cpython-311-pytest-7.2.0.pyc b/tests/__pycache__/test_examples_json.cpython-311-pytest-7.2.0.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7858f2b0ffaa5dfcb04163328509545c933cf26d GIT binary patch literal 7047 zcmeHMO>7j&6|U~-`STBE#$IFon=B+)i)U;I#t<9vj|7TAnCxn2wcBc@+qg~7^rWf{ zcr=!*h=U_>SP+sqP)Xr(X7x9anI;A?B%5R;{#VY0 zva&>SN+v7`NhA~Dl4vGs$VSMH<>Hw*mnn8bt})Zd^I^Lw*PLnQ`G~zG*OF;*&6~b^}Zkldo1rHl$3*knfR!K7-|))`Bw=kK~^-cT)9)!~nG+oaSo zO!cPeYA|G7bscq#nIKQ`=GZe+xx`|so^{7`+a6bM;|zsHwlV{p1?~f`_v#^lY2sGN z=Ah;o{6s1d&6gQuh|EiaoibHG=tUS`;(5tam}w6))Kk~;>0I7TA3xvMd!)Os7qPed z?6LI4bJV(Rray4#t@Jgs;4sT|sAaOWQ!w+|uyuo)Jln;yT{w|0=EBrdN<|lcQRTb5+IP0GAtP~Y7fhE@P<6Yw}dAnb}dyEeI3XwRzyO_FIKnmEB$`_n!0MDTfpisG!e=hI;rle zS|9SS;H$sAMZPkmd!!_vBSB`FkZ=C$JSKA<2g|qlELpEm{RDb|`o?n{ry<=);2p56IPCfN64*l*q^J{Ah!6 zZ3=Go1Nr_oIHR#W_;m{U37xVhr@B3fGCao0WU$uIZ(GboPCHq=_-X>cPK39kagT~m zD%CHD?<8a@9qohunF=sT7Lr}!J0pGCGu`{J_d(yIKEION4@DlK9SF#AbO*w2ggpRA z(0Eh|f{v9RY;uOCDhlvv^alvIs{hv}L9PrIIUeU_e0FD4H!B@a(Uzvjy`^8u{LVzO%~+4cWK zkzc$;iu?{#_`OR9?=>N>ap^8?LWSav`JGts^@IREsvrb<6m#gU{hM4Md?N7o;6hx* zZm;u+Y8oK>_&(9z8D+L{F>z=qap)Bs@W1F24R*%8n8y8HP4gNwE$0|xwh8$rP5U|A z%F!c+QdH9nC#z``ucKlgQ<%dekM<$p2_}vSyj@Z}^EqHthgkrV{%1uFg<~rOp+O4w ztPmd}QaFjlGDMW{?iJ!gQv{1XZ1n}}Dwq?azyW08=O-XBo>uV$s~-{pUqSJbXdr{8 zi|+hYJ$p;PX%^2_MJ?`(n0OabD|h=e9!%-HXwX#J|)PtJUINb zep{}8H+Jjm*1a!pqN`MO;b&bQfD^?ai3Cdq+?$P%q0GU3?3sU~o{*}&&5{&sbCgWT zF1{G$G`i_+IV&3&#v{Q1oCJZ4cS#Rn${qP`=tFWxlE{Zdf)9pyI>Uo&aw_G;DtkhE z;5o&%dYdvI_hg58Ng6T%@}I6R41K(ynagVL^N`fm_ksXS#lC4ye0uPgpWOch z%qG6?G5xA_+oR);uRR!eG_Vqa8eY8)&ru7S)(F;Bc<$xPmm6v}6jzfl{68FSJJTBa zyj3}~E&BNm32<;eOpk+vovX``*<5%cf3G!JgC82;9uu>u(7?gBq6s z>R9LQdb{u2C%&?8Zl8Ttw`p@k#z!CXJK)^EElN5d1Ea;|sy>GU;6iewWF~h2VE3vPS~1rWT%K-HUa> j87VFS5!S-O_MYch{bF6#QLDvUF6=zAQPpq6UxI%ENh&Af literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_json.cpython-311-pytest-7.2.0.pyc b/tests/__pycache__/test_json.cpython-311-pytest-7.2.0.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1fdd1db904c1c40410136616401108c3198c453f GIT binary patch literal 13380 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 XMiJ)(aWA`dg|Wbv28^x+ly&|G6DU|h literal 0 HcmV?d00001 From 587bca557063ff3133bc343e34ed699ae7e37af8 Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Thu, 27 Apr 2023 11:27:58 +1200 Subject: [PATCH 2/8] examples/csv: Fix column ordering --- examples/csv/nodes.csv | 6 +++--- examples/csv/spans.csv | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/csv/nodes.csv b/examples/csv/nodes.csv index 168aae4..e429fb6 100644 --- a/examples/csv/nodes.csv +++ b/examples/csv/nodes.csv @@ -1,3 +1,3 @@ -id,nodes/0/id,nodes/0/name,nodes/0/phase/id,nodes/0/phase/name,nodes/0/status,nodes/0/address/streetAddress,nodes/0/address/locality,nodes/0/address/region,nodes/0/address/postalCode,nodes/0/address/country,nodes/0/type,nodes/0/accessPoint,nodes/0/power,nodes/0/technologies,nodes/0/physicalInfrastructureProvider/id,nodes/0/physicalInfrastructureProvider/name,nodes/0/location -a096d627-72e1-4f9b-b129-951b1737bff4,1,Accra,1,NextGen Phase 1,operational,Boundary Rd,Shiashie,Accra,12345,GH,pop,True,True,ip,GH-RGD-CS111111111,FibreCo,POINT (-0.174 5.625) -a096d627-72e1-4f9b-b129-951b1737bff4,2,Kumasi,1,NextGen Phase 1,operational,Kejetia Road,Bantama,Kumasi,00000,GH,pop,False,True,ip,GH-RGD-CS111111111,FibreCo,POINT (-1.628 6.711) +id,nodes/0/id,nodes/0/name,nodes/0/phase/id,nodes/0/phase/name,nodes/0/status,nodes/0/location,nodes/0/address/streetAddress,nodes/0/address/locality,nodes/0/address/region,nodes/0/address/postalCode,nodes/0/address/country,nodes/0/type,nodes/0/accessPoint,nodes/0/power,nodes/0/technologies,nodes/0/physicalInfrastructureProvider/id,nodes/0/physicalInfrastructureProvider/name +a096d627-72e1-4f9b-b129-951b1737bff4,1,Accra,1,NextGen Phase 1,operational,POINT (-0.174 5.625),Boundary Rd,Shiashie,Accra,12345,GH,pop,True,True,ip,GH-RGD-CS111111111,FibreCo +a096d627-72e1-4f9b-b129-951b1737bff4,2,Kumasi,1,NextGen Phase 1,operational,POINT (-1.628 6.711),Kejetia Road,Bantama,Kumasi,0,GH,pop,False,True,ip,GH-RGD-CS111111111,FibreCo diff --git a/examples/csv/spans.csv b/examples/csv/spans.csv index 82c304f..d43acef 100644 --- a/examples/csv/spans.csv +++ b/examples/csv/spans.csv @@ -1,2 +1,2 @@ -id,spans/0/id,spans/0/name,spans/0/phase/id,spans/0/phase/name,spans/0/status,spans/0/readyForServiceDate,spans/0/start,spans/0/end,spans/0/directed,spans/0/physicalInfrastructureProvider/id,spans/0/physicalInfrastructureProvider/name,spans/0/supplier/id,spans/0/supplier/name,spans/0/transmissionMedium,spans/0/deployment,spans/0/deploymentDetails/description,spans/0/darkFibre,spans/0/fibreType,spans/0/fibreTypeDetails/fibreSubtype,spans/0/fibreTypeDetails/description,spans/0/fibreCount,spans/0/fibreLength,spans/0/technologies,spans/0/capacity,spans/0/capacityDetails/description,spans/0/countries,spans/0/route -a096d627-72e1-4f9b-b129-951b1737bff4,1,Accra to Kumasi,1,NextGen Phase 1,operational,2018-01-01,1,2,False,GH-RGD-CS111111111,FibreCo,GH-RGD-CS333333333,ProjectCo,fibre,belowGround,Buried in ducts,True,G.652,G.652.D,"CABLED STANDARD ENHANCED SINGLEMODE FIBRE ESMF, LOW WATER PEAK SINGLE MODE FIBRE G.652.D, OS2",24,276000,sdh,4.976,2xSTM-16,GH,"LINESTRING (-0.173 5.626,-0.178 5.807,-0.112 5.971,-0.211 5.963,-0.321 6.17,-0.488 6.29,-0.56 6.421,-0.752 6.533,-0.867 6.607,-1.101 6.585,-1.304 6.623,-1.461 6.727,-1.628 6.713)" +id,spans/0/id,spans/0/name,spans/0/phase/id,spans/0/phase/name,spans/0/status,spans/0/readyForServiceDate,spans/0/start,spans/0/end,spans/0/directed,spans/0/route,spans/0/physicalInfrastructureProvider/id,spans/0/physicalInfrastructureProvider/name,spans/0/supplier/id,spans/0/supplier/name,spans/0/transmissionMedium,spans/0/deployment,spans/0/deploymentDetails/description,spans/0/darkFibre,spans/0/fibreType,spans/0/fibreTypeDetails/fibreSubtype,spans/0/fibreTypeDetails/description,spans/0/fibreCount,spans/0/fibreLength,spans/0/technologies,spans/0/capacity,spans/0/capacityDetails/description,spans/0/countries +a096d627-72e1-4f9b-b129-951b1737bff4,1,Accra to Kumasi,1,NextGen Phase 1,operational,2018-01-01,1,2,False,"LINESTRING (-0.173 5.626,-0.178 5.807,-0.112 5.971,-0.211 5.963,-0.321 6.17,-0.488 6.29,-0.56 6.421,-0.752 6.533,-0.867 6.607,-1.101 6.585,-1.304 6.623,-1.461 6.727,-1.628 6.713)",GH-RGD-CS111111111,FibreCo,GH-RGD-CS333333333,ProjectCo,fibre,belowGround,Buried in ducts,True,G.652,G.652.D,"CABLED STANDARD ENHANCED SINGLEMODE FIBRE ESMF, LOW WATER PEAK SINGLE MODE FIBRE G.652.D, OS2",24,276000,sdh,4.976,2xSTM-16,GH From 4a5914a4f7ce7b158b2d94f79660aea1a1cbd04c Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Thu, 27 Apr 2023 11:30:49 +1200 Subject: [PATCH 3/8] tests: Remove unintentionally committed pycache files --- tests/__pycache__/__init__.cpython-311.pyc | Bin 209 -> 0 bytes tests/__pycache__/schema.cpython-311.pyc | Bin 2773 -> 0 bytes .../test_csv.cpython-311-pytest-7.2.0.pyc | Bin 8736 -> 0 bytes ...t_examples_json.cpython-311-pytest-7.2.0.pyc | Bin 7047 -> 0 bytes .../test_json.cpython-311-pytest-7.2.0.pyc | Bin 13380 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tests/__pycache__/__init__.cpython-311.pyc delete mode 100644 tests/__pycache__/schema.cpython-311.pyc delete mode 100644 tests/__pycache__/test_csv.cpython-311-pytest-7.2.0.pyc delete mode 100644 tests/__pycache__/test_examples_json.cpython-311-pytest-7.2.0.pyc delete mode 100644 tests/__pycache__/test_json.cpython-311-pytest-7.2.0.pyc diff --git a/tests/__pycache__/__init__.cpython-311.pyc b/tests/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index aef8e9c0ddbd04e1924154a105f6ce2c7ca5ff01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmZ3^%ge<81SeH*B!lS3AOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnuN3{;C8@&;oK?&Z SBt9@RGBSQ(fDuK^KrsL{aW!H9 diff --git a/tests/__pycache__/schema.cpython-311.pyc b/tests/__pycache__/schema.cpython-311.pyc deleted file mode 100644 index 04d9115ee9b2071d3e98120eed05fa4a2ad3d1af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2773 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 diff --git a/tests/__pycache__/test_examples_json.cpython-311-pytest-7.2.0.pyc b/tests/__pycache__/test_examples_json.cpython-311-pytest-7.2.0.pyc deleted file mode 100644 index 7858f2b0ffaa5dfcb04163328509545c933cf26d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7047 zcmeHMO>7j&6|U~-`STBE#$IFon=B+)i)U;I#t<9vj|7TAnCxn2wcBc@+qg~7^rWf{ zcr=!*h=U_>SP+sqP)Xr(X7x9anI;A?B%5R;{#VY0 zva&>SN+v7`NhA~Dl4vGs$VSMH<>Hw*mnn8bt})Zd^I^Lw*PLnQ`G~zG*OF;*&6~b^}Zkldo1rHl$3*knfR!K7-|))`Bw=kK~^-cT)9)!~nG+oaSo zO!cPeYA|G7bscq#nIKQ`=GZe+xx`|so^{7`+a6bM;|zsHwlV{p1?~f`_v#^lY2sGN z=Ah;o{6s1d&6gQuh|EiaoibHG=tUS`;(5tam}w6))Kk~;>0I7TA3xvMd!)Os7qPed z?6LI4bJV(Rray4#t@Jgs;4sT|sAaOWQ!w+|uyuo)Jln;yT{w|0=EBrdN<|lcQRTb5+IP0GAtP~Y7fhE@P<6Yw}dAnb}dyEeI3XwRzyO_FIKnmEB$`_n!0MDTfpisG!e=hI;rle zS|9SS;H$sAMZPkmd!!_vBSB`FkZ=C$JSKA<2g|qlELpEm{RDb|`o?n{ry<=);2p56IPCfN64*l*q^J{Ah!6 zZ3=Go1Nr_oIHR#W_;m{U37xVhr@B3fGCao0WU$uIZ(GboPCHq=_-X>cPK39kagT~m zD%CHD?<8a@9qohunF=sT7Lr}!J0pGCGu`{J_d(yIKEION4@DlK9SF#AbO*w2ggpRA z(0Eh|f{v9RY;uOCDhlvv^alvIs{hv}L9PrIIUeU_e0FD4H!B@a(Uzvjy`^8u{LVzO%~+4cWK zkzc$;iu?{#_`OR9?=>N>ap^8?LWSav`JGts^@IREsvrb<6m#gU{hM4Md?N7o;6hx* zZm;u+Y8oK>_&(9z8D+L{F>z=qap)Bs@W1F24R*%8n8y8HP4gNwE$0|xwh8$rP5U|A z%F!c+QdH9nC#z``ucKlgQ<%dekM<$p2_}vSyj@Z}^EqHthgkrV{%1uFg<~rOp+O4w ztPmd}QaFjlGDMW{?iJ!gQv{1XZ1n}}Dwq?azyW08=O-XBo>uV$s~-{pUqSJbXdr{8 zi|+hYJ$p;PX%^2_MJ?`(n0OabD|h=e9!%-HXwX#J|)PtJUINb zep{}8H+Jjm*1a!pqN`MO;b&bQfD^?ai3Cdq+?$P%q0GU3?3sU~o{*}&&5{&sbCgWT zF1{G$G`i_+IV&3&#v{Q1oCJZ4cS#Rn${qP`=tFWxlE{Zdf)9pyI>Uo&aw_G;DtkhE z;5o&%dYdvI_hg58Ng6T%@}I6R41K(ynagVL^N`fm_ksXS#lC4ye0uPgpWOch z%qG6?G5xA_+oR);uRR!eG_Vqa8eY8)&ru7S)(F;Bc<$xPmm6v}6jzfl{68FSJJTBa zyj3}~E&BNm32<;eOpk+vovX``*<5%cf3G!JgC82;9uu>u(7?gBq6s z>R9LQdb{u2C%&?8Zl8Ttw`p@k#z!CXJK)^EElN5d1Ea;|sy>GU;6iewWF~h2VE3vPS~1rWT%K-HUa> j87VFS5!S-O_MYch{bF6#QLDvUF6=zAQPpq6UxI%ENh&Af diff --git a/tests/__pycache__/test_json.cpython-311-pytest-7.2.0.pyc b/tests/__pycache__/test_json.cpython-311-pytest-7.2.0.pyc deleted file mode 100644 index 1fdd1db904c1c40410136616401108c3198c453f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13380 zcmeG?TWlLwb~EJgP0^M`y=+Sw$5Jdx7A42B?D*}-c_@mV-F31~xOQlYGZJa>p}jNm zgCVm*>o#(bB1*AElpw+CqfHfLi!~Mn>H;kg^rLly0+}(!Ffo7u1BE~Kqkvqe*ueei zId_Jm8A{4-H`x6sIvk$4_uO;e=bm%!x%aOd8iEWw|JqYcr`s9k-!W2qJZ9k0KeG(; z0V6O1n`06z{krn*w2Ni(T*AX*iYw>M`w~7HcIW*0Kq5fHTrQXoB|`adBAjnXG*Fx; z7s+o*Y@%UrZgajd(U{+o*h1sJTvI-ph|;hh@-`=$^DT*%d~2eW;@DhUqK&qoJ<(3T zTN7Kw_KVwUjb7Sb3)#O8iVk~9Ei86^3cdUs{>I~sCA!2eAy9&(1P`Gg4eby@*O+$o;ulI+W8Rwq1O(7G2s^3)#QIX0hi}7vzG! z@d%CA>dWaBwm{7>p$TB0&@MDzV-x-GZGrD@p%t(LLL0!iz@A}ZTYrTGosO|OcR580 z@b!%rXA81OVs3rYlqe^~{EU1xIhoCglHQDnd{)X91QBQi6WxO7Y~fNWmlcv1rDDOr zLt&e+&}6D0BvXxnUu`a zQRRDIJoEBt9tMdo${CRu*chK8B3~%VJe`1e+SV2Z+u8*GN60WAFjGvKIUlLON-VPi z3(MAgF0sD|m)ZAS?`}H7eCB%0NhCc;kas?VsP2jn>D)|8&Pa&j`N!g5z90`i{p^8} zy+a2^5RMFu?jL;qB*|V92hSGC^xzM~nWB`HizF*bgT)yUXL^E&G&n$m12~HVk__ER z5n)iq&QeI{G(L0naquvXe!7^SIa=z(bc4m>hjYbrDkmLiF>0kf0#c^b{^n4H&q~I??dHjB;UG`)JYY-R&mkYvp*4n; zKO>4fGHJFjCGittu6Q|qI_4rc!o&{%7_!l}1d?>XB%BPMv;x$Ft6d-{b#Pv!{Q%~e z`?Sq}GpP0*()tcTE7i7FHNbJr_qZk{+N11xMmc#=<)$@mTB*GR=PwO^>-j@*=CvRX z53;Ahos=yN7DZmHEqZ>2z|51})i|X;U6e(jhw;XN;M1uBU!0W10za9`=J;X($tQBK zY>h%|TrC%Qp~zp(${Dj@$tdo-@;PaQaU(bhBnrUfZ8}w?4G^U+I$uU-*5kQO%oPIw zJlB~r-evCAi1PY*<&C8F`UPeD0$>+qE0xYzsmtU#T(Z_srGN{s%!p}_m8FqY-rI;K zz79JgH+rEtHEwKOBY)TOWXRS>(gm53r=(|Tr&fYY*8~fVzcci#I`q6Y^gM*s&Xfk7 z<+cH1R{dR7f2`_1{?NyHyk9c_R-E8lSo9>+@qt5d+6AM){@mqMgMwS&)(A=u2ug3M zk8!N*0+eFCX`)gC1qSgUpbUtk zZU~7+b3$l#DhUaSZv0D!0L(EDxTbslPNg@c_$O5Vgyx@EVHlA;;eyYoYsU4^?ZU|b zu;K*9WZ1O>atrF6M;8H@+F|G%$1oMP;;OhSoL#S#Ip>7@qNU6(*-L{mj7MOclsEdz zY}r-jCf%T6_P~^}r4H<-R8zNk5j6o-;&HSJfRRH`6pVdAkZ|S4JOm{?X+bPkNaaPH zP3jzK5DA4IiX%hH(xpqm0N|xEfH?+6CUgbI$Aan;`&zqg&|nw*LO@1!VLlhF7CFc85+g+&<d~l7ON-akh2zN?2lN%RS6XkPK7XMQO0`IMZ_P`vo#*(?YruhjWf;hM zTT;ptXLCZ5h%+QPl`Br9a!D#Z14$`0DI!{roS+-7Y_aexwpwqhl@9huE>!^i2m(1w zMK3{Xhx8+O3L6)x>s5ml&lV<&`f3!%SodJ6WW!>Y^#-~*sAbec*b!q~_ZShQuTM!~ zsL{qLrcvEQ2c?!hNk@@952UCprCH!U5dT5OA6baby|u!yo=sJMWZrwfAu{*egXVs< zc|dC(m^*zh+P6G>BdSJ6wCKp(sr!8VEt!|Gk4`|yD+-%ggADTZ^A8q1S7+=FU`&Va|&#OI$w4Ou%c=?Ojzkll= z-n!j$%1EkiZdu&%erUmaZ*z2o@wBx4I>@wledJxNEQ>c@xp_ow8`Ijx9)>)P#>fk~4Ej0(duawGz_o@Sidd@P zRzQHi9eg`fXZ+bzlv8ZI6O?TtUtq5XoeGX+?CQiRklzW(Xla=bsJPfUXhVhCH`hb! zs}j3tU8_!=Z3C6kHy@e=!FtVqJ-BAC@174rnj6wWYtlG*Q>|TV)kDQ2a1~I(W$!c{ z7f{K*1y36 z?D_x0JlF6Yd9H4xHsrZFI^ekm$DFNl=kJH-A{+2rUAvqd^84mFfdPYa(`ns1Q-sZS z(c!j1I|nzwkI?u27p%Dj^;g(3d))<2NiTIu2F{qc8B3wr^5^K1b})-rRY7)SPC$G{%mgJ3U$kF(MM7k3(O?Z=x z?p?6F*p_uHZrTEUdul=|=4Ro@Kq}6Xv}hHb6tYD3%#dtB*4>gQ>pr7!Ft2B4VE-=a zt!s>X*ci=<68RqVoS_+la_Q*baWY}&#@3%*uCa1BemjKjR)yIz;UMQzkZLAt106iXgNPA$JeFN*{ zUUUDQ-7l!kV_Ngr-025gV7_j4(he=`NQsx@MGYl@9@f-k!zERYz=5T7i4Dy8eG8zvD<6Lu%*@ z)DyJ_oI1viXaQ{M59o=UVeNz44|FCtYq+x00}IYQupeRdt)3QA7a7u_>NB6UyB3Se zwv*bJ3S4BKvIksbmRpQrE?O;z^Gay%>OKJ6bWpG05xlasy8wFZ9evj9G@_1jtvc%c z%V1?$X;7ZEkE^ExE6ZzI%U&5R1oLs^UUkIP+40W4ptTHkFj_3W)1_$5u(124sk$s3 zeYqg=MZ)Kc;5(zf|1;EmZ64JArXv6{1dXH$k~&giA%YtRg1at)Mj}-nhE`ZlU92hz zU!7k@_Zmuy7E7MRqMidF;Yga!6GOtU9*Warcr(`&kY$kmKLE@zRbNQi)N|X{v+6jh zqT{5>1^=wLC@h^^eo~F>(IR_PZV$!YiR?hPx*8eKA_FQnU?QJb8eWd7k+>F#t6UtB zXBFFfhdZm$sA>xs1V)mD2jp7fwHPBWr zyxXz-SlL=EuxW-3{OUCf^0J*R%dC_Az(H}8`rtWOfbJz*DbNb@u`e=M!XANLvX)wn z2ETaV;;b7^)EuJ2SvR;cjuqan>xZ?SUDFRDxXUb@5p08YT1(SWKR7;C9oF@A!O@ZB zL$~L03JYsI@J!;j8xP;NjEDDsJ04{>2m-FOKwZ_Nh9_6zFI=d}g$oyW!{Xy7NilDi z1I7{cbBN8z@{DwFa1c%%GqV$MFawQC5b0t;CaE+yY^MeHmSCDCp8phxQU*kgeC!Ff*(0p)S=J#aTd)vB~ zUit9Y$Hzd*1TKPK6XEso`DYh~tKsIm;qAA>+wXJ?gBNu8R_j-tUv?_5C6&~qIyR+^ zO(`82wIibe3}>})R-x~T8;f`lXj(Y=Nw*s4(gI!JErqJ8p=P)Qf(LbMU^f*0-l=y^ zEp{)Kw5@$=xL*tRE8+h8TRVT&_fg-6yFcEIWLesvEPMUM`O$^ux(4mLwdR4hBI0?qtN$$C<w<$~h5~PAn z<=3dexTter2p-c=8V9E*N}=cBI+N|Ba)VOpP8v6?t?smP5{#}5Y3qz3+|3n^Z%F+I zY5~;0u1x+`>H6F72ujzDc;t7Ju7T1YJEf~BP~qs!E@yW`3}qNdT)h5v;R2o-)pq`X zTwng45K=R6p~gtvV6#qZCwKvZOd~)+s&n+>peIF0>ME6sI!6zy!uD!o0g}fY1q4L| zRJIOdi0t!Aw|rkkzKkem-%u`y>I;+F3+v0KhafDo^}^B*Rjmq3E^wZ$HZ;EX+B>f;OsWkX zT0_TD>+Oc#6~-Mp&n}<6$t@?1aCK<-#@WAZxI1*>_Rxtho>Yg%w4t$E!(Scv@__Qn zggTzq#?#86Fh8~+e31F`%wkDx>C;+J_@d+;8vZ-~Fa0-L)S=_r(D5(2|E2ezdT$+7 zpGj!XB$UA)t&^)xSZAoP&a4&II3PVX?IEaRqBbTf9g}Luqy{iNrG=*y`r3uHO&Bw1 zX5k`vgcIdFy>c$B3hOYVn4hmT^LCtrWn|p3sdy@!;G!2UnqlGE1U^(_KJ}*tV5~h+ z##_1W(_}Z$=p3#EaE+q=C%D-mKL!x<>OsS@M`srG`shBmK#TWKXaLWGNgoyvoXmsPu^j+B|5|81SW8#cv&LPV9<@h z`h6kU3rQ3pOG~)3hx2nk)6#}#`HT`BRimR?bQDg>d-vgezc>Y|zk8mYKLYdp z{UxrtdCR<~+SH2k-ABRvXf@pU-b?SiwAl2s){k13T0ZRhxJwPkv~WzJZ?$(|KC)0z z{XL4m$HomYmSmt6u|eIBSMuP=R$8nOFV9x-f_e9Hm>;MqM$eS^hO8Gtenl!8<%>k15drnS0yl* z3GQ_0gy|tlVs5t4__J;Kajyl3B=nYt?kY+;hdXoQ%9{_CFTJ8DsJoY-L%`TA zP&Gv*0c8<%w9wT`MZ{zO;e1h;&51|J$B=+hQ)-8$35Gb!R*{F+|0zs+-CJe46z5xI z-cUAvtIUAne5=d}Wxcn`JgGR}Dw9w)e(y64bM#kb0(10NWkPfGx8h~Ok$3mMckG>G zi%)&L|L(T_+uQn=Ur@L0)3)tXLnB&fWX@mh=vi)1JN7Be)@s)-rSG8Hbx>ipuXx>T z4%CzlhJ!5J)wIA?4x<)`tlnC@*?F^5d1+F4dP;qIN_%?BxNrE7-fR4t!a3i{cE;tu zw(Tz4cAITe+GET6Rd%n&?p<-Uvk9md;X^m$8eYX6XkgKjutDC(z6KZ@j5e~(D~uEL XMiJ)(aWA`dg|Wbv28^x+ly&|G6DU|h From fa1cd44171cd9b3663299f1c26cce0ac876a77ea Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Tue, 2 May 2023 10:43:01 +1200 Subject: [PATCH 4/8] docs/reference/publication_formats/csv.md: Use WKT for location dat --- docs/reference/publication_formats/csv.md | 40 ++++++++++++++++++++++- manage.py | 14 ++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/docs/reference/publication_formats/csv.md b/docs/reference/publication_formats/csv.md index 640cef4..db7fd76 100644 --- a/docs/reference/publication_formats/csv.md +++ b/docs/reference/publication_formats/csv.md @@ -8,7 +8,7 @@ We want to hear your feedback on the standard and its documentation. For general To comment on or create discussions and issues, you need to [sign up for a free GitHub account](https://github.com/signup). If you prefer to provide feedback privately, you can email [info@opentelecomdata.net](mailto:info@opentelecomdata.net). ``` -This section describes the structure of the tables in the CSV format and the relationship between the tables. Example CSV files and blank templates are provided for each table. +This pages describes the CSV publication format, including structure of the tables in the CSV format, the relationship between the tables and the representation of location data. Example CSV files and blank templates are provided for each table. The CSV format consists of several tables, reflecting the structure of the [schema](../schema.md). The networks table is the main table. Arrays of objects in the schema are represented as separate tables: @@ -54,6 +54,29 @@ The following example shows a network with two nodes represented in JSON format :::: +Node locations and span routes are represented using [well-known text (WKT)](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry) `POINT` and `LINESTRING` geometries, respectively. For example: + +::::{tab-set} + +:::{tab-item} Node locations + +| nodes/0/location | +| --- | +| POINT (-0.174 5.625) | +| POINT (-1.628 6.711) | + +::: + +:::{tab-item} Span routes + +| spans/0/route | +| --- | +| LINESTRING (-0.173 5.626,-0.178 5.807,-0.112 5.971,-0.211 5.963,-0.321 6.17,-0.488 6.29,-0.56 6.421,-0.752 6.533,-0.867 6.607,-1.101 6.585,-1.304 6.623,-1.461 6.727,-1.628 6.713) | + +::: + +:::: + ## networks This table is related to the following tables: @@ -69,6 +92,7 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,name,website,publisher,publicationDate,collectionDate,crs,accuracy,accuracyDetails,language +:nocrossref: ``` ### nodes @@ -83,6 +107,8 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,nodes/0/id,nodes/0/name,nodes/0/phase,nodes/0/status,nodes/0/location,nodes/0/address,nodes/0/type,nodes/0/accessPoint,nodes/0/power,nodes/0/technologies,nodes/0/physicalInfrastructureProvider +:collapse: nodes/0/location +:nocrossref: ``` #### nodes_internationalConnections @@ -95,6 +121,7 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,nodes/0/id,nodes/0/internationalConnections/0/streetAddress,nodes/0/internationalConnections/0/locality,nodes/0/internationalConnections/0/region,nodes/0/internationalConnections/0/postalCode,nodes/0/internationalConnections/0/country +:nocrossref: ``` #### nodes_networkProviders @@ -107,6 +134,7 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,nodes/0/id,nodes/0/networkProviders/0/id,nodes/0/networkProviders/0/name +:nocrossref: ``` ### spans @@ -120,6 +148,8 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,spans/0/id,spans/0/name,spans/0/phase,spans/0/status,spans/0/readyForServiceDate,spans/0/start,spans/0/end,spans/0/directed,spans/0/route,spans/0/physicalInfrastructureProvider,spans/0/supplier,spans/0/transmissionMedium,spans/0/deployment,spans/0/deploymentDetails,spans/0/darkFibre,spans/0/fibreType,spans/0/fibreTypeDetails,spans/0/fibreCount,spans/0/fibreLength,spans/0/technologies,spans/0/capacity,spans/0/capacityDetails,spans/0/countries +:collapse: spans/0/route +:nocrossref: ``` #### spans_networkProviders @@ -132,6 +162,7 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,spans/0/id,spans/0/networkProviders/0/id,spans/0/networkProviders/0/name +:nocrossref: ``` ### phases @@ -145,6 +176,7 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,phases/0/id,phases/0/name,phases/0/description +:nocrossref: ``` #### phases_funders @@ -157,6 +189,7 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,phases/0/id,phases/0/funders/0/id,phases/0/funders/0/name +:nocrossref: ``` ### organisations @@ -169,6 +202,7 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,organisations/0/id,organisations/0/name,organisations/0/identifier,organisations/0/country,organisations/0/roles,organisations/0/roleDetails,organisations/0/website,organisations/0/logo +:nocrossref: ``` ### contracts @@ -183,6 +217,7 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,contracts/0/id,contracts/0/title,contracts/0/description,contracts/0/type,contracts/0/value,contracts/0/dateSigned +:nocrossref: ``` #### contracts_documents @@ -195,6 +230,7 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,contracts/0/id,contracts/0/documents/0/title,contracts/0/documents/0/description,contracts/0/documents/0/url,contracts/0/documents/0/format +:nocrossref: ``` #### contracts_relatedPhases @@ -207,6 +243,7 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,contracts/0/id,contracts/0/relatedPhases/0/id,contracts/0/relatedPhases/0/name +:nocrossref: ``` ### links @@ -219,4 +256,5 @@ The fields in this table are listed below. You can also download an [example CSV ```{jsonschema} ../../../schema/network-schema.json :include: id,links/0/href,links/0/rel +:nocrossref: ``` diff --git a/manage.py b/manage.py index aaf97cd..f98b321 100755 --- a/manage.py +++ b/manage.py @@ -160,6 +160,20 @@ def generate_csv_reference_markdown(table, schema, parents=None, depth=2): markdown[table]['content'].extend([ "```{jsonschema} ../../../schema/network-schema.json\n" f":include: {','.join(include_pointers)}\n" + ]) + + # Collapse node locations and span routes, which are represented using well-known text in the CSV format + if table == 'nodes': + markdown[table]['content'].extend([ + ":collapse: nodes/0/location\n" + ]) + elif table == 'spans': + markdown[table]['content'].extend([ + ":collapse: spans/0/route\n" + ]) + + markdown[table]['content'].extend([ + ":nocrossref:\n" "```\n" ]) From 300eea4fb3b5e1c001a8307c308ab20a637a51fa Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Tue, 2 May 2023 10:43:29 +1200 Subject: [PATCH 5/8] network-schema: Use WKT for location data in CSV format --- schema/network-schema.csv | 4 ++-- schema/network-schema.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/schema/network-schema.csv b/schema/network-schema.csv index 6b11b6c..0cf30c6 100644 --- a/schema/network-schema.csv +++ b/schema/network-schema.csv @@ -15,7 +15,7 @@ nodes,nodes/phase,Phase reference,The identifier and name of the phase being ref nodes,nodes/phase/id,Identifier,The identifier of the phase being referenced. This must match the `.id` of a phase in the `phases` array.,string,1..1,,,,, nodes,nodes/phase/name,Name,The name of the phase being referenced. This must match the `.name` of the phase in the `phases` array whose `.id` matches the `.id` of this phase reference.,string,0..1,,,,, nodes,nodes/status,Status,"The status of this node, from the closed nodeStatus codelist.",string,0..1,"Enum: proposed, planned, underConstruction, operational, decommissioned, inactive",https://open-fibre-data-standard.readthedocs.io/en/latest/reference/codelists.html#nodestatus,,,nodeStatus.csv -nodes,nodes/location,Node location,A GeoJSON Point geometry describing the physical location of this node.,object,0..1,,https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4,,, +nodes,nodes/location,Node location,"In the JSON publication format, a GeoJSON Point geometry describing the physical location of this node. In the CSV publication format, a well-known text POINT geometry.",object,0..1,,"https://open-fibre-data-standard.readthedocs.io/en/latest/reference/publication_formats/json.html, https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4, https://open-fibre-data-standard.readthedocs.io/en/latest/reference/publication_formats/csv.html, https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry",,, nodes,nodes/location,Geometry,A GeoJSON Geometry object.,object,0..1,,https://datatracker.ietf.org/doc/html/rfc7946#section-3.1,,, nodes,nodes/location/type,Type,"The GeoJSON geometry type that is described by `.coordinates`, from the closed geometryType codelist. This must be 'Point' when referenced by `Node.location`, and 'LineString' when referenced by `Span.route`.",string,1..1,"Enum: LineString, Point","https://datatracker.ietf.org/doc/html/rfc7946#section-1.4, https://open-fibre-data-standard.readthedocs.io/en/latest/reference/codelists.html#geometrytype",,,geometryType.csv nodes,nodes/location/coordinates,Coordinates,"One or more GeoJSON positions. For geometries of type 'Point', the coordinates member must be a single position. For geometries of type 'LineString' the coordinates member must be an array of positions. @@ -67,7 +67,7 @@ spans,spans/readyForServiceDate,Ready for service date,"The date this span was r spans,spans/start,Start,"The identifier of one of two nodes that this span connects. It must match the `.id` of a node in the `nodes` array. If `directed == true`, it represents the starting point of the span. Otherwise, the distinction between `start` and `end` is arbitrary.",string,0..1,,,,, spans,spans/end,End,"The identifier of one of two nodes that this span connects. It must match the `.id` of a node in the `nodes` array. If `directed == true`, it represents the end point of the span. Otherwise, the distinction between `start` and `end` is arbitrary.",string,0..1,,,,, spans,spans/directed,Directed,"Whether this span is directed. If `True`, then `.start` represents the start of the span and `.end` represents the end. Otherwise, `.start` and `.end` reference this span's endpoints with no direction implied.",boolean,0..1,,,,, -spans,spans/route,Span route,A GeoJSON LineString geometry describing the route of this span.,object,0..1,,https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4,,, +spans,spans/route,Span route,"In the JSON publication format, a GeoJSON LineString geometry describing the route of this span. In the CSV publication format, a well-known text LINESTRING geometry.",object,0..1,,"https://open-fibre-data-standard.readthedocs.io/en/latest/reference/publication_formats/json.html, https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4, https://open-fibre-data-standard.readthedocs.io/en/latest/reference/publication_formats/csv.html, https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry",,, spans,spans/route,Geometry,A GeoJSON Geometry object.,object,0..1,,https://datatracker.ietf.org/doc/html/rfc7946#section-3.1,,, spans,spans/route/type,Type,"The GeoJSON geometry type that is described by `.coordinates`, from the closed geometryType codelist. This must be 'Point' when referenced by `Node.location`, and 'LineString' when referenced by `Span.route`.",string,1..1,"Enum: LineString, Point","https://datatracker.ietf.org/doc/html/rfc7946#section-1.4, https://open-fibre-data-standard.readthedocs.io/en/latest/reference/codelists.html#geometrytype",,,geometryType.csv spans,spans/route/coordinates,Coordinates,"One or more GeoJSON positions. For geometries of type 'Point', the coordinates member must be a single position. For geometries of type 'LineString' the coordinates member must be an array of positions. diff --git a/schema/network-schema.json b/schema/network-schema.json index a91a1ee..a6eec4c 100644 --- a/schema/network-schema.json +++ b/schema/network-schema.json @@ -187,7 +187,7 @@ }, "location": { "title": "Node location", - "description": "A GeoJSON [Point](https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4) geometry describing the physical location of this node.", + "description": "In the [JSON publication format](https://open-fibre-data-standard.readthedocs.io/en/latest/reference/publication_formats/json.html), a GeoJSON [Point](https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4) geometry describing the physical location of this node. In the [CSV publication format](https://open-fibre-data-standard.readthedocs.io/en/latest/reference/publication_formats/csv.html), a [well-known text](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry) POINT geometry.", "$ref": "#/definitions/Geometry" }, "address": { @@ -332,7 +332,7 @@ }, "route": { "title": "Span route", - "description": "A GeoJSON [LineString](https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4) geometry describing the route of this span.", + "description": "In the [JSON publication format](https://open-fibre-data-standard.readthedocs.io/en/latest/reference/publication_formats/json.html), a GeoJSON [LineString](https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.4) geometry describing the route of this span. In the [CSV publication format](https://open-fibre-data-standard.readthedocs.io/en/latest/reference/publication_formats/csv.html), a [well-known text](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry) LINESTRING geometry.", "$ref": "#/definitions/Geometry" }, "physicalInfrastructureProvider": { From 121e169d45eb598d90049ded369407a4a753a942 Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Tue, 2 May 2023 11:48:49 +1200 Subject: [PATCH 6/8] manage.py: Use WKT geometry in CSV examples and templates --- examples/csv/nodes.csv | 2 +- manage.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/examples/csv/nodes.csv b/examples/csv/nodes.csv index e429fb6..3e4c551 100644 --- a/examples/csv/nodes.csv +++ b/examples/csv/nodes.csv @@ -1,3 +1,3 @@ id,nodes/0/id,nodes/0/name,nodes/0/phase/id,nodes/0/phase/name,nodes/0/status,nodes/0/location,nodes/0/address/streetAddress,nodes/0/address/locality,nodes/0/address/region,nodes/0/address/postalCode,nodes/0/address/country,nodes/0/type,nodes/0/accessPoint,nodes/0/power,nodes/0/technologies,nodes/0/physicalInfrastructureProvider/id,nodes/0/physicalInfrastructureProvider/name a096d627-72e1-4f9b-b129-951b1737bff4,1,Accra,1,NextGen Phase 1,operational,POINT (-0.174 5.625),Boundary Rd,Shiashie,Accra,12345,GH,pop,True,True,ip,GH-RGD-CS111111111,FibreCo -a096d627-72e1-4f9b-b129-951b1737bff4,2,Kumasi,1,NextGen Phase 1,operational,POINT (-1.628 6.711),Kejetia Road,Bantama,Kumasi,0,GH,pop,False,True,ip,GH-RGD-CS111111111,FibreCo +a096d627-72e1-4f9b-b129-951b1737bff4,2,Kumasi,1,NextGen Phase 1,operational,POINT (-1.628 6.711),Kejetia Road,Bantama,Kumasi,00000,GH,pop,False,True,ip,GH-RGD-CS111111111,FibreCo diff --git a/manage.py b/manage.py index f98b321..ec5c4a5 100755 --- a/manage.py +++ b/manage.py @@ -502,6 +502,35 @@ def pre_commit(): line_terminator='LF', ) + # Use WKT geometry in CSV examples and templates. This code should be removed once Flatten Tool supports WKT + replacements = { + 'examples/csv/nodes.csv': [ + ('nodes/0/location/type,nodes/0/location/coordinates','nodes/0/location'), + ('Point,-0.174;5.625', 'POINT (-0.174 5.625)'), + ('Point,-1.628;6.711', 'POINT (-1.628 6.711)') + ], + 'examples/csv/template/nodes.csv': [ + ('nodes/0/location/type,nodes/0/location/coordinates','nodes/0/location') + ], + 'examples/csv/spans.csv': [ + ('spans/0/route/type,spans/0/route/coordinates','spans/0/route'), + ('LineString,"-0.173,5.626;-0.178,5.807;-0.112,5.971;-0.211,5.963;-0.321,6.17;-0.488,6.29;-0.56,6.421;-0.752,6.533;-0.867,6.607;-1.101,6.585;-1.304,6.623;-1.461,6.727;-1.628,6.713"', '"LINESTRING (-0.173 5.626,-0.178 5.807,-0.112 5.971,-0.211 5.963,-0.321 6.17,-0.488 6.29,-0.56 6.421,-0.752 6.533,-0.867 6.607,-1.101 6.585,-1.304 6.623,-1.461 6.727,-1.628 6.713)"') + ], + 'examples/csv/template/spans.csv': [ + ('spans/0/route/type,spans/0/route/coordinates','spans/0/route') + ] + } + + for key, value in replacements.items(): + with open(key, 'r') as f: + content = f.read() + + for replacement in value: + content = content.replace(replacement[0], replacement[1]) + + with open(key, 'w') as f: + f.write(content) + # Update docs/reference/publication_formats/csv.md update_csv_docs(jsonref_schema) From 0d6b8bb5643dc410a462cf35efa2a7e06c9e157b Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Tue, 2 May 2023 11:52:22 +1200 Subject: [PATCH 7/8] docs/reference/publication_formats/csv.md: Update introductory text --- docs/reference/publication_formats/csv.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/reference/publication_formats/csv.md b/docs/reference/publication_formats/csv.md index db7fd76..7c1afee 100644 --- a/docs/reference/publication_formats/csv.md +++ b/docs/reference/publication_formats/csv.md @@ -8,9 +8,9 @@ We want to hear your feedback on the standard and its documentation. For general To comment on or create discussions and issues, you need to [sign up for a free GitHub account](https://github.com/signup). If you prefer to provide feedback privately, you can email [info@opentelecomdata.net](mailto:info@opentelecomdata.net). ``` -This pages describes the CSV publication format, including structure of the tables in the CSV format, the relationship between the tables and the representation of location data. Example CSV files and blank templates are provided for each table. +The CSV format consists of several tables, reflecting the structure of the [schema](../schema.md). This pages describes the CSV publication format, including the structure of the tables, the relationship between the tables and the representation of location data. Example CSV files and blank templates are provided for each table. -The CSV format consists of several tables, reflecting the structure of the [schema](../schema.md). The networks table is the main table. Arrays of objects in the schema are represented as separate tables: +The networks table is the main table. Arrays of objects in the schema are represented as separate tables: ```{contents} --- From c778a0fe70a0134949056521391906a5fe517875 Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Tue, 2 May 2023 11:54:35 +1200 Subject: [PATCH 8/8] Update changelog --- docs/history/changelog.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index d492b4d..77720fa 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -22,6 +22,12 @@ Iterative improvements are made outside of the release cycle. They do not involv - [#213](https://github.com/Open-Telecoms-Data/open-fibre-data-standard/pull/213) - For GeoJSON/JSON conversion, use libcoveofds now. - [#232](https://github.com/Open-Telecoms-Data/open-fibre-data-standard/pull/232) - Remove unmaintained GitHub issue admonitions +## 0.3.0 - YYYY-MM-DD + +### Normative documentation + +- [#262](https://github.com/Open-Telecoms-Data/open-fibre-data-standard/pull/262) - Use well-known text to represent geometries in the CSV publication format. + ## 0.2.0 - 2023-01-11 ### Schema