From b32f3af17554e582fa71461965f03626efa270d1 Mon Sep 17 00:00:00 2001 From: ebreton Date: Sat, 17 Mar 2018 21:51:20 +0100 Subject: [PATCH 1/5] refactored set_fulltext --- infoscience_exports/exports/marc21xml.py | 58 ++++++++++-------------- infoscience_exports/exports/versions.py | 4 +- 2 files changed, 25 insertions(+), 37 deletions(-) diff --git a/infoscience_exports/exports/marc21xml.py b/infoscience_exports/exports/marc21xml.py index 36754018..811577d4 100644 --- a/infoscience_exports/exports/marc21xml.py +++ b/infoscience_exports/exports/marc21xml.py @@ -3,6 +3,7 @@ """ Parse a marc-21-xml file """ +import re from logging import getLogger from django.utils.translation import gettext as _ from django.conf import settings @@ -66,42 +67,29 @@ def set_year(date): return '' -# get fulltext: link to pdf or link to repository if several links def set_fulltext(fulltexts): - if len(fulltexts) == 0: - return "" - if len(fulltexts) == 1: - return fulltexts[0] - result = "" - pdf_counter = 0 - for ft in fulltexts: - o = urlparse(ft) - file_extension = splitext(o.path)[1] - if file_extension == "pdf": - result = ft - pdf_counter += 1 - if pdf_counter < 2: - return result - o_first = urlparse(fulltexts[0]) - path_first = dirname(o_first.path) - is_same_path = True - for ft in fulltexts: - o = urlparse(ft) - path = dirname(o.path) - if o.scheme != o_first.scheme or \ - o.netloc != o_first.netloc or \ - path != path_first: - is_same_path = False - break - result = "" - if is_same_path: - if o_first.scheme: - result += o_first.scheme + "://" - if o_first.netloc: - result += o_first.netloc - result += path_first - return result - return result + """ get fulltext: link to pdf or link to repository if several links """ + # only keep pdfs and remove duplicates + file_paths = ['{}://{}{}'.format(*urlparse(fulltext)[:3]) for fulltext in fulltexts] + pdfs = [pdf for pdf in file_paths if splitext(pdf)[1] == '.pdf'] + unic_pdfs = list(set(pdfs)) + + # return empty string if no pdf found + if len(unic_pdfs) == 0: + return '' + + # return element if only one found + if len(unic_pdfs) == 1: + return unic_pdfs[0] + + # multiple pdfs found... return first folder that matchs infoscience/record/xxx/files + for dir_path in map(dirname, unic_pdfs): + if re.search("infoscience.epfl.ch/record/\d+/files", dir_path): + return dir_path + + # no infoscience folder found... log a warning and return first match + logger.warning("Multiple pdfs found (%s), but none appear to be on regular infoscience path", unic_pdfs) + return dirname(unic_pdfs[0]) def get_attributes(subfields): diff --git a/infoscience_exports/exports/versions.py b/infoscience_exports/exports/versions.py index bd9e0da9..e85bb47e 100644 --- a/infoscience_exports/exports/versions.py +++ b/infoscience_exports/exports/versions.py @@ -3,7 +3,7 @@ # the release comes from git and should not be modified # => read-only -_release = '0.3.7-16-g5e0cae8' +_release = '0.3.7-19-ga816b87' # you can set the next version number manually # if you do not, the system will make sure that version > release @@ -13,4 +13,4 @@ # the build number will generate conflicts on each PR merge # just keep yours every time # => read-only -_build = '5e0cae8b46c21d3448ab566f21295f59d76bbf8f' \ No newline at end of file +_build = 'a816b87a25bf2eddbf1b4a3f75100a81973b0d16' \ No newline at end of file From a9f6efa1428fe933cc1c8438b104598250ef6fc9 Mon Sep 17 00:00:00 2001 From: ebreton Date: Sat, 17 Mar 2018 21:51:29 +0100 Subject: [PATCH 2/5] added unittests --- .../exports/test/test_fulltexts.py | 56 +++++++++++++++++++ infoscience_exports/exports/versions.py | 4 +- 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 infoscience_exports/exports/test/test_fulltexts.py diff --git a/infoscience_exports/exports/test/test_fulltexts.py b/infoscience_exports/exports/test/test_fulltexts.py new file mode 100644 index 00000000..081ada3b --- /dev/null +++ b/infoscience_exports/exports/test/test_fulltexts.py @@ -0,0 +1,56 @@ +from exports.marc21xml import set_fulltext + + +def test_no_fulltext(): + assert set_fulltext([]) == '' + + +def test_no_pdfs(): + assert set_fulltext(["http://infoscience.epfl.ch/record/253539/files/Poster.ppt"]) == '' + assert set_fulltext(["https://www.frontiersin.org/articles/10.3389/fnbot.2017.00057/full"]) == '' + + +def test_only_one_pdf(): + # one pdf + assert set_fulltext(["http://infoscience.epfl.ch/record/253637/files/write%20nanoscale.pdf"]) \ + == 'http://infoscience.epfl.ch/record/253637/files/write%20nanoscale.pdf' + + # one pdfa + assert set_fulltext(["http://infoscience.epfl.ch/record/253144/files/2018_ICIT_Coulinge.pdf?subformat=pdfa"]) \ + == "http://infoscience.epfl.ch/record/253144/files/2018_ICIT_Coulinge.pdf" + + # one pdf & one asp + assert set_fulltext([ + "https://ibeton.epfl.ch/util/script/sendArticle.asp?R=Cantone16", + "http://infoscience.epfl.ch/record/82377/files/JEP96-3.pdf"]) \ + == 'http://infoscience.epfl.ch/record/82377/files/JEP96-3.pdf' + + # one pdf in 2 formats + assert set_fulltext([ + "http://infoscience.epfl.ch/record/253610/files/paper.pdf", + "http://infoscience.epfl.ch/record/253610/files/paper.pdf?subformat=pdfa"]) \ + == 'http://infoscience.epfl.ch/record/253610/files/paper.pdf' + + +def test_only_mutiple_pdfs(): + # two pdfs + assert set_fulltext([ + "http://publications.idiap.ch/downloads/reports/1996/JEP96-3.pdf", + "http://infoscience.epfl.ch/record/82377/files/JEP96-3.pdf"]) \ + == 'http://infoscience.epfl.ch/record/82377/files' + + # two pdfs along with their pdfas + assert set_fulltext([ + "http://infoscience.epfl.ch/record/253610/files/paper.pdf", + "http://infoscience.epfl.ch/record/253610/files/paper.pdf?subformat=pdfa", + "http://infoscience.epfl.ch/record/253610/files/supplemental.pdf", + "http://infoscience.epfl.ch/record/253610/files/supplemental.pdf?subformat=pdfa"]) \ + == 'http://infoscience.epfl.ch/record/253610/files' + + # mix + assert set_fulltext([ + "https://ibeton.epfl.ch/util/script/sendArticle.asp?R=Cantone16", + "http://infoscience.epfl.ch/record/253610/files/paper.pdf", + "http://infoscience.epfl.ch/record/253610/files/supplemental.pdf", + "http://infoscience.epfl.ch/record/253610/files/supplemental.pdf?subformat=pdfa"]) \ + == 'http://infoscience.epfl.ch/record/253610/files' diff --git a/infoscience_exports/exports/versions.py b/infoscience_exports/exports/versions.py index e85bb47e..0f16de27 100644 --- a/infoscience_exports/exports/versions.py +++ b/infoscience_exports/exports/versions.py @@ -3,7 +3,7 @@ # the release comes from git and should not be modified # => read-only -_release = '0.3.7-19-ga816b87' +_release = '0.3.7-20-gb32f3af' # you can set the next version number manually # if you do not, the system will make sure that version > release @@ -13,4 +13,4 @@ # the build number will generate conflicts on each PR merge # just keep yours every time # => read-only -_build = 'a816b87a25bf2eddbf1b4a3f75100a81973b0d16' \ No newline at end of file +_build = 'b32f3af17554e582fa71461965f03626efa270d1' \ No newline at end of file From 403a888e275409e8c514a2cf53abed28e9826823 Mon Sep 17 00:00:00 2001 From: ebreton Date: Sat, 17 Mar 2018 21:53:48 +0100 Subject: [PATCH 3/5] flake8 --- infoscience_exports/exports/forms.py | 2 +- .../exports/models/settings.py | 1 - .../exports/test/test_selenium.py | 19 +++++++++---------- infoscience_exports/exports/versions.py | 4 ++-- infoscience_exports/exports/views.py | 1 - 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/infoscience_exports/exports/forms.py b/infoscience_exports/exports/forms.py index 76e7eac0..26fb44d3 100644 --- a/infoscience_exports/exports/forms.py +++ b/infoscience_exports/exports/forms.py @@ -8,7 +8,7 @@ class ExportForm(FormLoggingMixin, forms.ModelForm): class Meta: model = Export - + exclude = ['user', 'formats_type'] widgets = { 'name': forms.TextInput(attrs={'placeholder': ""}), diff --git a/infoscience_exports/exports/models/settings.py b/infoscience_exports/exports/models/settings.py index 101c6f93..230ebae9 100644 --- a/infoscience_exports/exports/models/settings.py +++ b/infoscience_exports/exports/models/settings.py @@ -132,4 +132,3 @@ class AdvancedOptionsSettings(BaseSettings): class Meta: abstract = True - diff --git a/infoscience_exports/exports/test/test_selenium.py b/infoscience_exports/exports/test/test_selenium.py index 0e57799a..914e5d55 100644 --- a/infoscience_exports/exports/test/test_selenium.py +++ b/infoscience_exports/exports/test/test_selenium.py @@ -3,8 +3,7 @@ from django.conf import settings from django.urls import reverse from django.contrib.staticfiles.testing import StaticLiveServerTestCase -from django.test import override_settings, tag, modify_settings -from django.utils.decorators import classproperty +from django.test import override_settings from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities @@ -53,16 +52,16 @@ def setUp(self): """Open a new browser for each test.""" super(SeleniumStaticLiveServerTestCase, self).setUp() - test_user = User.objects.get_or_create(username='test', - first_name='test', - last_name='test', - email='test@localhost', - is_staff=True, - is_active=True)[0] + test_user = User.objects.get_or_create( + username='test', + first_name='test', + last_name='test', + email='test@localhost', + is_staff=True, + is_active=True)[0] # # generate a cookie place, or get the cookie setting error from Chrome - self.selenium.get('%s%s' % (self.live_server_url, - reverse('not_allowed'))) + self.selenium.get('%s%s' % (self.live_server_url, reverse('not_allowed'))) # bypass external Tequila auth self.client.force_login(test_user) diff --git a/infoscience_exports/exports/versions.py b/infoscience_exports/exports/versions.py index 0f16de27..3425c0f7 100644 --- a/infoscience_exports/exports/versions.py +++ b/infoscience_exports/exports/versions.py @@ -3,7 +3,7 @@ # the release comes from git and should not be modified # => read-only -_release = '0.3.7-20-gb32f3af' +_release = '0.3.7-21-ga9f6efa' # you can set the next version number manually # if you do not, the system will make sure that version > release @@ -13,4 +13,4 @@ # the build number will generate conflicts on each PR merge # just keep yours every time # => read-only -_build = 'b32f3af17554e582fa71461965f03626efa270d1' \ No newline at end of file +_build = 'a9f6efa1428fe933cc1c8438b104598250ef6fc9' \ No newline at end of file diff --git a/infoscience_exports/exports/views.py b/infoscience_exports/exports/views.py index 9fce0d43..64bac786 100644 --- a/infoscience_exports/exports/views.py +++ b/infoscience_exports/exports/views.py @@ -1,5 +1,4 @@ from django.urls import reverse_lazy as django_reverse_lazy -from django.db import transaction from django.http import HttpResponse from django.template import loader from django.views.generic import ListView, CreateView, DetailView, UpdateView, DeleteView From dd90c1315d7a2fd3594a0ae56a1f02ca1bc8760e Mon Sep 17 00:00:00 2001 From: ebreton Date: Sun, 18 Mar 2018 09:59:39 +0100 Subject: [PATCH 4/5] added call to set_fulltext --- infoscience_exports/exports/marc21xml.py | 1 + infoscience_exports/exports/versions.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/infoscience_exports/exports/marc21xml.py b/infoscience_exports/exports/marc21xml.py index 811577d4..cc2c647e 100644 --- a/infoscience_exports/exports/marc21xml.py +++ b/infoscience_exports/exports/marc21xml.py @@ -111,6 +111,7 @@ def get_ELA_fields(field): elif ELA_type == 'public': ela_fulltexts.append(ela.get('u', '')) ela_fulltexts = list(filter(None, ela_fulltexts)) + ela_fulltexts = set_fulltext(ela_fulltexts) return {'icon': ela_icon, 'fulltexts': ela_fulltexts} diff --git a/infoscience_exports/exports/versions.py b/infoscience_exports/exports/versions.py index 3425c0f7..c2bc11cb 100644 --- a/infoscience_exports/exports/versions.py +++ b/infoscience_exports/exports/versions.py @@ -3,7 +3,7 @@ # the release comes from git and should not be modified # => read-only -_release = '0.3.7-21-ga9f6efa' +_release = '0.3.7-22-g403a888' # you can set the next version number manually # if you do not, the system will make sure that version > release @@ -13,4 +13,4 @@ # the build number will generate conflicts on each PR merge # just keep yours every time # => read-only -_build = 'a9f6efa1428fe933cc1c8438b104598250ef6fc9' \ No newline at end of file +_build = '403a888e275409e8c514a2cf53abed28e9826823' \ No newline at end of file From dfe85281d0e4ead4100968dd6ec1af8d629f5799 Mon Sep 17 00:00:00 2001 From: ebreton Date: Sun, 18 Mar 2018 10:01:13 +0100 Subject: [PATCH 5/5] remove .0 from article.ELA_URL.0 --- .../exports/templates/exports/export_detailed.html | 6 +++--- .../exports/templates/exports/export_short.html | 6 +++--- .../templates/exports/include_doctype/article_short.html | 2 +- .../exports/include_doctype/book_chapter_short.html | 2 +- .../templates/exports/include_doctype/book_short.html | 2 +- .../exports/include_doctype/conference_paper_short.html | 2 +- .../include_doctype/conference_proceeding_short.html | 2 +- .../templates/exports/include_doctype/patent_short.html | 2 +- .../exports/include_doctype/poster_and_talks_short.html | 2 +- .../include_doctype/report_and_working_paper_short.html | 2 +- .../exports/include_doctype/student_project_short.html | 2 +- .../templates/exports/include_doctype/thesis_short.html | 2 +- infoscience_exports/exports/versions.py | 4 ++-- 13 files changed, 18 insertions(+), 18 deletions(-) diff --git a/infoscience_exports/exports/templates/exports/export_detailed.html b/infoscience_exports/exports/templates/exports/export_detailed.html index 2c5979bf..dcd59036 100644 --- a/infoscience_exports/exports/templates/exports/export_detailed.html +++ b/infoscience_exports/exports/templates/exports/export_detailed.html @@ -25,7 +25,7 @@

