optimize code

This commit is contained in:
Frederik Jaeckel 2024-01-21 19:37:48 +01:00
parent ab6ab32d0a
commit 4a3d996600
5 changed files with 55 additions and 94 deletions

View file

@ -32,7 +32,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
name = fields.Function(fields.Char( name = fields.Function(fields.Char(
string='Name', readonly=True), string='Name', readonly=True),
'get_name_symbol', searcher='search_rec_name') 'get_name_symbol', searcher='search_rec_name')
company = fields.Many2One( company = fields.Many2One(
string='Company', model_name='company.company', string='Company', model_name='company.company',
required=True, ondelete="RESTRICT") required=True, ondelete="RESTRICT")
@ -46,12 +46,9 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
uom = fields.Many2One( uom = fields.Many2One(
string='UOM', required=True, model_name='product.uom', string='UOM', required=True, model_name='product.uom',
ondelete='RESTRICT', ondelete='RESTRICT',
states={ states={'readonly': ~Bool(Eval('product'))},
'readonly': ~Bool(Eval('product')), domain=[('category', '=', Eval('product_uom'))],
}, depends=['product_uom', 'product'])
domain=[
('category', '=', Eval('product_uom')),
], depends=['product_uom', 'product'])
symbol = fields.Function(fields.Char( symbol = fields.Function(fields.Char(
string='UOM', readonly=True), 'get_name_symbol', string='UOM', readonly=True), 'get_name_symbol',
searcher='search_uom_symbol') searcher='search_uom_symbol')
@ -74,9 +71,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
model_name='currency.currency', ondelete='RESTRICT') model_name='currency.currency', ondelete='RESTRICT')
currency_digits = fields.Integer( currency_digits = fields.Integer(
string='Digits', required=True, string='Digits', required=True,
domain=[ domain=[('currency_digits', '>=', 0), ('currency_digits', '<=', 6)])
('currency_digits', '>=', 0),
('currency_digits', '<=', 6)])
wkn = fields.Function(fields.Char( wkn = fields.Function(fields.Char(
string='NSIN', readonly=True, string='NSIN', readonly=True,
@ -112,9 +107,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
string='Select days', required=True, selection=sel_updtdays) string='Select days', required=True, selection=sel_updtdays)
updttime = fields.Time( updttime = fields.Time(
string='Time', string='Time',
states={ states={'readonly': ~Bool(Eval('updtsources'))},
'readonly': ~Bool(Eval('updtsources')), depends=['updtsources'])
}, depends=['updtsources'])
nextupdate = fields.Function(fields.DateTime( nextupdate = fields.Function(fields.DateTime(
string='Next Update', readonly=True), string='Next Update', readonly=True),
'get_nextupdates', searcher='search_nextupdate') 'get_nextupdates', searcher='search_nextupdate')
@ -201,7 +195,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
'source': x[1], 'source': x[1],
} for x in records] } for x in records]
if len(to_create) > 0: if to_create:
AssetSourceRel.create(to_create) AssetSourceRel.create(to_create)
asset_table.drop_column('updtsource') asset_table.drop_column('updtsource')
@ -262,7 +256,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
def on_change_updtsources(self): def on_change_updtsources(self):
""" clear time-fields """ clear time-fields
""" """
if len(self.updtsources) == 0: if not self.updtsources:
self.updttime = None self.updttime = None
else: else:
self.updttime = time(11, 30) self.updttime = time(11, 30)
@ -423,8 +417,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_query.select( query = tab_query.select(
tab_query.id, tab_query.id,
where=Operator(tab_query.date, clause[2]), where=Operator(tab_query.date, clause[2]))
)
return [('id', 'in', query)] return [('id', 'in', query)]
@classmethod @classmethod
@ -436,8 +429,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_query.select( query = tab_query.select(
tab_query.id, tab_query.id,
where=Operator(tab_query.rate, clause[2]), where=Operator(tab_query.rate, clause[2]))
)
return [('id', 'in', query)] return [('id', 'in', query)]
@staticmethod @staticmethod
@ -449,8 +441,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_query.select( query = tab_query.select(
tab_query.date, tab_query.date,
where=tab_query.id == table.id, where=tab_query.id == table.id)
)
return [query] return [query]
@staticmethod @staticmethod
@ -462,8 +453,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_query.select( query = tab_query.select(
tab_query.rate, tab_query.rate,
where=tab_query.id == table.id, where=tab_query.id == table.id)
)
return [query] return [query]
@classmethod @classmethod
@ -489,8 +479,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
tab_rate1.rate, tab_rate1.rate,
distinct_on=[tab_rate1.asset], distinct_on=[tab_rate1.asset],
order_by=[tab_rate1.asset, tab_rate1.date.desc], order_by=[tab_rate1.asset, tab_rate1.date.desc],
where=where_asset, where=where_asset)
)
days_diff = days + 5 days_diff = days + 5
query = tab_today.join( query = tab_today.join(
@ -506,8 +495,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
(tab_today.rate * 100.0 / NullIf(tab_rate2.rate, 0.00) - (tab_today.rate * 100.0 / NullIf(tab_rate2.rate, 0.00) -
100.0).as_('percent'), 100.0).as_('percent'),
distinct_on=[tab_today.id], 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 return query
@staticmethod @staticmethod
@ -520,8 +508,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select( query = tab_asset.select(
tab_asset.percent, tab_asset.percent,
where=tab_asset.id == table.id, where=tab_asset.id == table.id)
)
return [query] return [query]
@staticmethod @staticmethod
@ -534,8 +521,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select( query = tab_asset.select(
tab_asset.percent, tab_asset.percent,
where=tab_asset.id == table.id, where=tab_asset.id == table.id)
)
return [query] return [query]
@staticmethod @staticmethod
@ -548,8 +534,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select( query = tab_asset.select(
tab_asset.percent, tab_asset.percent,
where=tab_asset.id == table.id, where=tab_asset.id == table.id)
)
return [query] return [query]
@staticmethod @staticmethod
@ -562,8 +547,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select( query = tab_asset.select(
tab_asset.percent, tab_asset.percent,
where=tab_asset.id == table.id, where=tab_asset.id == table.id)
)
return [query] return [query]
@staticmethod @staticmethod
@ -576,8 +560,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select( query = tab_asset.select(
tab_asset.percent, tab_asset.percent,
where=tab_asset.id == table.id, where=tab_asset.id == table.id)
)
return [query] return [query]
@classmethod @classmethod
@ -619,14 +602,13 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
'change_month6': 180, 'change_month6': 180,
'change_month12': 365, 'change_month12': 365,
}[x], }[x],
asset_ids=asset_id_lst, asset_ids=asset_id_lst)
)
cursor.execute(*tab_percent) cursor.execute(*tab_percent)
records = cursor.fetchall() records = cursor.fetchall()
for record in records: for record in records:
result[x][record[0]] = record[3].quantize(exp) \ result[x][record[0]] = record[3].quantize(exp) \
if record[3] is not None else None if record[3] is not None else None
return result return result
@classmethod @classmethod
@ -660,8 +642,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
tab_asset.updtdays, tab_asset.updtdays,
tab_asset.updttime, tab_asset.updttime,
distinct_on=[tab_asset.id], 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( query = tab_date.select(
tab_date.id, tab_date.id,
@ -673,8 +654,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
(Extract('dow', tab_date.date) == 6), (Extract('dow', tab_date.date) == 6),
tab_date.date + Literal(2)), tab_date.date + Literal(2)),
else_=tab_date.date, else_=tab_date.date,
) + tab_date.updttime).as_('updttime'), ) + tab_date.updttime).as_('updttime'))
)
return query return query
@classmethod @classmethod
@ -688,8 +668,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_updt.select( query = tab_updt.select(
tab_updt.id, tab_updt.id,
tab_updt.updttime, 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) cursor.execute(*query)
records = cursor.fetchall() records = cursor.fetchall()
@ -713,8 +692,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_updt.select( query = tab_updt.select(
tab_updt.id, tab_updt.id,
where=Operator(tab_updt.updttime, clause[2]), where=Operator(tab_updt.updttime, clause[2]))
)
return [('id', 'in', query)] return [('id', 'in', query)]
@classmethod @classmethod
@ -751,8 +729,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
tab_asset.id, tab_asset.id,
tab_wkn.code.as_('wkn'), tab_wkn.code.as_('wkn'),
tab_secsymb.code.as_('secsymb'), tab_secsymb.code.as_('secsymb'),
tab_isin.code.as_('isin'), tab_isin.code.as_('isin'))
)
return query return query
@staticmethod @staticmethod
@ -776,8 +753,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
condition=tab_templ.id == tab_prod.template condition=tab_templ.id == tab_prod.template
).select( ).select(
tab_templ.name, tab_templ.name,
where=tab_asset.id == table.id where=tab_asset.id == table.id)
)
return [query] return [query]
@staticmethod @staticmethod
@ -790,8 +766,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_ids.select( query = tab_ids.select(
getattr(tab_ids, 'wkn'), getattr(tab_ids, 'wkn'),
where=tab_ids.id == table.id, where=tab_ids.id == table.id)
)
return [query] return [query]
@staticmethod @staticmethod
@ -804,8 +779,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_ids.select( query = tab_ids.select(
getattr(tab_ids, 'isin'), getattr(tab_ids, 'isin'),
where=tab_ids.id == table.id, where=tab_ids.id == table.id)
)
return [query] return [query]
@staticmethod @staticmethod
@ -818,8 +792,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_ids.select( query = tab_ids.select(
getattr(tab_ids, 'secsymb'), getattr(tab_ids, 'secsymb'),
where=tab_ids.id == table.id, where=tab_ids.id == table.id)
)
return [query] return [query]
@classmethod @classmethod
@ -839,8 +812,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
).select( ).select(
tab_asset.id, tab_asset.id,
where=Operator(field_qu, clause[2]) & where=Operator(field_qu, clause[2]) &
(field_qu != DEF_NONE), (field_qu != DEF_NONE))
)
return [('id', 'in', query)] return [('id', 'in', query)]
@ -913,7 +885,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
if OnlineSource.update_rate(asset): if OnlineSource.update_rate(asset):
to_run_activities.append(asset) to_run_activities.append(asset)
if len(to_run_activities) > 0: if to_run_activities:
cls.after_update_actions(to_run_activities) cls.after_update_actions(to_run_activities)
# end Asset # end Asset

