aipp 2.2.2 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +10 -0
- data/lib/aipp/downloader.rb +2 -8
- data/lib/aipp/regions/LS/helpers/base.rb +1 -0
- data/lib/aipp/regions/LS/notam/ENR.rb +1 -0
- data/lib/aipp/regions/LS/shoot/shooting_grounds.rb +31 -19
- data/lib/aipp/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +31 -18
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c73263a113844af94f58b40498803f74e8246e94e985dfa5a9cc373caeaa986
|
4
|
+
data.tar.gz: bfb14e188c4a0f7b9f532d63259283a25076e02fd893e5c7961350d5ee67fb8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31d356145fe57ba77a15d45472478c7cd8944fa3f92c2c6f7ed0553f09908120297c1d03bff37f126d940802cc2998c5703ebd59f8a83bb5d269aaacaa87af91
|
7
|
+
data.tar.gz: 6e92b3c7882168368cb22b3c0787f16c9e20c7aff587e37109a012d5819e9738492cebc0dea00901a45b8cc39f64c5a34850df9586c6c5ed8080db6fb499d706
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
data/lib/aipp/downloader.rb
CHANGED
@@ -28,7 +28,7 @@ module AIPP
|
|
28
28
|
# [.json] Deserialized JSON e.g. as response to a GraphQL query
|
29
29
|
# [.xlsx] Parsed by Roo returning an instance of {Roo::Excelx}[https://www.rubydoc.info/gems/roo/Roo/Excelx]
|
30
30
|
# [.ods] Parsed by Roo returning an instance of {Roo::OpenOffice}[https://www.rubydoc.info/gems/roo/Roo/OpenOffice]
|
31
|
-
# [.csv] Parsed by Roo returning an instance of {Roo::CSV}[https://www.rubydoc.info/gems/roo/Roo/CSV]
|
31
|
+
# [.csv] Parsed by Roo returning an instance of {Roo::CSV}[https://www.rubydoc.info/gems/roo/Roo/CSV] including the first header line
|
32
32
|
# [.txt] Instance of +String+
|
33
33
|
#
|
34
34
|
# @example
|
@@ -162,19 +162,13 @@ module AIPP
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def convert(file)
|
165
|
-
# TODO: temporary workaround for broken CSV - see https://github.com/svoop/aipp/issues/28
|
166
|
-
if file.basename.to_s == 'schiessanzeigen.csv'
|
167
|
-
contents = file.read
|
168
|
-
contents.gsub!(';Blindgänger Sprengung, Aufräumaktion "SÄNTIS 23";', ';"Blindgänger Sprengung, Aufräumaktion SÄNTIS 23";')
|
169
|
-
file.write(contents)
|
170
|
-
end
|
171
165
|
case file.extname
|
172
166
|
when '.xml', '.ofmx' then Nokogiri.XML(::File.open(file), &:noblanks)
|
173
167
|
when '.html' then Nokogiri.HTML5(::File.open(file))
|
174
168
|
when '.json' then JSON.load_file(file, symbolize_names: true)
|
175
169
|
when '.pdf' then AIPP::PDF.new(file)
|
176
170
|
when '.xlsx', '.ods' then Roo::Spreadsheet.open(file.to_s)
|
177
|
-
when '.csv' then Roo::Spreadsheet.open(file.to_s, csv_options: { col_sep: separator(file) })
|
171
|
+
when '.csv' then Roo::Spreadsheet.open(file.to_s, csv_options: { encoding: 'bom|utf-8', headers: false, col_sep: separator(file) })
|
178
172
|
when '.txt' then ::File.read(file)
|
179
173
|
else fail(ArgumentError, "unrecognized file type")
|
180
174
|
end
|
@@ -11,6 +11,7 @@ module AIPP::LS::NOTAM
|
|
11
11
|
json = read
|
12
12
|
fail "malformed JSON received from API" unless json.has_key?(:queryNOTAMs)
|
13
13
|
added_notam_ids = []
|
14
|
+
aixm.sourced_at = Time.at(json[:latestUpdate])
|
14
15
|
json[:queryNOTAMs].each do |row|
|
15
16
|
next unless row[:notamRaw].match? /^Q\) LS/ # only parse national NOTAM
|
16
17
|
|
@@ -12,28 +12,40 @@ module AIPP::LS::SHOOT
|
|
12
12
|
effective_date = AIPP.options.local_effective_at.strftime('%Y%m%d')
|
13
13
|
airac_date = AIRAC::Cycle.new(aixm.effective_at).to_s('%Y-%m-%d')
|
14
14
|
shooting_grounds = {}
|
15
|
+
spl_rows = 0
|
15
16
|
read.each_with_index do |row, line|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
17
|
+
case row[0].strip
|
18
|
+
when 'TOT'
|
19
|
+
date, spl_count = row[1], row[2].to_i
|
20
|
+
fail "malformed CSV: #{spl_count} SPL records announced but #{spl_rows} SPL records found" unless spl_count == spl_rows
|
21
|
+
aixm.sourced_at = [date, TZInfo::Timezone.get('Europe/Zurich').abbr].join(' ')
|
22
|
+
next
|
23
|
+
when 'SPL'
|
24
|
+
spl_rows += 1
|
25
|
+
next
|
26
|
+
when 'BSZ'
|
27
|
+
id, date, no_shooting = row[1], row[2], (row[17] == "1")
|
28
|
+
next if no_shooting || date != effective_date
|
29
|
+
next if AIPP.options.id && AIPP.options.id != id
|
30
|
+
# TODO: Several BSZ lines may exist for the same shooting area with
|
31
|
+
# different location codes (aka: partial activations). The geometries
|
32
|
+
# of those location codes are not currently available, we therefore
|
33
|
+
# have to merge the data into one record. The geometries should become
|
34
|
+
# available by the end of 2023 which will make it possible to map
|
35
|
+
# each line to one geometry and remove the merging logic.
|
36
|
+
upper_z = row[15] ? AIXM.z(AIXM.d(row[15].to_i + SAFETY, :m).to_ft.dim.round, :qfe) : DEFAULT_Z
|
37
|
+
(shooting_grounds[id] ||= { schedules: [], upper_z: AIXM::GROUND }).then do |s|
|
38
|
+
s[:feature] ||= read("shooting_grounds-#{id}").fetch(:feature)
|
39
|
+
s[:csv_line] ||= line
|
40
|
+
s[:url] ||= row[10].blank_to_nil
|
41
|
+
s[:details] = [s[:details], row[6].blank_to_nil].compact.join("\n")
|
42
|
+
s[:dabs] ||= (row[16] == '1')
|
43
|
+
s[:upper_z] = upper_z if upper_z.alt > s[:upper_z].alt
|
44
|
+
s[:schedules] += schedules_for(row)
|
45
|
+
end
|
35
46
|
end
|
36
47
|
end
|
48
|
+
fail "malformed CSV: TOT record missing" unless aixm.sourced_at
|
37
49
|
shooting_grounds.each do |id, data|
|
38
50
|
data in csv_line:, details:, url:, upper_z:, schedules:, dabs:, feature: { geometry: polygons, properties: { bezeichnung: name, infobezeichnung: contact, infotelefonnr: phone, infoemail: email } }
|
39
51
|
schedules = consolidate(schedules)
|
data/lib/aipp/version.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,33 +1,34 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aipp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Schwyn
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain:
|
11
10
|
- |
|
12
11
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
MIIDODCCAiCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhydWJ5
|
13
|
+
L0RDPWJpdGNldGVyYS9EQz1jb20wHhcNMjQxMTIwMjExMDIwWhcNMjUxMTIwMjEx
|
14
|
+
MDIwWjAjMSEwHwYDVQQDDBhydWJ5L0RDPWJpdGNldGVyYS9EQz1jb20wggEiMA0G
|
16
15
|
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDcLg+IHjXYaUlTSU7R235lQKD8ZhEe
|
17
16
|
KMhoGlSUonZ/zo1OT3KXcqTCP1iMX743xYs6upEGALCWWwq+nxvlDdnWRjF3AAv7
|
18
17
|
ikC+Z2BEowjyeCCT/0gvn4ohKcR0JOzzRaIlFUVInlGSAHx2QHZ2N8ntf54lu7nd
|
19
18
|
L8CiDK8rClsY4JBNGOgH9UC81f+m61UUQuTLxyM2CXfAYkj/sGNTvFRJcNX+nfdC
|
20
19
|
hM9r2kH1+7wsa8yG7wJ2IkrzNACD8v84oE6qVusN8OLEMUI/NaEPVPbw2LUM149H
|
21
20
|
PVa0i729A4IhroNnFNmw4wOC93ARNbM1+LW36PLMmKjKudf5Exg8VmDVAgMBAAGj
|
22
|
-
|
23
|
-
yoX/
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
dzB1MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSfK8MtR62mQ6oN
|
22
|
+
yoX/VKJzFjLSVDAdBgNVHREEFjAUgRJydWJ5QGJpdGNldGVyYS5jb20wHQYDVR0S
|
23
|
+
BBYwFIEScnVieUBiaXRjZXRlcmEuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQDSeB1x
|
24
|
+
8QK8F/ML37isgvwGiQxovDUqu6Sq14cQ1qE9y5prUBmL2AsDuCBpXXctcvamFqNC
|
25
|
+
PgfJtj7ZZcXmY0SfKCog7T1btkr6zYxPXpxwUqB45n0I6v5qc0UCNvMEfBzxlak5
|
26
|
+
VW7UMNlKD9qukeN55hxuLF2F/sLldMcHUo/ATgdV4zk1t3sK6A9+02wz5K5qfWdM
|
27
|
+
Mi+XWXmGd57uojk3RcIXNwBRRP4DTKcKgVXhuyHb7q1vjTXrS6bw1Ortu0KmWOIk
|
28
|
+
jTyRsT1gymASS2KHe+BaCTwD74GqO8q4woYLZgXnJ/PvgcFgY2FEi2Kn/sXLp4JE
|
29
|
+
boIgxQCMT+nxBHCD
|
29
30
|
-----END CERTIFICATE-----
|
30
|
-
date: 2024-
|
31
|
+
date: 2024-12-27 00:00:00.000000000 Z
|
31
32
|
dependencies:
|
32
33
|
- !ruby/object:Gem::Dependency
|
33
34
|
name: airac
|
@@ -58,7 +59,7 @@ dependencies:
|
|
58
59
|
version: '1'
|
59
60
|
- - ">="
|
60
61
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.5.
|
62
|
+
version: 1.5.3
|
62
63
|
type: :runtime
|
63
64
|
prerelease: false
|
64
65
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -68,7 +69,7 @@ dependencies:
|
|
68
69
|
version: '1'
|
69
70
|
- - ">="
|
70
71
|
- !ruby/object:Gem::Version
|
71
|
-
version: 1.5.
|
72
|
+
version: 1.5.3
|
72
73
|
- !ruby/object:Gem::Dependency
|
73
74
|
name: notam
|
74
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,6 +90,20 @@ dependencies:
|
|
89
90
|
- - ">="
|
90
91
|
- !ruby/object:Gem::Version
|
91
92
|
version: 1.1.5
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: ostruct
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
type: :runtime
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
92
107
|
- !ruby/object:Gem::Dependency
|
93
108
|
name: activesupport
|
94
109
|
requirement: !ruby/object:Gem::Requirement
|
@@ -452,7 +467,6 @@ metadata:
|
|
452
467
|
source_code_uri: https://github.com/svoop/aipp
|
453
468
|
documentation_uri: https://www.rubydoc.info/gems/aipp
|
454
469
|
bug_tracker_uri: https://github.com/svoop/aipp/issues
|
455
|
-
post_install_message:
|
456
470
|
rdoc_options:
|
457
471
|
- "--title"
|
458
472
|
- AIP Parser and Converter
|
@@ -474,8 +488,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
474
488
|
- !ruby/object:Gem::Version
|
475
489
|
version: '0'
|
476
490
|
requirements: []
|
477
|
-
rubygems_version: 3.
|
478
|
-
signing_key:
|
491
|
+
rubygems_version: 3.6.2
|
479
492
|
specification_version: 4
|
480
493
|
summary: Parser for aeronautical information publications
|
481
494
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|