
    ,i(                     $   U d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZmZ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mZmZ d dlmZm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&m'Z' d	dl(m)Z) d	dl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0 d	dl1m2Z2 d	dlm3Z3 ddl4m5Z5m6Z6m7Z7 dZ8 ejr                  e:      Z;ejx                  e=d<    ee>      j~                  j~                  Z@dZAdhZB edd e ee>      j~                  dz        e      ZCe2eCjb                  d<    edg       ZDeee!      e=d<    G d  d!eee.         ZE G d" d#eEe,         ZF G d$ d%eEe+         ZGdd&d'ed(ee   d)dfd*ZHdd&d'ed+eId,e
eIe	f   d(ee   d)df
d-ZJd+eId.eId)dfd/ZKy)0    N)ABCabstractmethod)AnyDictListTypeGenericOptionalcast)Path)
ContextVar)override)EnvironmentStrictUndefinedFileSystemLoader)	BaseModelValidationError   )jsonrpc   )__version__)PartialModel)	copy_treeis_same_pathresolve_template_path)DEBUGDEBUG_GENERATOR)PartialTypeGeneratorError)
PythonDataDefaultData)
BaseModelTInheritsGenericget_args)quote)Manifest)
model_jsonmodel_parsecached_property)BASE_PACKAGE_DIRGenericGeneratorBaseGenerator	Generatorrender_templatecleanup_templatespartial_models_ctxlogz+prisma.generator.generator.GenericGeneratorzpartials.py.jinjaT	templates)trim_blockslstrip_blocksloader	undefinedr$   r/   )defaultc                       e Zd Zedefd       Zededdfd       Zedd       Z	ddZ
dej                  ddfd	Zedee   fd
       Zy)r*   returnc                      y)u   Get the metadata for this generator

        This is used by prisma to display the post-generate message e.g.

        ✔ Generated Prisma Client Python to ./.venv/lib/python3.9/site-packages/prisma
        N selfs    _/var/www/html/langgraph-service/venv/lib/python3.12/site-packages/prisma/generator/generator.pyget_manifestzGenericGenerator.get_manifest@   s     	    dataNc                      y )Nr:   )r<   r@   s     r=   generatezGenericGenerator.generateJ   s    25r?   c                 2     |        }|j                          y)z+Shorthand for calling BaseGenerator().run()N)run)cls	generators     r=   invokezGenericGenerator.invokeM   s     E	r?   c                    t         j                  j                  d      st        d      d}	 	 t	        j
                         }|t        j                  d       yt	        j                  |      }| j                  |       S# t        $ r}||dt        st        rt        j                          t        |t               rt#        |      }nXt        |t$              r&dt        j&                         j)                         z   }n"t        j&                         j)                         }t	        j*                  |j,                  d|i d      }t	        j.                  |       Y d}~yd}~ww xY w)	zRun the generation loop

        This can only be called from a prisma generation, e.g.

        ```prisma
        generator client {
            provider = "python generator.py"
        }
        ```
        PRISMA_GENERATOR_INVOCATIONz<Attempted to invoke a generator outside of Prisma generationNzPrisma invocation endingz>An exception ocurred while running the partial type generator
i )codemessager@   )iderror)osenvirongetRuntimeErrorr   readliner0   debugparse_on_request	Exceptionr   r   	traceback	print_exc
isinstancer   strr   
format_excstripErrorResponserL   reply)r<   requestlineexcrK   responses         r=   rD   zGenericGenerator.runS   s8    zz~~;<]^^&	$'')<II89!---  )   	$t# ##% #/c(C!:; VXaXlXlXnXtXtXvv  $..0668,,:: #&	H MM(##;	$s   ,B 'B 	E(CE##E(r_   c                    d }|j                   dk(  r:t        j                  |j                  t	        | j                                     }n|j                   dk(  r|j                  t        d      t        r+t        dt        j                  |j                  d             t        | j                  |j                        }t        rt        d	t        |d             | j                  |       t        j                  |j                  d       }nt        d
|j                          t        j                   |       y )NgetManifest)manifest)rL   resultrB   z-Prisma JSONRPC did not send data to generate.paramsr   )indentr@   z%JSON RPC received unexpected method: )methodr   SuccessResponserL   dictr>   rg   rQ   r   _write_debug_datajsondumpsr'   
data_classr&   rB   r^   )r<   r_   rb   r@   s       r=   rU   zGenericGenerator._on_request   s    >>]*..::!..0H ^^z)~~%"#RSS!(DJJw~~a,PQt?D!&*T!*DEMM$..'**TJH!Fw~~FVWXXhr?   c                    t        t        | j                        }t        |t              st        d      d}|j                  D ]  }|j                  t        k(  s|} n |t        d| dt         d      t        |      }|st        d|       |d   }t        |t              st        dt         d	| d
      t        t        t           |      S )z2Return the BaseModel used to parse the Prisma DMMFz)Could not resolve generic type arguments.NzICould not find the GenericGenerator type;
