[Pywikipedia-l] SVN: [6062] branches/rewrite/pywikibot/config2.py

russblau at svn.wikimedia.org russblau at svn.wikimedia.org
Wed Nov 5 19:52:32 UTC 2008


Revision: 6062
Author:   russblau
Date:     2008-11-05 19:52:32 +0000 (Wed, 05 Nov 2008)

Log Message:
-----------
rename config.py due to import conflicts using both v1 and rewrite on same machine

Added Paths:
-----------
    branches/rewrite/pywikibot/config2.py

Copied: branches/rewrite/pywikibot/config2.py (from rev 6036, branches/rewrite/pywikibot/config.py)
===================================================================
--- branches/rewrite/pywikibot/config2.py	                        (rev 0)
+++ branches/rewrite/pywikibot/config2.py	2008-11-05 19:52:32 UTC (rev 6062)
@@ -0,0 +1,574 @@
+# -*- coding: utf-8 -*-
+#
+# (C) Rob W.W. Hooft, 2003
+#
+# Distributed under the terms of the MIT license.
+#
+__version__ = '$Id$'
+
+import os, re
+import sys as __sys
+
+# IMPORTANT:
+# Do not change any of the variables in this file. Instead, make
+# a file user-config.py, and overwrite values in there.
+
+# Note: all variables defined in this module are made available to bots as
+# configuration settings, *except* variable names beginning with an
+# underscore (example: _variable).  Be sure to use an underscore on any
+# variables that are intended only for internal use and not to be exported
+# to other modules.
+
+############## ACCOUNT SETTINGS ##############
+
+# The family of sites we are working on. wikipedia.py will import
+# families/xxx_family.py so if you want to change this variable,
+# you need to write such a file.
+family = 'wikipedia'
+# The language code of the site we're working on.
+mylang = 'language'
+# The default interface for communicating with the site
+# currently the only defined interface is 'APISite', so don't change this!
+site_interface = 'APISite'
+# The dictionary usernames should contain a username for each site where you
+# have a bot account. Please set your usernames by adding such lines to your
+# user-config.py:
+#
+# usernames['wikipedia']['de'] = 'myGermanUsername'
+# usernames['wiktionary']['en'] = 'myEnglishUsername'
+#
+# If you have a sysop account on some wikis, this will be used to delete pages
+# or to edit locked pages if you add such lines to your
+# user-config.py:
+#
+# sysopnames['wikipedia']['de'] = 'myGermanUsername'
+# sysopnames['wiktionary']['en'] = 'myEnglishUsername'
+usernames = {}
+sysopnames = {}
+disambiguation_comment = {}
+gdab_namespaces = {}
+
+# Solve captchas in the webbrowser. Setting this to False will result in the 
+# exception CaptchaError be thrown if a captcha is encountered. 
+solve_captcha = True
+
+# Some sites will require password identication to access the HTML pages at
+# the site. If you have any such site, add lines to your user-config.py of
+# the following form:
+#
+# authenticate['en.wikipedia.org'] = ('John','XXXXX')
+#
+# where John is your login name, and XXXXX your password.
+# Note:
+# 1. This is only for sites that use authentication in the form that gives
+#    you a popup for name and password when you try to access any data, NOT
+#    for, for example, wiki usernames
+# 2. You must use the hostname of the site, not its family/language pair
+authenticate = {}
+
+# password_file = ".passwd"
+# A password file with default passwords. For more information, please
+# see LoginManager.readPassword in login.py.
+# By default you are asked for a password on the terminal.
+password_file = None
+
+# Get the names of all known families, and initialize
+# with empty dictionaries
+def _get_base_dir():
+    """Return the directory in which user-specific information is stored.
+
+    This is determined in the following order -
+    1.  If the script was called with a -dir: argument, use the directory
+        provided in this argument
+    2.  If the user has a PYWIKIBOT2_DIR environment variable, use the value
+        of it
+    3.  Use (and if necessary create) a 'pywikibot' folder (Windows) or
+        '.pywikibot' directory (Unix and similar) under the user's home
+        directory.
+    
+    """
+    NAME = "pywikibot"
+    for arg in __sys.argv[1:]:
+        if arg.startswith("-dir:"):
+            base_dir = arg[5:]
+            __sys.argv.remove(arg)
+            break
+    else:
+        if os.environ.has_key("PYWIKIBOT2_DIR"):
+            base_dir = os.environ["PYWIKIBOT2_DIR"]
+        else:
+            is_windows = __sys.platform == 'win32' 
+            home = os.path.expanduser("~") 
+            if is_windows: 
+                base_dir = os.path.join(home, "Application Data", NAME) 
+            else: 
+                base_dir = os.path.join(home, "."+NAME) 
+            if not os.path.isdir(base_dir): 
+                os.makedirs(base_dir, mode=0700) 
+    if not os.path.isabs(base_dir):
+        base_dir = os.path.normpath(os.path.join(os.getcwd(), base_dir))
+    # make sure this path is valid and that it contains user-config file
+    if not os.path.isdir(base_dir):
+        raise RuntimeError("Directory '%(base_dir)s' does not exist."
+                           % locals())
+    if not os.path.exists(os.path.join(base_dir, "user-config.py")):
+        raise RuntimeError("No user-config.py found in directory '%(base_dir)s'."
+                           % locals())
+    return base_dir
+
+_base_dir = _get_base_dir()
+# families/ is a subdirectory of the directory in which config.py is found
+for _filename in os.listdir(
+                    os.path.join(os.path.dirname(__file__), 'families')):
+    if _filename.endswith("_family.py"):
+        familyName = _filename[ : -len("_family.py")]
+        usernames[familyName] = {}
+        sysopnames[familyName] = {}
+        disambiguation_comment[familyName] = {}
+
+# Set to True to override the {{bots}} exclusion protocol (at your own risk!)
+ignore_bot_templates = False
+
+############## USER INTERFACE SETTINGS ##############
+
+# The encoding that's used in the user's console, i.e. how strings are encoded
+# when they are read by raw_input(). On Windows systems' DOS box, this should
+# be 'cp850' ('cp437' for older versions). Linux users might try 'iso-8859-1'
+# or 'utf-8'.
+# This default code should work fine, so you don't have to think about it.
+# TODO: consider getting rid of this config variable.
+try:
+    console_encoding = __sys.stdout.encoding
+except:
+    #When using pywikipedia inside a daemonized twisted application,
+    #we get "StdioOnnaStick instance has no attribute 'encoding'"
+    console_encoding = None
+
+# The encoding in which textfiles are stored, which contain lists of page titles.
+textfile_encoding = 'utf-8'
+
+# tkinter isn't yet ready
+userinterface = 'terminal'
+
+# Should we transliterate characters that do not exist in the console
+# character set?
+# True: whenever possible
+# False: never - always replace them by question marks
+# Currently only works if interface 'terminal' is set.
+transliterate = True
+
+# Should the system bell be ringed if the bot expects user input?
+ring_bell = False
+
+# Colorization can be used to markup important text parts of the output.
+# On Linux/Unix terminals, ANSI escape codes are used for this. On Windows,
+# it is done by a DLL call via ctypes. ctypes is only available since
+# Python 2.5, so if you're using Python 2.4 or lower on Windows, you should
+# upgrade.
+# Set this to False if you're using Linux and your tty doesn't support
+# ANSI colors.
+try:
+    # Don't print colorized when the output is, for example, piped to a file.
+    colorized_output = __sys.stdout.isatty()
+except:
+    colorized_output = False
+
+############## EXTERNAL EDITOR SETTINGS ##############
+# The command for the editor you want to use. If set to None, a simple Tkinter
+# editor will be used.
+# On Windows systems, this script tries to determine the default text editor.
+if __sys.platform=='win32':
+    try:
+        import _winreg
+        _key1 = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\OpenWithProgids')
+        _progID = _winreg.EnumValue(_key1, 1)[0]
+        _key2 = _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '%s\shell\open\command' % _progID)
+        _cmd = _winreg.QueryValueEx(_key2, None)[0]
+        editor = _cmd.replace('%1', '')
+        # Notepad is even worse than our Tkinter editor.
+        if editor.lower().endswith('notepad.exe'):
+            editor = None
+    except:
+        #raise
+        editor = None
+else:
+    editor = None
+
+# Warning: DO NOT use an editor which doesn't support Unicode to edit pages!
+# You will BREAK non-ASCII symbols!
+editor_encoding = 'utf-8'
+
+# The temporary file name extension can be set in order to use syntax
+# highlighting in your text editor.
+editor_filename_extension = 'wiki'
+
+############## LOGFILE SETTINGS ##############
+
+# Defines for which scripts a logfile should be enabled. Logfiles will be
+# saved in the 'logs' subdirectory.
+# Example:
+#     log = ['interwiki', 'weblinkchecker', 'table2wiki']
+# It is also possible to enable logging for all scripts, using this line:
+#     log = ['*']
+# To disable all logging, use this:
+#     log = []
+# Per default, logging of interwiki.py is enabled because its logfiles can
+# be used to generate so-called warnfiles.
+# This setting can be overridden by the -log or -nolog command-line arguments.
+log = ['interwiki']
+
+############## INTERWIKI SETTINGS ##############
+
+# Should interwiki.py report warnings for missing links between foreign
+# languages?
+interwiki_backlink = True
+
+# Should interwiki.py display every new link it discovers?
+interwiki_shownew = True
+
+# Should interwiki.py output a graph PNG file on conflicts?
+# You need pydot for this: http://dkbza.org/pydot.html
+interwiki_graph = False
+
+# Specifies that the robot should process that amount of subjects at a time,
+# only starting to load new pages in the original language when the total
+# falls below that number. Default is to process (at least) 100 subjects at
+# once.
+interwiki_min_subjects = 100
+
+# If interwiki graphs are enabled, which format(s) should be used?
+# Supported formats include png, jpg, ps, and svg. See:
+# http://www.graphviz.org/doc/info/output.html
+# If you want to also dump the dot files, you can use this in your
+# user-config.py:
+# interwiki_graph_formats = ['dot', 'png']
+# If you need a PNG image with an HTML image map, use this:
+# interwiki_graph_formats = ['png', 'cmap']
+# If you only need SVG images, use:
+# interwiki_graph_formats = ['svg']
+interwiki_graph_formats = ['png']
+
+# You can post the contents of your autonomous_problems.dat to the wiki,
+# e.g. to http://de.wikipedia.org/wiki/Wikipedia:Interwiki-Konflikte .
+# This allows others to assist you in resolving interwiki problems.
+# To help these people, you can upload the interwiki graphs to your
+# webspace somewhere. Set the base URL here, e.g.:
+# 'http://www.example.org/~yourname/interwiki-graphs/'
+interwiki_graph_url = None
+
+# Save file with local articles without interwikis.
+without_interwiki = False
+
+############## SOLVE_DISAMBIGUATION SETTINGS ############
+#
+# Set disambiguation_comment[FAMILY][LANG] to a non-empty string to override
+# the default edit comment for the solve_disambiguation bot.
+# Use %s to represent the name of the disambiguation page being treated.
+# Example:
+#
+# disambiguation_comment['wikipedia']['en'] = \
+#    "Robot-assisted disambiguation ([[WP:DPL|you can help!]]): %s"
+
+sort_ignore_case = False
+
+############## IMAGE RELATED SETTINGS ##############
+# If you set this to True, images will be uploaded to Wikimedia
+# Commons by default.
+upload_to_commons = False
+
+############## SETTINGS TO AVOID SERVER OVERLOAD ##############
+
+# Slow down the robot such that it never requests a second page within
+# 'minthrottle' seconds. This can be lengthened if the server is slow,
+# but never more than 'maxthrottle' seconds. However - if you are running
+# more than one bot in parallel the times are lengthened.
+# By default, the get_throttle is turned off, and 'maxlag' is used to
+# control the rate of server access.  Set minthrottle to non-zero to use a
+# throttle on read access.
+minthrottle = 0
+maxthrottle = 10
+
+# Slow down the robot such that it never makes a second page edit within
+# 'put_throttle' seconds.
+put_throttle = 10
+
+# Sometimes you want to know when a delay is inserted. If a delay is larger
+# than 'noisysleep' seconds, it is logged on the screen.
+noisysleep = 3.0
+
+# Defer bot edits during periods of database server lag.  For details, see
+# http://www.mediawiki.org/wiki/Maxlag_parameter
+# You can set this variable to a number of seconds, or to None (or 0) to
+# disable this behavior.  Higher values are more aggressive in seeking
+# access to the wiki.
+# Non-Wikimedia wikis may or may not support this feature; for families
+# that do not use it, it is recommended to set minthrottle (above) to
+# at least 1 second.
+maxlag = 5
+
+# Maximum of pages which can be retrieved by special pages. Increase this if
+# you heavily use redirect.py with action "double", and especially if you're
+# running solve_disambiguation.py with the -primary argument.
+special_page_limit = 500
+
+############## TABLE CONVERSION BOT SETTINGS ##############
+
+# will split long paragraphs for better reading the source.
+# only table2wiki.py use it by now
+splitLongParagraphs = False
+# sometimes HTML-tables are indented for better reading.
+# That can do very ugly results.
+deIndentTables = True
+# table2wiki.py works quite stable, so you might switch to True
+table2wikiAskOnlyWarnngs = True
+table2wikiSkipWarnings = False
+
+############## WEBLINK CHECKER SETTINGS ##############
+
+# How many external links should weblinkchecker.py check at the same time?
+# If you have a fast connection, you might want to increase this number so
+# that slow servers won't slow you down.
+max_external_links = 50
+
+report_dead_links_on_talk = False
+
+############## DATABASE SETTINGS ##############
+db_hostname = 'localhost'
+db_username = 'wikiuser'
+db_password = ''
+
+############## SEARCH ENGINE SETTINGS ##############
+
+# Some scripts allow querying Google via the Google Web API. To use this feature,
+# you must install the pyGoogle module from http://pygoogle.sf.net/ and have a
+# Google Web API license key. Note that Google doesn't give out license keys
+# anymore.
+google_key = ''
+
+# Some scripts allow using the Yahoo! Search Web Services. To use this feature,
+# you must install the pYsearch module from http://pysearch.sourceforge.net/
+# and get a Yahoo AppID from http://developer.yahoo.com
+yahoo_appid = ''
+
+# To use Windows Live Search web service you must get an AppID from
+# http://search.msn.com/developer
+msn_appid = ''
+
+############## COPYRIGHT SETTINGS ##############
+
+# Enable/disable search engine in copyright.py script
+copyright_google = True
+copyright_yahoo = True
+copyright_msn = False
+
+# Perform a deep check, loading URLs to search if 'Wikipedia' is present.
+# This may be useful to improve number of correct results. If you haven't
+# a fast connection, you might want to keep they disabled.
+copyright_check_in_source_google = False
+copyright_check_in_source_yahoo = False
+copyright_check_in_source_msn = False
+
+# Web pages may content a Wikipedia text without 'Wikipedia' word but with
+# typical '[edit]' tag result of copy & paste procedure. You can want no
+# report for this kind of URLs, even if they are copyright violation.
+# However, when enabled these URLs are logged in a file.
+
+copyright_check_in_source_section_names = False
+
+# Limit number of queries for page.
+copyright_max_query_for_page = 25
+
+# Skip a specified number of queries
+copyright_skip_query = 0
+
+# Number of attempts on connection error.
+copyright_connection_tries = 10
+
+# Behavior if an exceeded error occur.
+#
+# Possibilities:
+#
+#    0 = None
+#    1 = Disable search engine
+#    2 = Sleep (default)
+#    3 = Stop
+
+copyright_exceeded_in_queries = 2
+copyright_exceeded_in_queries_sleep_hours = 6
+
+# Append last modified date of URL to script result
+copyright_show_date = True
+
+# Append length of URL to script result
+copyright_show_length = True
+
+# By default the script try to identify and skip text that contents a wide
+# comma separated list or only numbers. But sometimes that might be the
+# only part unmodified of a slightly edited and not otherwise reported
+# copyright violation. You can disable this feature to try to increase
+# number of results.
+
+copyright_economize_query = True
+
+############## HTTP SETTINGS ##############
+# Use a persistent http connection. An http connection has to be established
+# only once per site object, making stuff a whole lot faster. Do NOT EVER
+# use this if you share Site objects across threads without proper locking.
+## DISABLED FUNCTION. Setting this variable will not have any effect.
+persistent_http = False
+
+# Default socket timeout. Set to None to disable timeouts.
+socket_timeout = 120  # set a pretty long timeout just in case...
+
+
+############## FURTHER SETTINGS ##############
+
+# The bot can make some additional changes to each page it edits, e.g. fix
+# whitespace or positioning of interwiki and category links.
+
+# This is an experimental feature; handle with care and consider re-checking
+# each bot edit if enabling this!
+cosmetic_changes = False
+
+# If cosmetic changes are switched on, and you also have several accounts at
+# projects where you're not familiar with the local conventions, you probably
+# only want the bot to do cosmetic changes on your "home" wiki which you
+# specified in config.mylang and config.family.
+# If you want the bot to also do cosmetic changes when editing a page on a
+# foreign wiki, set cosmetic_changes_mylang_only to False, but be careful!
+cosmetic_changes_mylang_only = True
+
+# End of configuration section
+# ============================
+# System-level and User-level changes.
+# Store current variables and their types.
+_glv={}
+_glv.update(globals())
+_gl=_glv.keys()
+_tp={}
+for _key in _gl:
+    if _key[0]!='_':
+        _tp[_key]=type(globals()[_key])
+
+# Get the user files
+_thislevel=0
+_fns=[os.path.join(_base_dir, "user-config.py")]
+for _filename in _fns:
+    _thislevel += 1
+    if os.path.exists(_filename):
+        _filestatus=os.stat(_filename)
+        _filemode=_filestatus[0]
+        _fileuid=_filestatus[4]
+        if (__sys.platform=='win32' or _fileuid==os.getuid() or _fileuid==0):
+            if __sys.platform=='win32' or _filemode&002==0:
+                execfile(_filename)
+            else:
+                print "WARNING: Skipped '%(fn)s': writeable by others."\
+                      % {'fn' :_filename}
+        else:
+            print "WARNING: Skipped '%(fn)s': owned by someone else."\
+                  % {'fn' :_filename}
+
+# Test for obsoleted and/or unknown variables.
+for _key in globals().keys():
+    if _key[0]=='_':
+        pass
+    elif _key in _gl:
+        nt=type(globals()[_key])
+        ot=_tp[_key]
+        if nt==ot or nt==type(None) or ot==type(None):
+            pass
+        elif nt==type(1) and ot==type(1.0):
+            pass
+        elif ot==type(1) and nt==type(1.0):
+            pass
+        elif nt==type(1) and ot==type(True):
+            pass
+        elif ot==type(1) and nt==type(True):
+            pass
+        else:
+            print "WARNING: Type of '%(_key)s' changed" % locals()
+            print "         %(was)s: %(old)s" % {'was': "Was", 'old': ot}
+            print "         %(was)s: %(new)s" % {'now': "Now", 'new': nt}
+        del nt,ot
+    else:
+        logger.warn(
+    "Configuration variable %(_key)r is defined but unknown. Misspelled?"
+            % locals())
+
+# Fix up default console_encoding
+if console_encoding == None:
+    if __sys.platform=='win32':
+        console_encoding = 'cp850'
+    else:
+        console_encoding = 'iso-8859-1'
+
+# Save base_dir for use by other modules
+base_dir = _base_dir
+
+def makepath(path):
+    """Return a normalized absolute version of the path argument.
+
+    - if the given path already exists in the filesystem
+      the filesystem is not modified.
+
+    - otherwise makepath creates directories along the given path
+      using the dirname() of the path. You may append
+      a '/' to the path if you want it to be a directory path.
+
+    from holger at trillke.net 2002/03/18
+
+    """
+    from os import makedirs
+    from os.path import normpath, dirname, exists, abspath
+
+    dpath = normpath(dirname(path))
+    if not exists(dpath): makedirs(dpath)
+    return normpath(abspath(path))
+
+def datafilepath(*filename):
+    """Return an absolute path to a data file in a standard location.
+
+    Argument(s) are zero or more directory names, optionally followed by a
+    data file name. The return path is offset to config.base_dir. Any
+    directories in the path that do not already exist are created.
+
+    """
+    import os
+    return makepath(os.path.join(base_dir, *filename))
+
+def shortpath(path):
+    """Return a file path relative to config.base_dir."""
+    import os
+    if path.startswith(base_dir):
+        return path[len(base_dir) + len(os.path.sep) : ]
+    return path
+
+#
+# When called as main program, list all configuration variables
+#
+if __name__=="__main__":
+    import types
+    _all=1
+    for _arg in __sys.argv[1:]:
+        if _arg=="modified":
+            _all=0
+        else:
+            print "Unknown arg %(_arg)s ignored" % locals()
+    _k=globals().keys()
+    _k.sort()
+    for _name in _k:
+        if _name[0]!='_':
+            if not type(globals()[_name]) in [types.FunctionType, types.ModuleType]:
+                if _all or _glv[_name]!=globals()[_name]:
+                    print _name,"=",repr(globals()[_name])
+
+# cleanup all locally-defined variables
+
+for __var in globals().keys():
+    if __var.startswith("_") and not __var.startswith("__"):
+        del __sys.modules[__name__].__dict__[__var]
+
+del __var, __sys
+del os, re
+


Property changes on: branches/rewrite/pywikibot/config2.py
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:mergeinfo
   + 
Added: svn:eol-style
   + native





More information about the Pywikipedia-l mailing list