From 54575d5adc61e4aef465b255fdd09574acb9509f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?D=C3=B3ra=20Kocsis?= <dora@dynare.org>
Date: Thu, 23 Apr 2020 14:16:57 +0200
Subject: [PATCH] fix request handling in Octave 6

---
 src/fetch_series_by_api_link.m | 31 ++++++++++++++++++-------------
 src/utils/fetch_series_page.m  |  7 +++++--
 2 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/src/fetch_series_by_api_link.m b/src/fetch_series_by_api_link.m
index adc6fc7..ffb25ae 100644
--- a/src/fetch_series_by_api_link.m
+++ b/src/fetch_series_by_api_link.m
@@ -74,7 +74,7 @@ else
         end
         dimensions_labels_columns_names = [dimensions_labels_columns_names, dimensions_labels_columns_names_dataset];
     end
-    ordered_columns_names = [common_columns, dimensions_codes_columns_names, dimensions_labels_columns_names];
+    ordered_columns_names = [common_columns, dimensions_codes_columns_names', dimensions_labels_columns_names];
     
     if ~isempty(p.Results.dbnomics_filters)
         filtered_series_list = filter_series(series_list, p.Results.dbnomics_filters,p.Results.editor_api_base_url);
@@ -96,8 +96,8 @@ else
             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);
+	    complete_dataset_code = [flat_series.provider_code '_' flat_series.dataset_code];
+	    dataset_dimensions = datasets_dimensions.(complete_dataset_code);
             if isfield(dataset_dimensions, 'dimensions_labels')
                 dataset_dimensions_labels = dataset_dimensions.dimensions_labels;
             else
@@ -109,21 +109,26 @@ else
             % Add dimensions values labels to current series
             if isfield(dataset_dimensions, 'dimensions_values_labels')
                 dimension_codes  = intersect(dimensions_codes_columns_names, fieldnames(dataset_dimensions_labels)');
-                for jj = 1:length(dimension_codes)
+                flat_series.labels = cell(length(dimension_codes),2);
+		for jj = 1:length(dimension_codes)
                     series_code = regexprep(flat_series.series_code,'[^a-zA-Z0-9]','_');
                     dimension_label = dataset_dimensions_labels.(dimension_codes{jj});
-                    flat_series.labels{jj, 1} = dimension_label;
+		    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 field names to start with a digit
                         dimension_value_code = strcat('x', dimension_value_code);
                     end
-                    try
-                        flat_series.labels{jj, 2} = dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}).(dimension_value_code);
-                    catch
-                        for it = 1:size(dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}), 1)
-                            tmp = regexprep(dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}){it}{1}, '[^a-zA-Z0-9]', '_');
-                            if strcmp(tmp, dimension_value_code)
-                                flat_series.labels{jj, 2} = dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}){it}{2};
+                    code_ = fieldnames(dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}));
+                    match_ = regexprep(code_{1}, '_0\w\d\w_', '_');
+                    if strcmp(match_, dimension_value_code)
+                        try
+                            flat_series.labels{jj, 2} = dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}).(dimension_value_code);     
+                        catch
+                            for it = 1:size(dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}), 1)
+                                tmp = regexprep(dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}){it}{1}, '[^a-zA-Z0-9]', '_');
+                                if strcmp(tmp, dimension_value_code)
+                                    flat_series.labels{jj, 2} = dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}){it}{2};
+                                end
                             end
                         end
                     end
@@ -188,4 +193,4 @@ end
 %$ end 
 %$
 %$ T = all(t);
-%@eof:1
\ No newline at end of file
+%@eof:1
diff --git a/src/utils/fetch_series_page.m b/src/utils/fetch_series_page.m
index 8ecfc35..8383453 100644
--- a/src/utils/fetch_series_page.m
+++ b/src/utils/fetch_series_page.m
@@ -30,7 +30,7 @@ function response_json = fetch_series_page(series_endpoint_url, offset)
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-if contains(series_endpoint_url, '?')
+if ~isempty(strfind(series_endpoint_url, '?'))
     series_page_url = sprintf('%s%soffset=%i', series_endpoint_url, '&', offset);
 else
     series_page_url = sprintf('%s%soffset=%i', series_endpoint_url, '?', offset);
@@ -38,7 +38,10 @@ end
 
 options = weboptions('ContentType','json');
 try
-    response_json = webread(series_page_url, options);
+    response_ = webread(series_page_url, options);
+    tmp = strrep(response_, '\/', '_');
+    response_json = loadjson(tmp);
+    % response_json = jdatadecode(tmp);
 catch ME
     error_message = ['Could not fetch data from URL: ' series_page_url ' because: ' ME.identifier];
     error(error_message); 
-- 
GitLab