asset/onlinesource: add fixed url,
pre defned online sources: add FAZ.net
This commit is contained in:
parent
edfa0424e5
commit
82f9d3a792
8 changed files with 120 additions and 13 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue