Skip to content
Snippets Groups Projects
Commit 5d21a830 authored by Dóra Kocsis's avatar Dóra Kocsis
Browse files

modify input validation for strings

parent a90d727b
No related branches found
No related tags found
No related merge requests found
...@@ -37,13 +37,14 @@ function df = fetch_series(varargin) ...@@ -37,13 +37,14 @@ function df = fetch_series(varargin)
default_api_base_url = 'https://api.db.nomics.world/v22/'; default_api_base_url = 'https://api.db.nomics.world/v22/';
p = inputParser; p = inputParser;
p.addParameter('provider_code', '', @isstring); validStringInput = @(x) isstring(x) || ischar(x) || iscellstr(x);
p.addParameter('dataset_code', '', @isstring); p.addParameter('provider_code', '', validStringInput);
p.addParameter('series_code', '', @isstring); %string array shoudl be accepted as well p.addParameter('dataset_code', '', validStringInput);
p.addParameter('series_code', '', validStringInput);
p.addParameter('dimensions', @ischar); %if no dimensions specified, provider_code & dataset_code MUST BE GIVEN p.addParameter('dimensions', @ischar); %if no dimensions specified, provider_code & dataset_code MUST BE GIVEN
p.addParameter('series_ids', @iscellstr); p.addParameter('series_ids', '',validStringInput);
p.addParameter('max_nb_series', NaN, @isnumeric); p.addParameter('max_nb_series', NaN, @isnumeric);
p.addParameter('api_base_url', default_api_base_url, @isstring); p.addParameter('api_base_url', default_api_base_url, validStringInput);
p.addParameter('dbnomics_filters', '', @ischar); p.addParameter('dbnomics_filters', '', @ischar);
p.KeepUnmatched = false; p.KeepUnmatched = false;
p.parse(varargin{:}); p.parse(varargin{:});
...@@ -56,7 +57,7 @@ if isempty(p.Results.dataset_code) ...@@ -56,7 +57,7 @@ if isempty(p.Results.dataset_code)
if iscell(p.Results.provider_code) if iscell(p.Results.provider_code)
p.Results.series_ids = p.Results.provider_code; p.Results.series_ids = p.Results.provider_code;
p.Results.provider_code = ''; p.Results.provider_code = '';
elseif isstring(p.Results.provider_code) elseif ~isempty(p.Results.provider_code)
p.Results.series_ids = {p.Results.provider_code}; p.Results.series_ids = {p.Results.provider_code};
p.Results.provider_code = ''; p.Results.provider_code = '';
end end
...@@ -64,29 +65,29 @@ end ...@@ -64,29 +65,29 @@ end
series_base_url = [p.Results.api_base_url 'series']; series_base_url = [p.Results.api_base_url 'series'];
if ~isstruct(p.Results.dimensions) && ~isstring(p.Results.series_code) && ~isstring(p.Results.series_ids) if isa(p.Results.dimensions, 'function_handle') && isempty(p.Results.series_code) && isempty(p.Results.series_ids)
if ~isstring(p.Results.provider_code) || ~isstring(p.Results.dataset_code) if isempty(p.Results.provider_code) || isempty(p.Results.dataset_code)
error('When you don''t use dimensions, you must specifiy provider_code and dataset_code.'); error('When you don''t use dimensions, you must specifiy provider_code and dataset_code.');
end end
api_link = sprintf('%s/%s/%s?observations=1', series_base_url, p.Results.provider_code, p.Results.dataset_code); api_link = sprintf('%s/%s/%s?observations=1', series_base_url, p.Results.provider_code, p.Results.dataset_code);
end end
if ischar(p.Results.dimensions) if ~isa(p.Results.dimensions, 'function_handle')
if ~isstring(p.Results.provider_code) || ~isstring(p.Results.dataset_code) if isempty(p.Results.provider_code) || isempty(p.Results.dataset_code)
error('When you use dimensions, you must specifiy provider_code and dataset_code.'); error('When you use dimensions, you must specifiy provider_code and dataset_code.');
end end
api_link = sprintf('%s/%s/%s?observations=1&dimensions=%s', series_base_url, p.Results.provider_code, p.Results.dataset_code, p.Results.dimensions); %jsonencode( api_link = sprintf('%s/%s/%s?observations=1&dimensions=%s', series_base_url, p.Results.provider_code, p.Results.dataset_code, p.Results.dimensions); %jsonencode(
end end
if isstring(p.Results.series_code) if ~isempty(p.Results.series_code)
if ~isstring(p.Results.provider_code) || ~isstring(p.Results.dataset_code) if isempty(p.Results.provider_code) || isempty(p.Results.dataset_code)
error('When you use series_code, you must specifiy provider_code and dataset_code.'); error('When you use series_code, you must specifiy provider_code and dataset_code.');
end end
api_link = sprintf('%s/%s/%s/%s?observations=1', series_base_url, p.Results.provider_code, p.Results.dataset_code, p.Results.series_code); api_link = sprintf('%s/%s/%s/%s?observations=1', series_base_url, p.Results.provider_code, p.Results.dataset_code, p.Results.series_code);
end end
if isstring(p.Results.series_ids) if ~isempty(p.Results.series_ids)
if isstring(p.Results.provider_code) || isstring(p.Results.dataset_code) if ~isempty(p.Results.provider_code) || ~isempty(p.Results.dataset_code)
error('When you use series_ids, you must not specifiy provider_code nor dataset_code.'); error('When you use series_ids, you must not specifiy provider_code nor dataset_code.');
end end
api_link = sprintf('%s?observations=1&series_ids=%s', series_base_url, strjoin(p.Results.series_ids,',')); api_link = sprintf('%s?observations=1&series_ids=%s', series_base_url, strjoin(p.Results.series_ids,','));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment