From 21e00fc779be49ce340a888ca08c5055d233fdff Mon Sep 17 00:00:00 2001 From: robertatakenaka Date: Tue, 19 Sep 2017 13:47:12 -0300 Subject: [PATCH 1/4] Ajustes 40094 --- .../wise/scielo-pc-programs-4.0.094.wse | 54 ++++++++++++++++--- src/install/wise/xpm-4.0.094.wse | 44 ++++++++++++--- .../xml/app_modules/app/config/app_caller.py | 6 +-- .../bin/xml/app_modules/app/interface.py | 41 +++++++------- .../app/pkg_processors/pkg_processors.py | 6 ++- .../validations/pkg_articles_validations.py | 2 +- .../bin/xml/app_modules/generics/system.py | 11 +++- src/scielo/bin/xml/run_app.py | 2 +- 8 files changed, 121 insertions(+), 45 deletions(-) diff --git a/src/install/wise/scielo-pc-programs-4.0.094.wse b/src/install/wise/scielo-pc-programs-4.0.094.wse index 2ca822b5b..c26e564a1 100644 --- a/src/install/wise/scielo-pc-programs-4.0.094.wse +++ b/src/install/wise/scielo-pc-programs-4.0.094.wse @@ -1284,6 +1284,36 @@ item: End Block end item: End Block end +item: Check if File/Dir Exists + Pathname=%PROGDIR%\bin\uninstall.py + Flags=01000100 +end +item: Delete File + Pathname=%PROGDIR%\bin\uninstall.py + Flags=00001100 +end +item: End Block +end +item: Check if File/Dir Exists + Pathname=%PROGDIR%\unwise.exe + Flags=01000100 +end +item: Delete File + Pathname=%PROGDIR%\unwise.exe + Flags=00001100 +end +item: End Block +end +item: Check if File/Dir Exists + Pathname=%PROGDIR%\bin\uninstall.py + Flags=00000100 +end +item: Delete File + Pathname=%PROGDIR%\bin\uninstall.py + Flags=00001100 +end +item: End Block +end item: Check if File/Dir Exists Pathname=%PROGDIR%\bin\markup\app_core\tables Flags=00000100 @@ -1402,6 +1432,11 @@ item: Install File Destination=%PROGDIR%\bin\xml\app_modules\generics\remote_server.py Flags=0000000010000010 end +item: Install File + Source=e:\github.com\scieloorg\PC-Programs\src\scielo\bin\xml\app_modules\generics\logger.py + Destination=%PROGDIR%\bin\xml\app_modules\generics\logger.py + Flags=0000000010000010 +end item: Install File Source=e:\github.com\scieloorg\PC-Programs\src\scielo\bin\xml\app_modules\generics\xml_utils.py Destination=%PROGDIR%\bin\xml\app_modules\generics\xml_utils.py @@ -1617,6 +1652,11 @@ item: Install File Destination=%PROGDIR%\bin\xml\app_modules\app\validations\article_content_validations.py Flags=0000000010000010 end +item: Install File + Source=e:\github.com\scieloorg\PC-Programs\src\scielo\bin\xml\app_modules\app\validations\article_disp_formula.py + Destination=%PROGDIR%\bin\xml\app_modules\app\validations\article_disp_formula.py + Flags=0000000010000010 +end item: Install File Source=e:\github.com\scieloorg\PC-Programs\src\scielo\bin\xml\app_modules\app\validations\__init__.py Destination=%PROGDIR%\bin\xml\app_modules\app\validations\__init__.py @@ -1747,11 +1787,6 @@ item: Install File Destination=%PROGDIR%\bin\xml\__init__.py Flags=0000000010000010 end -item: Install File - Source=e:\github.com\scieloorg\PC-Programs\src\scielo\uninstall.py - Destination=%PROGDIR%\uninstall.py - Flags=0000000010000010 -end item: Install File Source=e:\github.com\scieloorg\PC-Programs\src\scielo\bin\xml\app_modules\settings\locale\pt_BR\LC_MESSAGES\xpm-xc.po Destination=%PROGDIR%\bin\xml\app_modules\settings\locale\pt_BR\LC_MESSAGES\xpm-xc.po @@ -3703,8 +3738,13 @@ item: Install File Flags=0000000010000010 end item: Install File - Source=e:\github.com\scieloorg\PC-Programs\src\scielo\Bin\xws.info.example - Destination=%PROGDIR%\bin\xws.info.example + Source=e:\github.com\scieloorg\PC-Programs\src\scielo\Bin\scielo_collection.ini.example + Destination=%PROGDIR%\bin\scielo_collection.ini.example + Flags=0000000010000010 +end +item: Install File + Source=e:\github.com\scieloorg\PC-Programs\src\scielo\Bin\scielo_env.ini.example + Destination=%PROGDIR%\bin\scielo_env.ini.example Flags=0000000010000010 end item: If/While Statement diff --git a/src/install/wise/xpm-4.0.094.wse b/src/install/wise/xpm-4.0.094.wse index ecdcf53e1..f835d03b2 100644 --- a/src/install/wise/xpm-4.0.094.wse +++ b/src/install/wise/xpm-4.0.094.wse @@ -954,6 +954,26 @@ item: End Block end item: End Block end +item: Check if File/Dir Exists + Pathname=%PROGDIR%\uninstall.py + Flags=01000100 +end +item: Delete File + Pathname=%PROGDIR%\uninstall.py + Flags=00001100 +end +item: End Block +end +item: Check if File/Dir Exists + Pathname=%PROGDIR%\unwise.exe + Flags=01000100 +end +item: Delete File + Pathname=%PROGDIR%\unwise.exe + Flags=00001100 +end +item: End Block +end item: Check if File/Dir Exists Pathname=%PROGDIR%\pmc Flags=00000100 @@ -1518,6 +1538,11 @@ item: Install File Destination=%PROGDIR%\xml\app_modules\app\validations\pkg_articles_validations.py Flags=0000000010000010 end +item: Install File + Source=e:\github.com\scieloorg\PC-Programs\src\scielo\bin\xml\app_modules\generics\logger.py + Destination=%PROGDIR%\xml\app_modules\generics\logger.py + Flags=0000000010000010 +end item: Install File Source=e:\github.com\scieloorg\PC-Programs\src\scielo\bin\xml\app_modules\generics\doi_validations.py Destination=%PROGDIR%\xml\app_modules\generics\doi_validations.py @@ -1768,6 +1793,11 @@ item: Install File Destination=%PROGDIR%\xml\app_modules\app\validations\article_content_validations.py Flags=0000000010000010 end +item: Install File + Source=e:\github.com\scieloorg\PC-Programs\src\scielo\bin\xml\app_modules\app\validations\article_disp_formula.py + Destination=%PROGDIR%\xml\app_modules\app\validations\article_disp_formula.py + Flags=0000000010000010 +end item: Install File Source=e:\github.com\scieloorg\PC-Programs\src\scielo\bin\xml\app_modules\app\ws\institutions_db.py Destination=%PROGDIR%\xml\app_modules\app\ws\institutions_db.py @@ -1879,8 +1909,13 @@ item: Install File Flags=0000000010000010 end item: Install File - Source=E:\github.com\scieloorg\PC-Programs\src\scielo\bin\xws.info.example - Destination=%PROGDIR%\xws.info.example + Source=E:\github.com\scieloorg\PC-Programs\src\scielo\bin\scielo_env.ini.example + Destination=%PROGDIR%\scielo_env.ini.example + Flags=0000000010000010 +end +item: Install File + Source=E:\github.com\scieloorg\PC-Programs\src\scielo\bin\scielo_collection.ini.example + Destination=%PROGDIR%\scielo_collection.ini.example Flags=0000000010000010 end item: Install File @@ -2958,11 +2993,6 @@ item: Install File Destination=%PROGDIR%\scielo_paths.example.ini Flags=0000000010000010 end -item: Install File - Source=c:\InstallBuilder\Unwise.exe - Destination=%PROGDIR%\Unwise.exe - Flags=0000000010000010 -end item: Set Variable Variable=COMMON Value=%COMMON% diff --git a/src/scielo/bin/xml/app_modules/app/config/app_caller.py b/src/scielo/bin/xml/app_modules/app/config/app_caller.py index 5b2c61409..e38ef2f31 100644 --- a/src/scielo/bin/xml/app_modules/app/config/app_caller.py +++ b/src/scielo/bin/xml/app_modules/app/config/app_caller.py @@ -32,10 +32,8 @@ def __init__(self, venv_path=None): def install(self, requirements_file, requirements_checker): if self.venv_path is not None: if not os.path.isdir(self.venv_path): - commands = [] - commands.append('pip install virtualenv') - commands.append(u'virtualenv {}'.format(self.venv_path)) - self.execute(commands) + system.run_command('pip install virtualenv', True) + system.run_command(u'virtualenv {}'.format(self.venv_path), True) self.install_requirements( requirements_file, requirements_checker) diff --git a/src/scielo/bin/xml/app_modules/app/interface.py b/src/scielo/bin/xml/app_modules/app/interface.py index b93a453c4..c4173cd91 100644 --- a/src/scielo/bin/xml/app_modules/app/interface.py +++ b/src/scielo/bin/xml/app_modules/app/interface.py @@ -34,20 +34,7 @@ def __init__(self, tk_root, default_xml_path, is_converter_enabled, function): self.tk_root.resizable(True, False) self.tk_root.protocol('WM_DELETE_WINDOW', self.click_close) - self.tk_root.bind('', self.click_close) - - """ - self.tkFrame.folder_labelframe = Tkinter.LabelFrame(self.tkFrame, bd=0, padx=10, pady=10) - self.tkFrame.folder_labelframe.pack(fill="both", expand="yes") - self.tkFrame.label_folder = Tkinter.Label(self.tkFrame.folder_labelframe, text=_('SPS XML Package Folder:'), font="Verdana 12 bold") - self.tkFrame.label_folder.pack(side='left') - self.tkFrame.input_folder = Tkinter.Label(self.tkFrame.folder_labelframe, width=50, bd=1, bg='gray') - self.tkFrame.input_folder.pack(side='left') - self.tkFrame.button_choose = Tkinter.Button(self.tkFrame.folder_labelframe, text=_('choose folder'), command=self.open_file_explorer) - self.tkFrame.button_choose.pack() - - - """ + #self.tk_root.bind('', self.click_close) folder_label_frame = tk.Frame(self) folder_label_frame.pack(padx=10, pady=5) @@ -58,8 +45,8 @@ def __init__(self, tk_root, default_xml_path, is_converter_enabled, function): pmc_frame = tk.Frame(self) pmc_frame.pack(padx=10, pady=5) - buttons_frame = tk.Frame(self) - buttons_frame.pack(padx=10, pady=5) + self.buttons_frame = tk.Frame(self) + self.buttons_frame.pack(padx=10, pady=5) folder_label = tk.Label(folder_label_frame, text=_('SPS XML Package Folder:')) folder_label.pack(side='left') @@ -79,14 +66,14 @@ def __init__(self, tk_root, default_xml_path, is_converter_enabled, function): self.message = tk.Label(message_frame, font='System 14 bold', width=100, bd=1, bg='gray') self.message.pack(side='left') - close_button = tk.Button(buttons_frame, text=_('close'), command=self.click_close) + close_button = tk.Button(self.buttons_frame, text=_('close'), command=self.click_close) close_button.pack(side='right') if self.is_converter_enabled: - self.xc_button = tk.Button(buttons_frame, default='active', text='XML Converter', command=self.run_xml_converter) + self.xc_button = tk.Button(self.buttons_frame, default='active', text='XML Converter', command=self.run_xml_converter) self.xc_button.pack(side='right') else: - self.xpm_button = tk.Button(buttons_frame, default='active', text='XML Package Maker', command=self.run_xml_package_maker) + self.xpm_button = tk.Button(self.buttons_frame, default='active', text='XML Package Maker', command=self.run_xml_package_maker) self.xpm_button.pack(side='right') self.selected_folder = None @@ -123,15 +110,27 @@ def validate_folder(self): def run_xml_package_maker(self): if self.is_valid_folder(): - + self.busy() self.generate_pmc_package = self.pmc_var.get() == 1 msg, color = self.function(self.selected_folder, self.generate_pmc_package) self.display_message(msg, color) + self.notbusy(color) def run_xml_converter(self): if self.is_valid_folder(): + self.busy() msg, color = self.function(self.selected_folder) - self.display_message(msg, color) + self.notbusy(color) + + def busy(self): + print('busy') + self.display_message(_('Processing...'), 'white') + self.tk_root.config(cursor="wait") + + def notbusy(self, color): + print('free') + self.display_message(_('Finished!'), color) + self.tk_root.config(cursor="") def display_form(is_converter_enabled, configurations, function): diff --git a/src/scielo/bin/xml/app_modules/app/pkg_processors/pkg_processors.py b/src/scielo/bin/xml/app_modules/app/pkg_processors/pkg_processors.py index 94db78d20..a6109bc92 100644 --- a/src/scielo/bin/xml/app_modules/app/pkg_processors/pkg_processors.py +++ b/src/scielo/bin/xml/app_modules/app/pkg_processors/pkg_processors.py @@ -384,7 +384,8 @@ def normalized_package(self, xml_list): def evaluate_package(self, pkg): registered_issue_data = registered.RegisteredIssue() self.registered_issues_manager.get_registered_issue_data(pkg.issue_data, registered_issue_data) - for xml_name, a in pkg.articles.items(): + for xml_name in sorted(pkg.articles.keys()): + a = pkg.articles[xml_name] if a is not None: institutions_results = {} for aff_xml in a.affiliations: @@ -427,7 +428,8 @@ def validate_pkg_articles(self, pkg, registered_issue_data): encoding.display_message(_('Validate package ({n} files)').format(n=len(pkg.articles))) results = {} - for name, article in pkg.articles.items(): + for name in sorted(pkg.articles.keys()): + article = pkg.articles[name] encoding.display_message(_('Validate {name}').format(name=name)) results[name] = article_validator.validate(article, pkg.outputs[name], pkg.package_folder.pkgfiles_items[name]) return results diff --git a/src/scielo/bin/xml/app_modules/app/validations/pkg_articles_validations.py b/src/scielo/bin/xml/app_modules/app/validations/pkg_articles_validations.py index e9f0a34ed..18879ff2e 100644 --- a/src/scielo/bin/xml/app_modules/app/validations/pkg_articles_validations.py +++ b/src/scielo/bin/xml/app_modules/app/validations/pkg_articles_validations.py @@ -47,7 +47,7 @@ def detailed_report(self): widths['aop pid/related'] = '10' widths[_('reports')] = '10' items = [] - for new_name, a_validations in self.pkg_articles_validations.items(): + for new_name, a_validations in sorted(self.pkg_articles_validations.items()): hide_and_show_block_items = a_validations.hide_and_show_block('view-reports-', new_name) values = [] values.append(new_name) diff --git a/src/scielo/bin/xml/app_modules/generics/system.py b/src/scielo/bin/xml/app_modules/generics/system.py index 42eb3e0a2..2825349dc 100644 --- a/src/scielo/bin/xml/app_modules/generics/system.py +++ b/src/scielo/bin/xml/app_modules/generics/system.py @@ -12,8 +12,15 @@ def format_command(command, params=None): return command + ' ' + parameters -def run_command(command): +def run_command(command, display=False): try: + if display: + encoding.display_message(u'Running:\n {}'.format(command)) os.system(encoding.encode(command, encoding.SYS_DEFAULT_ENCODING)) + if display: + encoding.display_message('... done!') except Exception as e: - encoding.report_exception('system.run_command()', e, command) + try: + os.system(encoding.encode(command, encoding.SYS_DEFAULT_ENCODING)) + except Exception as e: + encoding.report_exception('system.run_command()', e, command) diff --git a/src/scielo/bin/xml/run_app.py b/src/scielo/bin/xml/run_app.py index 8fa895eca..98610586f 100644 --- a/src/scielo/bin/xml/run_app.py +++ b/src/scielo/bin/xml/run_app.py @@ -20,7 +20,7 @@ def execute(parameters): appcaller.install(REQUIREMENTS_FILE, REQUIREMENTS_CHECKER) elif sys.argv[1].endswith('xml_converter.py'): from app_modules.app import xc - xc.call_make_packages(argv, '1.1') + xc.call_converter(argv, '1.1') elif sys.argv[1].endswith('xml_package_maker.py'): from app_modules.app import xpm xpm.call_make_packages(argv, '1.1') From 48056101744caeb27745ffb73d008243a4b30e9c Mon Sep 17 00:00:00 2001 From: robertatakenaka Date: Tue, 19 Sep 2017 15:10:40 -0300 Subject: [PATCH 2/4] 40094 Fixes #2720 --- .../xml/app_modules/app/pkg_processors/sgmlxml.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/scielo/bin/xml/app_modules/app/pkg_processors/sgmlxml.py b/src/scielo/bin/xml/app_modules/app/pkg_processors/sgmlxml.py index 80d236584..26c2bcec2 100644 --- a/src/scielo/bin/xml/app_modules/app/pkg_processors/sgmlxml.py +++ b/src/scielo/bin/xml/app_modules/app/pkg_processors/sgmlxml.py @@ -51,13 +51,14 @@ def generate(self, acron): def issueno(self): _issueno = self.doc.number if _issueno: - if _issueno == 'ahead' or int(_issueno) == 0: - _issueno = None - else: - n = len(_issueno) - if len(_issueno) < 2: - n = 2 - _issueno = _issueno.zfill(n) + if _issueno.isdigit(): + if int(_issueno) == 0: + _issueno = None + else: + n = len(_issueno) + if len(_issueno) < 2: + n = 2 + _issueno = _issueno.zfill(n) return _issueno @property From de6bdf82b2df15c0038ba38eb7e1f36bcb9c037e Mon Sep 17 00:00:00 2001 From: robertatakenaka Date: Wed, 20 Sep 2017 17:12:29 -0300 Subject: [PATCH 3/4] 40094 Ajustes xc server --- src/scielo/bin/xml/app_modules/__init__.py | 10 +- .../bin/xml/app_modules/app/config/config.py | 3 + .../bin/xml/app_modules/app/data/workarea.py | 11 +- .../app/pkg_processors/pkg_processors.py | 3 +- .../app_modules/app/server/filestransfer.py | 2 +- .../bin/xml/app_modules/app/server/mailer.py | 7 +- .../server}/xc_gerapadrao.py | 2 +- .../article_content_validations.py | 5 +- src/scielo/bin/xml/app_modules/app/xc.py | 6 +- .../bin/xml/app_modules/generics/fs_utils.py | 11 ++ .../xml/app_modules/generics/ws/ws_proxy.py | 159 ++++++++++++++++++ .../app_modules/generics/ws/ws_requester.py | 159 ++---------------- ...package.txt => email_invalid_packages.txt} | 0 .../bin/xml/app_modules/tools4srv/__init__.py | 2 - .../{app_modules/tools4srv => }/xc_server.py | 29 +++- 15 files changed, 240 insertions(+), 169 deletions(-) rename src/scielo/bin/xml/app_modules/{tools4srv => app/server}/xc_gerapadrao.py (99%) create mode 100644 src/scielo/bin/xml/app_modules/generics/ws/ws_proxy.py rename src/scielo/bin/xml/app_modules/settings/email/{email_invalid_package.txt => email_invalid_packages.txt} (100%) delete mode 100644 src/scielo/bin/xml/app_modules/tools4srv/__init__.py rename src/scielo/bin/xml/{app_modules/tools4srv => }/xc_server.py (62%) diff --git a/src/scielo/bin/xml/app_modules/__init__.py b/src/scielo/bin/xml/app_modules/__init__.py index dcfe79a8f..a372fee28 100644 --- a/src/scielo/bin/xml/app_modules/__init__.py +++ b/src/scielo/bin/xml/app_modules/__init__.py @@ -1,8 +1,12 @@ # coding=utf-8 import os -from .app.config import app_texts -from .app.config import app_caller +try: + from app_modules.app.config import app_texts + from app_modules.app.config import app_caller +except: + from .app.config import app_texts + from .app.config import app_caller THIS_LOCATION = os.path.dirname(os.path.realpath(__file__)).replace('\\', '/') @@ -13,7 +17,7 @@ LOG_PATH = BIN_PATH + '/logs' PMC_PATH = BIN_PATH + '/pmc' BIN_MARKUP_PATH = BIN_PATH + '/markup' -XC_SERVER_CONFIG_PATH = BIN_XML_PATH + '/config' +XC_SERVER_CONFIG_PATH = BIN_PATH + '/config' VENV_PATH = BIN_XML_PATH + '/app_data/venv/scielo-programs' TABLES_PATH = BIN_XML_PATH + '/app_modules/settings/tables' LOCALE_PATH = BIN_XML_PATH + '/app_modules/settings/locale' diff --git a/src/scielo/bin/xml/app_modules/app/config/config.py b/src/scielo/bin/xml/app_modules/app/config/config.py index 0870317e6..c6a5b14c5 100644 --- a/src/scielo/bin/xml/app_modules/app/config/config.py +++ b/src/scielo/bin/xml/app_modules/app/config/config.py @@ -29,6 +29,9 @@ def __init__(self, filename=None): self.filename = filename if filename is None: self.filename = get_configuration_filename() + if self.filename is not None and not os.path.isfile(self.filename): + encoding.display_message('Not found {}'.format(self.filename)) + self.filename = None self.load() def load(self): diff --git a/src/scielo/bin/xml/app_modules/app/data/workarea.py b/src/scielo/bin/xml/app_modules/app/data/workarea.py index 9abccd104..477f27acb 100644 --- a/src/scielo/bin/xml/app_modules/app/data/workarea.py +++ b/src/scielo/bin/xml/app_modules/app/data/workarea.py @@ -69,9 +69,12 @@ def prefixes(self): def find_all_files(self): r = [] - for prefix in self.prefixes: - r.extend([item for item in os.listdir(self.path) if item.startswith(prefix) and not item.endswith('incorrect.xml') and not item.endswith('.sgm.xml')]) - self._all = list(set(r)) + for item in os.listdir(self.path): + if not item.endswith('incorrect.xml') and not item.endswith('.sgm.xml'): + for prefix in self.prefixes: + if item.startswith(prefix): + r.append(item) + self._all = r @property def all(self): @@ -152,7 +155,7 @@ def copy_xml(self, dest_path): if dest_path is not None: if not os.path.isdir(dest_path): os.makedirs(dest_path) - shutil.copyfile(self.path + '/' + self.filename, dest_path + '/' + self.filename) + shutil.copyfile(self.filename, dest_path + '/' + self.basename) class PackageFolder(object): diff --git a/src/scielo/bin/xml/app_modules/app/pkg_processors/pkg_processors.py b/src/scielo/bin/xml/app_modules/app/pkg_processors/pkg_processors.py index a6109bc92..d33d88f0e 100644 --- a/src/scielo/bin/xml/app_modules/app/pkg_processors/pkg_processors.py +++ b/src/scielo/bin/xml/app_modules/app/pkg_processors/pkg_processors.py @@ -447,7 +447,8 @@ def report_result(self, pkg, validations_reports, conversion=None): if not self.is_xml_generation: reports.save_report(self.INTERATIVE) if conversion is not None: - conversion.registered_issue_data.issue_files.save_reports(files_location.report_path) + if conversion.registered_issue_data.issue_files is not None: + conversion.registered_issue_data.issue_files.save_reports(files_location.report_path) if self.config.web_app_site is not None: for article_files in pkg.package_folder.pkgfiles_items.values(): # copia os xml para report path diff --git a/src/scielo/bin/xml/app_modules/app/server/filestransfer.py b/src/scielo/bin/xml/app_modules/app/server/filestransfer.py index b70956812..43d03424e 100644 --- a/src/scielo/bin/xml/app_modules/app/server/filestransfer.py +++ b/src/scielo/bin/xml/app_modules/app/server/filestransfer.py @@ -8,7 +8,7 @@ class FilesTransfer(object): def __init__(self, config, _logger=None): self.config = config if self.config.is_enabled_transference: - self.servers = [remote_server.RemoteServer(server, self.config.user, _logger) for server in self.config.transference_servers] + self.servers = [remote_server.RemoteServer(server, self.config.transference_user, _logger) for server in self.config.transference_servers] def transfer_files(self, acron, issue_id, folders): if self.config.is_enabled_transference: diff --git a/src/scielo/bin/xml/app_modules/app/server/mailer.py b/src/scielo/bin/xml/app_modules/app/server/mailer.py index df44fc117..c6babdcef 100644 --- a/src/scielo/bin/xml/app_modules/app/server/mailer.py +++ b/src/scielo/bin/xml/app_modules/app/server/mailer.py @@ -11,7 +11,7 @@ def __init__(self, config): if config.is_enabled_email_service: self.mailer = email_service.EmailService(config.email_sender_name, config.email_sender_email) - def send_message(self, to, subject, text, attaches): + def send_message(self, to, subject, text, attaches=[]): self.mailer.send_message(to, subject, text, attaches) def mail_invalid_packages(self, invalid_pkg_files): @@ -20,7 +20,10 @@ def mail_invalid_packages(self, invalid_pkg_files): def mail_step1_failure(self, package_folder, e): if self.config.is_enabled_email_service: - self.send_message(self.config.email_to_adm, '[Step 1]' + self.config.email_subject_invalid_packages, self.config.email_text_invalid_packages + '\n' + package_folder + '\n' + str(e)) + self.send_message( + self.config.email_to_adm, + '[Step 1]' + self.config.email_subject_invalid_packages, + self.config.email_text_invalid_packages + '\n' + package_folder + '\n' + str(e)) def mail_results(self, package_folder, results, report_location): if self.config.is_enabled_email_service: diff --git a/src/scielo/bin/xml/app_modules/tools4srv/xc_gerapadrao.py b/src/scielo/bin/xml/app_modules/app/server/xc_gerapadrao.py similarity index 99% rename from src/scielo/bin/xml/app_modules/tools4srv/xc_gerapadrao.py rename to src/scielo/bin/xml/app_modules/app/server/xc_gerapadrao.py index d7d5a8593..5457f02c1 100644 --- a/src/scielo/bin/xml/app_modules/tools4srv/xc_gerapadrao.py +++ b/src/scielo/bin/xml/app_modules/app/server/xc_gerapadrao.py @@ -7,7 +7,7 @@ from ...generics import fs_utils from ...generics import logger from ...generics import system -from ...app.server import filestransfer +from . import filestransfer from ...__init__ import LOG_PATH diff --git a/src/scielo/bin/xml/app_modules/app/validations/article_content_validations.py b/src/scielo/bin/xml/app_modules/app/validations/article_content_validations.py index 96101a926..22fb5d9bd 100644 --- a/src/scielo/bin/xml/app_modules/app/validations/article_content_validations.py +++ b/src/scielo/bin/xml/app_modules/app/validations/article_content_validations.py @@ -181,10 +181,8 @@ def __init__(self, journal, _article, pkgfiles, is_db_generation, check_url, app def normalize_validations(self, validations_result_list): r = [] if isinstance(validations_result_list, list): - result = [] for item in validations_result_list: - result += self.normalize_validations(item) - r.extend(result) + r += self.normalize_validations(item) elif validations_result_list is None: pass else: @@ -252,6 +250,7 @@ def validations(self): items.append(self.refs_sources) r = self.normalize_validations(items) + encoding.debugging('fim normalize_validations', '') self._validations = (r, performance) return self._validations diff --git a/src/scielo/bin/xml/app_modules/app/xc.py b/src/scielo/bin/xml/app_modules/app/xc.py index 2289f50a1..6991bdbea 100644 --- a/src/scielo/bin/xml/app_modules/app/xc.py +++ b/src/scielo/bin/xml/app_modules/app/xc.py @@ -12,7 +12,6 @@ from .data import workarea from .server import mailer from .server import filestransfer -from . import interface from .config import config @@ -64,12 +63,15 @@ class XC_Reception(object): def __init__(self, configuration): self.configuration = configuration + self.mailer = mailer.Mailer(configuration) self.transfer = filestransfer.FilesTransfer(configuration) self.proc = pkg_processors.PkgProcessor(configuration, INTERATIVE=configuration.interative_mode, stage='xc') def display_form(self): - interface.display_form(self.proc.stage == 'xc', None, self.call_convert_package) + if self.configuration.interative_mode is True: + from . import interface + interface.display_form(self.proc.stage == 'xc', None, self.call_convert_package) def call_convert_package(self, package_path): self.convert_package(package_path) diff --git a/src/scielo/bin/xml/app_modules/generics/fs_utils.py b/src/scielo/bin/xml/app_modules/generics/fs_utils.py index 2e89b3816..3cc226df0 100644 --- a/src/scielo/bin/xml/app_modules/generics/fs_utils.py +++ b/src/scielo/bin/xml/app_modules/generics/fs_utils.py @@ -187,3 +187,14 @@ def write(self, filename): def display(self): encoding.display_message('\n'.join(self.logged_items)) + + +def is_compressed_file(path): + r = False + if path.endswith('.zip'): + r = True + elif path.endswith('.tar.gz') or path.endswith('.tgz'): + r = True + elif path.endswith('.tar.bz2') or path.endswith('.tbz'): + r = True + return r diff --git a/src/scielo/bin/xml/app_modules/generics/ws/ws_proxy.py b/src/scielo/bin/xml/app_modules/generics/ws/ws_proxy.py new file mode 100644 index 000000000..344f63931 --- /dev/null +++ b/src/scielo/bin/xml/app_modules/generics/ws/ws_proxy.py @@ -0,0 +1,159 @@ +# code: utf-8 + +import json +import socket + +try: + import urllib.request as urllib_request + from urllib.parse import urlencode as urllib_parse_urlencode + from urllib.parse import urlparse, urlencode + from urllib.request import urlopen, Request + from urllib.error import HTTPError, URLError +except ImportError: + import urllib as urllib_request + from urllib import urlencode as urllib_parse_urlencode + + from urlparse import urlparse + from urllib import urlencode + from urllib2 import urlopen, Request, HTTPError, URLError + +try: + import tkinter as tk +except ImportError: + try: + import Tkinter as tk + except: + print('no Tkinter') + +from .. import encoding + + +def fix_ip(ip): + if '://' in ip: + ip = ip.split('://')[1] + return ip + + +class ProxyInfo(object): + + def __init__(self, server=None, port=None, user=None, password=None): + self.server = server + self.port = port + self.user = user + self.password = password + + @property + def handler_data(self): + r = {} + if self.server is not None and self.port is not None: + proxy_handler_data = '' + if self.user is not None and self.password is not None: + proxy_handler_data = self.user + ':' + self.password + '@' + proxy_handler_data += fix_ip(self.server) + ':' + self.port + if len(proxy_handler_data) > 0: + r = {'http': 'http://'+proxy_handler_data, + 'https': 'https://'+proxy_handler_data} + return r + + +class ProxyGUI(tk.Frame): + + def __init__(self, tk_root, registered_ip, registered_port): + self.info = None + if registered_ip is None: + registered_ip = '' + if registered_port is None: + registered_port = '' + + tk.Frame.__init__(self, tk_root) + self.tk_root = tk_root + self.tk_root.resizable(False, False) + + message_frame = tk.Frame(self) + message_frame.pack(fill="both", expand="yes") + message = tk.Message(message_frame, + font='System 14 bold', + text=_("""This tool requires Internet access for some services, + such as DOI, affiliations, and other data validations, + and also to get journals data from SciELO.\n + If you do not use a proxy to access the Internet, + and click on Cancel button."""), + wraplength=450 + ) + message.pack() + + proxy_ip_frame = tk.Frame(self) + proxy_ip_frame.pack(fill="both", expand="yes") + label_proxy_ip = tk.Label(proxy_ip_frame, text='Proxy IP / server') + label_proxy_ip.pack(fill="both", expand="yes") + self.proxy_ip_entry = tk.Entry(proxy_ip_frame) + self.proxy_ip_entry.insert(0, registered_ip) + self.proxy_ip_entry.pack() + self.proxy_ip_entry.focus_set() + + proxy_port_frame = tk.Frame(self) + proxy_port_frame.pack(fill="both", expand="yes") + proxy_port_label = tk.Label(proxy_port_frame, text='Proxy Port') + proxy_port_label.pack(fill="both", expand="yes") + self.proxy_port_entry = tk.Entry(proxy_port_frame) + self.proxy_port_entry.insert(0, registered_port) + self.proxy_port_entry.pack() + + proxy_user_frame = tk.Frame(self) + proxy_user_frame.pack(fill="both", expand="yes") + proxy_user_label = tk.Label(proxy_user_frame, text=_('user')) + proxy_user_label.pack(fill="both", expand="yes") + self.proxy_user_entry = tk.Entry(proxy_user_frame) + self.proxy_user_entry.pack() + + proxy_pass_frame = tk.Frame(self) + proxy_pass_frame.pack(fill="both", expand="yes") + proxy_pass_label = tk.Label(proxy_pass_frame, text=_('password')) + proxy_pass_label.pack(fill="both", expand="yes") + self.proxy_pass_entry = tk.Entry(proxy_pass_frame, show='*') + self.proxy_pass_entry.pack() + + buttons_frame = tk.Frame(self) + buttons_frame.pack(fill="both", expand="yes") + + cancel_button = tk.Button(buttons_frame, text=_('Cancel'), command=lambda: self.tk_root.quit()) + cancel_button.pack(side='right') + + execute_button = tk.Button(buttons_frame, text=_('OK'), command=self.register) + execute_button.pack(side='right') + + def register(self): + r = [self.proxy_ip_entry.get(), self.proxy_port_entry.get(), self.proxy_user_entry.get(), self.proxy_pass_entry.get()] + self.info = [None if item == '' else item for item in r] + self.tk_root.quit() + + +def ask_data(server='', port=''): + proxy_info = display_proxy_form(server, port) + if proxy_info is not None: + ip, port, user, password = proxy_info + proxy_info = ProxyInfo(ip, port, user, password) + return proxy_info + + +def display_proxy_form(registered_ip, registered_port, debug=False): + tk_root = tk.Tk() + tk_root.title(_('Proxy information')) + + app = ProxyGUI(tk_root, registered_ip, registered_port, debug) + app.pack(side="top", fill="both", expand=True) + + app.mainloop() + app.focus_set() + + r = app.info + if debug: + encoding.debugging('display_proxy_form()', r) + tk_root.destroy() + return r + + +def registry_proxy_opener(proxy_handler_data): + proxy_handler = urllib_request.ProxyHandler(proxy_handler_data) + opener = urllib_request.build_opener(proxy_handler) + urllib_request.install_opener(opener) diff --git a/src/scielo/bin/xml/app_modules/generics/ws/ws_requester.py b/src/scielo/bin/xml/app_modules/generics/ws/ws_requester.py index a44b64acc..5c31c2ac1 100644 --- a/src/scielo/bin/xml/app_modules/generics/ws/ws_requester.py +++ b/src/scielo/bin/xml/app_modules/generics/ws/ws_requester.py @@ -4,14 +4,12 @@ import socket try: - import tkinter as tk import urllib.request as urllib_request from urllib.parse import urlencode as urllib_parse_urlencode from urllib.parse import urlparse, urlencode from urllib.request import urlopen, Request from urllib.error import HTTPError, URLError except ImportError: - import Tkinter as tk import urllib as urllib_request from urllib import urlencode as urllib_parse_urlencode @@ -19,10 +17,18 @@ from urllib import urlencode from urllib2 import urlopen, Request, HTTPError, URLError +try: + import tkinter as tk +except ImportError: + try: + import Tkinter as tk + except: + print('no Tkinter') + from .. import encoding -JOURNALS_CSV_URL = 'http://static.scielo.org/sps/titles-tab-v2-utf-8.csv' +# JOURNALS_CSV_URL = 'http://static.scielo.org/sps/titles-tab-v2-utf-8.csv' def local_gettext(text): @@ -35,16 +41,6 @@ def local_gettext(text): _ = local_gettext -def pathname2url(filename): - return urllib_request.pathname2url(filename) - - -def fix_ip(ip): - if '://' in ip: - ip = ip.split('://')[1] - return ip - - def get_servername(url): server = url server = server[server.find('://')+3:] @@ -53,131 +49,6 @@ def get_servername(url): return server -class ProxyInfo(object): - - def __init__(self, server=None, port=None, user=None, password=None): - self.server = server - self.port = port - self.user = user - self.password = password - - @property - def handler_data(self): - r = {} - if self.server is not None and self.port is not None: - proxy_handler_data = '' - if self.user is not None and self.password is not None: - proxy_handler_data = self.user + ':' + self.password + '@' - proxy_handler_data += fix_ip(self.server) + ':' + self.port - if len(proxy_handler_data) > 0: - r = {'http': 'http://'+proxy_handler_data, - 'https': 'https://'+proxy_handler_data} - return r - - -class ProxyGUI(tk.Frame): - - def __init__(self, tk_root, registered_ip, registered_port): - self.info = None - if registered_ip is None: - registered_ip = '' - if registered_port is None: - registered_port = '' - - tk.Frame.__init__(self, tk_root) - self.tk_root = tk_root - self.tk_root.resizable(False, False) - - message_frame = tk.Frame(self) - message_frame.pack(fill="both", expand="yes") - message = tk.Message(message_frame, - font='System 14 bold', - text=_("""This tool requires Internet access for some services, - such as DOI, affiliations, and other data validations, - and also to get journals data from SciELO.\n - If you do not use a proxy to access the Internet, - and click on Cancel button."""), - wraplength=450 - ) - message.pack() - - proxy_ip_frame = tk.Frame(self) - proxy_ip_frame.pack(fill="both", expand="yes") - label_proxy_ip = tk.Label(proxy_ip_frame, text='Proxy IP / server') - label_proxy_ip.pack(fill="both", expand="yes") - self.proxy_ip_entry = tk.Entry(proxy_ip_frame) - self.proxy_ip_entry.insert(0, registered_ip) - self.proxy_ip_entry.pack() - self.proxy_ip_entry.focus_set() - - proxy_port_frame = tk.Frame(self) - proxy_port_frame.pack(fill="both", expand="yes") - proxy_port_label = tk.Label(proxy_port_frame, text='Proxy Port') - proxy_port_label.pack(fill="both", expand="yes") - self.proxy_port_entry = tk.Entry(proxy_port_frame) - self.proxy_port_entry.insert(0, registered_port) - self.proxy_port_entry.pack() - - proxy_user_frame = tk.Frame(self) - proxy_user_frame.pack(fill="both", expand="yes") - proxy_user_label = tk.Label(proxy_user_frame, text=_('user')) - proxy_user_label.pack(fill="both", expand="yes") - self.proxy_user_entry = tk.Entry(proxy_user_frame) - self.proxy_user_entry.pack() - - proxy_pass_frame = tk.Frame(self) - proxy_pass_frame.pack(fill="both", expand="yes") - proxy_pass_label = tk.Label(proxy_pass_frame, text=_('password')) - proxy_pass_label.pack(fill="both", expand="yes") - self.proxy_pass_entry = tk.Entry(proxy_pass_frame, show='*') - self.proxy_pass_entry.pack() - - buttons_frame = tk.Frame(self) - buttons_frame.pack(fill="both", expand="yes") - - cancel_button = tk.Button(buttons_frame, text=_('Cancel'), command=lambda: self.tk_root.quit()) - cancel_button.pack(side='right') - - execute_button = tk.Button(buttons_frame, text=_('OK'), command=self.register) - execute_button.pack(side='right') - - def register(self): - r = [self.proxy_ip_entry.get(), self.proxy_port_entry.get(), self.proxy_user_entry.get(), self.proxy_pass_entry.get()] - self.info = [None if item == '' else item for item in r] - self.tk_root.quit() - - -def ask_data(server='', port=''): - proxy_info = display_proxy_form(server, port) - if proxy_info is not None: - ip, port, user, password = proxy_info - proxy_info = ProxyInfo(ip, port, user, password) - return proxy_info - - -def display_proxy_form(registered_ip, registered_port, debug=False): - tk_root = tk.Tk() - tk_root.title(_('Proxy information')) - - app = ProxyGUI(tk_root, registered_ip, registered_port, debug) - app.pack(side="top", fill="both", expand=True) - - app.mainloop() - app.focus_set() - - r = app.info - if debug: - encoding.debugging('display_proxy_form()', r) - tk_root.destroy() - return r - - -def registry_proxy_opener(proxy_handler_data): - proxy_handler = urllib_request.ProxyHandler(proxy_handler_data) - opener = urllib_request.build_opener(proxy_handler) - urllib_request.install_opener(opener) - - def try_request(url, timeout=30, debug=False, force_error=False): response = None socket.setdefaulttimeout(timeout) @@ -245,9 +116,7 @@ def request(self, url, timeout=30, debug=False, force_error=False): response, http_error_proxy_auth, error_message = try_request(url, timeout, debug, force_error) if http_error_proxy_auth is not None: if self.proxy_info is not None: - server, port = self.proxy_info.split(':') - proxy_info = ask_data(server, port) - registry_proxy_opener(proxy_info.handler_data) + get_proxy_info(self.proxy_info) response, http_error_proxy_auth, error_message = try_request(url, timeout, debug, force_error) if response is None and error_message != '': self.skip.append(server) @@ -269,3 +138,11 @@ def is_valid_url(self, url, timeout=30): return None _result = self.request(url, timeout) return _result is not None + + +def get_proxy_info(proxy_data): + from . import ws_proxy + server, port = proxy_data.split(':') + proxy_info = ws_proxy.ask_data(server, port) + ws_proxy.registry_proxy_opener(proxy_info.handler_data) + diff --git a/src/scielo/bin/xml/app_modules/settings/email/email_invalid_package.txt b/src/scielo/bin/xml/app_modules/settings/email/email_invalid_packages.txt similarity index 100% rename from src/scielo/bin/xml/app_modules/settings/email/email_invalid_package.txt rename to src/scielo/bin/xml/app_modules/settings/email/email_invalid_packages.txt diff --git a/src/scielo/bin/xml/app_modules/tools4srv/__init__.py b/src/scielo/bin/xml/app_modules/tools4srv/__init__.py deleted file mode 100644 index 139597f9c..000000000 --- a/src/scielo/bin/xml/app_modules/tools4srv/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/scielo/bin/xml/app_modules/tools4srv/xc_server.py b/src/scielo/bin/xml/xc_server.py similarity index 62% rename from src/scielo/bin/xml/app_modules/tools4srv/xc_server.py rename to src/scielo/bin/xml/xc_server.py index 0e4625b8c..0f408529e 100644 --- a/src/scielo/bin/xml/app_modules/tools4srv/xc_server.py +++ b/src/scielo/bin/xml/xc_server.py @@ -2,10 +2,10 @@ import os import sys -from ...generics import ftp_service -from ...app.config import config -from ...app.server import mailer -from . import xc_gerapadrao +from app_modules.generics import ftp_service +from app_modules.app.config import config +from app_modules.app.server import mailer +from app_modules.app.server import xc_gerapadrao def download_packages(configuration): @@ -19,7 +19,7 @@ def download_packages(configuration): configuration.download_path, configuration.ftp_dir) return (files, ftp.registered_actions) - +valid_parameters = False if len(sys.argv) == 3: action, collection_acron = sys.argv[1:] filename = config.get_configuration_filename(collection_acron) @@ -35,8 +35,19 @@ def download_packages(configuration): cfg.email_to, cfg.email_subject_packages_receipt, cfg.email_text_packages_receipt + '\n' + msg) + valid_parameters = True elif action == 'end': - xc_gerapadrao.gerapadrao(collection_acron, cfg, mailer) - else: - print('Unable to execute') - print(sys.argv) + xc_gerapadrao.gerapadrao(collection_acron, cfg, msg_sender) + valid_parameters = True + elif action == 'xc': + from app_modules.app import xc + valid_parameters = True + xc.call_converter([action, collection_acron], '1.1') + + +if valid_parameters is False: + print('Unable to execute') + print(sys.argv) + print('Usage: python2.7 {} [begin|end] '.format(sys.argv[0])) + + From 2aca74fea79be271d8b8ad733f6a82d2918ececd Mon Sep 17 00:00:00 2001 From: robertatakenaka Date: Thu, 21 Sep 2017 17:16:51 -0300 Subject: [PATCH 4/4] 40094 ajustes em ativar/desativar venv Fixes #2722 --- src/scielo/bin/cfg/version.txt | 17 ++++++++++++++--- src/scielo/bin/cfg/xpm_version.txt | 9 ++++++--- .../xml/app_modules/app/config/app_caller.py | 6 ++++-- .../bin/xml/app_modules/app/data/workarea.py | 2 +- .../app/validations/ref_validations.py | 2 ++ 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/scielo/bin/cfg/version.txt b/src/scielo/bin/cfg/version.txt index 5cba161e6..9564ced31 100644 --- a/src/scielo/bin/cfg/version.txt +++ b/src/scielo/bin/cfg/version.txt @@ -1,4 +1,4 @@ -4.0.094 - Release Test - 05/09/2017 +4.0.094 - Release Test - 21/09/2017 =================================== - General - [2686] http to https @@ -10,24 +10,35 @@ - (new) [2592] New element code - (new) [2658] JATS 1.1 Generation related to sps-1.7 version - (new) [] NLM Style Checker 5.15 + - (bug) [2698] Fix author notes xref attribute value + - (bug) [2689] Use fpage/@seq to generate the XML file name - XPM - (new) [1256] Python3 - (new) [2596] JATS 1.1 Validation - (new) [2578] Configuration of Web access status and proxy - - (new) [2615, 2630] ORCID Validation + - (new) [2615, 2630, 2715] ORCID Validation - (new) [1270] Add XML Validations with packtools + - (new) [2705] Require coded formulas and tables - (bug) [2599, 2623] Fix missing xref (bibr) validation - (bug) [2567] Fix aff validation - (bug) [2620] Present error for more than one source in reference - (bug) [2528] Reinsert the feature of zip file generation for pmc and scielo packages - (bug) [2597] Consider that previous author can be anonymous - - (improvement) [2610] Indicate articles must have fpage/@seq if they have same fpage value + - (enhancement) [2610] Indicate articles must have fpage/@seq if they have same fpage value + - (enhancement) [2709] Fix the message about invalid citation data + - (enhancement) [2707] Fix the message about required PDF - XC - (new) [1256] Python3 - (new) [2590] Generation of v95 for version - (new) [2585] Generation of v70^j, v70^k for institution-id, institution-id-type +4.0.093 - Release 6 - 19/09/2017 +================================ +- XML Markup + - (bug) [2720] Fix generation of XML which contains letters in issue number + + 4.0.093 - Release 5 - 31/08/2017 ================================ - Download diff --git a/src/scielo/bin/cfg/xpm_version.txt b/src/scielo/bin/cfg/xpm_version.txt index 151ba7435..807b2c184 100644 --- a/src/scielo/bin/cfg/xpm_version.txt +++ b/src/scielo/bin/cfg/xpm_version.txt @@ -1,17 +1,20 @@ -4.0.094 - Release Test - 05/09/2017 +4.0.094 - Release Test - 21/09/2017 =================================== - XPM - (new) [1256] Python3 - (new) [2596] JATS 1.1 Validation - (new) [2578] Configuration of Web access status and proxy - - (new) [2615, 2630] ORCID Validation + - (new) [2615, 2630, 2715] ORCID Validation - (new) [1270] Add XML Validations with packtools + - (new) [2705] Require coded formulas and tables - (bug) [2599, 2623] Fix missing xref (bibr) validation - (bug) [2567] Fix aff validation - (bug) [2620] Present error for more than one source in reference - (bug) [2528] Reinsert the feature of zip file generation for pmc and scielo packages - (bug) [2597] Consider that previous author can be anonymous - - (improvement) [2610] Indicate articles must have fpage/@seq if they have same fpage value + - (enhancement) [2610] Indicate articles must have fpage/@seq if they have same fpage value + - (enhancement) [2709] Fix the message about invalid citation data + - (enhancement) [2707] Fix the message about required PDF 4.0.093 - Release 5 - 31/08/2017 ================================ diff --git a/src/scielo/bin/xml/app_modules/app/config/app_caller.py b/src/scielo/bin/xml/app_modules/app/config/app_caller.py index e38ef2f31..2bd01f138 100644 --- a/src/scielo/bin/xml/app_modules/app/config/app_caller.py +++ b/src/scielo/bin/xml/app_modules/app/config/app_caller.py @@ -10,8 +10,9 @@ def info(venv_path): if 'windows' in so: - activate = '{}/Scripts/activate'.format(venv_path) - deactivate = '{}/Scripts/deactivate'.format(venv_path) + venv_path = venv_path.replace('/', '\\') + activate = '{}\\Scripts\\activate'.format(venv_path) + deactivate = '{}\\Scripts\\deactivate'.format(venv_path) sep = ' & ' else: activate = 'source {}/bin/activate'.format(venv_path) @@ -51,6 +52,7 @@ def execute(self, commands): _commands.append(u'echo Deactivating {}'.format(self.venv_path)) _commands = [item for item in _commands if len(item) > 0] encoding.debugging('app_caller.execute()', self.sep.join(_commands)) + encoding.debugging(self.sep.join(_commands)) system.run_command(self.sep.join(_commands)) def install_requirements(self, requirements_file, requirements_checker): diff --git a/src/scielo/bin/xml/app_modules/app/data/workarea.py b/src/scielo/bin/xml/app_modules/app/data/workarea.py index 477f27acb..04e5d4a8b 100644 --- a/src/scielo/bin/xml/app_modules/app/data/workarea.py +++ b/src/scielo/bin/xml/app_modules/app/data/workarea.py @@ -345,7 +345,7 @@ def report_path(self): @property def report_link(self): if self.web_url is not None: - return self.web_url + '/htdocs/' + self.issue_path + return self.web_url + '/reports/' + self.issue_path else: return self.result_path + '/errors' diff --git a/src/scielo/bin/xml/app_modules/app/validations/ref_validations.py b/src/scielo/bin/xml/app_modules/app/validations/ref_validations.py index 75d675c17..d27bdfafb 100644 --- a/src/scielo/bin/xml/app_modules/app/validations/ref_validations.py +++ b/src/scielo/bin/xml/app_modules/app/validations/ref_validations.py @@ -399,6 +399,8 @@ def year(self, article_year): r = [] label_year, value_year = article_year _y = self.refxml.reference.formatted_year + if len(self.refxml.year) > 1: + r.append(('year', validation_status.STATUS_FATAL_ERROR, _('Identify as "year" the more recent publication date. '))) if _y is not None: if _y.isdigit(): if _y > value_year: