From 5d21a830bcc06720d0b79232805abf5f0095b654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=B3ra=20Kocsis?= <dora@dynare.org> Date: Fri, 20 Mar 2020 17:25:40 +0100 Subject: [PATCH] modify input validation for strings --- src/fetch_series.m | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/fetch_series.m b/src/fetch_series.m index 7fce64f..9133ba3 100644 --- a/src/fetch_series.m +++ b/src/fetch_series.m @@ -37,13 +37,14 @@ function df = fetch_series(varargin) default_api_base_url = 'https://api.db.nomics.world/v22/'; p = inputParser; -p.addParameter('provider_code', '', @isstring); -p.addParameter('dataset_code', '', @isstring); -p.addParameter('series_code', '', @isstring); %string array shoudl be accepted as well +validStringInput = @(x) isstring(x) || ischar(x) || iscellstr(x); +p.addParameter('provider_code', '', validStringInput); +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('series_ids', @iscellstr); +p.addParameter('series_ids', '',validStringInput); 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.KeepUnmatched = false; p.parse(varargin{:}); @@ -56,7 +57,7 @@ if isempty(p.Results.dataset_code) if iscell(p.Results.provider_code) p.Results.series_ids = 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.provider_code = ''; end @@ -64,29 +65,29 @@ end 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 ~isstring(p.Results.provider_code) || ~isstring(p.Results.dataset_code) +if isa(p.Results.dimensions, 'function_handle') && isempty(p.Results.series_code) && isempty(p.Results.series_ids) + 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.'); end api_link = sprintf('%s/%s/%s?observations=1', series_base_url, p.Results.provider_code, p.Results.dataset_code); end -if ischar(p.Results.dimensions) - if ~isstring(p.Results.provider_code) || ~isstring(p.Results.dataset_code) +if ~isa(p.Results.dimensions, 'function_handle') + if isempty(p.Results.provider_code) || isempty(p.Results.dataset_code) error('When you use dimensions, you must specifiy provider_code and dataset_code.'); 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( end -if isstring(p.Results.series_code) - if ~isstring(p.Results.provider_code) || ~isstring(p.Results.dataset_code) +if ~isempty(p.Results.series_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.'); 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); end -if isstring(p.Results.series_ids) - if isstring(p.Results.provider_code) || isstring(p.Results.dataset_code) +if ~isempty(p.Results.series_ids) + 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.'); end api_link = sprintf('%s?observations=1&series_ids=%s', series_base_url, strjoin(p.Results.series_ids,',')); -- GitLab