View file

@ -95,7 +95,7 @@ class ChartPoint(metaclass=PoolMeta):
""" """
Rate = Pool().get('investment.rate') Rate = Pool().get('investment.rate')
if keyname is None: if not keyname:
return None return None
# check if query is for us # check if query is for us

View file

@ -84,14 +84,14 @@ class ImportWizard(Wizard):
pool = Pool() pool = Pool()
ImportWiz = pool.get('investment.imp_wiz', type='wizard') ImportWiz = pool.get('investment.imp_wiz', type='wizard')
if self.start.file_ is not None: if self.start.file_:
(lines, max_date, min_date) = ImportWiz.read_csv_file( (lines, max_date, min_date) = ImportWiz.read_csv_file(
self.start.file_.decode('utf8'), self.start.file_.decode('utf8'),
dec_divider=self.start.dec_divider, dec_divider=self.start.dec_divider,
date_fmt=self.start.date_fmt, date_fmt=self.start.date_fmt,
delimiter=self.start.field_delimiter) delimiter=self.start.field_delimiter)
if len(lines) > 0: if lines:
ImportWiz.upload_rates( ImportWiz.upload_rates(
self.start.asset, self.start.asset,
lines, min_date, max_date) lines, min_date, max_date)

View file

@ -63,16 +63,14 @@ class OnlineSource(ModelSQL, ModelView):
url = fields.Char(string='URL', states=STATES_WEB, depends=DEPENDS_WEB) url = fields.Char(string='URL', states=STATES_WEB, depends=DEPENDS_WEB)
fixed_url = fields.Boolean( fixed_url = fields.Boolean(
string='Fixed URL', string='Fixed URL',
states={ states={'invisible': Eval('query_method', '') != 'web'},
'invisible': Eval('query_method', '') != 'web', depends=DEPENDS_WEB,
}, depends=DEPENDS_WEB,
help='URL must be defined at investment record.') help='URL must be defined at investment record.')
nohtml = fields.Boolean( nohtml = fields.Boolean(
string='Remove HTML', string='Remove HTML',
help='Removes HTML tags before the text is interpreted.', help='Removes HTML tags before the text is interpreted.',
states={ states={'invisible': STATES_WEB['invisible']},
'invisible': STATES_WEB['invisible'], depends=DEPENDS_WEB)
}, depends=DEPENDS_WEB)
rgxdate = fields.Char( rgxdate = fields.Char(
string='Date', string='Date',
help='Regex code to find the date in the downloaded HTML file.', help='Regex code to find the date in the downloaded HTML file.',
@ -92,9 +90,8 @@ class OnlineSource(ModelSQL, ModelView):
rgxident = fields.Char( rgxident = fields.Char(
string='Identifier', string='Identifier',
help='Regex code to find the identifier in the downloaded HTML file.', help='Regex code to find the identifier in the downloaded HTML file.',
states={ states={'invisible': STATES_WEB['invisible']},
'invisible': STATES_WEB['invisible'], depends=DEPENDS_WEB)
}, depends=DEPENDS_WEB)
rgxidtype = fields.Selection( rgxidtype = fields.Selection(
string='ID-Type', selection=sel_rgxidtype, string='ID-Type', selection=sel_rgxidtype,
help='Type of identifier used to validate the result.', help='Type of identifier used to validate the result.',
@ -243,16 +240,13 @@ class OnlineSource(ModelSQL, ModelView):
isin=self.isin, isin=self.isin,
nsin=self.nsin, nsin=self.nsin,
symbol=self.symbol, symbol=self.symbol,
url=self.url, url=self.url)
)
@classmethod @classmethod
def get_query_methods(cls): def get_query_methods(cls):
""" get list of query-methods """ get list of query-methods
""" """
return [ return [('web', gettext('investment.msg_querytype_web'))]
('web', gettext('investment.msg_querytype_web')),
]
@classmethod @classmethod
def set_test_value(cls, record, name, value): def set_test_value(cls, record, name, value):
@ -289,8 +283,7 @@ class OnlineSource(ModelSQL, ModelView):
nsin=nsin, nsin=nsin,
symbol=symbol, symbol=symbol,
debug=debug, debug=debug,
url=url, url=url)
)
def call_online_source(self): def call_online_source(self):
""" use updated values to call online-source, """ use updated values to call online-source,
@ -301,7 +294,7 @@ class OnlineSource(ModelSQL, ModelView):
result = OSourc.run_query_method( result = OSourc.run_query_method(
self, self.isin, self.nsin, self.url, self, self.isin, self.nsin, self.url,
self.symbol, debug=True) self.symbol, debug=True)
if result is not None: if result:
self.text = result.get('text', None) self.text = result.get('text', None)
self.http_state = result.get('http_state', None) self.http_state = result.get('http_state', None)
self.fnddate = result.get('date', None) self.fnddate = result.get('date', None)
@ -342,8 +335,7 @@ class OnlineSource(ModelSQL, ModelView):
isin=asset.isin, isin=asset.isin,
nsin=asset.wkn, nsin=asset.wkn,
symbol=asset.secsymb, symbol=asset.secsymb,
url=asset.updturl, url=asset.updturl)
)
if len(updtsource.rgxident or '') > 0: if len(updtsource.rgxident or '') > 0:
# check result - same code? # check result - same code?
@ -360,15 +352,13 @@ class OnlineSource(ModelSQL, ModelView):
'update_rate: got wrong code ' + 'update_rate: got wrong code ' +
'"%(wrong)s" - expected "%(exp)s"' % { '"%(wrong)s" - expected "%(exp)s"' % {
'exp': asset_code, 'exp': asset_code,
'wrong': code, 'wrong': code})
})
continue continue
to_create = { to_create = {
'date': rate_data.get('date', None), 'date': rate_data.get('date', None),
'rate': rate_data.get('rate', None), 'rate': rate_data.get('rate', None),
'asset': asset.id, 'asset': asset.id}
}
if (to_create['date'] is not None) and \ if (to_create['date'] is not None) and \
(to_create['rate'] is not None): (to_create['rate'] is not None):
# check if exists # check if exists
@ -443,8 +433,7 @@ class OnlineSource(ModelSQL, ModelView):
isin=isin, isin=isin,
nsin=nsin, nsin=nsin,
symbol=symbol, symbol=symbol,
url=url, url=url),
),
allow_redirects=True, allow_redirects=True,
timeout=5.0) timeout=5.0)

View file

@ -29,7 +29,7 @@ class UpdateSoureWizard(Wizard):
if OnlineSource.update_rate(asset): if OnlineSource.update_rate(asset):
to_run_activities.append(asset) to_run_activities.append(asset)
if len(to_run_activities) > 0: if to_run_activities:
Asset.after_update_actions(to_run_activities) Asset.after_update_actions(to_run_activities)
return 'end' return 'end'