ó
( È\c           @  s  d  Z  d d l m Z d d l Z d d l Z d d l m Z m Z m	 Z	 m
 Z
 m Z d d l m Z d d l m Z m Z d d l m Z m Z d d l m Z m Z m Z m Z m Z m Z d d	 l m Z m Z d d
 l m  Z  d d l! m" Z" d Z# i  Z$ d e f d „  ƒ  YZ% e% e# e& d d ƒZ' d e( f d „  ƒ  YZ) d e f d „  ƒ  YZ* e' j+ d ƒ e d „  ƒ ƒ Z, e' j+ d ƒ e d „  ƒ ƒ Z- e. d „ Z/ e' j+ d d d g d d ƒe' j+ d d d g d d  ƒe d! „  ƒ ƒ ƒ Z0 e' j+ d" d d# ƒe d$ „  ƒ ƒ Z1 d S(%   u   Implements Backup Utilityiÿÿÿÿ(   t   unicode_literalsN(   t   render_templatet   requestt   current_appt   url_fort   Response(   t   gettext(   t   login_requiredt   current_user(   t   BatchProcesst   IProcessDesc(   t   PgAdminModulet   get_storage_directoryt   htmlt   fs_short_patht   document_dirt   is_utility_exists(   t   make_json_responset   bad_request(   t   PG_DEFAULT_DRIVER(   t   Serveru   backupt   BackupModulec           B  s5   e  Z d  Z e d ƒ Z d „  Z d „  Z d „  Z RS(   u¥   
    class BackupModule(Object):

        It is a utility which inherits PgAdminModule
        class and define methods to load its own
        javascript file.
    u   Backupc         C  s&   i d d 6t  d ƒ d d 6d d 6g S(   uJ   "
        Returns:
            list: js files used by this module
        u   pgadmin.tools.backupu   nameu   backup.indexu   backupu   pathu   whenN(   R   t   None(   t   self(    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   get_own_javascripts,   s    c         C  s   |  j  S(   u2   
        return system preference objects
        (   t   pref_show_system_objects(   R   (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   show_system_objects7   s    c         C  s   d d d g S(   uL   
        Returns:
            list: URL endpoints for backup module
        u   backup.create_server_jobu   backup.create_object_jobu   backup.utility_exists(    (   R   (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   get_exposed_url_endpoints=   s    (   t   __name__t
   __module__t   __doc__t   _t   LABELR   R   R   (    (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyR   !   s
   		t   static_url_pathu    t   BACKUPc           B  s    e  Z d  Z d Z d Z d Z RS(   u0   
    Constants defined for Backup utilities
    i   i   i   (   R   R   R   t   GLOBALSt   SERVERt   OBJECT(    (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyR"   L   s   t   BackupMessagec           B  sG   e  Z d  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z d „  Z RS(   u^   
    BackupMessage(IProcessDesc)

    Defines the message shown for the backup operation.
    c         O  s´   | |  _  | |  _ | |  _ d | k r1 | d n d  |  _ d |  _ d „  } xa | D]Y } | r— t | ƒ d k r— | d  d k r— |  j d | 7_ qS |  j | | ƒ 7_ qS Wd  S(   Nu   databaseu    c         S  sL   |  rH |  j  d d ƒ }  |  j  d d ƒ }  |  j  d d ƒ }  d |  d Sd S(   Nu   \u   \\u   "u   \"u   ""u    "u    (   t   replace(   t   x(    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   cmdArgc   s    i   u   --u    (   t   backup_typet   sidt   bfileR   t   databaset   cmdt   len(   R   t   _typet   _sidt   _bfilet   _argst   _kwargsR)   t   arg(    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   __init__\   s    					(c         C  s›   t  j j d |  j d t j ƒ j ƒ  } d d l m } | t	 ƒ } | j
 |  j ƒ } | j rg | j n | j } | j r‚ | j n | j } | j | | f S(   Nt   idt   user_idiÿÿÿÿ(   t
   get_driver(   R   t   queryt	   filter_byR+   R   R7   t   firstt   pgadmin.utils.driverR9   R   t   connection_managert   use_ssh_tunnelt   local_bind_hostt   hostt   local_bind_portt   portt   name(   R   t   sR9   t   drivert   managerRA   RC   (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   get_server_detailsq   s    c         C  sb   |  j  t j k r t d ƒ S|  j  t j k r8 t d ƒ S|  j  t j k rT t d ƒ St d ƒ Sd  S(   Nu"   Backing up an object on the serveru   Backing up the global objectsu   Backing up the serveru   Unknown Backup(   R*   R"   R%   R   R#   R$   (   R   (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt	   type_desc€   s    


c         C  sõ   |  j  ƒ  \ } } } t j | ƒ } t j | ƒ } t j | ƒ } |  j t j k r… t d ƒ j d j | | | ƒ t j |  j ƒ ƒ S|  j t j	 k r¹ t d ƒ j d j | | | ƒ ƒ S|  j t j
 k rí t d ƒ j d j | | | ƒ ƒ Sd Sd  S(   Nu<   Backing up an object on the server '{0}' from database '{1}'u   {0} ({1}:{2})u1   Backing up the global objects on the server '{0}'u   Backing up the server '{0}'u   Unknown Backup(   RH   R   t   safe_strR*   R"   R%   R   t   formatR-   R#   R$   (   R   RD   RA   RC   (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   messageŒ   s&    	c         C  s[  |  j  ƒ  \ } } } d } |  j t j k rm t d ƒ j d j | | | ƒ |  j ƒ } | t j | ƒ 7} n¢ |  j t j	 k r¹ t d ƒ j d j | | | ƒ ƒ } | t j | ƒ 7} nV |  j t j
 k rt d ƒ j d j | | | ƒ ƒ } | t j | ƒ 7} n
 | d 7} | d 7} | t d ƒ 7} | d	 7} | t j | |  j ƒ 7} | d
 7} | S(   Nu   <div>u?   Backing up an object on the server '{0}' from database '{1}'...u   {0} ({1}:{2})u4   Backing up the global objects on the server '{0}'...u   Backing up the server '{0}'...u   Backupu   </div><div class="py-1">u   Running command:u,   <div class="pg-bg-cmd enable-selection p-1">u   </div></div>(   RH   R*   R"   R%   R   RK   R-   R   RJ   R#   R$   R.   (   R   R.   t   argsRD   RA   RC   t   rest   msg(    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   details®   s4    	



(	   R   R   R   R6   RH   t   propertyRI   RL   RP   (    (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyR&   U   s   		"u   /c           C  s   t  d t d ƒ ƒ S(   Nt   errormsgu#   This URL cannot be called directly.(   R   R   (    (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   indexÚ   s    u
   /backup.jsc           C  s%   t  d t d d t ƒd d d d ƒ S(   u   render own javascriptt   responseu   backup/js/backup.jsR   t   statusiÈ   t   mimetypeu   application/javascript(   R   R   R   (    (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   scriptà   s
    c         C  së   t  ƒ  } | r9 t j j | |  j d ƒ j d ƒ ƒ }  n- t j j |  ƒ sf t j j t ƒ  |  ƒ }  n  | r… t |  d ƒ  Wd QXn  t |  ƒ } t j	 d k rç | d k rç t j j
 |  ƒ } t j j |  ƒ } t | ƒ d | } n  | S(   uê   
    Args:
        file: File name returned from client file manager
        create_file: Set flag to False when file creation doesn't required

    Returns:
        Filename to use for backup with full path taken from preference
    u   /u   \u   aNu   ntu    (   R   t   ost   patht   joint   lstript   isabsR   t   openR   RD   t   basenamet   dirname(   t   _filet   create_filet   storage_dirt
   short_patht	   base_namet   dir_name(    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   filename_with_file_manager_pathí   s    
	*	u   /job/<int:sid>t   methodsu   POSTt   endpointu   create_server_jobu   /job/<int:sid>/objectu   create_object_jobc      	     sL  t  j r( t j t  j d d d ƒ‰ n t j t  j d d ƒ‰ d } d ˆ k r_ ˆ d } n  yF d ˆ k r” ˆ d d k r” t ˆ d t ƒ } n t ˆ d ƒ } Wn# t k
 rÊ } t d	 t	 | ƒ ƒ SXt
 j j d
 |  d t j ƒ j ƒ  } | dk k rt d d d	 t d ƒ ƒ Sd d l m } | t ƒ } | j | j ƒ } | j ƒ  } | j ƒ  }	 |	 syt d d d	 t d ƒ ƒ S| d k r”| j d ƒ n | j d ƒ }
 t |
 ƒ } | rÈt d d d	 | ƒ Sd | d | j rã| j n | j d | j rt	 | j ƒ n t	 | j ƒ d | j  d g	 ‰  | d k rNˆ  j! d ƒ ˆ  j! | j" ƒ n  | d k rjˆ  j! d ƒ n  ‡  ‡ f d †  } dk ‡  ‡ f d † } | d d ƒ | d  d! ƒ | d" d# ƒ | d k r–d ˆ k r–ˆ d dk k	 r–ˆ d d$ k rˆ  j# d% g ƒ | d& d' ƒ | d( d) ƒ q–ˆ d d* k rMˆ  j# d+ g ƒ | d& d' ƒ q–ˆ d d, k rpˆ  j# d- g ƒ q–ˆ d d k r–ˆ  j# d. g ƒ q–n  d/ ˆ k rèˆ d/ rè| d/ d0 ƒ d ˆ k rˆ d d, k r| d1 d2 ƒ qn& d3 ˆ k rˆ d3 r| d3 d4 ƒ n  | d5 d6 ƒ | d7 d8 ƒ | d9 d: ƒ | d; d< ƒ | d d= ƒ | d> d? ƒ | d@ dA ƒ | dB dC ƒ | dD dE ƒ | dF dG ƒ | dH dI ƒ | dJ dK ƒ | dL dM ƒ | dN dO ƒ | j$ dP k rð| dQ dR ƒ | dS dT ƒ n  | dU dV ƒ | dW dX ƒ dY ˆ k rAx( ˆ dY D] } ˆ  j# dZ | g ƒ q!Wn  d[ ˆ k rx= ˆ d[ D]. \ } } ˆ  j# d\ | j% | | | ƒ g ƒ qXWn  yb| d k rˆ  j! ˆ d] ƒ t& d^ t' t( j) |  t* ˆ d d_ ƒ råˆ d j+ d ƒ n ˆ d d` ˆ d] ˆ  Œda |
 db ˆ  ƒ } nl t& d^ t' | d k r/t( j, n t( j- |  t* ˆ d d_ ƒ r^ˆ d j+ d ƒ n ˆ d ˆ  Œ da |
 db ˆ  ƒ } | j. | j ƒ | j/ d k rÎt0 ƒ  } t	 | j/ ƒ | dc <| j1 | dd | ƒn | j1 | ƒ | j2 ƒ  | j } Wn? t k
 r0} t3 j4 j5 | ƒ t de df d d d	 t	 | ƒ ƒ SXt dg i | dh 6di dj 6ƒ S(l   uœ   
    Args:
        sid: Server ID

        Creates a new job for backup task
        (Backup Database(s)/Schema(s)/Table(s))

    Returns:
        None
    u   datat   encodingu   utf-8u   objectsu   typeu   formatu	   directoryu   fileRR   R7   R8   t   successi    u$   Could not find the specified server.iÿÿÿÿ(   R9   u#   Please connect to the server first.u   backupu   backup_serveru   --fileu   --hostu   --portu
   --usernameu   --no-passwordu
   --databaseu   globalsu   --globals-onlyc           s*   |  ˆ k r& ˆ |  r& ˆ  j  | ƒ n  d  S(   N(   t   append(   t   keyt   param(   RM   t   data(    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt	   set_parami  s    c           sz   |  ˆ k rM ˆ |  d  k	 rM ˆ |  d k rM ˆ  j | ƒ ˆ  j ˆ |  ƒ n) | d  k	 rv ˆ  j | ƒ ˆ  j | ƒ n  d  S(   Nu    (   R   Rk   (   Rl   Rm   t   default_value(   RM   Rn   (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt	   set_valuem  s    ,u   verboseu	   --verboseu   dqouteu   --quote-all-identifiersu   roleu   --roleu   customu
   --format=cu   blobsu   --blobsu   ratiou
   --compressu   taru
   --format=tu   plainu
   --format=pu
   --format=du	   only_datau   --data-onlyu   disable_triggeru   --disable-triggersu   only_schemau   --schema-onlyu	   dns_owneru
   --no-owneru   include_create_databaseu   --createu   include_drop_databaseu   --cleanu   pre_datau   --section=pre-datau   --section=datau	   post_datau   --section=post-datau   dns_privilegeu   --no-privilegesu   dns_tablespaceu   --no-tablespacesu   dns_unlogged_tbl_datau   --no-unlogged-table-datau   use_insert_commandsu	   --insertsu   use_column_insertsu   --column-insertsu   disable_quotingu   --disable-dollar-quotingu	   with_oidsu   --oidsu   use_set_session_authu   --use-set-session-authorizationi°­ u   no_commentsu   --no-commentsu   load_via_partition_rootu   --load-via-partition-rootu   encodingu
   --encodingu
   no_of_jobsu   --jobsu   schemasu   --schemau   tablesu   --tableu   databaset   descu   encodeR-   R.   RM   u   PGCONNECT_TIMEOUTt   envRU   iš  Rn   u   job_idi   u   SuccessN(6   R   t   formt   jsont   loadsRn   Rf   t   Falset	   ExceptionR   t   strR   R:   R;   R   R7   R<   R   R   R   R=   R9   R   R>   t
   connectiont	   connectedt   utilityR   R?   R@   RA   RB   RC   t   usernameRk   t   maintenance_dbt   extendt   versiont   qtIdentR	   R&   R"   R%   t   hasattrt   encodeR$   R#   t   export_password_envt   connect_timeoutt   dictt   set_env_variablest   startR   t   loggert	   exception(   R+   t   backup_obj_typet   backup_filet   et   serverR9   RF   RG   t   connR{   R|   t   ret_valRo   Rq   RE   t   tt   pRs   t   jid(    (   RM   Rn   s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   create_backup_objects_job  s   		#	#
#		
u+   /utility_exists/<int:sid>/<backup_obj_type>u   utility_existsc         C  sÓ   t  j j d |  d t j ƒ j ƒ  } | d k rI t d d d t d ƒ ƒ Sd d l	 m
 } | t ƒ } | j | j ƒ } | d	 k r’ | j d
 ƒ n | j d ƒ } t | ƒ } | rÆ t d d d | ƒ St d d ƒ S(   u°   
    This function checks the utility file exist on the given path.

    Args:
        sid: Server ID
        backup_obj_type: Type of the object
    Returns:
        None
    R7   R8   Rj   i    RR   u$   Could not find the specified server.iÿÿÿÿ(   R9   u   objectsu   backupu   backup_serveri   N(   R   R:   R;   R   R7   R<   R   R   R   R=   R9   R   R>   R|   R   (   R+   R‹   RŽ   R9   RF   RG   R|   R   (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   check_utility_existsä  s"    (2   R   t
   __future__R    t
   simplejsonRu   RX   t   flaskR   R   R   R   R   t   flask_babelexR   R   t   flask_securityR   R   t    pgadmin.misc.bgprocess.processesR	   R
   t   pgadmin.utilsR   R   R   R   R   R   t   pgadmin.utils.ajaxR   R   t   configR   t   pgadmin.modelR   t   MODULE_NAMEt   server_infoR   R   t	   blueprintt   objectR"   R&   t   routeRS   RW   t   TrueRf   R”   R•   (    (    (    s8   /usr/share/pgadmin4/web/pgadmin/tools/backup/__init__.pyt   <module>
   s>   (.&	…#Î