Sari la conținut
Odoo Meniu
  • Autentificare
  • Try it free
  • Aplicații
    Finanțe
    • Contabilitate
    • Facturare
    • Cheltuieli
    • Spreadsheet (BI)
    • Documente
    • Semn
    Vânzări
    • CRM
    • Vânzări
    • POS Shop
    • POS Restaurant
    • Abonamente
    • Închiriere
    Site-uri web
    • Constructor de site-uri
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Lanț Aprovizionare
    • Inventar
    • Producție
    • PLM
    • Achiziție
    • Maintenance
    • Calitate
    Resurse Umane
    • Angajați
    • Recrutare
    • Time Off
    • Evaluări
    • Referințe
    • Flotă
    Marketing
    • Social Marketing
    • Marketing prin email
    • SMS Marketing
    • Evenimente
    • Automatizare marketing
    • Sondaje
    Servicii
    • Proiect
    • Foi de pontaj
    • Servicii de teren
    • Centru de asistență
    • Planificare
    • Programări
    Productivitate
    • Discuss
    • Artificial Intelligence
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Aplicații Terțe Odoo Studio Platforma Odoo Cloud
  • Industrii
    Retail
    • Book Store
    • Magazin de îmbrăcăminte
    • Magazin de Mobilă
    • Magazin alimentar
    • Magazin de materiale de construcții
    • Magazin de jucării
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Distribuitor de băuturi
    • Hotel
    Proprietate imobiliara
    • Real Estate Agency
    • Firmă de Arhitectură
    • Construcție
    • Property Management
    • Grădinărit
    • Asociația Proprietarilor de Proprietăți
    Consultanta
    • Firma de Contabilitate
    • Partener Odoo
    • Agenție de marketing
    • Law firm
    • Atragere de talente
    • Audit & Certification
    Producție
    • Textil
    • Metal
    • Mobilier
    • Mâncare
    • Brewery
    • Cadouri corporate
    Health & Fitness
    • Club Sportiv
    • Magazin de ochelari
    • Centru de Fitness
    • Wellness Practitioners
    • Farmacie
    • Salon de coafură
    Trades
    • Handyman
    • IT Hardware and Support
    • Asigurare socială de stat
    • Cizmar
    • Servicii de curățenie
    • HVAC Services
    Altele
    • Organizație nonprofit
    • Agenție de Mediu
    • Închiriere panouri publicitare
    • Fotografie
    • Închiriere biciclete
    • Asigurare socială
    Browse all Industries
  • Comunitate
    Învăță
    • Tutorials
    • Documentație
    • Certificări
    • Instruire
    • Blog
    • Podcast
    Empower Education
    • Program Educațional
    • Scale Up! Business Game
    • Visit Odoo
    Obține Software-ul
    • Descărcare
    • Compară Edițiile
    • Lansări
    Colaborați
    • Github
    • Forum
    • Evenimente
    • Translations
    • Devino Partener
    • Services for Partners
    • Înregistrează-ți Firma de Contabilitate
    Obține Servicii
    • Găsește un Partener
    • Găsiți un contabil
    • Meet an advisor
    • Servicii de Implementare
    • Referințe ale clienților
    • Suport
    • Actualizări
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Obține un demo
  • Prețuri
  • Ajutor
Trebuie să fiți înregistrat pentru a interacționa cu comunitatea.
Toate postările Oameni Insigne
Etichete (Vezi tot)
odoo accounting v14 pos v15
Despre acest forum
Trebuie să fiți înregistrat pentru a interacționa cu comunitatea.
Toate postările Oameni Insigne
Etichete (Vezi tot)
odoo accounting v14 pos v15
Despre acest forum
Suport

How to get a new cursor on new api on Thread

Abonare

Primiți o notificare când există activitate la acestă postare

Această întrebare a fost marcată
environmentapi8.0
2 Răspunsuri
33705 Vizualizări
Imagine profil
Max

Found from here - http://odoo-new-api-guide-line.readthedocs.org/en/latest/conventions.html:

Using Thread

When using thread you have to create you own cursor and initiate a new environment for each thread. committing is done by committing the cursor:

with Environment.manage(): # class function

               env = Environment(cr, uid, context)

But how to use it?

We have old api code:

 

        with Environment.manage():

            cr = self.pool.cursor()

            dialer = self.pool['asterisk.dialer'].browse(cr, uid, ids, context=context)[0]

 

It works.

Now how to do the same with new api?

 

        with Environment.manage():

            dialer = self.env['asterisk.dialer'].browse([dialer_id])

 

Gives the following error: OperationalError: Unable to use a closed cursor.

 

Tried this:

def run_dialer(self, dialer_id):

        with Environment.manage():

            cr, uid, context = self.env.args

            env = Environment(cr, uid, context)

            dialer = env['asterisk.dialer'].browse([dialer_id])

            domain = [('phone', '!=', None)] + [eval(dialer.dialer_domain)[0]]

            contacts = env[dialer.dialer_model].search(domain)

 

The same:

