Fixed: missing import of `glob`
[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 searched 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     if platform.system == 'Windows':
32         print "Make sure you have a installed version of OpenOffice.org which"
33         print "is matching your Python version", pyver, "and the file uno.py is on"
34         print "your $PYTHONPATH."
35     else:
36         print "Make sure the package 'openoffice.org-pyuno' is installed,"
37         print "is matching your Python version", pyver, "and the file uno.py is on"
38         print "your $PYTHONPATH."
39         if platform.dist()[0] == 'debian':
40             print "For Debian, Ubuntu and related distributions, the package"
41             print "is called, eg. 'python-uno'."
42
43     print_pythonpath()
44     raise SystemExit(21)
45
46 openoffice = None
47
48 try:
49     import openoffice
50     import openoffice.interact
51     import openoffice.officehelper as OH
52 except ImportError, e:
53     print "Can't import openoffice-python module 'openoffice.interact'."
54     print "Make sure the Python package 'openoffice.interact' is installed"
55     print "for your Python version", pyver
56     print "This was the error message:"
57     print e
58     print_pythonpath()
59     if openoffice:
60         print 'openoffice.__file__ :', openoffice.__file__
61     raise SystemExit(22)
62
63 def bootstrap(pipename=None, host=None, port=None):
64     if pipename or host or port:
65         print "Try connecting to already running OOo"
66         connectString = OH._build_connect_string(pipename=pipename,
67                                                  host=host, port=port)
68         print "using connection string", repr(connectString)
69     else:
70         # Generate a random pipe name.
71         pipename = "uno" + str(random.random())[2:]
72         connectString = OH._build_connect_string(pipename=pipename)
73         print "Starting OOo for listening on", connectString
74         print "Will use command",
75         print OH._build_cmd_args(connectString)
76         # start OOo listening on this named pipe
77         pid = OH._start_OOo(connectString)
78         print "Started OOo with process id", pid
79
80     print
81     print "Now trying to connect to OOo."
82     sys.stdout.flush()
83     try:
84         context = OH.connect(connectString)
85         print "Connecting with context", context
86     except OH.BootstrapException:
87         raise
88         print "Can not connect to OOo. Please check whether it is running at"
89         print "all."
90         print "Try starting it using this command:"
91         print 
92         
93     return context
94
95 if __name__ == '__main__':
96     import optparse
97     parser = optparse.OptionParser('%prog [options]')
98     group = parser.add_option_group('To connect to already running server use:')
99     group.add_option('--host',  #default='localhost',
100                      help="hostname/ip of server (default: %default)")
101     group.add_option('--port',  default=2002, type=int,
102                      help="port the server is listening on (default: %default)")
103
104     opts, args = parser.parse_args()
105     if not opts.host:
106         opts.port = None
107     context = bootstrap(host=opts.host, port=opts.port)
108
109     if context:
110         print
111         print "Looks good."
112         print
113     else:
114         print "When reporting problems, please give this OS information"
115         print platform.platform()
116         print "and this PYTHONPATH:"
117         for p in sys.path:
118             print '  ', repr(p)
119         print
120         raise SystemExit(20)