This should never happen;
Does z inherit from z ?z/Could not resolve generic arguments from type: r   zBExpected first generic type argument argument to be a subclass of z	 but got z	 instead.)r   object	__class__rY   r"   rQ   __orig_bases__
__origin__r*   r#   
issubclassr   	TypeErrorr   r!   )r<   rE   typbaseargsmodels         r=   ro   zGenericGenerator.data_class   s     64>>*#/JKK!&& 	D"22	
 ;uN+;*<B@  }!PQTPUVWWQ%+TU^T_ ` ',  D$e,,r?   )r8   N)__name__
__module____qualname__r   r%   r>   r!   rB   classmethodrG   rD   r   RequestrU   r(   r   ro   r:   r?   r=   r*   r*   ?   s    h   5Z5D5 5 
5$n 7??  t  8 &-D, &- &-r?   r*   c                       e Zd Zy)r+   N)r{   r|   r}   r:   r?   r=   r+   r+      s    r?   r+   c                   Z    e Zd Zedededdfd       Zedefd       Zededdfd       Z	y)	r,   ry   kwargsr8   Nc                 4    t        t         dt         d      )Nz' cannot be subclassed, maybe you meant ?)rv   r,   r+   )rE   ry   r   s      r=   __init_subclass__zGenerator.__init_subclass__   s    9+%L]O[\]^^r?   c                 8    t        dt         dt        dg      S )NzPrisma Client Python (v)queryEngine)namedefault_outputrequires_engines)r%   r   r)   r;   s    r=   r>   zGenerator.get_manifest   s&    *;-q9+
 	
r?   r@   c                 f   |j                   j                  }t        |j                   j                  j                        }|j                         s|j                  dd       t        t        |      st        t        |       |dz  }t        |j                  |      s|j                  |j                         |j                         }	 t        j                         D ]:  }|j!                  d      r|j#                  d      s|t$        v r.t'        |||       < |j(                  r/t*        j-                  d       |j(                  j/                          t0        j3                         |d<   t$        D ]  }t'        |||        	 t*        j-                  d	       y #  t5        |t                xY w)
NTparentsexist_okzschema.prismaz	.py.jinja_zGenerating partial typespartial_modelsenvz(Finished generating Prisma Client Python)rF   configr   outputvalueexistsmkdirr   r)   r   schema_path
write_text	datamodel	to_paramsDEFAULT_ENVlist_templatesendswith
startswithDEFERRED_TEMPLATESr-   partial_type_generatorr0   rS   rD   r/   rP   r.   )r<   r@   r   rootdirpackaged_schemarg   r   s          r=   rB   zGenerator.generate   s\   &&t~~,,223~~MM$M6,g6&0 "O3D,,o>&&t~~6!	#224 7}}[1T__S5ITUgMgv6	7 ,,		45--113'9'='='?F#$* 7v67 			<=		g;7s   
B;F F0)
r{   r|   r}   r   r   r   r%   r>   r   rB   r:   r?   r=   r,   r,      sk    _c _S _T _ _ 
h 
 
 #>Z #>D #> #>r?   r,   r   r   r   r8   c                    |t         }|j                         D ]F  }t        | |      }|j                         s!t        j                  d|       |j                          H y)z%Revert module to pre-generation stateNr   r   z Removing rendered template at %s)r   r   r   r   r0   rS   unlink)r   r   r   files       r=   r.   r.   
  sQ    
{""$ $W4@;;=II8$?KKM	r?   r   rg   c                   |t         }|j                  |      } |j                  di |}t        | |      }|j                  j                         s|j                  j                  dd       |j                  |j                  t        j                                      t        j                  d|j                                y )Nr   Tr   zRendered template to %sr:   )r   get_templaterenderr   parentr   r   write_bytesencodesysgetdefaultencodingr0   rS   absolute)r   r   rg   r   templater   r   s          r=   r-   r-     s     {%HX__&v&F t<D;;$6V]]3#9#9#;<=II'9r?   r   c                    t        t              j                  j                  d|  d      }|j	                  d      5 }|j                  |       d d d        t        j                  d| |j                                y # 1 sw Y   /xY w)Nzdebug-z.jsonwzWrote generator %s to %s)	r   __file__r   joinpathopenwriter0   rS   r   )r   r   pathr   s       r=   rl   rl   +  sl    >  ))F4&*>?D	3 4

6 II($@ s   A>>B)LrN   r   rm   loggingrW   abcr   r   typingr   r   r   r   r	   r
   r   pathlibr   contextvarsr   typing_extensionsr   jinja2r   r   r   pydanticr   r    r   r   typesr   utilsr   r   r   r   r   errorsr   modelsr   r    _typesr!   r"   r#   filtersr$   r%   _compatr&   r'   r(   __all__	getLoggerr{   r0   Logger__annotations__r   r   r)   GENERIC_GENERATOR_NAMEr   r   r/   r*   r+   r,   r.   rZ   r-   rl   r:   r?   r=   <module>r      s   	 
    # A A A  " & A A /    
 + - + : :   > > (g''1W^^ 1>((// F  ** DN11K?@	  %  G 5?@T^`5a JtL12 aN-sGJ/ N-b	$[1 	3> , 3>l FJ 	t 	Xk-B 	d 	" "&::
: cN:
 
+	: 
:*AC A A Ar?   