³ò
OÉcIc           @   s  d  Z  d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k	 Z	 d e
 f d „  ƒ  YZ d d d „  ƒ  YZ d e f d „  ƒ  YZ d a d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d d d „  ƒ  YZ e i e ƒ d S(   s2   Generate and process aggregated backup informationiÿÿÿÿNt   StatsExceptionc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyR       s    t   StatsObjc           B   s7  e  Z d  Z e i d ƒ Z d/ Z d0 Z d1 Z d2 e e e Z	 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ f Z dD dG dI dJ f Z d „  Z d „  Z d „  Z d „  Z d „  Z d  „  Z d d! „ Z d" „  Z d# „  Z d$ „  Z d% „  Z d& „  Z d' „  Z d( „  Z d) „  Z d* „  Z d+ „  Z d, „  Z d- „  Z d. „  Z  RS(K   s@   Contains various statistics, provide string conversion functionst    t   SourceFilest   SourceFileSizet   MirrorFilest   MirrorFileSizet   NewFilest   NewFileSizet   DeletedFilest   DeletedFileSizet   ChangedFilest   ChangedSourceSizet   ChangedMirrorSizet   IncrementFilest   IncrementFileSizet   Errorst   TotalDestinationSizeChanget	   StartTimet   EndTimet   ElapsedTimet   Filenamei   i   t   TBt   GBt   MBt   KBc         C   s%   x |  i  D] } d |  i | <q
 Wd S(   s   Set attributes to NoneN(   t
   stat_attrst   Nonet   __dict__(   t   selft   attr(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   __init__<   s    
  c         C   s   |  i  | S(   s   Get a statistic(   R   (   R   t	   attribute(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   get_stat@   s    c         C   s   | |  i  | <d S(   s   Set attribute to given valueN(   R   (   R   R    t   value(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   set_statD   s    c         C   s   |  i  | c d 7<d S(   s   Add 1 to value of attributei   N(   R   (   R   R    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   increment_statH   s    c         C   s   |  i  | c | 7<d S(   s   Add value to given attributeN(   R   (   R   R    R$   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   add_to_statL   s    c         C   sƒ   |  i  |  i |  i g } |  i |  i g } xI | | D] } | d j o d } Pq5 q5 Wd „  } | | ƒ | | ƒ } | |  _ | S(   s…   Return total destination size change

		This represents the total change in the size of the
		rdiff-backup destination directory.

		c         S   s   t  d „  |  ƒ S(   Nc         S   s   |  | S(    (    (   t   xt   y(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   <lambda>_   s    (   t   reduce(   t   l(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   addlist_   s    N(   R
   R   R   R   R   R   R   (   R   t   addvalst   subtractvalst   valt   resultR-   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   get_total_dest_size_changeP   s     			c            s‚   t  ‡  f d †  ˆ  i ƒ } | p
 d } nC t t i i | ƒ } | o& ˆ  i i d t | ƒ d d !ƒ } n d i | g | ƒ S(   s8   Return one line abbreviated version of full stats stringc            s   t  ˆ  i |  ƒ ƒ S(    (   t   strR#   (   R    (   R   (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyR*   f   s    t   .s   \x20i   iÿÿÿÿR   (	   t   mapt   stat_file_attrst   applyt   ost   patht   joint   space_regext   subt   repr(   R   t   indext   use_reprt
   file_attrst   filename(    (   R   s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   get_stats_lined   s     
&c      
      só   ‡  f d †  } ˆ  d d j o ˆ  d  ‰  n ˆ  i  d ƒ } t | ƒ t t ƒ j  o | ƒ  n x‹ t t | t t ƒ ƒ D]o \ } } y t | ƒ } Wn@ t j
 o4 y t | ƒ } WqÛ t j
 o | ƒ  qÛ Xn X|  i | | ƒ q| W|  S(   s   Set statistics from given linec              s   t  d ˆ  ƒ ‚ d  S(   Ns   Bad line '%s'(   R    (    (   t   line(    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   errors   s    iÿÿÿÿs   
R   (   t   splitt   lenR6   t   zipt   longt
   ValueErrort   floatR%   (   R   RC   RD   t	   linepartsR    t
   val_stringR0   (    (   RC   s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   set_stats_from_lineq   s$      	    c         C   s#   d |  i  ƒ  |  i ƒ  |  i ƒ  f S(   s.   Return extended string printing out statisticss   %s%s%s(   t   get_timestats_stringt   get_filestats_stringt   get_miscstats_string(   R   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   get_stats_string€   s    	c         C   s  g  } |  i  d j	 o* | i d |  i  t i |  i  ƒ f ƒ n |  i d j	 o* | i d |  i t i |  i ƒ f ƒ n |  i p  |  i  d j	 oa |  i d j	 oQ |  i d j o |  i |  i  |  _ n | i d |  i t i |  i ƒ f ƒ n d i | ƒ S(   s5   Return portion of statistics string dealing with times   StartTime %.2f (%s)
s   EndTime %.2f (%s)
s   ElapsedTime %.2f (%s)
t    N(	   R   R   t   appendt   Timet   timetoprettyR   R   t   inttoprettyR:   (   R   t   timelist(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyRN   †   s    	!	!	!c            s(   ‡  f d †  } d i  t | ˆ  i ƒ ƒ S(   s9   Return portion of statistics string about files and bytesc            sg   |  \ } } ˆ  i  | ƒ } | d j o d Sn | o d | | ˆ  i | ƒ f Sn d | | f Sd S(   s%   Return zero or one line of the stringRR   s   %s %s (%s)
s   %s %s
N(   R#   R   t   get_byte_summary_string(   t   stat_file_pairR    t   in_bytesR0   (   R   (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   fileline™   s     	RR   (   R:   R5   t   stat_file_pairs(   R   R[   (    (   R   s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyRO   —   s    
c         C   si   d } |  i  ƒ  } | d j	 o! | d | |  i | ƒ f 7} n |  i d j	 o | d |  i 7} n | S(   s<   Return portion of extended stat string about misc attributesRR   s#   TotalDestinationSizeChange %s (%s)
s
   Errors %d
N(   R2   R   RX   R   (   R   t   misc_stringt   tdsc(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyRP   ¥   s     c         C   sâ   | d j  o d } | } n d } x„ |  i  D]y \ } } | | j o` t | ƒ | } | d j o
 d } n | d j o
 d } n d } d | | | f | f Sq. q. Wt | ƒ } | d j o | d	 Sn d
 | | f Sd S(   s9   Turn byte count into human readable string like "7.23GB" i    t   -RR   id   i
   i   i   s   %s%%.%df %ss   1 bytes
   %s%d bytesN(   t   byte_abbrev_listRJ   t   round(   R   t
   byte_countt   signt   abbrev_bytest   abbrev_stringt   abbrev_countt	   precision(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyRX   ¯   s$    
  
 
  c         C   s1   d | } d t  | ƒ } d | |  i ƒ  | f S(   s0   Like get_stats_string, but add header and footers"   --------------[ %s ]--------------R_   s   %s
%s%s
(   RF   RQ   (   R   t   titlet   headert   footer(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   get_stats_logstringÃ   s    
c   	      C   s  d „  } x| i  d ƒ D]ü } | p q n | i  ƒ  } t | ƒ d j  o | | ƒ n | d  \ } } | |  i j o | | ƒ n ym y t | ƒ } Wn t j
 o d } n Xt | ƒ } | | j o |  i | | ƒ n |  i | | ƒ Wq t j
 o | | ƒ q Xq W|  S(   s>   Initialize attributes from string, return self for conveniencec         S   s   t  d |  ƒ ‚ d  S(   Ns   Bad line '%s'(   R    (   RC   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyRD   Ë   s    s   
i   N(   RE   RF   R   RH   RI   R   RJ   R%   (	   R   t   sRD   RC   t
   line_partsR    t   value_stringt   val1t   val2(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   set_stats_from_stringÉ   s.    	        c         C   s;   | i  d ƒ } | i |  i ƒ  ƒ | i ƒ  p t ‚ d S(   s&   Write statistics string to given rpatht   wbN(   t   opent   writeRQ   t   closet   AssertionError(   R   t   rpt   fp(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   write_stats_to_rpÜ   s    c         C   s0   | i  d ƒ } |  i | i ƒ  ƒ | i ƒ  |  S(   s6   Set statistics from rpath, return self for conveniencet   r(   Rs   Rq   t   readRu   (   R   Rw   Rx   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   read_stats_from_rpâ   s    
c         C   sV   t  | t ƒ p t ‚ x8 |  i D]- } |  i | ƒ | i | ƒ j o d Sq! q! Wd S(   s,   Return true if s has same statistics as selfi   N(   t
   isinstanceR   Rv   R6   R#   R   (   R   Rl   R    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   stats_equalé   s    
  c         C   s   x! |  i  D] } |  i | d ƒ q
 WxŒ | D]„ } x{ |  i  D]p } | i | ƒ d j o |  i | d ƒ q; |  i | ƒ d j	 o* |  i | | i | ƒ |  i | ƒ ƒ q; q; Wq+ Wd |  _ d |  _ xT |  i  D]I } |  i | ƒ d j	 o- |  i | |  i | ƒ t t | ƒ ƒ ƒ qÏ qÏ W|  S(   s9   Set self's attributes to average of those in statobj_listi    N(   R   R%   R#   R   R   R   RJ   RF   (   R   t   statobj_listR    t   statobj(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   set_to_averageð   s(    
   
  		
 	(c         C   s:   t  ƒ  } x* |  i D] } | i | |  i | ƒ ƒ q W| S(   s2   Return new StatsObj object with same stats as self(   t   StatObjR   R%   R#   (   R   Rl   R    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   get_statsobj_copy  s
    	
  (   s   SourceFiless   SourceFileSizes   MirrorFiless   MirrorFileSizes   NewFiless   NewFileSizes   DeletedFiless   DeletedFileSizes   ChangedFiless   ChangedSourceSizes   ChangedMirrorSizes   IncrementFiless   IncrementFileSize(   s   Errorss   TotalDestinationSizeChange(   s	   StartTimes   EndTimes   ElapsedTime(   R   N(   s   SourceFilesN(   s   SourceFileSizei   (   s   MirrorFilesN(   s   MirrorFileSizei   (   s   NewFilesN(   s   NewFileSizei   (   s   DeletedFilesN(   s   DeletedFileSizei   (   s   ChangedFilesN(   s   ChangedSourceSizei   (   s   ChangedMirrorSizei   (   s   IncrementFilesN(   s   IncrementFileSizei   i   i   @I       (   I       R   i   i   @(   i   @R   i   (   i   R   (   i   R   (!   R   R   t   __doc__t   ret   compileR;   R6   t   stat_misc_attrst   stat_time_attrsR   R   R\   R`   R!   R#   R%   R&   R'   R2   RB   RM   RQ   RN   RO   RP   RX   Rk   Rq   Ry   R|   R~   R   Rƒ   (    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyR      sV         												
							t   StatFileObjc           B   sS   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d d „ Z
 RS(	   s5   Build on StatsObj, add functions for processing filesc         C   sa   t  i |  ƒ x! |  i D] } |  i | d ƒ q W| d j o t i } n | |  _ d |  _ d S(   s2   StatFileObj initializer - zero out file attributesi    N(	   R   R!   R6   R%   R   RT   t   curtimeR   R   (   R   t
   start_timeR    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyR!     s    
   	c         C   s9   |  i  d 7_  | i ƒ  o |  i | i ƒ  7_ n d S(   s   Add stats of source filei   N(   R   t   isregR   t   getsize(   R   t   src_rorp(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   add_source_file  s     c         C   s9   |  i  d 7_  | i ƒ  o |  i | i ƒ  7_ n d S(   s   Add stats of destination sizei   N(   R   RŒ   R   R   (   R   t	   dest_rorp(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   add_dest_file  s     c         C   s%  | o€ | i  ƒ  os | ol | i  ƒ  o_ |  i d 7_ | i ƒ  o |  i | i ƒ  7_ n | i ƒ  o |  i | i ƒ  7_ q!n› | oF | i  ƒ  o9 |  i d 7_ | i ƒ  o |  i | i ƒ  7_ q!nN | oF | i  ƒ  o9 |  i d 7_ | i ƒ  o |  i	 | i ƒ  7_	 q!n d S(   s/   Update stats when src_rorp changes to dest_rorpi   N(
   t   lstatR   RŒ   R   R   R   R	   R
   R   R   (   R   RŽ   R   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   add_changed  s    (    c         C   s9   |  i  d 7_  | i ƒ  o |  i | i ƒ  7_ n d S(   s    Update stats with increment rorpi   N(   R   RŒ   R   R   (   R   t   inc_rorp(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   add_increment,  s     c         C   s   |  i  d 7_  d S(   s   Increment error stat by 1i   N(   R   (   R   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt	   add_error1  s    c         C   s*   | d j o t i ƒ  } n | |  _ d S(   s#   Record end time and set other statsN(   R   t   timeR   (   R   t   end_time(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   finish5  s     N(   R   R   R„   R   R!   R   R‘   R“   R•   R–   R™   (    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyR‰     s   					c           C   s   t  p
 t t  ‚ t ƒ  a  t  S(   s9   Return new stat file object, record as active stat object(   t   _active_statfileobjRv   R‰   (    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   init_statfileobj<  s    	c           C   s   t  o t  Sn d Sd S(   s+   Return active stat file object if it existsN(   Rš   R   (    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   get_active_statfileobjC  s     c           C   s   t  o t  i ƒ  n d S(   s3   Record error on active statfileobj, if there is oneN(   Rš   R–   (    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   record_errorH  s     c         C   s   t  o t  i |  ƒ n d S(   s@   Add statistics of increment rp incrp if there is active statfileN(   Rš   R•   (   R”   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   process_incrementL  s     c          C   sY   t  p t ‚ t i i d ƒ }  t i |  d t i ƒ } t  i	 ƒ  t  i
 | ƒ d a  d S(   s:   Write active StatFileObj object to session statistics filet   session_statisticst   dataN(   Rš   Rv   t   Globalst   rbdirRS   t	   incrementt   get_incRT   RŠ   R™   Ry   R   (   t   rp_baset   session_stats_rp(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   write_active_statfileobjP  s    
c          C   sQ   t  p t ‚ t  i ƒ  t  i d ƒ }  t i i |  ƒ t i i	 i
 i |  ƒ d S(   s4   Print statistics of active statobj to stdout and logs   Session statisticsN(   Rš   Rv   R™   Rk   t   logt   Logt   log_to_fileR¡   t   client_connt   syst   stdoutRt   (   t   statmsg(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   print_active_statsZ  s
    
t	   FileStatsc           B   sV   e  Z d  Z d \ Z Z d Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z RS(	   s7   Keep track of less detailed stats on file-by-file basisc         C   sÖ   |  i  p |  i p t |  i  |  i f ‚ t i i d ƒ } t i o d p d } t i | | t	 i
 ƒ |  _ |  i i ƒ  p t ‚ |  i i d d t i ƒ|  _  t i o d p d |  _ |  i ƒ  g  |  _ d S(	   s+   Open file stats object and prepare to writet   file_statisticss   data.gzR    Rr   t   compresst    s   
N(   t   _fileobjt   _rpRv   R¡   R¢   RS   t   compressionR£   R¤   RT   RŠ   R’   Rs   t   null_separatort	   _line_sept   write_docstringt   line_buffer(   t   clst   rpbaset   suffix(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   inith  s    +
c         C   s>   |  i  i d ƒ |  i  i |  i ƒ |  i  i d |  i ƒ d S(   s7   Write the first line (a documentation string) into files.   # Format of each line in file statistics file:s6   # Filename Changed SourceSize MirrorSize IncrementSizeN(   R´   Rt   R¸   (   R»   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyR¹   u  s    c         C   s¤   | o | i  ƒ  } n | i  ƒ  } t i | ƒ } t |  i | | | g ƒ } d i | t | ƒ g | ƒ } |  i i | ƒ t	 |  i ƒ d j o |  i
 ƒ  n d S(   s(   Update file stats with given informationR   id   N(   t   get_indexpatht   metadatat
   quote_pathR5   t   get_sizeR:   R3   Rº   RS   RF   t   write_buffer(   R»   t   source_rorpR   t   changedt   incRA   t	   size_listRC   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyt   update|  s      c         C   s8   | p d Sn | i  ƒ  o t | i ƒ  ƒ Sn d Sd S(   s@   Return the size of rorp as string, or "NA" if not a regular filet   NAt   0N(   RŒ   R3   R   (   R»   t   rorp(    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyRÂ   ‡  s
      c         C   sW   |  i  o
 |  i p t ‚ |  i  i d ƒ |  i i |  i i |  i  ƒ ƒ g  |  _  d S(   sˆ   Write buffer to file because buffer is full

		The buffer part is necessary because the GzipFile.write()
		method seems fairly slow.

		RR   N(   Rº   R´   Rv   RS   Rt   R¸   R:   (   R»   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyRÃ     s    c         C   s[   |  i  p t |  i  ‚ |  i o |  i ƒ  n |  i  i ƒ  p t ‚ d |  _  |  _ d S(   s   Close file stats fileN(   R´   Rv   Rº   RÃ   Ru   R   Rµ   (   R»   (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyRu   ™  s
    
 N(   NN(   R   R   R„   R   R´   Rµ   R¸   R¾   R¹   RÈ   RÂ   RÃ   Ru   (    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pyR°   d  s   					(    (    (   R„   R…   R8   R—   R¡   RT   R£   R¨   t   staticRÀ   t	   ExceptionR    R   R‰   R   Rš   R›   Rœ   R   Rž   R§   R¯   R°   t	   MakeClass(    (    (    s<   /var/lib/python-support/python2.5/rdiff_backup/statistics.pys   <module>   s   $Hð0					
	
<