o
    h                     @   s   d dl mZ d dlmZmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ er^ddlmZ edZ edZ!eddG dd dee  ZG dd deZ"dS )    )	dataclass)TYPE_CHECKINGAnyIterableTypeVarN)apps)messages)ValidationError)connectionsroutertransaction)	ParamSpec)BaseTaskBackend)ResultDoesNotExist)task_enqueued)Task)
TaskResult   DBTaskResultTPT)frozenc                   @   s   e Zd ZU ded< dS )r   r   	db_resultN)__name__
__module____qualname____annotations__ r   r   f/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/django_tasks/backends/database/backend.pyr      s   
 r   c                	       s   e Zd ZdZdZdZdeeef dej	dej
ddfddZdeeef dej	dej
dee fd	d
ZdedefddZdedefddZdedeej f fddZ  ZS )DatabaseBackendTtaskargskwargsreturnr   c                 C   s0   ddl m} |||d|j|j|j|j| jdS )Nr   r   )r"   r#   )args_kwargspriority	task_path
queue_name	run_afterbackend_name)modelsr   r&   module_pathr(   r)   alias)selfr!   r"   r#   r   r   r   r   _task_to_db_task"   s   z DatabaseBackend._task_to_db_taskc                    sN    | ||| d fdd}|r!t|  jS |   jS )Nr$   c                      s        tjt jd d S )N)task_result)saver   sendtyper0   r   r   r.   r   r   save_result7   s   z,DatabaseBackend.enqueue.<locals>.save_result)r$   N)validate_taskr/   _get_enqueue_on_commit_for_taskr   	on_commitr0   )r.   r!   r"   r#   r5   r   r4   r   enqueue0   s   


zDatabaseBackend.enqueue	result_idc              
   C   sH   ddl m} z	|jj|djW S  |jtfy# } zt||d }~ww Nr   r   )id)r+   r   objectsgetr0   DoesNotExistr	   r   r.   r:   r   er   r   r   
get_resultB   s   
zDatabaseBackend.get_resultc              
      sP   ddl m} z|jj|dI d H jW S  |jtfy' } zt||d }~ww r;   )r+   r   r=   agetr0   r?   r	   r   r@   r   r   r   aget_resultJ   s   
zDatabaseBackend.aget_resultc                 +   s    ddl m} ddlm} t jdi |E d H  | jj}t	ds.t
t
j| ddV  tt| }|  tjdkrU||rWt
t
j| dd	|jd
V  d S d S d S )Nr   r   )0connection_requires_manual_exclusive_transactionzdjango_tasks.backends.databasezC configured as django_tasks backend, but database app not installedz9Insert 'django_tasks.backends.database' in INSTALLED_APPS)   r   z+ is using SQLite non-exclusive transactionszSet settings.DATABASES[z/]['OPTIONS']['transaction_mode'] to 'EXCLUSIVE'r   )r+   r   utilsrE   supercheck	__class__r   r   is_installedr   CheckMessageERRORr
   r   db_for_readget_connection_paramsdjangoVERSIONr-   )r.   r#   r   rE   r*   db_connectionrJ   r   r   rI   R   s,   


zDatabaseBackend.check)r   r   r   supports_async_tasksupports_get_resultsupports_deferr   r   r   r"   r#   r/   r   r9   strrB   rD   r   r   r   rL   rI   __classcell__r   r   rS   r   r       s2    



$r    )#dataclassesr   typingr   r   r   r   rP   django.appsr   django.core.checksr   django.core.exceptionsr	   	django.dbr
   r   r   typing_extensionsr   django_tasks.backends.baser   django_tasks.exceptionsr   django_tasks.signalsr   django_tasks.taskr   r   BaseTaskResultr+   r   r   r   r    r   r   r   r   <module>   s(    