diff --git a/README.rst b/README.rst
index db3f6ab..1f48f27 100644
--- a/README.rst
+++ b/README.rst
@@ -9,7 +9,7 @@ pip install mds-investment
Requires
========
-- Tryton 7.0
+- Tryton 6.8
How to
======
@@ -22,6 +22,6 @@ You can define the course sources yourself.
Changes
=======
-*7.0.0 - 01.12.2023*
+*6.8.24 - 07.06.2023*
-- compatibility to Tryton 7.0
+- portet to Tryton 6.8
diff --git a/asset.py b/asset.py
index 578de36..d599d7b 100644
--- a/asset.py
+++ b/asset.py
@@ -15,7 +15,6 @@ from sql.functions import CurrentDate, CurrentTimestamp, Round, Extract
from sql.conditionals import Case, Coalesce, NullIf
from sql import Literal
from .diagram import Concat2
-from .const import DEF_NONE
digits_percent = 2
@@ -32,7 +31,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
name = fields.Function(fields.Char(
string='Name', readonly=True),
- 'get_name_symbol', searcher='search_rec_name')
+ 'get_name_symbol', searcher='search_rec_name')
company = fields.Many2One(
string='Company', model_name='company.company',
required=True, ondelete="RESTRICT")
@@ -46,9 +45,12 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
uom = fields.Many2One(
string='UOM', required=True, model_name='product.uom',
ondelete='RESTRICT',
- states={'readonly': ~Bool(Eval('product'))},
- domain=[('category', '=', Eval('product_uom'))],
- depends=['product_uom', 'product'])
+ states={
+ 'readonly': ~Bool(Eval('product')),
+ },
+ domain=[
+ ('category', '=', Eval('product_uom')),
+ ], depends=['product_uom', 'product'])
symbol = fields.Function(fields.Char(
string='UOM', readonly=True), 'get_name_symbol',
searcher='search_uom_symbol')
@@ -71,7 +73,9 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
model_name='currency.currency', ondelete='RESTRICT')
currency_digits = fields.Integer(
string='Digits', required=True,
- domain=[('currency_digits', '>=', 0), ('currency_digits', '<=', 6)])
+ domain=[
+ ('currency_digits', '>=', 0),
+ ('currency_digits', '<=', 6)])
wkn = fields.Function(fields.Char(
string='NSIN', readonly=True,
@@ -96,8 +100,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
string='URL',
help='URL for data retrieval.',
states={
- 'invisible': ~Eval('updturl_enable', False),
- 'required': Eval('updturl_enable', False),
+ 'invisible': Eval('updturl_enable', False) == False,
+ 'required': Eval('updturl_enable', False) == True,
}, depends=['updturl_enable'])
updturl_enable = fields.Function(fields.Boolean(
string='URL required', readonly=True,
@@ -107,8 +111,9 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
string='Select days', required=True, selection=sel_updtdays)
updttime = fields.Time(
string='Time',
- states={'readonly': ~Bool(Eval('updtsources'))},
- depends=['updtsources'])
+ states={
+ 'readonly': ~Bool(Eval('updtsources')),
+ }, depends=['updtsources'])
nextupdate = fields.Function(fields.DateTime(
string='Next Update', readonly=True),
'get_nextupdates', searcher='search_nextupdate')
@@ -186,7 +191,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select(
tab_asset.id,
tab_asset.updtsource,
- where=tab_asset.updtsource != DEF_NONE,
+ where=tab_asset.updtsource != None,
)
cursor.execute(*query)
records = cursor.fetchall()
@@ -195,7 +200,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
'source': x[1],
} for x in records]
- if to_create:
+ if len(to_create) > 0:
AssetSourceRel.create(to_create)
asset_table.drop_column('updtsource')
@@ -256,7 +261,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
def on_change_updtsources(self):
""" clear time-fields
"""
- if not self.updtsources:
+ if len(self.updtsources) == 0:
self.updttime = None
else:
self.updttime = time(11, 30)
@@ -325,24 +330,23 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
"""
cursor = Transaction().connection.cursor()
+ (query, tab_asset) = cls.get_name_symbol_sql()
+ query.where = tab_asset.id.in_([x.id for x in assets])
+
+ cursor.execute(*query)
+ records = cursor.fetchall()
result = {x: {y.id: None for y in assets} for x in names}
- (query, tab_asset) = cls.get_name_symbol_sql()
- if assets:
- query.where = tab_asset.id.in_([x.id for x in assets])
- cursor.execute(*query)
- records = cursor.fetchall()
+ for record in records:
+ values = {
+ 'name': record[1],
+ 'product_uom': record[2],
+ 'symbol': record[3],
+ 'asset_symbol': record[0],
+ }
- for record in records:
- values = {
- 'name': record[1],
- 'product_uom': record[2],
- 'symbol': record[3],
- 'asset_symbol': record[0],
- }
-
- for name in names:
- result[name][record[0]] = values[name]
+ for name in names:
+ result[name][record[0]] = values[name]
return result
@classmethod
@@ -380,32 +384,32 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
def get_rate_data(cls, assets, names):
""" get date and rate of asset
"""
+ Asset2 = Pool().get('investment.asset')
+
cursor = Transaction().connection.cursor()
+ (query, tab_asset) = cls.get_rate_data_sql()
+ query.where = tab_asset.id.in_([x.id for x in assets])
+
+ cursor.execute(*query)
+ records = cursor.fetchall()
result = {x: {y.id: None for y in assets} for x in names}
- if assets:
- (query, tab_asset) = cls.get_rate_data_sql()
- query.where = tab_asset.id.in_([x.id for x in assets])
- curr_digits = {x.id: x.currency_digits for x in assets}
+ for record in records:
+ (id1, rate1, date1, id_rate) = record
- cursor.execute(*query)
- records = cursor.fetchall()
+ asset = Asset2(id1)
+ exp = Decimal(Decimal(1) / 10 ** (asset.currency_digits or 4))
- for record in records:
- (id1, rate1, date1, id_rate) = record
+ values = {
+ 'rate': record[1].quantize(exp),
+ 'date': record[2],
+ 'change_symbol': id_rate,
+ }
- curr_dig = curr_digits.get(id1, 4)
- exp = Decimal(Decimal(1) / 10 ** curr_dig)
+ for name in names:
+ result[name][record[0]] = values[name]
- values = {
- 'rate': record[1].quantize(exp),
- 'date': record[2],
- 'change_symbol': id_rate,
- }
-
- for name in names:
- result[name][record[0]] = values[name]
return result
@classmethod
@@ -417,7 +421,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_query.select(
tab_query.id,
- where=Operator(tab_query.date, clause[2]))
+ where=Operator(tab_query.date, clause[2]),
+ )
return [('id', 'in', query)]
@classmethod
@@ -429,7 +434,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_query.select(
tab_query.id,
- where=Operator(tab_query.rate, clause[2]))
+ where=Operator(tab_query.rate, clause[2]),
+ )
return [('id', 'in', query)]
@staticmethod
@@ -441,7 +447,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_query.select(
tab_query.date,
- where=tab_query.id == table.id)
+ where=tab_query.id == table.id,
+ )
return [query]
@staticmethod
@@ -453,7 +460,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_query.select(
tab_query.rate,
- where=tab_query.id == table.id)
+ where=tab_query.id == table.id,
+ )
return [query]
@classmethod
@@ -464,6 +472,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
"""
pool = Pool()
Rate = pool.get('investment.rate')
+ Asset2 = pool.get('investment.asset')
+ tab_asset = Asset2.__table__()
tab_rate1 = Rate.__table__()
tab_rate2 = Rate.__table__()
context = Transaction().context
@@ -471,15 +481,19 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query_date = context.get('qdate', CurrentDate())
where_asset = tab_rate1.date <= query_date
if isinstance(asset_ids, list):
- where_asset &= tab_rate1.asset.in_(asset_ids)
+ where_asset &= tab_asset.id.in_(asset_ids)
- tab_today = tab_rate1.select(
- tab_rate1.asset.as_('id'),
+ tab_today = tab_asset.join(
+ tab_rate1,
+ condition=tab_asset.id == tab_rate1.asset,
+ ).select(
+ tab_asset.id,
tab_rate1.date,
tab_rate1.rate,
- distinct_on=[tab_rate1.asset],
- order_by=[tab_rate1.asset, tab_rate1.date.desc],
- where=where_asset)
+ distinct_on=[tab_asset.id],
+ order_by=[tab_asset.id, tab_rate1.date.desc],
+ where=where_asset,
+ )
days_diff = days + 5
query = tab_today.join(
@@ -495,7 +509,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
(tab_today.rate * 100.0 / NullIf(tab_rate2.rate, 0.00) -
100.0).as_('percent'),
distinct_on=[tab_today.id],
- order_by=[tab_today.id, tab_rate2.date.desc])
+ order_by=[tab_today.id, tab_rate2.date.desc]
+ )
return query
@staticmethod
@@ -508,7 +523,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select(
tab_asset.percent,
- where=tab_asset.id == table.id)
+ where=tab_asset.id == table.id,
+ )
return [query]
@staticmethod
@@ -521,7 +537,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select(
tab_asset.percent,
- where=tab_asset.id == table.id)
+ where=tab_asset.id == table.id,
+ )
return [query]
@staticmethod
@@ -534,7 +551,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select(
tab_asset.percent,
- where=tab_asset.id == table.id)
+ where=tab_asset.id == table.id,
+ )
return [query]
@staticmethod
@@ -547,7 +565,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select(
tab_asset.percent,
- where=tab_asset.id == table.id)
+ where=tab_asset.id == table.id,
+ )
return [query]
@staticmethod
@@ -560,7 +579,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select(
tab_asset.percent,
- where=tab_asset.id == table.id)
+ where=tab_asset.id == table.id,
+ )
return [query]
@classmethod
@@ -592,22 +612,22 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
exp = Decimal(Decimal(1) / 10 ** digits_percent)
asset_id_lst = [x.id for x in assets]
- if asset_id_lst and names:
- for x in names:
- tab_percent = cls.get_percentage_sql(
- days={
- 'change_day1': 0,
- 'change_month1': 30,
- 'change_month3': 90,
- 'change_month6': 180,
- 'change_month12': 365,
- }[x],
- asset_ids=asset_id_lst)
- cursor.execute(*tab_percent)
- records = cursor.fetchall()
+ for x in names:
+ tab_percent = cls.get_percentage_sql(
+ days={
+ 'change_day1': 0,
+ 'change_month1': 30,
+ 'change_month3': 90,
+ 'change_month6': 180,
+ 'change_month12': 365,
+ }[x],
+ asset_ids=asset_id_lst,
+ )
+ cursor.execute(*tab_percent)
+ records = cursor.fetchall()
- for record in records:
- result[x][record[0]] = record[3].quantize(exp) \
+ for record in records:
+ result[x][record[0]] = record[3].quantize(exp) \
if record[3] is not None else None
return result
@@ -642,7 +662,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
tab_asset.updtdays,
tab_asset.updttime,
distinct_on=[tab_asset.id],
- order_by=[tab_asset.id, tab_rate.date.desc])
+ order_by=[tab_asset.id, tab_rate.date.desc],
+ )
query = tab_date.select(
tab_date.id,
@@ -654,7 +675,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
(Extract('dow', tab_date.date) == 6),
tab_date.date + Literal(2)),
else_=tab_date.date,
- ) + tab_date.updttime).as_('updttime'))
+ ) + tab_date.updttime).as_('updttime'),
+ )
return query
@classmethod
@@ -668,7 +690,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_updt.select(
tab_updt.id,
tab_updt.updttime,
- where=tab_updt.id.in_([x.id for x in assets]))
+ where=tab_updt.id.in_([x.id for x in assets]),
+ )
cursor.execute(*query)
records = cursor.fetchall()
@@ -692,7 +715,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_updt.select(
tab_updt.id,
- where=Operator(tab_updt.updttime, clause[2]))
+ where=Operator(tab_updt.updttime, clause[2]),
+ )
return [('id', 'in', query)]
@classmethod
@@ -729,7 +753,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
tab_asset.id,
tab_wkn.code.as_('wkn'),
tab_secsymb.code.as_('secsymb'),
- tab_isin.code.as_('isin'))
+ tab_isin.code.as_('isin'),
+ )
return query
@staticmethod
@@ -753,7 +778,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
condition=tab_templ.id == tab_prod.template
).select(
tab_templ.name,
- where=tab_asset.id == table.id)
+ where=tab_asset.id == table.id
+ )
return [query]
@staticmethod
@@ -766,7 +792,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_ids.select(
getattr(tab_ids, 'wkn'),
- where=tab_ids.id == table.id)
+ where=tab_ids.id == table.id,
+ )
return [query]
@staticmethod
@@ -779,7 +806,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_ids.select(
getattr(tab_ids, 'isin'),
- where=tab_ids.id == table.id)
+ where=tab_ids.id == table.id,
+ )
return [query]
@staticmethod
@@ -792,7 +820,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_ids.select(
getattr(tab_ids, 'secsymb'),
- where=tab_ids.id == table.id)
+ where=tab_ids.id == table.id,
+ )
return [query]
@classmethod
@@ -812,7 +841,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
).select(
tab_asset.id,
where=Operator(field_qu, clause[2]) &
- (field_qu != DEF_NONE))
+ (field_qu != None),
+ )
return [('id', 'in', query)]
@@ -826,19 +856,20 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
cursor = Transaction().connection.cursor()
result = {x: {y.id: None for y in assets} for x in names}
- if assets:
- query = cls.get_identifier_sql(tab_asset)
- query.where = tab_asset.id.in_([x.id for x in assets])
- cursor.execute(*query)
- l1 = cursor.fetchall()
+ query = cls.get_identifier_sql(tab_asset)
+ query.where = tab_asset.id.in_([x.id for x in assets])
- for x in l1:
- (id1, wkn, secsymb, isin) = x
- r1 = {'wkn': wkn, 'secsymb': secsymb, 'isin': isin}
+ cursor.execute(*query)
+ l1 = cursor.fetchall()
+
+ for x in l1:
+ (id1, wkn, secsymb, isin) = x
+ r1 = {'wkn': wkn, 'secsymb': secsymb, 'isin': isin}
+
+ for n in names:
+ result[n][id1] = r1[n]
- for n in names:
- result[n][id1] = r1[n]
return result
def get_rec_name(self, name):
@@ -885,7 +916,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
if OnlineSource.update_rate(asset):
to_run_activities.append(asset)
- if to_run_activities:
+ if len(to_run_activities) > 0:
cls.after_update_actions(to_run_activities)
# end Asset
diff --git a/const.py b/const.py
deleted file mode 100644
index a01e781..0000000
--- a/const.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- coding: utf-8 -*-
-# This file is part of the cashbook-module from m-ds.de for Tryton.
-# The COPYRIGHT file at the top level of this repository contains the
-# full copyright notices and license terms.
-
-
-DEF_TRUE = True
-DEF_NONE = None
diff --git a/diagram.py b/diagram.py
index 1d654e9..514a2ad 100644
--- a/diagram.py
+++ b/diagram.py
@@ -60,16 +60,16 @@ class GraphDef(metaclass=PoolMeta):
return None
if self.scaling == 'alldata':
- query = [('asset', '=', self.asset.id)]
+ query = [('asset.id', '=', self.asset.id)]
elif self.scaling == 'view':
query = [
- ('asset', '=', self.asset.id),
+ ('asset.id', '=', self.asset.id),
('date', '>=', self.chart.used_start_date()),
('date', '<=', self.chart.used_end_date()),
]
elif self.scaling == 'six':
query = [
- ('asset', '=', self.asset.id),
+ ('asset.id', '=', self.asset.id),
('date', '>=', self.chart.used_start_date() -
timedelta(days=180)),
('date', '<=', self.chart.used_end_date()),
@@ -95,7 +95,7 @@ class ChartPoint(metaclass=PoolMeta):
"""
Rate = Pool().get('investment.rate')
- if not keyname:
+ if keyname is None:
return None
# check if query is for us
@@ -104,12 +104,12 @@ class ChartPoint(metaclass=PoolMeta):
before = Rate.search([
('date', '<', query_date),
- ('asset', '=', asset_id),
+ ('asset.id', '=', asset_id),
], limit=1, order=[('date', 'DESC')])
after = Rate.search([
('date', '>', query_date),
- ('asset', '=', asset_id),
+ ('asset.id', '=', asset_id),
], limit=1, order=[('date', 'ASC')])
if (len(before) == 1) and (len(after) == 1):
diff --git a/import_wiz.py b/import_wiz.py
index 5a4d097..72e7d4e 100644
--- a/import_wiz.py
+++ b/import_wiz.py
@@ -84,14 +84,14 @@ class ImportWizard(Wizard):
pool = Pool()
ImportWiz = pool.get('investment.imp_wiz', type='wizard')
- if self.start.file_:
+ if self.start.file_ is not None:
(lines, max_date, min_date) = ImportWiz.read_csv_file(
- self.start.file_.decode('utf8'),
- dec_divider=self.start.dec_divider,
- date_fmt=self.start.date_fmt,
- delimiter=self.start.field_delimiter)
+ self.start.file_.decode('utf8'),
+ dec_divider=self.start.dec_divider,
+ date_fmt=self.start.date_fmt,
+ delimiter=self.start.field_delimiter)
- if lines:
+ if len(lines) > 0:
ImportWiz.upload_rates(
self.start.asset,
lines, min_date, max_date)
@@ -173,8 +173,7 @@ class ImportWizard(Wizard):
datefmt='dd%sdd' % dec_divider,
colnr='2'))
- if isinstance(date_val, date) and isinstance(
- rate_val, Decimal):
+ if isinstance(date_val, date) and isinstance(rate_val, Decimal):
result.append({'date': date_val, 'rate': rate_val})
# date range
diff --git a/locale/de.po b/locale/de.po
index 2e027be..5d55abe 100644
--- a/locale/de.po
+++ b/locale/de.po
@@ -50,10 +50,6 @@ msgctxt "model:ir.message,text:msg_missing_url"
msgid "URL for the online source '%(oname)s' is missing."
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 #
diff --git a/locale/en.po b/locale/en.po
index 7d76175..7e0923e 100644
--- a/locale/en.po
+++ b/locale/en.po
@@ -38,10 +38,6 @@ msgctxt "model:ir.message,text:msg_missing_url"
msgid "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"
msgid "Investment"
msgstr "Investment"
@@ -298,18 +294,6 @@ msgctxt "selection:investment.asset,updtdays:"
msgid "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:"
msgid "Asset Source Relation"
msgstr "Asset Source Relation"
diff --git a/message.xml b/message.xml
index 2d681ef..2ef9571 100644
--- a/message.xml
+++ b/message.xml
@@ -23,9 +23,6 @@ full copyright notices and license terms. -->
URL for the online source '%(oname)s' is missing.
-
- Error in regex code of field '%(fname)s': %(errmsg)s [%(code)s]
-
diff --git a/onlinesource.py b/onlinesource.py
index abda8b4..c881aa5 100644
--- a/onlinesource.py
+++ b/onlinesource.py
@@ -63,14 +63,16 @@ class OnlineSource(ModelSQL, ModelView):
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,
+ 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.',
- states={'invisible': STATES_WEB['invisible']},
- depends=DEPENDS_WEB)
+ states={
+ 'invisible': STATES_WEB['invisible'],
+ }, depends=DEPENDS_WEB)
rgxdate = fields.Char(
string='Date',
help='Regex code to find the date in the downloaded HTML file.',
@@ -84,14 +86,14 @@ class OnlineSource(ModelSQL, ModelView):
states=STATES_WEB, depends=DEPENDS_WEB)
rgxdecimal = fields.Selection(
string='Decimal Separator',
- help='Decimal separator for converting the market ' +
- 'value into a number.',
+ help='Decimal separator for converting the market value into a number.',
selection=sel_rgxdecimal, states=STATES_WEB, depends=DEPENDS_WEB)
rgxident = fields.Char(
string='Identifier',
help='Regex code to find the identifier in the downloaded HTML file.',
- states={'invisible': STATES_WEB['invisible']},
- depends=DEPENDS_WEB)
+ states={
+ 'invisible': STATES_WEB['invisible'],
+ }, depends=DEPENDS_WEB)
rgxidtype = fields.Selection(
string='ID-Type', selection=sel_rgxidtype,
help='Type of identifier used to validate the result.',
@@ -240,13 +242,16 @@ class OnlineSource(ModelSQL, ModelView):
isin=self.isin,
nsin=self.nsin,
symbol=self.symbol,
- url=self.url)
+ url=self.url,
+ )
@classmethod
def get_query_methods(cls):
""" get list of query-methods
"""
- return [('web', gettext('investment.msg_querytype_web'))]
+ return [
+ ('web', gettext('investment.msg_querytype_web')),
+ ]
@classmethod
def set_test_value(cls, record, name, value):
@@ -254,15 +259,6 @@ class OnlineSource(ModelSQL, ModelView):
"""
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
def run_query_method(cls, osource, isin, nsin, symbol, url, debug=False):
""" run selected query to retrive data
@@ -283,7 +279,8 @@ class OnlineSource(ModelSQL, ModelView):
nsin=nsin,
symbol=symbol,
debug=debug,
- url=url)
+ url=url,
+ )
def call_online_source(self):
""" use updated values to call online-source,
@@ -294,7 +291,7 @@ class OnlineSource(ModelSQL, ModelView):
result = OSourc.run_query_method(
self, self.isin, self.nsin, self.url,
self.symbol, debug=True)
- if result:
+ if result is not None:
self.text = result.get('text', None)
self.http_state = result.get('http_state', None)
self.fnddate = result.get('date', None)
@@ -306,17 +303,19 @@ class OnlineSource(ModelSQL, ModelView):
""" generate url
"""
if self.fixed_url is True:
- if not url:
+ if url is None:
raise UserError(gettext(
'investment.msg_missing_url',
- oname=self.rec_name))
+ oname=self.rec_name,
+ ))
return 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 ''})
+ 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):
@@ -335,7 +334,8 @@ class OnlineSource(ModelSQL, ModelView):
isin=asset.isin,
nsin=asset.wkn,
symbol=asset.secsymb,
- url=asset.updturl)
+ url=asset.updturl,
+ )
if len(updtsource.rgxident or '') > 0:
# check result - same code?
@@ -352,13 +352,15 @@ class OnlineSource(ModelSQL, ModelView):
'update_rate: got wrong code ' +
'"%(wrong)s" - expected "%(exp)s"' % {
'exp': asset_code,
- 'wrong': code})
+ 'wrong': code,
+ })
continue
to_create = {
'date': rate_data.get('date', None),
'rate': rate_data.get('rate', None),
- 'asset': asset.id}
+ 'asset': asset.id,
+ }
if (to_create['date'] is not None) and \
(to_create['rate'] is not None):
# check if exists
@@ -377,22 +379,13 @@ class OnlineSource(ModelSQL, ModelView):
def get_regex_result(self, html_text, field_name):
""" run regex on html-text, convert result
"""
- OSource = Pool().get('investment.source')
-
rgxcode = getattr(self, field_name) or ''
if len(rgxcode) == 0:
return None
- try:
- search_result = re.compile(rgxcode).search(html_text)
- if search_result is 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))
+ search_result = re.compile(rgxcode).search(html_text)
+ if search_result is None:
+ return None
try:
result = search_result.group(1)
@@ -433,7 +426,8 @@ class OnlineSource(ModelSQL, ModelView):
isin=isin,
nsin=nsin,
symbol=symbol,
- url=url),
+ url=url,
+ ),
allow_redirects=True,
timeout=5.0)
@@ -442,7 +436,7 @@ class OnlineSource(ModelSQL, ModelView):
'msg': res1.reason,
}
- if res1.status_code in [200, 204, 410]:
+ if res1.status_code in [200, 204]:
html = res1.text
# remove html-tags
diff --git a/rate.py b/rate.py
index 6379e6b..eef697c 100644
--- a/rate.py
+++ b/rate.py
@@ -53,13 +53,6 @@ class Rate(SymbolMixin, ModelSQL, ModelView):
Index(
t,
(t.rate, Index.Range())),
- Index(
- t,
- (t.asset, Index.Equality())),
- Index(
- t,
- (t.asset, Index.Equality()),
- (t.date, Index.Range(order='DESC'))),
})
@classmethod
diff --git a/setup.py b/setup.py
index 29f2a96..58979c0 100644
--- a/setup.py
+++ b/setup.py
@@ -39,8 +39,8 @@ with open(path.join(here, 'versiondep.txt'), encoding='utf-8') as f:
modversion[l2[0]] = {'min': l2[1], 'max': l2[2], 'prefix': l2[3]}
# tryton-version
-major_version = 7
-minor_version = 0
+major_version = 6
+minor_version = 8
requires = ['requests>=2.26', 'html2text']
for dep in info.get('depends', []):
diff --git a/sources_def.xml b/sources_def.xml
index ff5959a..1f49541 100644
--- a/sources_def.xml
+++ b/sources_def.xml
@@ -71,9 +71,9 @@ full copyright notices and license terms. -->
www.sbroker.de
https://www.sbroker.de/sbl/mdaten_analyse/dksuche_a?SEARCH_VALUE=${isin}
- \nDatum\s*(?:\/ Uhrzeit)*: (\d+\.\d+\.\d+)\s*(?:\/ \d+:\d+)*\s*\n
+ \nDatum / Uhrzeit: (\d+\.\d+\.\d+) / \d+:\d+\s+\n
%d.%m.%y
- (?:Kurs aktuell|Rucknahmepreis)\s+[()\w\./\[\]!]+\s+(\d+,\d+)\s+(EUR|€)
+ Kurs aktuell .* (\d+,\d+)\s+EUR.*\n
,
\nWKN / ISIN: [A-Z,0-9]+ / ([A-Z,0-9]+)\s+\n
isin
diff --git a/tests/source.py b/tests/source.py
index 43ac22b..f784e4c 100644
--- a/tests/source.py
+++ b/tests/source.py
@@ -6,7 +6,6 @@
from trytond.tests.test_tryton import with_transaction
from trytond.pool import Pool
from trytond.transaction import Transaction
-from trytond.exceptions import UserError
from decimal import Decimal
from datetime import time, date, datetime
from unittest.mock import MagicMock
@@ -132,54 +131,5 @@ High 34,87 EUR
'rgxdate'
), 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
diff --git a/tryton.cfg b/tryton.cfg
index 39f64d0..4650f07 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=7.0.0
+version=6.8.24
depends:
ir
res
@@ -21,3 +21,4 @@ xml:
import_wiz.xml
menu.xml
cron.xml
+
diff --git a/update_wiz.py b/update_wiz.py
index 50a36a3..64f9359 100644
--- a/update_wiz.py
+++ b/update_wiz.py
@@ -29,7 +29,7 @@ class UpdateSoureWizard(Wizard):
if OnlineSource.update_rate(asset):
to_run_activities.append(asset)
- if to_run_activities:
+ if len(to_run_activities) > 0:
Asset.after_update_actions(to_run_activities)
return 'end'
diff --git a/view/asset_list.xml b/view/asset_list.xml
index 7837d85..daee4c5 100644
--- a/view/asset_list.xml
+++ b/view/asset_list.xml
@@ -4,12 +4,12 @@ The COPYRIGHT file at the top level of this repository contains the
full copyright notices and license terms. -->
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+