root / pykota / trunk / checkdeps.py @ 3430

Revision 3430, 5.2 kB (checked in by jerome, 15 years ago)

Another round of removing print statements.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
Line 
1#! /usr/bin/env python
2# -*- coding: utf-8 -*-
3#
4# PyKota
5#
6# PyKota : Print Quotas for CUPS
7#
8# (c) 2003, 2004, 2005, 2006, 2007, 2008 Jerome Alet <alet@librelogiciel.com>
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21#
22# $Id$
23#
24#
25
26import sys
27import os
28
29def checkModule(module) :
30    """Checks if a Python module is available or not."""
31    try :
32        exec "import %s" % module
33    except ImportError :
34        return 0
35    else :
36        return 1
37
38def checkCommand(command) :
39    """Checks if a command is available or not."""
40    input = os.popen("type %s 2>/dev/null" % command)
41    result = input.read().strip()
42    input.close()
43    return result
44
45def checkWithPrompt(prompt, module=None, command=None, helper=None) :
46    """Tells the user what will be checked, and asks him what to do if something is absent."""
47    sys.stdout.write("Checking for %s availability : " % prompt)
48    sys.stdout.flush()
49    if command is not None :
50        result = checkCommand(command)
51    elif module is not None :
52        result = checkModule(module)
53    if result :
54        sys.stdout.write("OK\n")
55    else :
56        sys.stdout.write("NO.\n")
57        sys.stderr.write("ERROR : %s not available !\n" % prompt)
58        sys.stdout.write("%s\n" % helper)
59
60if __name__ == "__main__" :
61    sys.stdout.write("Checking PyKota dependencies...\n")
62
63    # checks if Python version is correct, we need >= 2.2
64    if not (sys.version > "2.2") :
65        sys.stderr.write("PyKota needs at least Python v2.2 !\nYour version seems to be older than that, please update.\nAborted !\n")
66        sys.exit(-1)
67
68    # checks if some needed Python modules are there or not.
69    modulestocheck = [ ("Python-PygreSQL", "pg", "PygreSQL is mandatory if you want to use PostgreSQL as the quota database backend.\nSee http://www.pygresql.org"),
70                       ("Python-SQLite", "pysqlite2", "Python-SQLite is mandatory if you want to use SQLite as the quota database backend.\nSee http://www.pysqlite.org"),
71                       ("MySQL-Python", "MySQLdb", "MySQL-Python is mandatory if you want to use MySQL as the quota database backend.\nSee http://sourceforge.net/projects/mysql-python"),
72                       ("Python-egenix-mxDateTime", "mx.DateTime", "eGenix' mxDateTime is mandatory for PyKota to work.\nSee http://www.egenix.com"),
73                       ("Python-LDAP", "ldap", "Python-LDAP is mandatory if you plan to use an LDAP\ndirectory as the quota database backend.\nSee http://python-ldap.sf.net"),
74                       ("Python-OSD", "pyosd", "Python-OSD is recommended if you plan to use the X Window On Screen Display\nprint quota reminder named pykosd. See http://repose.cx/pyosd/"),
75                       ("Python-SNMP", "pysnmp", "Python-SNMP is recommended if you plan to use hardware\naccounting with printers which support SNMP.\nSee http://pysnmp.sf.net"),
76                       ("Python-JAXML", "jaxml", "Python-JAXML is recommended if you plan to dump datas in the XML format.\nSee http://www.librelogiciel.com/software/"),
77                       ("Python-ReportLab", "reportlab.pdfgen.canvas", "Python-ReportLab is required if you plan to have PyKota generate banners.\nSee http://www.reportlab.org/"),
78                       ("Python-Imaging", "PIL.Image", "Python-Imaging is required if you plan to have PyKota generate banners.\nSee http://www.pythonware.com/downloads/"),
79                       ("Python-Psyco", "psyco", "Python-Psyco speeds up parsing of print files, you should use it.\nSee http://psyco.sourceforge.net/"),
80                       ("Python-pkpgcounter", "pkpgpdls", "Python-pkpgcounter is mandatory.\nGrab it from http://www.pykota.com/software/pkpgcounter/"),
81                       ("Python-PAM", "PAM", "Python-PAM is recommended if you plan to use pknotify+PyKotIcon.\nGrab it from http://www.pangalactic.org/PyPAM/"),
82                       ("Python-pkipplib", "pkipplib", "Python-pkipplib is now mandatory.\nGrab it from http://www.pykota.com/software/pkipplib/"),
83                     ]
84    commandstocheck = [ ("GhostScript", "gs", "Depending on your configuration, GhostScript may be needed in different parts of PyKota."),
85                        ("SNMP Tools", "snmpget", "SNMP Tools are needed if you want to use SNMP enabled printers."),
86                        ("Netatalk", "pap", "Netatalk is needed if you want to use AppleTalk enabled printers.")
87                      ]
88    for (name, module, helper) in modulestocheck :
89        checkWithPrompt(name, module=module, helper=helper)
90
91    # checks if some software are there or not.
92    for (name, command, helper) in commandstocheck :
93        checkWithPrompt(name, command=command, helper=helper)
Note: See TracBrowser for help on using the browser.