quandl_format 0.2.7 → 0.2.8
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
- data/UPGRADE.md +6 -0
- data/lib/quandl/format/dataset/attributes.rb +0 -31
- data/lib/quandl/format/dataset/load.rb +24 -7
- data/lib/quandl/format/version.rb +1 -1
- data/spec/fixtures/data/missing_colon.qdf +2 -0
- data/spec/fixtures/data/missing_colon2.qdf +3 -0
- data/spec/fixtures/data/missing_dashes.qdf +11 -0
- data/spec/fixtures/data/missing_space.qdf +1 -0
- data/spec/lib/quandl/format/dataset/load/errors_spec.rb +5 -4
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c2355e2207291cd09c76a495b2565c28fefdbd0
|
4
|
+
data.tar.gz: 5699891dd773b8d58e4824d4a7411b39db054e92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6426c47bc68a9891942a529ba2220a3360de14031e68f7b8d117a5faaf01cad4ba8e30c406b6c101778c09a6a33dddb7f04037ef26b5ceff4a4807f4b6e35606
|
7
|
+
data.tar.gz: a0db81d386ea365f37d2f64007c04f37ec6e4cb7f0fdb577905ae6824eaeded19545c675bf7ac20f52d2574d989e0613a7a7bcd8548598443a2e76ed0dc584e8
|
data/UPGRADE.md
CHANGED
@@ -62,8 +62,6 @@ module Attributes
|
|
62
62
|
rows = rows.to_table if rows.respond_to?(:to_table)
|
63
63
|
@data = Quandl::Data.new(rows).to_date
|
64
64
|
self.column_names = @data.headers if @data.headers.present?
|
65
|
-
data_row_count_should_match_column_count!
|
66
|
-
data_rows_should_have_equal_columns!
|
67
65
|
@data
|
68
66
|
end
|
69
67
|
|
@@ -86,38 +84,9 @@ module Attributes
|
|
86
84
|
def attributes
|
87
85
|
self.class.attribute_names.inject({}){|m,k| m[k] = self.send(k) unless self.send(k).nil?; m }
|
88
86
|
end
|
89
|
-
|
90
|
-
protected
|
91
|
-
|
92
|
-
def data_rows_should_have_equal_columns!
|
93
|
-
return if data.blank?
|
94
|
-
row_count = data[0].count
|
95
|
-
data.each_with_index do |row, index|
|
96
|
-
raise_row_column_mismatch!(row, index) unless row.count == row_count
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def data_row_count_should_match_column_count!
|
101
|
-
return if column_names.blank?
|
102
|
-
column_count = column_names.count
|
103
|
-
data.each_with_index do |row, index|
|
104
|
-
raise_column_count_mismatch!(row, index) unless row.count == column_count
|
105
|
-
end
|
106
|
-
end
|
107
87
|
|
108
|
-
|
109
88
|
private
|
110
89
|
|
111
|
-
def raise_row_column_mismatch!(row, index)
|
112
|
-
m = "Unexpected number of points in this row '#{row}'. Expected #{data[0].count} but found #{row.count} based on #{data[0]}"
|
113
|
-
raise Quandl::Error::ColumnCountMismatch.new( row: row, line: index, context: 'data_rows_should_have_equal_columns!' ), m
|
114
|
-
end
|
115
|
-
|
116
|
-
def raise_column_count_mismatch!(row, index)
|
117
|
-
m = "Unexpected number of points in this row '#{row}'. Expected #{column_names.count} but found #{row.count} based on #{column_names}"
|
118
|
-
raise Quandl::Error::ColumnCountMismatch.new( row: row, line: index+1, context: 'data_row_count_should_match_column_count!' ), m
|
119
|
-
end
|
120
|
-
|
121
90
|
def raise_unknown_attribute_error!(key)
|
122
91
|
m = "Unknown Field '#{key}' valid fields are: #{self.class.meta_attribute_names.join(', ')}"
|
123
92
|
raise Quandl::Error::UnknownAttribute, m
|
@@ -19,7 +19,7 @@ class Quandl::Format::Dataset::Load
|
|
19
19
|
# process line
|
20
20
|
node = process_line(line, node, &block)
|
21
21
|
end
|
22
|
-
process_tail(node, &block)
|
22
|
+
process_tail(node, &block)
|
23
23
|
end
|
24
24
|
|
25
25
|
def file(path)
|
@@ -43,7 +43,7 @@ class Quandl::Format::Dataset::Load
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def new_node(line=0)
|
46
|
-
{ line: line, section: :attributes, data: '', attributes: '', data_line: 0 }
|
46
|
+
{ line: line, section: :attributes, data: '', attributes: '', data_line: 0, offset: line==0 ? 0 : line-1 }
|
47
47
|
end
|
48
48
|
|
49
49
|
def process_tail(node, &block)
|
@@ -58,7 +58,10 @@ class Quandl::Format::Dataset::Load
|
|
58
58
|
# strip whitespace
|
59
59
|
line = rline.strip.rstrip
|
60
60
|
# skip comments and blank lines
|
61
|
-
|
61
|
+
if line[0] == SYNTAX[:comment] || line.blank?
|
62
|
+
node[:attributes] += "\n" if node[:section] == :attributes
|
63
|
+
return node
|
64
|
+
end
|
62
65
|
# looking at an attribute?
|
63
66
|
if line =~ SYNTAX[:attribute]
|
64
67
|
# exiting data section?
|
@@ -111,7 +114,9 @@ class Quandl::Format::Dataset::Load
|
|
111
114
|
|
112
115
|
def parse_yaml_attributes(node)
|
113
116
|
attrs = {}
|
114
|
-
YAML.load( node[:attributes] )
|
117
|
+
attributes = YAML.load( node[:attributes] )
|
118
|
+
raise 'Unparsable input' unless attributes.is_a? Hash
|
119
|
+
attributes.symbolize_keys!.each do |key, value|
|
115
120
|
attrs[key.to_s.downcase.to_sym] = value
|
116
121
|
end
|
117
122
|
attrs
|
@@ -131,9 +136,21 @@ class Quandl::Format::Dataset::Load
|
|
131
136
|
|
132
137
|
def log_yaml_parse_error(node, err)
|
133
138
|
message = ""
|
134
|
-
|
135
|
-
|
136
|
-
|
139
|
+
if err.message == 'Unparsable input'
|
140
|
+
message = "Input data is unparsable. Are you missing a colon (:) or a space after a colon?\n"
|
141
|
+
elsif err.is_a?(Psych::SyntaxError)
|
142
|
+
if err.problem =~ /mapping values are not allowed in this context/
|
143
|
+
message = "Syntax error before line #{1+node[:offset] + err.line}. Are you missing a colon (:) or a space after a colon?\n"
|
144
|
+
else
|
145
|
+
message += "Error parsing metadata. #{err.problem.capitalize} on line #{node[:offset] + err.line}\n"
|
146
|
+
if err.problem =~ /expected ':'/
|
147
|
+
message += "Did you forget to delimit the meta data section from the data section with a one or more dashes ('#{SYNTAX[:data]}')?\n"
|
148
|
+
end
|
149
|
+
end
|
150
|
+
else
|
151
|
+
message += "Attribute parse error at line #{ node[:line] + err.line } column #{err.column}. #{err.problem} (#{err.class})\n" if node.has_key?(:line) && err.respond_to?(:line)
|
152
|
+
message += "Encountered error while parsing: \n " + node[:attributes].split("\n")[err.line - 1].to_s + "\n" if err.respond_to?(:line)
|
153
|
+
end
|
137
154
|
message += "--"
|
138
155
|
Quandl::Logger.error(message)
|
139
156
|
end
|
@@ -2,6 +2,7 @@ code: "BLAKE_TEST_1"
|
|
2
2
|
name: "A new title"
|
3
3
|
description: "The description Date, Open, High"
|
4
4
|
private: false
|
5
|
+
-
|
5
6
|
Date,Open,High,Low,Last,Close,Total Trade Quantity,Turnover (Lacs)
|
6
7
|
2013-11-22,1252.0,454.95,448.2,450.0,450.0,1354405.0,6099.41
|
7
8
|
2013-11-21,452.25,457.75,449.1,451.2,451.0,218881.0,992.94
|
@@ -9,13 +10,23 @@ Date,Open,High,Low,Last,Close,Total Trade Quantity,Turnover (Lacs)
|
|
9
10
|
code: "BLAKE_TEST_2"
|
10
11
|
name: "A new title"
|
11
12
|
description: "The description Date, Open, High"
|
13
|
+
-
|
12
14
|
Date,Open,High,Low,Last,Close,Total Trade Quantity,Turnover (Lacs)
|
13
15
|
2013-11-22,1252.0,454.95,448.2,450.0,450.0,1354405.0,6099.41
|
14
16
|
2013-11-21,452.25,457.75,449.1,451.2,451.0,218881.0,992.94
|
15
17
|
|
18
|
+
# Missing Dash in this one
|
16
19
|
code: "BLAKE_TEST_3"
|
17
20
|
name: "A new title"
|
18
21
|
description: "The description Date, Open, High"
|
19
22
|
Date,Open,High,Low,Last,Close,Total Trade Quantity,Turnover (Lacs)
|
20
23
|
2013-11-22,1252.0,454.95,448.2,450.0,450.0,1354405.0,6099.41
|
24
|
+
2013-11-21,452.25,457.75,449.1,451.2,451.0,218881.0,992.94
|
25
|
+
|
26
|
+
code: "BLAKE_TEST_4"
|
27
|
+
name: "A new title"
|
28
|
+
description: "The description Date, Open, High"
|
29
|
+
-
|
30
|
+
Date,Open,High,Low,Last,Close,Total Trade Quantity,Turnover (Lacs)
|
31
|
+
2013-11-22,1252.0,454.95,448.2,450.0,450.0,1354405.0,6099.41
|
21
32
|
2013-11-21,452.25,457.75,449.1,451.2,451.0,218881.0,992.94
|
@@ -0,0 +1 @@
|
|
1
|
+
code:FOO
|
@@ -12,10 +12,11 @@ describe Quandl::Format::Dataset do
|
|
12
12
|
|
13
13
|
it_should_expect_error 'invalid_data', /Date/
|
14
14
|
it_should_expect_error 'unknown_attribute', /this_attribute_does_not_exist/
|
15
|
-
it_should_expect_error '
|
16
|
-
it_should_expect_error '
|
17
|
-
it_should_expect_error 'invalid_yaml', /could not find expected ':'/
|
18
|
-
it_should_expect_error 'missing_dashes', /Attribute parse error at line 28 column 1/
|
15
|
+
it_should_expect_error 'invalid_yaml', /Could not find expected ':'/
|
16
|
+
it_should_expect_error 'missing_dashes', /Could not find expected ':' on line 22/
|
19
17
|
it_should_expect_error 'missing_dashes', /Did you forget to delimit the meta data section/
|
18
|
+
it_should_expect_error 'missing_colon', /Are you missing a colon/
|
19
|
+
it_should_expect_error 'missing_colon2', /Could not find expected ':' on line 3/
|
20
|
+
it_should_expect_error 'missing_space', /Are you missing a colon/
|
20
21
|
|
21
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quandl_format
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Hilscher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: quandl_client
|
@@ -157,7 +157,10 @@ files:
|
|
157
157
|
- spec/fixtures/data/metadata_only.qdf
|
158
158
|
- spec/fixtures/data/mismatched_columns.qdf
|
159
159
|
- spec/fixtures/data/mismatched_rows.qdf
|
160
|
+
- spec/fixtures/data/missing_colon.qdf
|
161
|
+
- spec/fixtures/data/missing_colon2.qdf
|
160
162
|
- spec/fixtures/data/missing_dashes.qdf
|
163
|
+
- spec/fixtures/data/missing_space.qdf
|
161
164
|
- spec/fixtures/data/tabular.qdf
|
162
165
|
- spec/fixtures/data/unknown_attribute.qdf
|
163
166
|
- spec/fixtures/data/valid.qdf
|
@@ -204,7 +207,10 @@ test_files:
|
|
204
207
|
- spec/fixtures/data/metadata_only.qdf
|
205
208
|
- spec/fixtures/data/mismatched_columns.qdf
|
206
209
|
- spec/fixtures/data/mismatched_rows.qdf
|
210
|
+
- spec/fixtures/data/missing_colon.qdf
|
211
|
+
- spec/fixtures/data/missing_colon2.qdf
|
207
212
|
- spec/fixtures/data/missing_dashes.qdf
|
213
|
+
- spec/fixtures/data/missing_space.qdf
|
208
214
|
- spec/fixtures/data/tabular.qdf
|
209
215
|
- spec/fixtures/data/unknown_attribute.qdf
|
210
216
|
- spec/fixtures/data/valid.qdf
|