asset/onlinesource: add fixed url,

pre defned online sources: add FAZ.net
This commit is contained in:
Frederik Jaeckel 2023-04-21 16:55:51 +02:00
parent edfa0424e5
commit 82f9d3a792
8 changed files with 120 additions and 13 deletions

View file

@ -14,6 +14,7 @@ from trytond.model import ModelView, ModelSQL, fields
from trytond.pool import Pool
from trytond.pyson import Eval, Bool
from trytond.i18n import gettext
from trytond.exceptions import UserError
logger = logging.getLogger(__name__)
@ -60,6 +61,12 @@ class OnlineSource(ModelSQL, ModelView):
help='Select the method to retrieve the data.',
selection='get_query_methods')
url = fields.Char(string='URL', states=STATES_WEB, depends=DEPENDS_WEB)
fixed_url = fields.Boolean(
string='Fixed URL',
states={
'invisible': Eval('query_method', '') != 'web',
}, depends=DEPENDS_WEB,
help='URL must be defined at investment record.')
nohtml = fields.Boolean(
string='Remove HTML',
help='Removes HTML tags before the text is interpreted.',
@ -178,6 +185,12 @@ class OnlineSource(ModelSQL, ModelView):
"""
return True
@classmethod
def default_fixed_url(cls):
""" default: False
"""
return False
@fields.depends(*fields_check)
def on_change_nsin(self):
""" run request
@ -220,7 +233,7 @@ class OnlineSource(ModelSQL, ModelView):
def on_change_with_symbol(self, name=None):
return ''
@fields.depends('url', 'isin', 'nsin', 'symbol')
@fields.depends('url', 'isin', 'nsin', 'symbol', 'fixed_url')
def on_change_with_used_url(self, name=None):
""" get url for testing
"""
@ -229,6 +242,7 @@ class OnlineSource(ModelSQL, ModelView):
isin=self.isin,
nsin=self.nsin,
symbol=self.symbol,
url=self.url,
)
@classmethod
@ -246,7 +260,7 @@ class OnlineSource(ModelSQL, ModelView):
pass
@classmethod
def run_query_method(cls, osource, isin, nsin, symbol, debug=False):
def run_query_method(cls, osource, isin, nsin, symbol, url, debug=False):
""" run selected query to retrive data
result: {
'text': raw-text from query - for debug,
@ -265,6 +279,7 @@ class OnlineSource(ModelSQL, ModelView):
nsin=nsin,
symbol=symbol,
debug=debug,
url=url,
)
def call_online_source(self):
@ -274,7 +289,7 @@ class OnlineSource(ModelSQL, ModelView):
OSourc = Pool().get('investment.source')
result = OSourc.run_query_method(
self, self.isin, self.nsin,
self, self.isin, self.nsin, self.url,
self.symbol, debug=True)
if result is not None:
self.text = result.get('text', None)
@ -283,15 +298,24 @@ class OnlineSource(ModelSQL, ModelView):
self.fndrate = result.get('rate', None)
self.fndident = result.get('code', None)
def get_url_with_parameter(self, isin=None, nsin=None, symbol=None):
def get_url_with_parameter(
self, isin=None, nsin=None, symbol=None, url=None):
""" generate url
"""
if self.url:
return Template(self.url).substitute({
'isin': isin if isin is not None else '',
'nsin': nsin if nsin is not None else '',
'symbol': symbol if symbol is not None else '',
})
if self.fixed_url is True:
if url is None:
raise UserError(gettext(
'investment.msg_missing_url',
oname=self.rec_name,
))
return url
else :
if self.url:
return Template(self.url).substitute({
'isin': isin if isin is not None else '',
'nsin': nsin if nsin is not None else '',
'symbol': symbol if symbol is not None else '',
})
@classmethod
def update_rate(cls, asset):
@ -310,6 +334,7 @@ class OnlineSource(ModelSQL, ModelView):
isin=asset.isin,
nsin=asset.wkn,
symbol=asset.secsymb,
url=asset.updturl,
)
if len(updtsource.rgxident or '') > 0:
@ -387,7 +412,7 @@ class OnlineSource(ModelSQL, ModelView):
@classmethod
def read_from_website(
cls, updtsource, isin=None, nsin=None,
symbol=None, debug=False):
symbol=None, url=None, debug=False):
""" read from url, extract values
"""
result = {}
@ -401,6 +426,7 @@ class OnlineSource(ModelSQL, ModelView):
isin=isin,
nsin=nsin,
symbol=symbol,
url=url,
),
allow_redirects=True,
timeout=5.0)