-
J<c       s     d  Z    d k Z d k Z d k Z  d k l Z l Z l Z  d k l	 Z	  d f  d     YZ
 - d e
 f d     YZ ] e d  Z p d	 f  d
     YZ d S(   sK  
    MoinMoin - Edit log management

    Copyright (c) 2000, 2001, 2002 by Jrgen Hermann <jh@web.de>
    All rights reserved, see COPYING for details.

    Functions to keep track of when people have changed pages, so we
    can do the recent changes page and so on.

    $Id: editlog.py,v 1.16 2002/03/27 22:41:14 jhermann Exp $
N(   s   configs   users   wikiutil(   s   Pages   LogBasec      s2    d  Z    d   Z  d   Z $ d   Z RS(   s%    Basic interface for log stores.
    c    s     | |  _ d  S(   N(   s   optstrs   selfs   options(   s   selfs   optstr(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   __init__ s   c    s    ! " t  Sd S(   s|    Perform a self-test, i.e. check for correct config, permissions,
            etc. Return error message or `false`.
        N(   s   None(   s   self(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   sanityCheck s   c    s   $ % & d S(   s    Add an entry to the editlog N(    (   s   selfs   pagenames   hosts   mtimes   comments   action(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   addEntry$ s   (   s   __doc__s   __init__s   sanityChecks   addEntry(    (    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   LogBase s   	s   LogTextc      s5   - d  Z  4 6 d   Z : d   Z A d d  Z RS(   s    Storage for log entries in a plain text file.

        The editlog is stored with one record per line, as tab-separated
        words: pagename, host, time, hostname, userid

        TODO: Check values written in are reasonable
    c    s8   6 7 t  i |  |  8 t i i t i |  |  _	 d  S(   N(
   s   LogBases   __init__s   selfs   optstrs   oss   paths   joins   configs   data_dirs   filename(   s   selfs   optstr(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   __init__6 s   c    sC   : < = t  i |  i t  i  o > d |  i f Sn ? t Sd S(   s(    Check for editlog file access.
        s"   The edit log '%s' is not writable!N(   s   oss   accesss   selfs   filenames   W_OKs   None(   s   self(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   sanityCheck: s   s   SAVEc    s  A B C d k  } E y F | i |  d } Wn" G | i j
 o H | } n XJ t i d d  }
 K t i | |
  } M t
 |  i d  }	 N t i t i |  | | | t i   i | | f O d  d } P z' R |	 i d d  S |	 i |  Wd T V |	 i   Xd S(	   s    Add an entry to the editlog Ni    s   	
s      s   a+s   	s   
i   (   s   sockets   gethostbyaddrs   hosts   hostnames   errors   strings	   maketranss   remap_charss	   translates   comments   opens   selfs   filenames   logfiles   joins   wikiutils   quoteFilenames   pagenames   mtimes   users   Users   ids   actions   entrys   seeks   writes   close(   s   selfs   pagenames   hosts   mtimes   comments   actions   sockets   hostnames   entrys   logfiles   remap_chars(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   addEntryA s    4(   s   __doc__s   __init__s   sanityChecks   addEntry(    (    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   LogText- s   	c    sp   ] c d |  t j o d t i }  n f t i |  d d  \ } } g | d j o h t |  Sn i t Sd S(   s   Creates a storage object that provides an implementation of the
        storage type given in the `option` parameter; option consists
        of a `schema:` part, followed by a schema-specific option string.

        Currently supported schemas are: "text".
    s   :i   s   textN(	   s   options   Nones   configs   LogStores   strings   splits   schemas   optstrs   LogText(   s   options   optstrs   schema(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   makeLogStore] s    s   EditLogc      s   p d  Z  w y 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(   s   A read-only form of the editlog. Do NOT access the file
        config.editlog_name directly, since this may well end up
        in a database.

        After you called next(), the following member variables are valid:
        pagename, addr, ed_time, hostname, userid
    i   c    s   { | d |  _ } h  |  _ ~ t i i t i d  |  _  |  i	   |  _
  | i d d  o  |  i
 i   n  |  i d  d  S(   Ni    s   editlogs   reverses    (   s   selfs   _indexs
   _usercaches   oss   paths   joins   configs   data_dirs	   _filenames   _editlog_raw_liness   _liness   kws   gets   reverses   _parse_log_line(   s   selfs   kw(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   __init__{ s   c    sB      |  i d  o  |  i d |  _  d Sn  d Sd S(   s8    Load next editlog entry, return false after last entry i    i   N(   s   selfs   peeks   _index(   s   self(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   next s
   c    sy      |  i | }  | d j  p t |  i  | j o  |  i d   d Sn  |  i |  i |   d Sd S(   sH    Peek `offset` entries ahead (or behind), return false after last entry i    s    i   N(   s   selfs   _indexs   offsets   idxs   lens   _liness   _parse_log_line(   s   selfs   offsets   idx(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   peek s   &c    s      d |  _ d S(   s    Reset for a new iteration i    N(   s   selfs   _index(   s   self(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   reset s   c    s      |  i |  }  g  }  |  i    xG  |  i   o6  | |   o"  | i |  i |  i	 d  n q4 W | |  _  |  i   d S(   s    Filter current entries, reset() does NOT clear any filter
            previously set. The cursor is automatically set to the
            first entry.
        i   N(
   s   selfs   _make_conditions   kws   conds   rests   resets   nexts   appends   _liness   _index(   s   selfs   kws   conds   rest(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   filter s   	 'c    s      |  i |  }  xR t t |  i   D ]8 }  |  i |  i |   | |   o  d Sn q1 W |  i d   d Sd S(   s0    Find an entry, return true on success.
        i   s    i    N(	   s   selfs   _make_conditions   kws   conds   ranges   lens   _liness   indexs   _parse_log_line(   s   selfs   kws   indexs   cond(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   find s    	c    s      |  i }  |  i o  |  i i |  i  o#  t i |  i  |  i |  i <n  |  i |  i }  | i	 oI  t
 | i	  }  | i   o  | } n  | i	 p |  i } n n  | Sd S(   sQ    Return a string or Page object representing the user that did the edit.
        N(   s   selfs   hostnames   results   userids
   _usercaches   has_keys   users   Users   userdatas   names   Pages   pgs   exists(   s   selfs   userdatas   pgs   result(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   getEditorData s   #c    sM      |  i   }  t | t  o  | i   Sn  t i |  Sd S(   sL    Return a HTML-safe string representing the user that did the edit.
        N(   s   selfs   getEditorDatas   results
   isinstances   Pages   link_tos   cgis   escape(   s   selfs   result(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys	   getEditor s
   c    sJ      y  t  i i |  i  SWn   t  i j
 o  d Sn Xd S(   s    Return size in bytes.
        i    N(   s   oss   paths   getsizes   selfs	   _filenames   error(   s   self(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   size s
   c    s     t  |  i  Sd  S(   N(   s   lens   selfs   _lines(   s   self(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   __len__ s   c    s      yA  t  |  i d  }  z  | i   SWd   | i   XWnN  t j
 o? }  d k }  | i | i	 j o  g  Sn
  |  n X g  Sd S(   s"    Load a list of raw editlog lines s   rtN(
   s   opens   selfs	   _filenames   logfiles	   readliness   closes   IOErrors   ers   errnos   ENOENT(   s   selfs   errnos   logfiles   er(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   _editlog_raw_lines s   c    s	  t  i t  i |  d  } x. t |  |  i j  o | i d  q* W	| |  i  \ |  _	 |  _
 |  _ |  _ |  _ |  _ |  _ |  i o |  i
 |  _ n t i |  i	  |  _	 t |  i p d  |  _ |  i o d |  _ n d S(   se    Parse a log line to member variables:
            pagename, addr, ed_time, hostname, userid
        s   	s    s   0s   SAVEN(   s   strings   splits   strips   lines   fieldss   lens   selfs   _NUM_FIELDSs   appends   pagenames   addrs   ed_times   hostnames   userids   comments   actions   wikiutils   unquoteFilenames   float(   s   selfs   lines   fields(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   _parse_log_lines     :c    s   d } xO d d d d g D]8 } | i |  o d | | | | f } n q% W| i d  o! d | t | d  f } n  t d	 |  Sd
 S(   s    Create a callable that filters an entry according to values
            in the dictionary "kw". The keys in that dictionary have to
            be the member names of the fields ("pagename", etc.).
        s   1s   pagenames   addrs   hostnames   userids   %s and x.%s == %ss   ed_times   %s and int(x.ed_time) == %ss
   lambda x: N(   s   exprs   fields   kws   has_keys   ints   eval(   s   selfs   kws   fields   expr(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   _make_conditions   	 	#!(   s   __doc__s   _NUM_FIELDSs   __init__s   nexts   peeks   resets   filters   finds   getEditorDatas	   getEditors   sizes   __len__s   _editlog_raw_liness   _parse_log_lines   _make_condition(    (    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   EditLogp s   		
	(   s   __doc__s   cgis   oss   strings   MoinMoins   configs   users   wikiutils   MoinMoin.Pages   Pages   LogBases   LogTexts   Nones   makeLogStores   EditLog(   s   cgis   LogBases   LogTexts   strings   makeLogStores   configs   users   wikiutils   oss   Pages   EditLog(    (    sL   /home/ai3/gregs/moin-install/lib/python2.2/site-packages/MoinMoin/editlog.pys   ? s   0