changeset 8c9ccb68fdf9 in modules/party_relationship:default
details:
https://hg.tryton.org/modules/party_relationship?cmd=changeset&node=8c9ccb68fdf9
description:
Move distance definition into party module
issue10104
review343621004
diffstat:
__init__.py | 1 -
party.py | 58 ++++++++++------------------------------------------------
2 files changed, 10 insertions(+), 49 deletions(-)
diffs (103 lines):
diff -r b4b6d7123a56 -r 8c9ccb68fdf9 __init__.py
--- a/__init__.py Sat Feb 27 18:16:28 2021 +0100
+++ b/__init__.py Wed Mar 24 21:38:29 2021 +0100
@@ -10,5 +10,4 @@
party.Relation,
party.RelationAll,
party.Party,
- party.ContactMechanism,
module='party_relationship', type_='model')
diff -r b4b6d7123a56 -r 8c9ccb68fdf9 party.py
--- a/party.py Sat Feb 27 18:16:28 2021 +0100
+++ b/party.py Wed Mar 24 21:38:29 2021 +0100
@@ -3,7 +3,7 @@
import json
from functools import partial
-from sql import Union, As, Column, Null, Literal, With, Select
+from sql import Union, As, Column, Null, Literal, With
from sql.aggregate import Min
from trytond.config import config
@@ -223,12 +223,6 @@
__name__ = 'party.party'
relations = fields.One2Many('party.relation.all', 'from_', 'Relations')
- distance = fields.Function(fields.Integer('Distance'), 'get_distance')
-
- @classmethod
- def __setup__(cls):
- super().__setup__()
- cls._order.insert(0, ('distance', 'ASC NULLS LAST'))
@classmethod
def _distance_query(cls, usages=None, party=None, depth=None):
@@ -240,6 +234,9 @@
context = transaction.context
database = transaction.database
+ query = super()._distance_query(
+ usages=usages, party=party, depth=depth)
+
if usages is None:
usages = context.get('relation_usages', [])
if party is None:
@@ -248,7 +245,7 @@
depth = context.get('depth', default_depth)
if not party:
- return
+ return query
all_relations = RelationAll.__table__()
@@ -288,44 +285,9 @@
& (distance.distance < depth)))
distance.query.all_ = True
- return (distance
- .select(
- distance.to, Min(distance.distance).as_('distance'),
- group_by=[distance.to], with_=[distance])
- | Select([Literal(party).as_('to'), Literal(0).as_('distance')]))
-
- @classmethod
- def order_distance(cls, tables):
- party, _ = tables[None]
- key = 'distance'
- if key not in tables:
- query = cls._distance_query()
- if not query:
- return []
- join = party.join(query, type_='LEFT',
- condition=query.to == party.id)
- tables[key] = {
- None: (join.right, join.condition),
- }
- else:
- query, _ = tables[key][None]
- return [query.distance]
-
- @classmethod
- def get_distance(cls, parties, name):
- distances = {p.id: None for p in parties}
- query = cls._distance_query()
+ relation_distance = distance.select(
+ distance.to, Min(distance.distance).as_('distance'),
+ group_by=[distance.to], with_=[distance])
if query:
- cursor = Transaction().connection.cursor()
- cursor.execute(*query)
- distances.update(cursor)
- return distances
-
-
-class ContactMechanism(metaclass=PoolMeta):
- __name__ = 'party.contact_mechanism'
-
- @classmethod
- def __setup__(cls):
- super().__setup__()
- cls._order.insert(0, ('party.distance', 'ASC NULLS LAST'))
+ relation_distance |= query
+ return relation_distance