check regex-code when save online-source
This commit is contained in:
parent
c2df388692
commit
9f74b8fbf7
5 changed files with 94 additions and 3 deletions
|
@ -50,6 +50,10 @@ msgctxt "model:ir.message,text:msg_missing_url"
|
||||||
msgid "URL for the online source '%(oname)s' is missing."
|
msgid "URL for the online source '%(oname)s' is missing."
|
||||||
msgstr "URL für die Onlinequelle '%(oname)s' fehlt."
|
msgstr "URL für die Onlinequelle '%(oname)s' fehlt."
|
||||||
|
|
||||||
|
msgctxt "model:ir.message,text:msg_bug_in_regexquery"
|
||||||
|
msgid "Error in regex code of field '%(fname)s': %(errmsg)s [%(code)s]"
|
||||||
|
msgstr "Fehler in Regex-Code des Feldes '%(fname)s': %(errmsg)s [%(code)s]"
|
||||||
|
|
||||||
|
|
||||||
##############
|
##############
|
||||||
# ir.ui.menu #
|
# ir.ui.menu #
|
||||||
|
|
16
locale/en.po
16
locale/en.po
|
@ -38,6 +38,10 @@ msgctxt "model:ir.message,text:msg_missing_url"
|
||||||
msgid "URL for the online source '%(oname)s' is missing."
|
msgid "URL for the online source '%(oname)s' is missing."
|
||||||
msgstr "URL for the online source '%(oname)s' is missing."
|
msgstr "URL for the online source '%(oname)s' is missing."
|
||||||
|
|
||||||
|
msgctxt "model:ir.message,text:msg_bug_in_regexquery"
|
||||||
|
msgid "Error in regex code of field '%(fname)s': %(errmsg)s [%(code)s]"
|
||||||
|
msgstr "Error in regex code of field '%(fname)s': %(errmsg)s [%(code)s]"
|
||||||
|
|
||||||
msgctxt "model:ir.ui.menu,name:menu_investment"
|
msgctxt "model:ir.ui.menu,name:menu_investment"
|
||||||
msgid "Investment"
|
msgid "Investment"
|
||||||
msgstr "Investment"
|
msgstr "Investment"
|
||||||
|
@ -294,6 +298,18 @@ msgctxt "selection:investment.asset,updtdays:"
|
||||||
msgid "Mon - Sun"
|
msgid "Mon - Sun"
|
||||||
msgstr "Mon - Sun"
|
msgstr "Mon - Sun"
|
||||||
|
|
||||||
|
msgctxt "field:investment.asset,updturl:"
|
||||||
|
msgid "URL"
|
||||||
|
msgstr "URL"
|
||||||
|
|
||||||
|
msgctxt "help:investment.asset,updturl:"
|
||||||
|
msgid "URL for data retrieval."
|
||||||
|
msgstr "URL for data retrieval."
|
||||||
|
|
||||||
|
msgctxt "field:investment.asset,updturl_enable:"
|
||||||
|
msgid "URL required"
|
||||||
|
msgstr "URL required"
|
||||||
|
|
||||||
msgctxt "model:investment.asset_source_rel,name:"
|
msgctxt "model:investment.asset_source_rel,name:"
|
||||||
msgid "Asset Source Relation"
|
msgid "Asset Source Relation"
|
||||||
msgstr "Asset Source Relation"
|
msgstr "Asset Source Relation"
|
||||||
|
|
|
@ -23,6 +23,9 @@ full copyright notices and license terms. -->
|
||||||
<record model="ir.message" id="msg_missing_url">
|
<record model="ir.message" id="msg_missing_url">
|
||||||
<field name="text">URL for the online source '%(oname)s' is missing.</field>
|
<field name="text">URL for the online source '%(oname)s' is missing.</field>
|
||||||
</record>
|
</record>
|
||||||
|
<record model="ir.message" id="msg_bug_in_regexquery">
|
||||||
|
<field name="text">Error in regex code of field '%(fname)s': %(errmsg)s [%(code)s]</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</tryton>
|
</tryton>
|
||||||
|
|
|
@ -260,6 +260,15 @@ class OnlineSource(ModelSQL, ModelView):
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def validate(cls, records):
|
||||||
|
""" check regex-code
|
||||||
|
"""
|
||||||
|
for record in records:
|
||||||
|
for x in ['rgxdate', 'rgxrate', 'rgxident']:
|
||||||
|
if x:
|
||||||
|
record.get_regex_result('', x)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run_query_method(cls, osource, isin, nsin, symbol, url, debug=False):
|
def run_query_method(cls, osource, isin, nsin, symbol, url, debug=False):
|
||||||
""" run selected query to retrive data
|
""" run selected query to retrive data
|
||||||
|
@ -380,13 +389,22 @@ class OnlineSource(ModelSQL, ModelView):
|
||||||
def get_regex_result(self, html_text, field_name):
|
def get_regex_result(self, html_text, field_name):
|
||||||
""" run regex on html-text, convert result
|
""" run regex on html-text, convert result
|
||||||
"""
|
"""
|
||||||
|
OSource = Pool().get('investment.source')
|
||||||
|
|
||||||
rgxcode = getattr(self, field_name) or ''
|
rgxcode = getattr(self, field_name) or ''
|
||||||
if len(rgxcode) == 0:
|
if len(rgxcode) == 0:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
try:
|
||||||
search_result = re.compile(rgxcode).search(html_text)
|
search_result = re.compile(rgxcode).search(html_text)
|
||||||
if search_result is None:
|
if search_result is None:
|
||||||
return None
|
return None
|
||||||
|
except Exception as e1:
|
||||||
|
raise UserError(gettext(
|
||||||
|
'investment.msg_bug_in_regexquery',
|
||||||
|
errmsg=str(e1),
|
||||||
|
fname=getattr(OSource, field_name).string,
|
||||||
|
code=rgxcode))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = search_result.group(1)
|
result = search_result.group(1)
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
from trytond.tests.test_tryton import with_transaction
|
from trytond.tests.test_tryton import with_transaction
|
||||||
from trytond.pool import Pool
|
from trytond.pool import Pool
|
||||||
from trytond.transaction import Transaction
|
from trytond.transaction import Transaction
|
||||||
|
from trytond.exceptions import UserError
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from datetime import time, date, datetime
|
from datetime import time, date, datetime
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
|
@ -131,5 +132,54 @@ High 34,87 EUR
|
||||||
'rgxdate'
|
'rgxdate'
|
||||||
), date(2022, 3, 14))
|
), date(2022, 3, 14))
|
||||||
|
|
||||||
|
@with_transaction()
|
||||||
|
def test_waitlist_source_check_regex_validate(self):
|
||||||
|
""" create source, check validation of regex-code
|
||||||
|
"""
|
||||||
|
pool = Pool()
|
||||||
|
OSource = pool.get('investment.source')
|
||||||
|
|
||||||
|
self.assertRaisesRegex(
|
||||||
|
UserError,
|
||||||
|
r"Error in regex code of field 'Date': nothing to repeat " +
|
||||||
|
r"at position 0 \[\*+ multiple repeat\]",
|
||||||
|
OSource.create,
|
||||||
|
[{
|
||||||
|
'name': 'Check date',
|
||||||
|
'rgxdate': '** multiple repeat',
|
||||||
|
'rgxrate': 'rate -- multiple repeat',
|
||||||
|
'rgxident': 'identifiert ** multiple repeat',
|
||||||
|
}])
|
||||||
|
|
||||||
|
self.assertRaisesRegex(
|
||||||
|
UserError,
|
||||||
|
r"Error in regex code of field 'Rate': multiple repeat " +
|
||||||
|
r"at position 6 \[rate \*+ multiple repeat\]",
|
||||||
|
OSource.create,
|
||||||
|
[{
|
||||||
|
'name': 'Check rate',
|
||||||
|
'rgxdate': '-- multiple repeat',
|
||||||
|
'rgxrate': 'rate ** multiple repeat',
|
||||||
|
'rgxident': 'identifiert -- multiple repeat',
|
||||||
|
}])
|
||||||
|
|
||||||
|
self.assertRaisesRegex(
|
||||||
|
UserError,
|
||||||
|
r"Error in regex code of field 'Identifier': multiple " +
|
||||||
|
r"repeat at position 13 \[identifiert \*+ multiple repeat\]",
|
||||||
|
OSource.create,
|
||||||
|
[{
|
||||||
|
'name': 'Check rgxident',
|
||||||
|
'rgxdate': '-- multiple repeat',
|
||||||
|
'rgxrate': 'rate -- multiple repeat',
|
||||||
|
'rgxident': 'identifiert ** multiple repeat',
|
||||||
|
}])
|
||||||
|
|
||||||
|
OSource.create([{
|
||||||
|
'name': 'Check rgxident',
|
||||||
|
'rgxdate': '-- multiple repeat',
|
||||||
|
'rgxrate': 'rate -- multiple repeat',
|
||||||
|
'rgxident': 'identifiert -- multiple repeat',
|
||||||
|
}])
|
||||||
|
|
||||||
# end SourceTestCase
|
# end SourceTestCase
|
||||||
|
|
Loading…
Reference in a new issue