
     g                         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 d dlmZm	Z	 d dl
mZ d dlmZ dZd ZdZdZd	 Zi Zd
 Zd Z G d deeej,                        Zy)    N)unquote)	ExceptionRuntimeException)XImplementationLoader)XServiceInfozvnd.openoffice.pymodule:)zcom.sun.star.loader.Pythonz org.openoffice.comp.pyuno.Loaderc                 x    | j                  d      }d|k(  rt        d| z   d       | d| | |dz   t        |        fS )N:z!PythonLoader: No protocol in url r      )findr   len)urlnColons     ,/usr/lib/libreoffice/program/pythonloader.pysplitUrlr   #   sI    XXs_F	V| Cc I4QQq=#fQhs3x000    c                    t        j                  | dz         }t        dk(  rt        dt	        |      z          dt        j                  t	        |      t
        j                        k(  rT|t        j                  vrBt        dk(  rt        dt	        |      z   dz          t        j                  j                  |       t        j                  | dz         }dt        j                  t	        |      t
        j                        k(  rV|t        j                  vrCt        dk(  rt        dt	        |      z   dz          t        j                  j                  |       y y y )Nz/pythonpath.zipr   s   checking for existence of s   adding s    to sys.pathz/pythonpath)	unohelperfileUrlToSystemPathDEBUGprintencfileosaccessF_OKsyspathappend)r   r   s     r   !checkForPythonPathBesideComponentr   *   s    ((#.?*?ADz+gto=>BIIw009IA:*w.@A((#m*;=DBIIw009IA:*w.@A :J0r   c                 H    | j                  t        j                               S N)encoder   getfilesystemencoding)unis    r   r   r   9   s    ::s00233r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	Loaderc                 4    t         rt        d       || _        y )Nzpythonloader.Loader ctor)r   r   ctx)selfr(   s     r   __init__zLoader.__init__=   s    ,-r   c           	      
   t         rt        d|z          t        |      \  }}d|k(  rC| j                  j	                  d      }|j                  t        |            }t        |      \  }}t         rt        d|z   dz   |z          	 d|k(  r t        j                  ||      }t        j                  |      }|st        j                  d      }t        |d|j                  d	              t        j                  |      }t!        |d
      5 }|j#                         j%                  dd      }|j'                  d      s|dz   }t)        |t+        |      d      }	||_        t/        |	|j0                         |t        |<   d d d        |S |S d|k(  r|j                  d	      }
d|
k7  rZt        j                  |d|
       }||
dz   t3        |       }|t4        j6                  vrt4        j6                  j9                  |       t;        |      }|j=                  d      \  }}}|dk(  r'|j=                  d      \  }}}t?        ||      }|dk(  r'|S t         rt        d|z   dz          tA        d|z   dz   |z   |       # 1 sw Y   |S xY w# tB        $ rq}t         rHt        dtE        tG        |            z   dz   tE        |      z   dz   tE        |jH                        z          tA        d|z   dz   tE        |      z   d       d }~ww xY w)Nzpythonloader: interpreting url zvnd.sun.star.expandz./singletons/com.sun.star.util.theMacroExpanderzpythonloader: after expansion r	   fileuno_componentr   /utf_8)encoding 
execzvnd.openoffice.pymoduler
   r   .zUnknown protocol ''zPythonLoader: Unknown protocol z in url zPython import exception z	 message z args zCouldn't load z for reason )%r   r   r   r(   getValueByNameexpandMacrosr   r   
absolutizeg_loadedComponentsgettypes
ModuleTyper   rfindr   openreadreplaceendswithcompiler   __file__r4   __dict__r   r   r   r   
__import__	partitiongetattrr   r   strtypeargs)r)   r   protocol	dependentexpmodfilename
fileHandlesrc
codeobjectnSlashr   path_componentdotrestes                   r   getModuleFromUrlzLoader.getModuleFromUrlB   s   3c9:&o) H,(())+[]C""79#56C!)3HY2X=CiOP1	]!**C6 ),,c3**?;C 6s1SYYs^7LN  )<<cCHx'; 	6z(oo/77R@"||T3"%*C &-c783Df%N
'/Z625*3/	6 
s
*h6"-<$88)Af:MOD )&(3y> BI388+/!9.,5,?,?,D)TSj04s0C-NC!#~6C Sj 
.9C?@&(I)1)24>)?@C)DEIL L7	6 
&  	]1CQL@"#%(V,.679<QVVE F"$4s$:^$KcRSf$TVZ\\		]sR   BJ A3I; 	J 
J C J J ,J ;J J J 	LA,K==Lc                 X   t         rt        d       | j                  |      }|j                  j	                  dd       }t         rt        dt        |      z          |'|j                  || j                  j                  |      S |j                  ||| j                  j                        S )Nzpythonloader.Loader.activateg_ImplementationHelperzFetched ImplHelper as )	r   r   rY   rE   r;   rI   getComponentFactoryr(   ServiceManager)r)   implementationNamedummylocationUrlregKeyrO   
implHelpers          r   activatezLoader.activate   s    01##[2\\%%'?$H
+c*o=>**,>@W@WY_aa113EfTXXMdMdeer   c                    t         rt        d       | j                  |      }|j                  j	                  dd       }|&|j                  | j                  j                  |      S |j                  || j                  j                        S )Nz%pythonloader.Loader.writeRegistryInfor[   )r   r   rY   rE   r;   writeRegistryInfor(   r]   )r)   ra   r_   r`   rO   rb   s         r   re   zLoader.writeRegistryInfo   su    :<##[2\\%%'?$H
(($((*A*A6KK//9P9PRRr   c                     t         S r!   )g_implementationNamer)   s    r   getImplementationNamezLoader.getImplementationName   s    ##r   c                 &    || j                         v S r!   )getSupportedServiceNames)r)   ServiceNames     r   supportsServicezLoader.supportsService   s    d;;===r   c                     t         S r!   )g_supportedServicesrh   s    r   rk   zLoader.getSupportedServiceNames   s    ""r   N)
__name__
__module____qualname__r*   rY   rc   re   ri   rm   rk    r   r   r&   r&   <   s(    
>@f	S$>#r   r&   )unor   r   r<   r   urllib.parser   com.sun.star.unor   r   com.sun.star.loaderr   com.sun.star.langr   MODULE_PROTOCOLr   ro   rg   r   r:   r   r   Baser&   rs   r   r   <module>r{      sf   &   
  	   7 5 *,	4 9 1   4e##\9>> e#r   