2004-07-07 18:01:25 +00:00
# -*- coding: iso-8859-1 -*-
# Copyright (C) 2000-2004 Bastian Kleineidam
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import time
import csv
2004-07-19 08:58:59 +00:00
import linkcheck . i18n
import linkcheck . logger . StandardLogger
import linkcheck . logger . Logger
2004-07-07 18:01:25 +00:00
class CSVLogger ( linkcheck . logger . StandardLogger . StandardLogger ) :
""" CSV output. CSV consists of one line per entry. Entries are
separated by a semicolon .
"""
def __init__ ( self , * * args ) :
super ( CSVLogger , self ) . __init__ ( * * args )
self . separator = args [ ' separator ' ]
self . lineterminator = " \n "
def init ( self ) :
2004-07-19 08:58:59 +00:00
linkcheck . logger . Logger . Logger . init ( self )
2004-07-07 18:01:25 +00:00
if self . fd is None :
return
self . starttime = time . time ( )
if self . has_field ( " intro " ) :
self . fd . write ( " # " + ( linkcheck . i18n . _ ( " created by %s at %s %s " ) % ( linkcheck . Config . AppName , linkcheck . logger . strtime ( self . starttime ) , self . lineterminator ) ) )
self . fd . write ( " # " + ( linkcheck . i18n . _ ( " Get the newest version at %s %s " ) % ( linkcheck . Config . Url , self . lineterminator ) ) )
self . fd . write ( " # " + ( linkcheck . i18n . _ ( " Write comments and bugs to %s %s %s " ) % \
( linkcheck . Config . Email , self . lineterminator , self . lineterminator ) ) )
self . fd . write (
linkcheck . i18n . _ ( " # Format of the entries: " ) + self . lineterminator + \
" # urlname; " + self . lineterminator + \
" # recursionlevel; " + self . lineterminator + \
" # parentname; " + self . lineterminator + \
" # baseref; " + self . lineterminator + \
" # errorstring; " + self . lineterminator + \
" # validstring; " + self . lineterminator + \
" # warningstring; " + self . lineterminator + \
" # infostring; " + self . lineterminator + \
" # valid; " + self . lineterminator + \
" # url; " + self . lineterminator + \
" # line; " + self . lineterminator + \
" # column; " + self . lineterminator + \
" # name; " + self . lineterminator + \
" # dltime; " + self . lineterminator + \
" # dlsize; " + self . lineterminator + \
" # checktime; " + self . lineterminator + \
" # cached; " + self . lineterminator )
self . flush ( )
self . writer = csv . writer ( self . fd , dialect = ' excel ' , delimiter = self . separator , lineterminator = self . lineterminator )
def newUrl ( self , urlData ) :
if self . fd is None :
return
row = [ urlData . urlName , urlData . recursionLevel ,
linkcheck . url . url_quote ( urlData . parentName or " " ) , urlData . baseRef ,
urlData . errorString , urlData . validString ,
urlData . warningString , urlData . infoString ,
urlData . valid , linkcheck . url . url_quote ( urlData . url ) ,
urlData . line , urlData . column ,
urlData . name , urlData . dltime ,
urlData . dlsize , urlData . checktime ,
urlData . cached ]
self . writer . writerow ( row )
self . flush ( )
def endOfOutput ( self , linknumber = - 1 ) :
if self . fd is None :
return
self . stoptime = time . time ( )
if self . has_field ( " outro " ) :
duration = self . stoptime - self . starttime
self . fd . write ( " # " + linkcheck . i18n . _ ( " Stopped checking at %s ( %s ) %s " ) % \
( linkcheck . logger . strtime ( self . stoptime ) ,
linkcheck . logger . strduration ( duration ) , self . lineterminator ) )
self . flush ( )
self . fd . close ( )
self . fd = None