Validación de acceso concurrente

Estoy trabajando sobre un modulo que hecha una programación de turnos para citas medicas, se ofrecen los turnos en venta, sucede que dos cajeras pueden tomar el mismo turno simultáneamente, y las 2 llegan a terminar la venta pero el turno queda con el nombre del ultimo paciente que realizo la compra. De que manera se puede controlar que el turno ya vendido a una persona, no pueda ser vendido a otra persona cuando la transacción se realice en simultaneo. Si alguien me da algún alcance estaré agradecido. O algun modulo del core donde se utilice esa validación.
Saludos

Puedes hacer un bloqueo a nivel de tabla para asegurar que no hay 2 usuarios/sesiones intentando acceder al mismo turno.

By default Tryton uses repeatable read transaction isolation.
Also in recent version, there is the Database.lock_id which allows to lock only an id instead of the all table.

Creo que el problema es como esta modelado los horarios y los pacientes que lo compran.
A mi modo de ver las 2 cajeras no estan asignando un paciente a un horario sino editando un campo del horario.

si existiera un modelo intermedio simplemente aplica un constraint e impediría que se repita el horario y a la última cajera le saldría mensaje de error e impediría asignar ese horario.

sería algo así:

HorarioPaciente ():
    __name__  =  'modulo.paciente.horario'
    paciente = fields.Many2One('modulo.paciente', 'Paciente')
    horario = fields.Many2One('modulo.horario', 'Horario')

    @classmethod
        def __setup__(cls):
            super(HorarioPaciente, cls).__setup__()
            table = cls.__table__()
            cls._sql_constraints += [
            ('unique_horario', Unique(table, table.horario),
                'El Horario debe ser unico')
            ]