示例#1
0
    def GenTextConfigFile(self, cf):
        """ Generate config file in text format """

        from common import bin_crypt
        
        # write values
        cf.write(';;HarvestMan Configuration File version 2.0\n\n')
        sys.stdout.write('.....')
        cf.write(';;project related variables\n')
        cf.write(self.fitString('project.url') + str(self.url) + '\n')
        cf.write(self.fitString('project.name') + str(self.project) + '\n')
        cf.write(self.fitString('project.basedir') + str(self.basedir) + '\n')
        cf.write(self.fitString('project.verbosity') + str(self.verbosity) + '\n')
        cf.write(self.fitString('project.timeout') + str(self.projtimeout) + '\n\n')
        
        sys.stdout.write('.....')
        cf.write(';;network related variables\n')
        if self.proxy:
            cf.write(self.fitString('network.proxyserver') + bin_crypt(self.proxy) + '\n')
            cf.write(self.fitString('network.proxyport') + str(self.proxyport) + '\n')
        if self.puser:
            cf.write(self.fitString('network.proxyuser') + bin_crypt(self.puser) + '\n')
        if self.ppasswd:
            cf.write(self.fitString('network.proxypasswd') + bin_crypt(self.ppasswd) + '\n')
        cf.write(self.fitString('network.urlserver') + str(int(self.urlserver)) + '\n')
        cf.write(self.fitString('network.urlport') + str(self.urlport) + '\n')            
        
        cf.write('\n')
        cf.write(';;url related variables\n')
        if self.siteusername:
            cf.write(self.fitString('url.username') + bin_crypt(self.siteusername) + '\n')
        if self.sitepasswd:
            cf.write(self.fitString('url.password') + bin_crypt(self.sitepasswd) + '\n')
        cf.write('\n')

        sys.stdout.write('..........')
        cf.write(';;download related variables\n')

        cf.write(self.fitString('download.html') + str(self.html) + '\n')
        cf.write(self.fitString('download.images') + str(self.images) + '\n')
        cf.write(self.fitString('download.javascript') + str(int(self.javascript)) + '\n')
        cf.write(self.fitString('download.javaapplet') + str(int(self.javaapplet)) + '\n')
        cf.write(self.fitString('download.forms') + str(int(self.getqueryforms)) + '\n')
        cf.write(self.fitString('download.cookies') + str(int(self.cookies)) + '\n')
        
        cf.write(self.fitString('download.cache') + str(int(self.pagecache)) + '\n')
        cf.write(self.fitString('download.datacache') + str(int(self.datacache)) + '\n')
        cf.write(self.fitString('download.retries') + str(int(self.retryfailed)) + '\n')

        sys.stdout.write('....................')
        cf.write(';;download control variables\n')
        cf.write(self.fitString('control.imagelinks') + str(int(self.getimagelinks)) + '\n')
        cf.write(self.fitString('control.stylesheetlinks') + str(int(self.getstylesheets)) + '\n')
        cf.write(self.fitString('control.fetchlevel') + str(self.fetchlevel) + '\n')
        cf.write(self.fitString('control.extserverlinks') + str(int(self.eserverlinks)) + '\n')
        cf.write(self.fitString('control.extpagelinks') + str(int(self.epagelinks)) + '\n')
        cf.write(self.fitString('control.depth') + str(self.depth) + '\n')
        cf.write(self.fitString('control.extdepth') + str(self.extdepth) + '\n')
        cf.write(self.fitString('control.subdomain') + str(int(self.subdomain)) + '\n')
        
        cf.write(self.fitString('control.maxextservers') + str(self.maxextservers) + '\n')
        cf.write(self.fitString('control.maxextdirs') + str(self.maxextdirs) + '\n')
        cf.write(self.fitString('control.maxfiles') + str(self.maxfiles) + '\n')
        cf.write(self.fitString('control.maxfilesize') + str(self.maxfilesize) + '\n')
        cf.write(self.fitString('control.connections') + str(self.connections) + '\n')
        cf.write(self.fitString('control.requests') + str(self.requests) + '\n')
        cf.write(self.fitString('control.timelimit') + str(self.timelimit) + '\n')

        cf.write(self.fitString('control.robots') + str(int(self.robots)) + '\n')
        cf.write(self.fitString('control.urlpriority') + str(self.urlpriority) + '\n')
        cf.write(self.fitString('control.serverpriority') + str(self.serverpriority) + '\n')
        
        cf.write(self.fitString('control.urlfilter') + str(self.urlfilter) + '\n')
        cf.write(self.fitString('control.serverfilter') + str(self.serverfilter) + '\n')
        cf.write(self.fitString('control.wordfilter') + str(self.wordfilter) + '\n')        
        cf.write(self.fitString('control.junkfilter') + str(int(self.junkfilter)) + '\n\n')        


        sys.stdout.write('......')
        cf.write(';;system related variables\n')
        cf.write(self.fitString('system.workers') + str(int(self.usethreads)) + '\n')
        cf.write(self.fitString('system.threadtimeout') + str(self.timeout) + '\n')
        cf.write(self.fitString('system.threadpoolsize') + str(self.threadpoolsize) + '\n')
        
        cf.write(self.fitString('system.trackers') + str(self.maxtrackers) + '\n')
        cf.write(self.fitString('system.locale') + str(self.locale) + '\n')        
        cf.write(self.fitString('system.fastmode') + str(int(self.fastmode)) + '\n\n')

        sys.stdout.write('..')
        cf.write(';;indexer related variables\n')
        cf.write(self.fitString('indexer.localise') + str(int(self.localise)) + '\n\n')

        sys.stdout.write('....')
        cf.write(';;files related variables\n')
        cf.write(self.fitString('files.urlslistfile') + str(self.urlslistfile) + '\n')
        cf.write(self.fitString('files.urltreefile') + str(self.urltreefile) + '\n\n')
        cf.write(self.fitString('files.archive') + str(self.archive) + '\n')
        cf.write(self.fitString('files.archformat') + str(self.archformat) + '\n')
        cf.write(self.fitString('files.urlheaders') + str(self.urlheaders) + '\n')
        cf.write(self.fitString('files.urlheaderformat') + str(self.urlheadersformat) + '\n\n')                
        sys.stdout.write('..')
        cf.write(';;display related variables\n')
        cf.write(self.fitString('display.browsepage') + str(int(self.browsepage)) + '\n\n')

        cf.close()
        print "\nWrote file 'config.txt'."
    def GenTextConfigFile(self, cf):
        """ Generate config file in text format """

        from common import bin_crypt

        # write values
        cf.write(';;HarvestMan Configuration File version 2.0\n\n')
        sys.stdout.write('.....')
        cf.write(';;project related variables\n')
        cf.write(self.fitString('project.url') + str(self.url) + '\n')
        cf.write(self.fitString('project.name') + str(self.project) + '\n')
        cf.write(self.fitString('project.basedir') + str(self.basedir) + '\n')
        cf.write(
            self.fitString('project.verbosity') + str(self.verbosity) + '\n')
        cf.write(
            self.fitString('project.timeout') + str(self.projtimeout) + '\n\n')

        sys.stdout.write('.....')
        cf.write(';;network related variables\n')
        if self.proxy:
            cf.write(
                self.fitString('network.proxyserver') + bin_crypt(self.proxy) +
                '\n')
            cf.write(
                self.fitString('network.proxyport') + str(self.proxyport) +
                '\n')
        if self.puser:
            cf.write(
                self.fitString('network.proxyuser') + bin_crypt(self.puser) +
                '\n')
        if self.ppasswd:
            cf.write(
                self.fitString('network.proxypasswd') +
                bin_crypt(self.ppasswd) + '\n')
        cf.write(
            self.fitString('network.urlserver') + str(int(self.urlserver)) +
            '\n')
        cf.write(self.fitString('network.urlport') + str(self.urlport) + '\n')

        cf.write('\n')
        cf.write(';;url related variables\n')
        if self.siteusername:
            cf.write(
                self.fitString('url.username') + bin_crypt(self.siteusername) +
                '\n')
        if self.sitepasswd:
            cf.write(
                self.fitString('url.password') + bin_crypt(self.sitepasswd) +
                '\n')
        cf.write('\n')

        sys.stdout.write('..........')
        cf.write(';;download related variables\n')

        cf.write(self.fitString('download.html') + str(self.html) + '\n')
        cf.write(self.fitString('download.images') + str(self.images) + '\n')
        cf.write(
            self.fitString('download.javascript') + str(int(self.javascript)) +
            '\n')
        cf.write(
            self.fitString('download.javaapplet') + str(int(self.javaapplet)) +
            '\n')
        cf.write(
            self.fitString('download.forms') + str(int(self.getqueryforms)) +
            '\n')
        cf.write(
            self.fitString('download.cookies') + str(int(self.cookies)) + '\n')

        cf.write(
            self.fitString('download.cache') + str(int(self.pagecache)) + '\n')
        cf.write(
            self.fitString('download.datacache') + str(int(self.datacache)) +
            '\n')
        cf.write(
            self.fitString('download.retries') + str(int(self.retryfailed)) +
            '\n')

        sys.stdout.write('....................')
        cf.write(';;download control variables\n')
        cf.write(
            self.fitString('control.imagelinks') +
            str(int(self.getimagelinks)) + '\n')
        cf.write(
            self.fitString('control.stylesheetlinks') +
            str(int(self.getstylesheets)) + '\n')
        cf.write(
            self.fitString('control.fetchlevel') + str(self.fetchlevel) + '\n')
        cf.write(
            self.fitString('control.extserverlinks') +
            str(int(self.eserverlinks)) + '\n')
        cf.write(
            self.fitString('control.extpagelinks') +
            str(int(self.epagelinks)) + '\n')
        cf.write(self.fitString('control.depth') + str(self.depth) + '\n')
        cf.write(
            self.fitString('control.extdepth') + str(self.extdepth) + '\n')
        cf.write(
            self.fitString('control.subdomain') + str(int(self.subdomain)) +
            '\n')

        cf.write(
            self.fitString('control.maxextservers') + str(self.maxextservers) +
            '\n')
        cf.write(
            self.fitString('control.maxextdirs') + str(self.maxextdirs) + '\n')
        cf.write(
            self.fitString('control.maxfiles') + str(self.maxfiles) + '\n')
        cf.write(
            self.fitString('control.maxfilesize') + str(self.maxfilesize) +
            '\n')
        cf.write(
            self.fitString('control.connections') + str(self.connections) +
            '\n')
        cf.write(
            self.fitString('control.requests') + str(self.requests) + '\n')
        cf.write(
            self.fitString('control.timelimit') + str(self.timelimit) + '\n')

        cf.write(
            self.fitString('control.robots') + str(int(self.robots)) + '\n')
        cf.write(
            self.fitString('control.urlpriority') + str(self.urlpriority) +
            '\n')
        cf.write(
            self.fitString('control.serverpriority') +
            str(self.serverpriority) + '\n')

        cf.write(
            self.fitString('control.urlfilter') + str(self.urlfilter) + '\n')
        cf.write(
            self.fitString('control.serverfilter') + str(self.serverfilter) +
            '\n')
        cf.write(
            self.fitString('control.wordfilter') + str(self.wordfilter) + '\n')
        cf.write(
            self.fitString('control.junkfilter') + str(int(self.junkfilter)) +
            '\n\n')

        sys.stdout.write('......')
        cf.write(';;system related variables\n')
        cf.write(
            self.fitString('system.workers') + str(int(self.usethreads)) +
            '\n')
        cf.write(
            self.fitString('system.threadtimeout') + str(self.timeout) + '\n')
        cf.write(
            self.fitString('system.threadpoolsize') +
            str(self.threadpoolsize) + '\n')

        cf.write(
            self.fitString('system.trackers') + str(self.maxtrackers) + '\n')
        cf.write(self.fitString('system.locale') + str(self.locale) + '\n')
        cf.write(
            self.fitString('system.fastmode') + str(int(self.fastmode)) +
            '\n\n')

        sys.stdout.write('..')
        cf.write(';;indexer related variables\n')
        cf.write(
            self.fitString('indexer.localise') + str(int(self.localise)) +
            '\n\n')

        sys.stdout.write('....')
        cf.write(';;files related variables\n')
        cf.write(
            self.fitString('files.urlslistfile') + str(self.urlslistfile) +
            '\n')
        cf.write(
            self.fitString('files.urltreefile') + str(self.urltreefile) +
            '\n\n')
        cf.write(self.fitString('files.archive') + str(self.archive) + '\n')
        cf.write(
            self.fitString('files.archformat') + str(self.archformat) + '\n')
        cf.write(
            self.fitString('files.urlheaders') + str(self.urlheaders) + '\n')
        cf.write(
            self.fitString('files.urlheaderformat') +
            str(self.urlheadersformat) + '\n\n')
        sys.stdout.write('..')
        cf.write(';;display related variables\n')
        cf.write(
            self.fitString('display.browsepage') + str(int(self.browsepage)) +
            '\n\n')

        cf.close()
        print "\nWrote file 'config.txt'."