{{ article.title }}

{% if article.Title %}

- {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }} {% if options.link_title and article.ELA_URL %}{% endif %}

@@ -74,7 +74,7 @@

{% endif %} {% if options.link_fulltext and article.ELA_URL %} - {% trans "Full text" %}: {{ article.ELA_URL.0 }} + {% trans "Full text" %}: {{ article.ELA_URL }}
{% endif %} @@ -91,7 +91,7 @@

{% trans "Detailed record" %} {% endif %} {% if options.link_fulltext and article.ELA_URL %} - {% if options.link_detailed %} - {% endif %}{% trans "Full text" %} + {% if options.link_detailed %} - {% endif %}{% trans "Full text" %} {% endif %} {% if options.link_publisher %} {% for view_publisher in article.View_Publisher %} diff --git a/infoscience_exports/exports/templates/exports/export_short.html b/infoscience_exports/exports/templates/exports/export_short.html index fef771aa..ac269ac9 100644 --- a/infoscience_exports/exports/templates/exports/export_short.html +++ b/infoscience_exports/exports/templates/exports/export_short.html @@ -55,7 +55,7 @@

{{ article.title }}

{% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }} {% if options.link_title and article.ELA_URL %}{% endif %} . @@ -83,7 +83,7 @@

{{ article.title }}

