Files
enterprise-addons/ai/orm/field_vector.py
T

35 lines
1007 B
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
from odoo import fields
def pg_vector(size):
if not isinstance(size, int):
raise TypeError(f"vector size should be an int, got {size!r}")
if size > 0:
return "vector(%d)" % size
return "vector"
class Vector(fields.Field):
type = 'vector'
size = None
def _setup_attrs__(self, model_class, name: str) -> None: # noqa: PLW3201
super()._setup_attrs__(model_class, name)
assert self.size is None or isinstance(self.size, int), \
"Vector field %s with non-integer size %r" % (self, self.size)
@property
def _column_type(self):
return ('vector', pg_vector(self.size))
def convert_to_cache(self, value, record, validate=True):
if value is None or value is False:
return None
return str(value)
def convert_to_record(self, value, record):
return False if value is None else json.loads(value)