示例#3
0
    def GenXmlConfigFile(self, cf):
        """ Generate config file in xml format """

        from common import bin_crypt
        
        # Write xml PI
        cf.write('<?xml version="1.0" encoding="utf-8"?>\n')
        cf.write('<!DOCTYPE HarvestMan SYSTEM "HarvestMan.dtd">\n')
        # HarvestMan element
        cf.write('<HarvestMan>\n')
        # config element
        cf.write('\t<config version="3.0" xmlversion="1.0">\n\n')
        # project node
        cf.write('\t\t<project skip="0">\n')
        cf.write("".join(('\t\t\t<url>',self.url,'</url>\n')))
        cf.write("".join(('\t\t\t<name>',self.project,'</name>\n')))
        cf.write("".join(('\t\t\t<basedir>',self.basedir,'</basedir>\n')))
        cf.write("".join(('\t\t\t<verbosity value="',str(self.verbosity),'"/>\n')))
        cf.write("".join(('\t\t\t<timeout value="',str(self.projtimeout),'"/>\n')))
        # end of project node
        cf.write('\t\t</project>\n\n')

        # network node
        cf.write('\t\t<network>\n')
        # proxy
        cf.write('\t\t\t<proxy>\n')
        cf.write("".join(('\t\t\t\t<proxyserver>',bin_crypt(self.proxy),'</proxyserver>\n')))
        cf.write("".join(('\t\t\t\t<proxyuser>',bin_crypt(self.puser),'</proxyuser>\n')))
        cf.write("".join(('\t\t\t\t<proxypasswd>',bin_crypt(self.ppasswd),'</proxypasswd>\n')))
        cf.write("".join(('\t\t\t\t<proxyport value="',str(self.proxyport),'"/>\n')))        
        cf.write('\t\t\t</proxy>\n')
        # url server
        cf.write("".join(('\t\t\t<urlserver status="',str(self.urlserver),'">\n')))
        cf.write("".join(('\t\t\t\t<urlhost>',self.urlhost,'</urlhost>\n')))
        cf.write("".join(('\t\t\t\t<urlport value="',str(self.urlport),'"/>\n')))
        cf.write('\t\t\t</urlserver>\n')
        # end of network node
        cf.write('\t\t</network>\n\n')

        # download node
        cf.write('\t\t<download>\n')
        # types
        cf.write('\t\t\t<types>\n')
        cf.write("".join(('\t\t\t\t<html value="',str(self.html),'"/>\n')))
        cf.write("".join(('\t\t\t\t<images value="',str(self.images),'"/>\n')))
        cf.write("".join(('\t\t\t\t<javascript value="',str(self.javascript),'"/>\n')))
        cf.write("".join(('\t\t\t\t<javaapplet value="',str(self.javaapplet),'"/>\n')))
        cf.write("".join(('\t\t\t\t<forms value="',str(self.getqueryforms),'"/>\n')))
        cf.write("".join(('\t\t\t\t<cookies value="',str(self.cookies),'"/>\n')))
        cf.write('\t\t\t</types>\n')
        # cache
        cf.write("".join(('\t\t\t<cache status="',str(self.pagecache),'">\n')))
        cf.write("".join(('\t\t\t\t<datacache value="',str(self.datacache),'"/>\n')))
        cf.write('\t\t\t</cache>\n')
        # misc
        cf.write('\t\t\t<misc>\n')
        cf.write("".join(('\t\t\t\t<retries value="',str(self.retryfailed),'"/>\n')))
        cf.write('\t\t\t</misc>\n')
        # end of download node
        cf.write('\t\t</download>\n\n')

        # control node
        cf.write('\t\t<control>\n')
        # links
        cf.write('\t\t\t<links>\n')
        cf.write("".join(('\t\t\t\t<imagelinks value="', str(self.getimagelinks), '"/>\n')))
        cf.write("".join(('\t\t\t\t<stylesheetlinks value="', str(self.getstylesheets), '"/>\n')))
        cf.write('\t\t\t</links>\n')
        # extent
        cf.write('\t\t\t<extent>\n')
        cf.write("".join(('\t\t\t\t<fetchlevel value="', str(self.fetchlevel), '"/>\n')))
        cf.write("".join(('\t\t\t\t<extserverlinks value="', str(self.eserverlinks), '"/>\n')))
        cf.write("".join(('\t\t\t\t<extpagelinks value="', str(self.epagelinks), '"/>\n')))
        cf.write("".join(('\t\t\t\t<depth value="', str(self.depth), '"/>\n')))
        cf.write("".join(('\t\t\t\t<extdepth value="', str(self.extdepth), '"/>\n')))
        cf.write("".join(('\t\t\t\t<subdomain value="', str(self.subdomain), '"/>\n')))                
        cf.write('\t\t\t</extent>\n')
        # limits
        cf.write('\t\t\t<limits>\n')
        cf.write("".join(('\t\t\t\t<maxextservers value="', str(self.maxextservers), '"/>\n')))
        cf.write("".join(('\t\t\t\t<maxextdirs value="', str(self.maxextdirs), '"/>\n')))
        cf.write("".join(('\t\t\t\t<maxfiles value="', str(self.maxfiles), '"/>\n')))
        cf.write("".join(('\t\t\t\t<maxfilesize value="', str(self.maxfilesize), '"/>\n')))
        cf.write("".join(('\t\t\t\t<connections value="', str(self.connections), '"/>\n')))
        cf.write("".join(('\t\t\t\t<requests value="', str(self.requests), '"/>\n')))
        cf.write("".join(('\t\t\t\t<timelimit value="', str(self.timelimit), '"/>\n')))        
        cf.write('\t\t\t</limits>\n')
        # rules
        cf.write('\t\t\t<rules>\n')
        cf.write("".join(('\t\t\t\t<robots value="', str(self.robots), '"/>\n')))
        cf.write("".join(('\t\t\t\t<urlpriority>', str(self.urlpriority), '</urlpriority>\n')))
        cf.write("".join(('\t\t\t\t<serverpriority>', str(self.serverpriority), '</serverpriority>\n')))
        cf.write('\t\t\t</rules>\n')
        # filters
        cf.write('\t\t\t<filters>\n')
        cf.write("".join(('\t\t\t\t<urlfilter>', str(self.urlfilter), '</urlfilter>\n')))
        cf.write("".join(('\t\t\t\t<serverfilter>', str(self.serverfilter), '</serverfilter>\n')))
        cf.write("".join(('\t\t\t\t<wordfilter>', str(self.wordfilter), '</wordfilter>\n')))
        cf.write("".join(('\t\t\t\t<junkfilter value="', str(self.junkfilter), '"/>\n')))
        cf.write('\t\t\t</filters>\n')
        # end of control node
        cf.write('\t\t</control>\n\n')

        # system node
        cf.write('\t\t<system>\n')
        cf.write("".join(('\t\t\t<workers status="',str(self.usethreads),'" size="',str(self.threadpoolsize),
                          '" timeout="',str(self.timeout),'"/>\n')))
        cf.write("".join(('\t\t\t<trackers value="',str(self.maxtrackers),'"/>\n')))
        cf.write("".join(('\t\t\t<locale>',str(self.locale),'</locale>\n')))
        cf.write("".join(('\t\t\t<fastmode value="',str(self.fastmode),'"/>\n')))
        # end of system node
        cf.write('\t\t</system>\n\n')
        
        # files node
        cf.write('\t\t<files>\n')
        cf.write("".join(('\t\t\t<urllistfile>',self.urlslistfile,'</urllistfile>\n')))
        cf.write("".join(('\t\t\t<urltreefile>',self.urltreefile,'</urltreefile>\n')))
        cf.write("".join(('\t\t\t<archive status="',str(self.archive),'" format="',str(self.archformat),'"/>\n')))
        cf.write("".join(('\t\t\t<urlheaders status="',str(self.urlheaders),'" format="',str(self.urlheadersformat),'"/>\n')))
        cf.write('\t\t</files>\n\n')

        # indexer node
        cf.write('\t\t<indexer>\n')
        cf.write("".join(('\t\t\t<localise value="',str(self.localise),'"/>\n')))
        cf.write('\t\t</indexer>\n')

        # display node
        cf.write('\t\t<display>\n')
        cf.write("".join(('\t\t\t<browsepage value="',str(self.browsepage),'"/>\n')))
        cf.write('\t\t</display>\n\n')

        # end of config node
        cf.write('\t</config>\n\n')

        # end of HarvestMan node
        cf.write('</HarvestMan>\n')

        cf.close()
        print '\nWrote file config.xml.'
    def GenXmlConfigFile(self, cf):
        """ Generate config file in xml format """

        from common import bin_crypt

        # Write xml PI
        cf.write('<?xml version="1.0" encoding="utf-8"?>\n')
        cf.write('<!DOCTYPE HarvestMan SYSTEM "HarvestMan.dtd">\n')
        # HarvestMan element
        cf.write('<HarvestMan>\n')
        # config element
        cf.write('\t<config version="3.0" xmlversion="1.0">\n\n')
        # project node
        cf.write('\t\t<project skip="0">\n')
        cf.write("".join(('\t\t\t<url>', self.url, '</url>\n')))
        cf.write("".join(('\t\t\t<name>', self.project, '</name>\n')))
        cf.write("".join(('\t\t\t<basedir>', self.basedir, '</basedir>\n')))
        cf.write("".join(
            ('\t\t\t<verbosity value="', str(self.verbosity), '"/>\n')))
        cf.write("".join(
            ('\t\t\t<timeout value="', str(self.projtimeout), '"/>\n')))
        # end of project node
        cf.write('\t\t</project>\n\n')

        # network node
        cf.write('\t\t<network>\n')
        # proxy
        cf.write('\t\t\t<proxy>\n')
        cf.write("".join(('\t\t\t\t<proxyserver>', bin_crypt(self.proxy),
                          '</proxyserver>\n')))
        cf.write("".join(
            ('\t\t\t\t<proxyuser>', bin_crypt(self.puser), '</proxyuser>\n')))
        cf.write("".join(('\t\t\t\t<proxypasswd>', bin_crypt(self.ppasswd),
                          '</proxypasswd>\n')))
        cf.write("".join(
            ('\t\t\t\t<proxyport value="', str(self.proxyport), '"/>\n')))
        cf.write('\t\t\t</proxy>\n')
        # url server
        cf.write("".join(
            ('\t\t\t<urlserver status="', str(self.urlserver), '">\n')))
        cf.write("".join(('\t\t\t\t<urlhost>', self.urlhost, '</urlhost>\n')))
        cf.write("".join(
            ('\t\t\t\t<urlport value="', str(self.urlport), '"/>\n')))
        cf.write('\t\t\t</urlserver>\n')
        # end of network node
        cf.write('\t\t</network>\n\n')

        # download node
        cf.write('\t\t<download>\n')
        # types
        cf.write('\t\t\t<types>\n')
        cf.write("".join(('\t\t\t\t<html value="', str(self.html), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<images value="', str(self.images), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<javascript value="', str(self.javascript), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<javaapplet value="', str(self.javaapplet), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<forms value="', str(self.getqueryforms), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<cookies value="', str(self.cookies), '"/>\n')))
        cf.write('\t\t\t</types>\n')
        # cache
        cf.write("".join(
            ('\t\t\t<cache status="', str(self.pagecache), '">\n')))
        cf.write("".join(
            ('\t\t\t\t<datacache value="', str(self.datacache), '"/>\n')))
        cf.write('\t\t\t</cache>\n')
        # misc
        cf.write('\t\t\t<misc>\n')
        cf.write("".join(
            ('\t\t\t\t<retries value="', str(self.retryfailed), '"/>\n')))
        cf.write('\t\t\t</misc>\n')
        # end of download node
        cf.write('\t\t</download>\n\n')

        # control node
        cf.write('\t\t<control>\n')
        # links
        cf.write('\t\t\t<links>\n')
        cf.write("".join(
            ('\t\t\t\t<imagelinks value="', str(self.getimagelinks), '"/>\n')))
        cf.write("".join(('\t\t\t\t<stylesheetlinks value="',
                          str(self.getstylesheets), '"/>\n')))
        cf.write('\t\t\t</links>\n')
        # extent
        cf.write('\t\t\t<extent>\n')
        cf.write("".join(
            ('\t\t\t\t<fetchlevel value="', str(self.fetchlevel), '"/>\n')))
        cf.write("".join(('\t\t\t\t<extserverlinks value="',
                          str(self.eserverlinks), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<extpagelinks value="', str(self.epagelinks), '"/>\n')))
        cf.write("".join(('\t\t\t\t<depth value="', str(self.depth), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<extdepth value="', str(self.extdepth), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<subdomain value="', str(self.subdomain), '"/>\n')))
        cf.write('\t\t\t</extent>\n')
        # limits
        cf.write('\t\t\t<limits>\n')
        cf.write("".join(('\t\t\t\t<maxextservers value="',
                          str(self.maxextservers), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<maxextdirs value="', str(self.maxextdirs), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<maxfiles value="', str(self.maxfiles), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<maxfilesize value="', str(self.maxfilesize), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<connections value="', str(self.connections), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<requests value="', str(self.requests), '"/>\n')))
        cf.write("".join(
            ('\t\t\t\t<timelimit value="', str(self.timelimit), '"/>\n')))
        cf.write('\t\t\t</limits>\n')
        # rules
        cf.write('\t\t\t<rules>\n')
        cf.write("".join(
            ('\t\t\t\t<robots value="', str(self.robots), '"/>\n')))
        cf.write("".join(('\t\t\t\t<urlpriority>', str(self.urlpriority),
                          '</urlpriority>\n')))
        cf.write("".join(('\t\t\t\t<serverpriority>', str(self.serverpriority),
                          '</serverpriority>\n')))
        cf.write('\t\t\t</rules>\n')
        # filters
        cf.write('\t\t\t<filters>\n')
        cf.write("".join(
            ('\t\t\t\t<urlfilter>', str(self.urlfilter), '</urlfilter>\n')))
        cf.write("".join(('\t\t\t\t<serverfilter>', str(self.serverfilter),
                          '</serverfilter>\n')))
        cf.write("".join(
            ('\t\t\t\t<wordfilter>', str(self.wordfilter), '</wordfilter>\n')))
        cf.write("".join(
            ('\t\t\t\t<junkfilter value="', str(self.junkfilter), '"/>\n')))
        cf.write('\t\t\t</filters>\n')
        # end of control node
        cf.write('\t\t</control>\n\n')

        # system node
        cf.write('\t\t<system>\n')
        cf.write("".join(('\t\t\t<workers status="', str(self.usethreads),
                          '" size="', str(self.threadpoolsize), '" timeout="',
                          str(self.timeout), '"/>\n')))
        cf.write("".join(
            ('\t\t\t<trackers value="', str(self.maxtrackers), '"/>\n')))
        cf.write("".join(('\t\t\t<locale>', str(self.locale), '</locale>\n')))
        cf.write("".join(
            ('\t\t\t<fastmode value="', str(self.fastmode), '"/>\n')))
        # end of system node
        cf.write('\t\t</system>\n\n')

        # files node
        cf.write('\t\t<files>\n')
        cf.write("".join(
            ('\t\t\t<urllistfile>', self.urlslistfile, '</urllistfile>\n')))
        cf.write("".join(
            ('\t\t\t<urltreefile>', self.urltreefile, '</urltreefile>\n')))
        cf.write("".join(
            ('\t\t\t<archive status="', str(self.archive), '" format="',
             str(self.archformat), '"/>\n')))
        cf.write("".join(
            ('\t\t\t<urlheaders status="', str(self.urlheaders), '" format="',
             str(self.urlheadersformat), '"/>\n')))
        cf.write('\t\t</files>\n\n')

        # indexer node
        cf.write('\t\t<indexer>\n')
        cf.write("".join(
            ('\t\t\t<localise value="', str(self.localise), '"/>\n')))
        cf.write('\t\t</indexer>\n')

        # display node
        cf.write('\t\t<display>\n')
        cf.write("".join(
            ('\t\t\t<browsepage value="', str(self.browsepage), '"/>\n')))
        cf.write('\t\t</display>\n\n')

        # end of config node
        cf.write('\t</config>\n\n')

        # end of HarvestMan node
        cf.write('</HarvestMan>\n')

        cf.close()
        print '\nWrote file config.xml.'