nexosis_api 1.3.0 → 1.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 05cf5a6d76290c17f23d0db1e00a5d9215dfc56c
4
- data.tar.gz: e28cbae30ef33132f250eb200efe6545eb46091b
3
+ metadata.gz: 7c526af7e9fcefc72090c15c425122bdcb1d84ad
4
+ data.tar.gz: d8b6c9a510f6c709f1d30cf4a7e63bd9864730cb
5
5
  SHA512:
6
- metadata.gz: b17a834985acaa28a81bf3ecb2e7874b03adfd40907b9df3698b324b334bd8e0c1d51fb103cf8c521d7523d23b32c2c014392a3e0ae27689f55b48ec9a4b90ef
7
- data.tar.gz: 06de1a773837de420b6a41cb24c32b41a50e007cdfd1eaccd2916fd18d7102448c7ea4b041545d29e1dbbefc98e759d68f9499f072fe15894b3709ad43e40e55
6
+ metadata.gz: bbfdbdc1f4da07c9ce8c88c7410ac483929ab07cd298906a31fb60395d5ed39a71c7609d3d69a705c2fba12c39de2102d8420d47ea3077efb6d20e4191e9232d
7
+ data.tar.gz: c17bdd00ea6712696f731b46193bcb6cd16f9a0f32bbe2c4cbb9e8fb8542e98ae8b13d21fbca517ddbb80c4892380b838215429a407eacbdaa076a51bcc0d0b2
@@ -23,6 +23,7 @@ module NexosisApi
23
23
  # @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
24
24
  attr_accessor :timezone
25
25
 
26
+ # custom hash to match with api requests
26
27
  def to_hash
27
28
  hash = { 'calendar' => {} }
28
29
  hash['calendar'].store 'url', url unless url.nil?
@@ -29,14 +29,22 @@ module NexosisApi
29
29
  # Gets the list of data sets that have been saved to the system, optionally filtering by partial name match.
30
30
  #
31
31
  # @param partial_name [String] if provided, all datasets returned will contain this string
32
- # @return [Array of NexosisApi::DatasetSummary] array of datasets found
33
- def list_datasets(partial_name = '')
34
- list_dataset_url = "/data?partialName=#{partial_name}"
35
- response = self.class.get(list_dataset_url, headers: @headers)
32
+ # @param page [int] page number for items in list
33
+ # @param page_size [int] number of items in each page
34
+ # @return [NexosisApi::PagedArray of NexosisApi::DatasetSummary] array of datasets found
35
+ # @since 1.4 - added paging parameters
36
+ def list_datasets(partial_name = '', page = 0, page_size = 50)
37
+ list_dataset_url = '/data'
38
+ query = {
39
+ page: page,
40
+ pageSize: page_size
41
+ }
42
+ query['partialName'] = partial_name unless partial_name.empty?
43
+ response = self.class.get(list_dataset_url, headers: @headers, query: query)
36
44
  if response.success?
37
- response.parsed_response['items'].map do |dr|
38
- NexosisApi::DatasetSummary.new(dr)
39
- end
45
+ NexosisApi::PagedArray.new(response.parsed_response,
46
+ response.parsed_response['items']
47
+ .map { |dr| NexosisApi::DatasetSummary.new(dr) })
40
48
  else
41
49
  raise HttpException.new("There was a problem listing datasets: #{response.code}.", "listing datasets with partial name #{partial_name}", response)
42
50
  end
@@ -8,12 +8,23 @@ module NexosisApi
8
8
 
9
9
  # List all existing import requests
10
10
  #
11
- # @return [Array of NexosisApi::ImportsResponse]
12
- def list_imports
11
+ # @param dataset_name [String] optional name filter of dataset which was imported
12
+ # @param page [int] page number for items in list
13
+ # @param page_size [int] number of items in each page
14
+ # @return [NexosisApi::PagedArray of NexosisApi::ImportsResponse]
15
+ # @since 1.4 added paging parameters
16
+ def list_imports(dataset_name = '', page = 0, page_size = 50)
13
17
  imports_url = '/imports'