{% endif %} {% if options.link_fulltext and article.ELA_URL %} - {% trans "Full text" %}: {{ article.ELA_URL.0 }} + {% trans "Full text" %}: {{ article.ELA_URL }}
{% endif %} @@ -101,7 +101,7 @@

{{ article.title }}

{% if options.link_fulltext and article.ELA_URL or options.link_publisher and article.DOI %} - {% endif %} {% endif %} {% if options.link_fulltext and article.ELA_URL %} - {% trans "Full text" %} + {% trans "Full text" %} {% if options.link_publisher and article.DOI %} - {% endif %} {% endif %} {% if options.link_publisher and article.DOI %} diff --git a/infoscience_exports/exports/templates/exports/include_doctype/article_short.html b/infoscience_exports/exports/templates/exports/include_doctype/article_short.html index 2703892b..51a06f07 100644 --- a/infoscience_exports/exports/templates/exports/include_doctype/article_short.html +++ b/infoscience_exports/exports/templates/exports/include_doctype/article_short.html @@ -10,7 +10,7 @@ {% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }} {% if options.link_title and article.ELA_URL %}{% endif %} {% if article.Publisher %} ; {% else %} . {% endif %} diff --git a/infoscience_exports/exports/templates/exports/include_doctype/book_chapter_short.html b/infoscience_exports/exports/templates/exports/include_doctype/book_chapter_short.html index a55ae00d..9aca0f5c 100644 --- a/infoscience_exports/exports/templates/exports/include_doctype/book_chapter_short.html +++ b/infoscience_exports/exports/templates/exports/include_doctype/book_chapter_short.html @@ -10,7 +10,7 @@ {% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }} {% if options.link_title and article.ELA_URL %}{% endif %} ; diff --git a/infoscience_exports/exports/templates/exports/include_doctype/book_short.html b/infoscience_exports/exports/templates/exports/include_doctype/book_short.html index e4777bad..2ce87fc3 100644 --- a/infoscience_exports/exports/templates/exports/include_doctype/book_short.html +++ b/infoscience_exports/exports/templates/exports/include_doctype/book_short.html @@ -10,7 +10,7 @@ {% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }} {% if options.link_title and article.ELA_URL %}{% endif %} {% if article.Publication_Location or article.Publication_Institution %} ; {% else %} . {% endif %} diff --git a/infoscience_exports/exports/templates/exports/include_doctype/conference_paper_short.html b/infoscience_exports/exports/templates/exports/include_doctype/conference_paper_short.html index 8a265611..6199843c 100644 --- a/infoscience_exports/exports/templates/exports/include_doctype/conference_paper_short.html +++ b/infoscience_exports/exports/templates/exports/include_doctype/conference_paper_short.html @@ -10,7 +10,7 @@ {% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }} {% if options.link_title and article.ELA_URL %}{% endif %} {% if options.adv_conf_paper_journal_name and article.Publisher %} ; {% else %} . {% endif %} diff --git a/infoscience_exports/exports/templates/exports/include_doctype/conference_proceeding_short.html b/infoscience_exports/exports/templates/exports/include_doctype/conference_proceeding_short.html index dc5b7e48..59f1c68e 100644 --- a/infoscience_exports/exports/templates/exports/include_doctype/conference_proceeding_short.html +++ b/infoscience_exports/exports/templates/exports/include_doctype/conference_proceeding_short.html @@ -10,7 +10,7 @@ {% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }} {% if options.link_title and article.ELA_URL %}{% endif %} {% if article.Publisher %} ; {% else %} . {% endif %} diff --git a/infoscience_exports/exports/templates/exports/include_doctype/patent_short.html b/infoscience_exports/exports/templates/exports/include_doctype/patent_short.html index 1941d487..837d9619 100644 --- a/infoscience_exports/exports/templates/exports/include_doctype/patent_short.html +++ b/infoscience_exports/exports/templates/exports/include_doctype/patent_short.html @@ -23,7 +23,7 @@ {% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }} {% if options.link_title and article.ELA_URL %}{% endif %} {% if article.Patent %} ; {% else %} . {% endif %} diff --git a/infoscience_exports/exports/templates/exports/include_doctype/poster_and_talks_short.html b/infoscience_exports/exports/templates/exports/include_doctype/poster_and_talks_short.html index d84c6c22..5273f9d4 100644 --- a/infoscience_exports/exports/templates/exports/include_doctype/poster_and_talks_short.html +++ b/infoscience_exports/exports/templates/exports/include_doctype/poster_and_talks_short.html @@ -10,7 +10,7 @@ {% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }} {% if options.link_title and article.ELA_URL %}{% endif %} {% if article.Conference_Meeting_Name or Conference_Meeting_Location or Conference_Meeting_Date %} ; {% else %} . {% endif %} diff --git a/infoscience_exports/exports/templates/exports/include_doctype/report_and_working_paper_short.html b/infoscience_exports/exports/templates/exports/include_doctype/report_and_working_paper_short.html index 013884f4..834ba2cd 100644 --- a/infoscience_exports/exports/templates/exports/include_doctype/report_and_working_paper_short.html +++ b/infoscience_exports/exports/templates/exports/include_doctype/report_and_working_paper_short.html @@ -10,7 +10,7 @@ {% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }}. {% if options.link_title and article.ELA_URL %}{% endif %} diff --git a/infoscience_exports/exports/templates/exports/include_doctype/student_project_short.html b/infoscience_exports/exports/templates/exports/include_doctype/student_project_short.html index 376fbc56..4b105efb 100644 --- a/infoscience_exports/exports/templates/exports/include_doctype/student_project_short.html +++ b/infoscience_exports/exports/templates/exports/include_doctype/student_project_short.html @@ -10,7 +10,7 @@ {% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }} {% if options.link_title and article.ELA_URL %}{% endif %} {% if article.Publication_Date %} ; {% else %} . {% endif %} diff --git a/infoscience_exports/exports/templates/exports/include_doctype/thesis_short.html b/infoscience_exports/exports/templates/exports/include_doctype/thesis_short.html index 8a546363..bdfb9110 100644 --- a/infoscience_exports/exports/templates/exports/include_doctype/thesis_short.html +++ b/infoscience_exports/exports/templates/exports/include_doctype/thesis_short.html @@ -19,7 +19,7 @@ {% if article.Title %} - {% if options.link_title and article.ELA_URL %}{% endif %} + {% if options.link_title and article.ELA_URL %}{% endif %} {{ article.Title }}. {% if options.link_title and article.ELA_URL %}{% endif %} diff --git a/infoscience_exports/exports/versions.py b/infoscience_exports/exports/versions.py index c2bc11cb..6851596e 100644 --- a/infoscience_exports/exports/versions.py +++ b/infoscience_exports/exports/versions.py @@ -3,7 +3,7 @@ # the release comes from git and should not be modified # => read-only -_release = '0.3.7-22-g403a888' +_release = '0.3.7-23-gdd90c13' # you can set the next version number manually # if you do not, the system will make sure that version > release @@ -13,4 +13,4 @@ # the build number will generate conflicts on each PR merge # just keep yours every time # => read-only -_build = '403a888e275409e8c514a2cf53abed28e9826823' \ No newline at end of file +_build = 'dd90c1315d7a2fd3594a0ae56a1f02ca1bc8760e' \ No newline at end of file