Hello,

I think I'm using the Model. __post_setup__ class not correctly, but how 
I'm using it is working in Tryton-3.6.5 but not in Tryton-4.0.0 and maybe 
there are other ways to do it.

What I'm trying to do, is to build an IOT-platform into Tryton where agents 
can connect to and update several values they allowed to change. To 
minimize database-queries and updating database-records or inserting new 
ones, I build a dict which lives in memory. The agents send the new values 
in and Tryton will update the values in the dict, and a cron-job will 
archive those values into the database at certain moments. The new values 
are also used to trigger events like sending mail, executing scripts etc.

To create the dict in memory I'm using the __post_setup__ class to populate 
the dict with the several values.

    @classmethod
    def __post_setup__(cls):
        super(Trigger, cls).__post_setup__()

        # get the triggers
        triggers = cls.search( [('id', '>', 0 )] )
        
        if triggers:
            # Build the datastructure in memory
            for trigger in cls.browse( triggers ):

                sensors = []
                on_activate = []
                on_deactivate = []
                
                # get the sensors and conditions
                for sensor in trigger.sensor:
                    if len(sensor.condition) > 2:
                        sensors.append({
                            "id"        : sensor.id,
                            "sensor"    : sensor.sensor.id,
                            "condition" : sensor.condition,
                            })
                                    
                # only add the trigger to the list when there are 
                # sensors and conditions
                if len(sensors):
                    MEM_TRIGGERS.append({
                        "id"         : trigger.id,
                        "name"       : trigger.name,
                        "sequence"   : trigger.sequence,
                        "min_delay"  : trigger.minimum_time_delay,
                        "min_active" : trigger.minimum_time_active,
                        "when"       : datetime.datetime.utcnow(),
                        "activated"  : trigger.activated,
                        "enabled"    : trigger.enabled,
                        "sensors"    : sensors
                    })

I have extended the ir.trigger with 
sensor = fields.One2Many('iot.triggersensors', 'trigger', 'Sensor') 

And the iot.triggersensors

class TriggerSensor(ModelSQL, ModelView):
    "TriggerSensor"
    __name__ = 'iot.triggersensors'

    name = fields.Char('Name')
    trigger = fields.Many2One('ir.trigger', 'Trigger', 
domain=[('on_sensor','=',True)], ondelete='CASCADE')
    condition = fields.Char('Condition')


This is working in Tryton version 3.65, but in 4.0.0 I get

  File "/home/ed/ERP/iot/trytond-4.0.0/trytond/pool.py", line 229, in setup
    cls.__post_setup__()
  File "/home/ed/ERP/iot/trytond-4.0.0/trytond/modules/iot/iot.py", line 
1173, in __post_setup__
    for sensor in trigger.sensor:
  File "/home/ed/ERP/iot/trytond-4.0.0/trytond/model/modelstorage.py", line 
1352, in __getattr__
    read_data = self.read(list(ids), ffields.keys())
  File "/home/ed/ERP/iot/trytond-4.0.0/trytond/model/modelsql.py", line 
744, in read
    getter_result = field.get(ids, cls, fname, values=result)
  File "/home/ed/ERP/iot/trytond-4.0.0/trytond/model/fields/one2many.py", 
line 86, in get
    field = Relation._fields[self.field]
AttributeError: type object 'iot.triggersensors' has no attribute '_fields'

So my question is, are there other methods to accomplish this (after the 
Tryton-server is started create a dict into memory)? or is this a bug in 
Tryton-4.0.0?



Regards,

Ed

-- 
You received this message because you are subscribed to the Google Groups 
"tryton-dev" group.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tryton-dev/fa7af54a-45a9-46d9-aad8-c0a9b3792e4c%40googlegroups.com.

Reply via email to