a
    Cg                     @   s   d dl mZ d dlmZmZmZmZ d dlmZ d dl	Z	d dl
mZ d dlmZ eeddd	Zedee eeeef d
ddZeeef edddZdS )    )contextmanager)Any	GeneratorOptionalUnion)UUIDN)transaction)BaseDatabaseWrapper)
connectionreturnc                 C   s&   | j dkrdS tjdk rdS | jdkS )z
    Determine whether the backend requires manual transaction handling.

    Extracted from `exclusive_transaction` for unit testing purposes.
    ZsqliteF      TZ	EXCLUSIVE)vendordjangoVERSIONZtransaction_mode)r
    r   c/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/django_tasks/backends/database/utils.py0connection_requires_manual_exclusive_transaction
   s
    

r   )usingr   c              
   c   s   t | }t|rztjdkr$td| <}|d zdV  W |d n|d 0 W d   q1 sn0    Y  n2t j| d dV  W d   n1 s0    Y  dS )z
    Wrapper around `transaction.atomic` which ensures transactions on SQLite are exclusive.

    This functionality is built-in to Django 5.1+.
    r   zTransactions must be EXCLUSIVEzBEGIN EXCLUSIVENZCOMMIT)r   )	r   get_connectionr   r   r   RuntimeErrorcursorexecuteZatomic)r   r
   cr   r   r   exclusive_transaction   s    



8r   )valr   c                 C   s   t | trt| } t| S )z
    Normalize a UUID into its dashed representation.

    This works around engines like MySQL which don't store values in a uuid field,
    and thus drops the dashes.
    )
isinstancestrr   )r   r   r   r   normalize_uuid3   s    
r   )N)
contextlibr   typingr   r   r   r   uuidr   r   Z	django.dbr   Zdjango.db.backends.base.baser	   boolr   r   r   r   r   r   r   r   <module>   s   "