Exception in thread Thread-7:

Traceback (most recent call last):

  File "/usr/lib/python2.7/threading.py", line 808, in __bootstrap_inner

    self.run()

  File "/usr/lib/python2.7/threading.py", line 761, in run

    self.__target(*self.__args, **self.__kwargs)

  File "/home/max/tmp-work/odoo/odoo.my/openerp/api.py", line 235, in wrapper

    return new_api(self, *args, **kwargs)

  File "/home/max/tmp-work/odoo/myaddons/asterisk_dialer/models/dialer.py", line 98, in run_dialer

    contacts = env[dialer.dialer_model].search(domain)

  File "/home/max/tmp-work/odoo/odoo.my/openerp/api.py", line 235, in wrapper

    return new_api(self, *args, **kwargs)

  File "/home/max/tmp-work/odoo/odoo.my/openerp/api.py", line 464, in new_api

    result = method(self._model, cr, uid, *args, **kwargs)

  File "/home/max/tmp-work/odoo/odoo.my/openerp/models.py", line 1679, in search

    return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count)

  File "/home/max/tmp-work/odoo/odoo.my/openerp/api.py", line 237, in wrapper

    return old_api(self, *args, **kwargs)

  File "/home/max/tmp-work/odoo/odoo.my/openerp/addons/base/res/res_partner.py", line 643, in _search

    count=count, access_rights_uid=access_rights_uid)

  File "/home/max/tmp-work/odoo/odoo.my/openerp/api.py", line 237, in wrapper

    return old_api(self, *args, **kwargs)

  File "/home/max/tmp-work/odoo/odoo.my/openerp/models.py", line 4543, in _search

    res = cr.fetchall()

  File "/home/max/tmp-work/odoo/odoo.my/openerp/sql_db.py", line 157, in wrapper

    raise psycopg2.OperationalError(msg)

1
Imagine profil
Abandonează
Imagine profil
Moisés Augusto López Calderón
Cel mai bun răspuns

FYI this work for me:

with openerp.api.Environment.manage():
    with openerp.registry(self.env.cr.dbname).cursor() as new_cr:
        # Create a new environment with new cursor database
        new_env = api.Environment(new_cr, self.env.uid, self.env.context)
        # with_env replace original env for this method
        self.with_env(new_env).write({'name': 'hello'})  # isolated transaction to commit
        new_env.cr.commit()  # Don't show a invalid-commit in this case
    # You don't need close your cr because is closed when finish "with"
# You don't need clear caches because is cleared when finish "with"
6
Imagine profil
Abandonează
PY

What does `Environment.manage()` ?

Imagine profil
Max
Autor Cel mai bun răspuns

The following seem to work reliably:

            new_cr = sql_db.db_connect(self.env.cr.dbname).cursor()
            uid, context = self.env.uid, self.env.context
            with api.Environment.manage():
                self.env = api.Environment(new_cr, uid, context)

                try:
                      ....

                finally:
                    self.env.cr.close()
 

2
Imagine profil
Abandonează
Îți place discuția? Nu doar citi, alătură-te!

Creează-ți un cont astăzi pentru a beneficia de funcții exclusive și a interacționa cu minunata noastră comunitate!

Înscrie-te
Postări similare Răspunsuri Vizualizări Activitate
[8.0] New API - Using Domains - ValueError: Invalid leaf Rezolvat
api method 8.0
Imagine profil
Imagine profil
Imagine profil
5
iul. 18
24979
Error Field is accesed before being computed.
api onchange compute 8.0
Imagine profil
0
mar. 15
8270
Integration of Third Party Digital Membership Card MembershipAnyWhere with Odoo CRM
api
Imagine profil
Imagine profil
1
mai 26
1508
API Integration: POST request succeeds but record not created in database
api
Imagine profil
0
mai 26
6
{{👉GUIA👈 Viva Aerobus Teléfono México}}¿Cómo puedo hablar con una persona en Viva Aerobus?
environment
Imagine profil
0
mar. 26
54
Comunitate
  • Tutorials
  • Documentație
  • Forum
Open Source
  • Descărcare
  • Github
  • Runbot
  • Translations
Servicii
  • Hosting Odoo.sh
  • Suport
  • Actualizare
  • Custom Developments
  • Educație
  • Găsiți un contabil
  • Găsește un Partener
  • Devino Partener
Despre Noi
  • Compania noastră
  • Active de marcă
  • Contactați-ne
  • Locuri de muncă
  • Evenimente
  • Podcast
  • Blog
  • Clienți
  • Aspecte juridice • Confidențialitate
  • Securitate
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk Slovenščina Español (América Latina) Español Svenska ภาษาไทย Türkçe українська Tiếng Việt

Odoo este o suită de aplicații de afaceri open source care acoperă toate nevoile companiei dvs.: CRM, comerț electronic, contabilitate, inventar, punct de vânzare, management de proiect etc.

Propunerea de valoare unică a Odoo este să fie în același timp foarte ușor de utilizat și complet integrat.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now