14
- response = self.class.get(imports_url, headers: @headers)
18
+ query = {
19
+ dataSetName: dataset_name,
20
+ page: page,
21
+ pageSize: page_size
22
+ }
23
+ response = self.class.get(imports_url, headers: @headers, query: query)
15
24
  if (response.success?)
16
- response.parsed_response['items'].map { |i| NexosisApi::ImportsResponse.new(i) }
25
+ NexosisApi::PagedArray.new(response.parsed_response,
26
+ response.parsed_response['items']
27
+ .map { |i| NexosisApi::ImportsResponse.new(i) })
17
28
  else
18
29
  raise HttpException.new("There was a problem getting the imports: #{response.code}.", "uploading dataset from s3 #{dataset_name}", response)
19
30
  end
@@ -9,7 +9,7 @@ module NexosisApi
9
9
  # models created for this data source name.
10
10
  # @param query_options [Hash] limit by dates: begin_date and/or end_date
11
11
  # @note - query options dates can either be ISO 8601 compliant strings or Date objects
12
- # @return [Array of NexosisApi::ModelSummary] - all models available within the query parameters
12
+ # @return [NexosisApi::PagedArray of NexosisApi::ModelSummary] - all models available within the query parameters
13
13
  def list_models(datasource_name = nil, page = 0, page_size = 50, query_options = {})
14
14
  model_url = '/models'
