Improved installation checks.
[openoffice-python:openoffice-python.git] / sample-scripts / check-installation
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 """
4 Check whether openoffice-python can talk to OpenOffice. If not, try to
5 find the problem.
6 """
7 #
8 # Copyright (c) 2008 by Hartmut Goebel <h.goebel@goebel-consult.de>
9 # Licenced under the GNU General Public License v3 (GPLv3)
10 # see file LICENSE-gpl-3.0.txt
11 #
12
13 import sys
14 import platform
15 import random
16 import pprint
17
18 pyver = '.'.join(map(str, sys.version_info[:2]))
19
20 def print_pythonpath():
21     print
22     print "Modules are search in this places (aka sys.path, $PYTHONPATH)"
23     pprint.pprint(sys.path)
24     
25 #print_pythonpath()
26
27 try:
28     import uno
29 except ImportError:
30     print "Can't import the uno-bridge module 'uno'."
31     print "Make sure the package 'openoffice.org-pyuno' is installed,"
32     print "is matching your Python version", pyver, "and the file uno.py is on"
33     print "your $PYTHONPATH."
34     print "Depending on your Linux distribution, the package my have another"
35     print "name, eg. 'python-uno'."
36     print_pythonpath()
37     raise SystemExit(21)
38
39 openoffice = None
40
41 try:
42     import openoffice
43     import openoffice.interact
44     import openoffice.officehelper as OH
45 except ImportError, e:
46     print "Can't import openoffice-python module 'openoffice.interact'."
47     print "Make sure the Python package 'openoffice-python' is installed"
48     print "for your Python version", pyver
49     print "This was the error message:"
50     print e
51     print_pythonpath()
52     if openoffice:
53         print 'openoffice.__file__ :', openoffice.__file__
54     raise SystemExit(22)
55
56 def bootstrap(pipename=None, host=None, port=None):
57     if pipename or host or port:
58         print "Try connecting to already running OOo"
59         connectString = OH._build_connect_string(pipename=pipename,
60                                                  host=host, port=port)
61         print "using connection string", repr(connectString)
62     else:
63         # Generate a random pipe name.
64         pipename = "uno" + str(random.random())[2:]
65         connectString = OH._build_connect_string(pipename=pipename)
66         print "Starting OOo for listening on", connectString
67         print "Will use command",
68         print OH._build_cmd_args(connectString)
69         # start OOo listening on this named pipe
70         pid = OH._start_OOo(connectString)
71         print "Started OOo with process id", pid
72
73     print
74     print "Now trying to connect to OOo."
75     sys.stdout.flush()
76     try:
77         context = OH.connect(connectString)
78         print "Connecting with context", context
79     except OH.BootstrapException:
80         raise
81         print "Can not connect to OOo. Please check whether it is running at"
82         print "all."
83         print "Try starting it using this command:"
84         print 
85         
86     return context
87
88 if __name__ == '__main__':
89     import optparse
90     parser = optparse.OptionParser('%prog [options]')
91     group = parser.add_option_group('To connect to already running server use:')
92     group.add_option('--host',  #default='localhost',
93                      help="hostname/ip of server (default: %default)")
94     group.add_option('--port',  default=2002, type=int,
95                      help="port the server is listening on (default: %default)")
96
97     opts, args = parser.parse_args()
98     if not opts.host:
99         opts.port = None
100     context = bootstrap(host=opts.host, port=opts.port)
101
102     if context:
103         print
104         print "Looks good."
105         print
106     else:
107         print "When reporting problems, please give this OS information"
108         print platform.platform()
109         print "and this PYTHONPATH:"
110         for p in sys.path:
111             print '  ', repr(p)
112         print
113         raise SystemExit(20)