a h@sddlZddlZddlZddlZddlZddlZddlZddlmZm Z m Z m Z m Z m Z ddlmZeedddZeeddd Zeedd d Zee eed d dZee eed ddZeeefe eedddZd(eeefe eeedddZd)e ee eeeefdddZeeeeefdddZeeeefddd Zeeeefd!d"d#Zdd$d%d&Zed'kredS)*N)DictIterableListOptionalSetTuple)read_data_file)datareturncCs8d}||vrd|||Sd|vr0d|dSt|S)Nz'''rz"""zr""")repr)r Z triplequoter?/usr/lib/python3.9/site-packages/cockpit/_vendor/bei/beipack.py escape_strings  rcCsdt|dS)Nbasciirdecoder rrrascii_bytes_repr(srcCst|ddS)Nutf-8z.encode('utf-8')rrrrrutf8_bytes_repr,sr)r importsr cCs*|dt|d}d|dS)Nzfrom binascii import a2b_base64rz a2b_base64("z"))addbinasciiZ b2a_base64rstrip)r rZencodedrrrbase64_bytes_repr0s rcCsFz t|WStyYn0z t|WSty:Yn0t||S)N)rUnicodeDecodeErrorrr)r rrrr bytes_repr8s    r)contentsrr cs$ddfdd|DdS)Nz{ c3s.|]&\}}dt|dt|dVqdS)z z: z, N)r r).0kvrrr Pszdict_repr..})joinitems)r rrr%r dict_reprNsr*r!)r entrypointargsr c Cstd}dd|D}|ddh}t||}|||d|d|r|d\}}|d |d |d |d |d ddd|DS)aCreates a beipack with the given `contents`. If `entrypoint` is given, it should be an entry point which is run as the "main" function. It is given in the `package.module:func format` such that the following code is emitted: from package.module import func as main main() Additionally, if `args` is given, it is written verbatim between the parens of the call to main (ie: it should already be in Python syntax). zbeipack_loader.pycSsg|] }|r|qSrrr"linerrr fzpack..r!z import sysz&sys.meta_path.insert(0, BeipackLoader(z)):zfrom z import z as mainzmain()css|]}|dVqdS) Nrr-rrrr&sr0zpack..)r splitlinesappendr*extendsplitr() r r+r,loaderlinesrZ contents_txtpackagemainrrrpackUs   r<) filenames relative_tor c CsTi}|D]F}t|d(}||tjj||d<Wdq1sD0Yq|S)Nrb)start)openreadospathrelpath)r=r>r filenamefilerrrcollect_contentsvs  8rH)name recursiver csVddl}ddlm}t|ttttfdfdd t|dd|j |S)Nr) Traversable)rDentryr c3sX|D]J}|d|j}|r4||fVqr|jdkr||EdHqdS)N/ __pycache__)iterdirrIis_file read_bytes)rDrLitemZitemnamerJwalkrrrTs  zcollect_module..walk.rM) Zimportlib.resourcesZimportlib.resources.abcrKstrrrbytesdictreplaceZ resourcesfiles)rIrJ importlibrKrrSrcollect_modules $r\)rFr cCsZi}t|8}|jD] }d|jvr&q||||j<qWdn1sL0Y|S)Nz .dist-info/)zipfileZipFileZfilelistrFrB)rFr rGrLrrr collect_zips   0r_)rDr cCsRt6}ddl}||}|d|}t|WdS1sD0YdS)Nrwheel)tempfileZTemporaryDirectorybuildZProjectBuilderr_)rDZtmpdirrbZbuilderr`rrrcollect_pep517s    rc)r cCst}|jdddd|jddddd |jd d d|jd d dd|jddddd|jddddd|jddgdd|jdddgdd|jd d!dgd"d#|jd$d%d&d'|}t|j|jd(}|jD]}|t |q|j D]}|t |d)d*q|j D]}|t |q t||j|jd+}|jrXd,|jd-d.|}|jrptj|tjd/}|jrt|jd0}||Wdn1s0Yn,|jrtd1rtd2tjj|dS)3Nz--pythonz-pz5add a #!python3 interpreter line using the given path)helpz--xzz-J store_truezcompress the output with `xz`)actionrdz--topdirz6toplevel directory (paths are stored relative to this)z--outputz-oz(write output to a file (default: stdout)z--mainz-mz MODULE:FUNCz)use FUNC from MODULE as the main function)metavarrdz --main-argsZARGSz$arguments to main() in Python syntaxr!)rgrddefaultz--moduler5z'collect installed modules (recursively))rfrhrdz--zipz-zz'include files from a zipfile (or wheel)z--buildDIRz%PEP-517 from a given source directory)rgrfrhrdrZ*zfiles to include in the beipack)nargsrd)r>T)rJrs#!r )presetwbrz1refusing to write compressed output to a terminal) argparseArgumentParser add_argument parse_argsrHrZZtopdirzipupdater_moduler\rbrcr<r;Z main_argsencodeZpythonxzlzmacompressPRESET_EXTREMEoutputrAwriterCisattysysexitstdoutbuffer)parserr,r rGrIrDresultrrrr;sd        , r;__main__)Nr!)N) rorrxrCr~rar]typingrrrrrrr r rVrrWrrrrr*r<rHboolr\r_rcr;__name__rrrrs<     "  4