15
15
  query = {
@@ -22,11 +22,12 @@ module NexosisApi
22
22
  end
23
23
  query.store(dataSourceName: datasource_name) unless datasource_name.nil?
24
24
  response = self.class.get(model_url, headers: @headers, query: query)
25
- if (response.success?)
26
- response.parsed_response['items'].map { |item| NexosisApi::ModelSummary.new(item) }
27
- else
28
- raise HttpException.new("There was a problem listing models: #{response.code}.", "listing models with data source name #{datasource_name}", response)
29
- end
25
+ raise HttpException.new("There was a problem listing models: #{response.code}.",
26
+ "listing models with data source name #{datasource_name}",
27
+ response) unless response.success?
28
+ NexosisApi::PagedArray.new(response.parsed_response,
29
+ response.parsed_response['items']
30
+ .map { |item| NexosisApi::ModelSummary.new(item) })
30
31
  end
31
32
 
32
33
  # Get the details of the particular model requested by id
@@ -13,14 +13,14 @@ module NexosisApi
13
13
  # @param query_options [Hash] optionally provide query parameters to limit the search of sessions.
14
14
  # @param page [Integer] optionally provide a page number for paging. Defaults to 0 (first page).
15
15
  # @param pageSize [Integer] optionally provide a page size to limit the total number of results. Defaults to 50, max 1000
16
- # @return [Array of NexosisApi::SessionResponse] with all sessions matching the query or all if no query
16
+ # @return [NexosisApi::PagedArray of NexosisApi::SessionResponse] with all sessions matching the query or all if no query
17
17
  # @note query parameters hash members are dataset_name, event_name, requested_before_date, and requested_after_date.
18
18
  # After and before dates refer to the session requested date.
19
19
  # @example query for just one dataset
20
20
  # sessions = NexosisApi.client.list_sessions :dataset_name => 'MyDataset'
21
21
  def list_sessions(query_options = {}, page = 0, pageSize = 50)
22
22
  sessions_url = '/sessions'
23
- query = {
23
+ query = {
24
24
  'dataSetName' => query_options[:dataset_name],
25
25
  'eventName' => query_options[:event_name],
26
26
  'requestedAfterDate' => query_options[:requested_after_date],
@@ -29,17 +29,14 @@ module NexosisApi
29
29
  'page' => page,
30
30
  'pageSize' => pageSize
31
31
  }
32
- response = self.class.get(sessions_url, :headers => @headers, :query => query)
33
- if(response.success?)
34
- all_responses = []
35
- response.parsed_response['items'].each do |session_hash|
36
- response_hash = { 'session' => session_hash }.merge(response.headers)
37
- all_responses << NexosisApi::SessionResponse.new(response_hash)
38
- end
39
- all_responses
40
- else
41
- raise HttpException.new('Could not retrieve sessions',"Get all sessions with query #{query_options.to_s}",response)
42
- end
32
+ response = self.class.get(sessions_url, headers: @headers, query: query)
33
+ raise HttpException.new('Could not retrieve sessions',
34
+ "Get all sessions with query #{query_options}",
35
+ response) unless response.success?
36
+ NexosisApi::PagedArray.new(response.parsed_response, response.parsed_response['items'].map do |session_hash|
37
+ response_hash = { 'session' => session_hash }.merge(response.headers)
38
+ NexosisApi::SessionResponse.new(response_hash)
39
+ end)
43
40
  end
44
41
 
45
42
  # Remove a session
@@ -127,11 +124,13 @@ module NexosisApi
127
124
  #
128
125
  # @param session_id [String] the Guid string returned in a previous session request
129
126
  # @param as_csv [Boolean] indicate whether results should be returned in csv format
127
+ # @param prediction_interval [Float] one of the available prediction intervals for the session.
130
128
  # @return [NexosisApi::SessionResult] SessionResult if parsed, String of csv data otherwise
131
- def get_session_results(session_id, as_csv = false)
129
+ def get_session_results(session_id, as_csv = false, prediction_interval = nil)
132
130
  session_result_url = "/sessions/#{session_id}/results"
133
131
  @headers['Accept'] = 'text/csv' if as_csv
134
- response = self.class.get(session_result_url, @options)
132
+ query = { predictionInterval: prediction_interval } unless prediction_interval.nil?
133
+ response = self.class.get(session_result_url, headers: @headers, query: query)
135
134
  @headers.delete('Accept')
136
135
 
137
136
  if (response.success?)
@@ -153,6 +152,12 @@ module NexosisApi
153
152
  raise HttpException.new("There was a problem getting the session: #{response.code}.", "getting session #{session_id}" ,response)
154
153
  end
155
154
 
155
+ # Create a new model based on a data source
156
+ #
157
+ # @param datasource_name [String] The datasource from which to build the model
158
+ # @param target_column [String] The column which will be predicted when using the model
159
+ # @param columns [Hash] column metadata to modify roles, imputation, or target.
160
+ # @since 1.3.0
156
161
  def create_model(datasource_name, target_column, columns = {})
157
162
  model_url = '/sessions/model'
158
163
  body = {
@@ -11,7 +11,7 @@ module NexosisApi
11
11
  # @param dataset_name [String] optionally limit results by dataset used in definition
12
12
  # @param page [Integer] optionally get results by non-zero page - defaults to 0
13
13
  # @param page_size [Integer] optionally limit page size - defaults to 50 (max: 1000)
14
- # @return [Array of NexosisApi::ViewDefinition]
14
+ # @return [NexosisApi::PagedArray of NexosisApi::ViewDefinition]
15
15
  # @raise [NexosisApi::HttpException]
16
16
  def list_views(partial_name = '', dataset_name = '', page = 0, page_size = 50)
17
17
  url = '/views'
@@ -22,11 +22,9 @@ module NexosisApi
22
22
  query.store 'partialName', partial_name if partial_name.empty? == false
23
23
  query.store 'dataSetName', dataset_name if dataset_name.empty? == false
24
24
  response = self.class.get(url, headers: @headers, query: query)
25
- if response.success?
26
- response.parsed_response['items'].map do |definition|
27
- NexosisApi::ViewDefinition.new(definition)
28
- end
29
- end
25
+ raise NexosisApi::HttpException('Could not retrieve list of views.', 'attempting list of views', response) unless response.success?
26
+ NexosisApi::PagedArray.new(response.parsed_response, response.parsed_response['items']
27
+ .map { |definition| NexosisApi::ViewDefinition.new(definition) })
30
28
  end
31
29
 
32
30
  # Create a new view or update an existing one by name
@@ -17,6 +17,7 @@ require 'nexosis_api/join'
17
17
  require 'nexosis_api/link'
18
18
  require 'nexosis_api/metric'
19
19
  require 'nexosis_api/model_summary'
20
+ require 'nexosis_api/paged_array'
20
21
  require 'nexosis_api/predict_response'
21
22
  require 'nexosis_api/session_response'
22
23
  require 'nexosis_api/session_result'
@@ -40,6 +40,7 @@ module NexosisApi
40
40
  'aggregation' => aggregation.to_s } }
41
41
  end
42
42
 
43
+ # allows json to be built for api requests
43
44
  def self.to_json(column_array)
44
45
  result = {}
45
46
  column_array.each { |col| result[col.to_hash.keys[0]] = col.to_hash.values[0] }
@@ -27,6 +27,7 @@ module NexosisApi
27
27
  # @return [String]
28
28
  attr_accessor :alias
29
29
 
30
+ # builds a custom hash which will match api requests
30
31
  def to_hash
31
32
  hash = { column_name => {} }
32
33
  hash[column_name]['join_interval'] = join_interval.to_s unless join_interval.nil?
@@ -11,6 +11,7 @@ module NexosisApi
11
11
  # @return [String] name of the dataset provided for this join
12
12
  attr_accessor :dataset_name
13
13
 
14
+ # provides a custom hash to match api requests
14
15
  def to_hash
15
16
  { 'dataSet' => { 'name' => dataset_name } }
16
17
  end
@@ -37,6 +37,7 @@ module NexosisApi
37
37
  # @return [Array of NexosisApi::Join] zero or more additional joins
38
38
  attr_accessor :joins
39
39
 
40
+ # provides a custom hash which can be converted to json matching api request
40
41
  def to_hash
41
42
  hash = join_target.to_hash
42
43
  if column_options.nil? == false
@@ -54,6 +55,7 @@ module NexosisApi
54
55
  hash
55
56
  end
56
57
 
58
+ # gets a json represenation which can be used in api request
57
59
  def to_json
58
60
  to_hash.to_json
59
61
  end
@@ -0,0 +1,35 @@
1
+ module NexosisApi
2
+ # Generic list base class for list responses
3
+ # @since 1.4.0
4
+ class PagedArray < Array
5
+ def initialize(paged_response, item_array = [])
6
+ self[0..item_array.length] = item_array
7
+ var_map = { 'pageNumber' => :@page_number,
8
+ 'totalPages' => :@total_pages,
9
+ 'pageSize' => :@page_size,
10
+ 'totalCount' => :@item_total }
11
+ paged_response.each { |k, v| instance_variable_set(var_map[k.to_s], v) unless var_map[k.to_s].nil? }
12
+ @links = paged_response['links'].map { |l| NexosisApi::Link.new(l) } unless paged_response['links'].nil?
13
+ end
14
+
15
+ # The current page number represented by this collection
16
+ # @return [int]
17
+ attr_accessor :page_number
18
+
19
+ # The total number of pages given the current page size and item total
20
+ # @return [int]
21
+ attr_accessor :total_pages
22
+
23
+ # The total number of items per page
24
+ # @return [int]
25
+ attr_accessor :page_size
26
+
27
+ # The total number of items available on the server for this collection
28
+ # @return [int]
29
+ attr_accessor :item_total
30
+
31
+ # paging links to first, last pages
32
+ # @return [Array of NexosisApi::Link]
33
+ attr_accessor :links
34
+ end
35
+ end
@@ -1,37 +1,41 @@
1
1
  module NexosisApi
2
2
  # Class for parsing the results of a session based request
3
3
  class Session
4
- def initialize(sessionHash)
5
- sessionHash.each do |k,v|
4
+ def initialize(session_hash)
5
+ val_map = { 'resultInterval' => :@result_interval,
6
+ 'dataSourceName' => :@datasource_name,
7
+ 'modelId' => :@model_id,
8
+ 'sessionId' => :@session_id,
9
+ 'availablePredictionIntervals' => :@prediction_intervals,
10
+ 'startDate' => :@start_date,
11
+ 'endDate' => :@end_date }
12
+ session_hash.each do |k, v|
6
13
  if (k == 'links')
7
- links = Array.new
8
- v.each { |l| links << NexosisApi::Link.new(l) }
9
- instance_variable_set("@#{k}", links) unless v.nil?
10
- elsif (k == 'isEstimate')
11
- instance_variable_set('@is_estimate', v) unless v.nil?
14
+ @links = v.map { |l| NexosisApi::Link.new(l) }
12
15
  elsif (k == 'columns')
13
16
  @column_metadata = v.reject { |_key, value| value.nil? }
14
17
  .map do |col_key, col_val|
15
18
  NexosisApi::Column.new(col_key, v[col_key])
16
19
  end
17
- elsif (k == 'resultInterval')
18
- @result_interval = v
19
- elsif (k == 'dataSourceName')
20
- @datasource_name = v
21
- elsif (k == 'modelId')
22
- @model_id = v
23
20
  elsif (k == 'requestedDate')
24
21
  @requested_date = DateTime.parse(v)
25
22
  else
26
23
  instance_variable_set("@#{k}", v) unless v.nil?
27
24
  end
25
+ instance_variable_set(val_map[k], v) unless val_map[k].nil?
28
26
  end
29
27
  end
30
28
 
31
29
  # identifier for this sesssion
32
30
  # @return [String]
31
+ # @deprecated use session_id instead
33
32
  attr_accessor :sessionId
34
33
 
34
+ # identifier for this sesssion
35
+ # @return [String]
36
+ # @since 1.4.0
37
+ attr_accessor :session_id
38
+
35
39
  # What type of analysis was run during this session
36
40
  # @return [String]
37
41
  attr_accessor :type
@@ -59,12 +63,24 @@ module NexosisApi
59
63
 
60
64
  # The start date of analysis in this session
61
65
  # @return [DateTime]
66
+ # @deprecated use start_date instead
62
67
  attr_accessor :startDate
63
68
 
64
69
  # The end date of analysis in this session
65
70
  # @return [DateTime]
71
+ # @deprecated use end_date instead
66
72
  attr_accessor :endDate
67
73
 
74
+ # The start date of analysis in this session
75
+ # @return [DateTime]
76
+ # @since 1.4.0
77
+ attr_accessor :start_date
78
+
79
+ # The end date of analysis in this session
80
+ # @return [DateTime]
81
+ # @since 1.4.0
82
+ attr_accessor :end_date
83
+
68
84
  # associated hypermedia
69
85
  # @return [Array of NexosisApi::Link]
70
86
  attr_accessor :links
@@ -96,7 +112,14 @@ module NexosisApi
96
112
  # @since 1.3.0
97
113
  # @note This is always empty in time-series sessions (forecast/impact)
98
114
  # The model id returned here should be used in all future calls
99
- # to model endpoints - primarily the /models/{modelId}/predict endpoint.
115
+ # to model endpoints - primarily the /models/{model_id}/predict endpoint.
100
116
  attr_accessor :model_id
117
+
118
+ # An array of the prediction intervals available for this session's results
119
+ # @return [Array]
120
+ # @note - by default the .5 interval will be returned in results. Consult
121
+ # this list for other intervals which can be requested.
122
+ # @since 1.4.0
123
+ attr_accessor :prediction_intervals
101
124
  end
102
125
  end
@@ -44,6 +44,7 @@ module NexosisApi
44
44
  # @since 1.3.0
45
45
  alias_method :timeseries?, :is_timeseries
46
46
 
47
+ # Provides a custom hash which matches json of api request
47
48
  def to_json
48
49
  hash = {}
49
50
  hash['dataSetName'] = dataset_name
data/nexosisapi.gemspec CHANGED
@@ -16,6 +16,6 @@ Gem::Specification.new do |spec|
16
16
  spec.require_paths = ['lib']
17
17
  spec.required_ruby_version = '>= 2.0.0'
18
18
  spec.summary = "Ruby client for working with the Nexosis API"
19
- spec.version = '1.3.0'
19
+ spec.version = '1.4.0'
20
20
  spec.metadata["yard.run"] = "yri"
21
21
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexosis_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nexosis,Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-06 00:00:00.000000000 Z
11
+ date: 2017-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -71,6 +71,7 @@ files:
71
71
  - lib/nexosis_api/link.rb
72
72
  - lib/nexosis_api/metric.rb
73
73
  - lib/nexosis_api/model_summary.rb
74
+ - lib/nexosis_api/paged_array.rb
74
75
  - lib/nexosis_api/predict_response.rb
75
76
  - lib/nexosis_api/session.rb
76
77
  - lib/nexosis_api/session_response.rb