From 2841e9df246e314e51122beb98bce7cb7660249c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?D=C3=B3ra=20Kocsis?= <dora@dynare.org>
Date: Tue, 31 Mar 2020 17:51:43 +0200
Subject: [PATCH] cosmetics

---
 src/subroutines/fetch_series_by_api_link.m | 17 +++++++----------
 src/subroutines/flatten_dbnomics_series.m  |  1 +
 src/subroutines/normalize_period.m         |  9 ++-------
 src/subroutines/normalize_value.m          |  8 +-------
 4 files changed, 11 insertions(+), 24 deletions(-)

diff --git a/src/subroutines/fetch_series_by_api_link.m b/src/subroutines/fetch_series_by_api_link.m
index 4e3b5ef..64a98a9 100644
--- a/src/subroutines/fetch_series_by_api_link.m
+++ b/src/subroutines/fetch_series_by_api_link.m
@@ -37,7 +37,6 @@ function df = fetch_series_by_api_link(api_link, varargin)
 %
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
-
 default_editor_base_url = 'https://editor.nomics.world/api/v1/';
 
 p = inputParser;
@@ -48,11 +47,11 @@ p.addOptional('max_nb_series', NaN, @isnumeric);
 p.addOptional('editor_api_base_url', default_editor_base_url, validStringInput);
 p.KeepUnmatched = false;
 p.parse(api_link, varargin{:});
-
 [datasets_dimensions, series_dims_by_dataset_code, series_list]= iter_series_info(api_link, p.Results.max_nb_series);
 
 if isempty(series_list)
     df = {};
+    return
 else
     common_columns = {'x_frequency', 'provider_code', 'dataset_code', 'dataset_name', 'series_code', 'series_name','original_period', 'period', 'original_value', 'value'};
     % Compute dimensions_labels_columns_names and dimensions_codes_columns_names
@@ -60,7 +59,7 @@ else
     dimensions_codes_columns_names = {};
     
     dataset_codes = fieldnames(datasets_dimensions);
-    for ii = 1:length(fieldnames(datasets_dimensions))
+    for ii = 1:length(dataset_codes)
         dataset_dimensions = datasets_dimensions.(dataset_codes{ii});
         dimensions_codes_columns_names = dataset_dimensions.dimensions_codes_order';
         for jj = 1:length(dataset_dimensions.dimensions_codes_order)
@@ -87,16 +86,14 @@ else
     end
     
     df = cell(length(series_list{1}.value)*length(series_list)+1,length(ordered_columns_names));
-    for col = 1:length(ordered_columns_names)
-        col_ = ordered_columns_names{col};
-        df{1,col} = col_;
-    end
+    df(1,:) = ordered_columns_names;
     
-    series_length=0;    
-    % Flatten series received from the API (rename some keys of JSON result to match DataFrame organization)
+    series_length=0;
+    % Flatten series received from the API (rename some keys of JSON result to match cell array organization)
     for ii = 1:length(series_list)
         if ~isfield(series_list{ii}, 'filtered')
             flat_series = flatten_dbnomics_series(series_list{ii});
+
             % Add dimensions labels to flat_series
             complete_dataset_code = [flat_series.provider_code '_' flat_series.dataset_code];
             dataset_dimensions = datasets_dimensions.(complete_dataset_code);
@@ -116,7 +113,7 @@ else
                     dimension_label = dataset_dimensions_labels.(dimension_codes{jj});
                     flat_series.labels{jj, 1} = dimension_label;
                     dimension_value_code = regexprep(series_dims_by_dataset_code.(complete_dataset_code).(series_code).(dimension_codes{jj}),'[^a-zA-Z0-9]','_');
-                    if isstrprop(dimension_value_code(1), 'digit') %MATLAB doesn't allow struct fieldnames to start with a digit
+                    if isstrprop(dimension_value_code(1), 'digit') %MATLAB doesn't allow struct field names to start with a digit
                         dimension_value_code = strcat('x', dimension_value_code);
                     end
                     try
diff --git a/src/subroutines/flatten_dbnomics_series.m b/src/subroutines/flatten_dbnomics_series.m
index 5168953..54d130c 100644
--- a/src/subroutines/flatten_dbnomics_series.m
+++ b/src/subroutines/flatten_dbnomics_series.m
@@ -32,6 +32,7 @@ function series = flatten_dbnomics_series(series)
 
 series = normalize_period(series);
 series = normalize_value(series);
+
 % Flatten dimensions.
 if isfield(series, 'dimensions')
     dimensions = series.dimensions;
diff --git a/src/subroutines/normalize_period.m b/src/subroutines/normalize_period.m
index 7768335..c1807ca 100644
--- a/src/subroutines/normalize_period.m
+++ b/src/subroutines/normalize_period.m
@@ -29,12 +29,7 @@ function series = normalize_period(series)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-period = series.period;
-period_start_day = series.period_start_day;
+series.original_period = series.period;
+series.period = cellfun(@(x)datestr(datetime(x,'InputFormat','yyyy-MM-dd'),29),series.period_start_day, 'UniformOutput',false);
 series = rmfield(series, 'period_start_day');
-
-series.original_period = period;
-for ii = 1:length(period_start_day)
-    series.period{ii,1} = datestr(datetime(period_start_day{ii},'InputFormat','yyyy-MM-dd'),29);
-end
 end
diff --git a/src/subroutines/normalize_value.m b/src/subroutines/normalize_value.m
index f37f15d..cecca38 100644
--- a/src/subroutines/normalize_value.m
+++ b/src/subroutines/normalize_value.m
@@ -31,13 +31,7 @@ function series = normalize_value(series)
 
 if iscell(series.value)
     series.original_value = series.value;
-    value = series.value;
-    for ii = 1:length(value)
-        if strcmp(value{ii}, 'NA')
-            value{ii} = NaN;
-        end
-    end
-    series.value = value;
+    series.value(cell2mat(cellfun(@(x)strcmp(x,'NA'),series.value,'UniformOutput',false))) = {NaN};
 else
     series.original_value = num2cell(series.value);
     series.value = num2cell(series.value);
-- 
GitLab