Merge lp:~andrea.corbellini/beeseek/cross-platform-setup into lp:beeseek/1.0

Proposed by Andrea Corbellini
Status: Merged
Approved by: Andrea Corbellini
Approved revision: 301
Merged at revision: not available
Proposed branch: lp:~andrea.corbellini/beeseek/cross-platform-setup
Merge into: lp:beeseek/1.0
Diff against target: None lines
To merge this branch: bzr merge lp:~andrea.corbellini/beeseek/cross-platform-setup
Reviewer Review Type Date Requested Status
Andrea Corbellini Approve
Daniele Napolitano (community) Needs Fixing
Review via email: mp+8764@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Andrea Corbellini (andrea.corbellini) wrote :

This branch drastically improves the support for the directory structure of Windows.
The changed parts are the BeeSeek code and the setup script. Now the default values for the paths are calculated depending on the operating system.

If possible, we should do proper tests on a Windows machine before the beta 3 milestone, so I'm putting this branch on the review queue.

301. By Andrea Corbellini

Merge with trunk.

Revision history for this message
Daniele Napolitano (dnax88) :
review: Needs Fixing
Revision history for this message
Daniele Napolitano (dnax88) wrote :

After ~2 sec beeseek-peer crash.

$ beeseek-peer start --user dnax --debug
PeerSession: Starting up...
PeerSession:DEBUG: Lock file created at /var/lock/beeseek-peer.pid
PeerSession: Session started with arguments
'/usr/local/bin/beeseek-peer start --user dnax --debug'
PeerSession: Bound address localhost:8080
PeerSession: Bound address localhost:4096
PeerSession: Running as user dnax
PeerSession: Bound address /var/lock/beeseek-peer.sock
PeerSession: Database connected
Traceback (most recent call last):
 File "/usr/local/bin/beeseek-peer", line 21, in <module>
   PeerSession()
 File "/usr/local/lib/python2.6/dist-packages/beeseek/app/session.py",
line 278, in __init__
   self.run(arguments)
 File "/usr/local/lib/python2.6/dist-packages/beeseek/app/session.py",
line 308, in run
   command_obj(self, *arguments)
 File "/usr/local/lib/python2.6/dist-packages/beeseek/app/session.py",
line 559, in start
   self.setup()
 File "/usr/local/lib/python2.6/dist-packages/beeseek/app/peer/main.py",
line 74, in setup
   server.greet()
 File "/usr/local/lib/python2.6/dist-packages/beeseek/web/protocols/bsnp.py",
line 90, in greet
   self._recv_greeting(2)
 File "/usr/local/lib/python2.6/dist-packages/beeseek/web/protocols/bsnp.py",
line 75, in _recv_greeting
   raise NotImplementedError
NotImplementedError
PeerSession:ERROR: Daemon not started

review: Needs Fixing
Revision history for this message
Andrea Corbellini (andrea.corbellini) wrote :

The error that you are experiencing is not related to the setup script. You are seeing it because the version of the server running on beeseek.org is different by your local instance.

However it seems that everything was installed fine, so I'm approving and merging this branch.

Thank you very much for the log, Daniele! :)

> After ~2 sec beeseek-peer crash.
>
> $ beeseek-peer start --user dnax --debug
> PeerSession: Starting up...
> PeerSession:DEBUG: Lock file created at /var/lock/beeseek-peer.pid
> PeerSession: Session started with arguments
> '/usr/local/bin/beeseek-peer start --user dnax --debug'
> PeerSession: Bound address localhost:8080
> PeerSession: Bound address localhost:4096
> PeerSession: Running as user dnax
> PeerSession: Bound address /var/lock/beeseek-peer.sock
> PeerSession: Database connected
> Traceback (most recent call last):
> File "/usr/local/bin/beeseek-peer", line 21, in <module>
> PeerSession()
> File "/usr/local/lib/python2.6/dist-packages/beeseek/app/session.py",
> line 278, in __init__
> self.run(arguments)
> File "/usr/local/lib/python2.6/dist-packages/beeseek/app/session.py",
> line 308, in run
> command_obj(self, *arguments)
> File "/usr/local/lib/python2.6/dist-packages/beeseek/app/session.py",
> line 559, in start
> self.setup()
> File "/usr/local/lib/python2.6/dist-packages/beeseek/app/peer/main.py",
> line 74, in setup
> server.greet()
> File "/usr/local/lib/python2.6/dist-packages/beeseek/web/protocols/bsnp.py",
> line 90, in greet
> self._recv_greeting(2)
> File "/usr/local/lib/python2.6/dist-packages/beeseek/web/protocols/bsnp.py",
> line 75, in _recv_greeting
> raise NotImplementedError
> NotImplementedError
> PeerSession:ERROR: Daemon not started

review: Approve
302. By Andrea Corbellini

Merge with trunk.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'beeseek/app/directory.py'
2--- beeseek/app/directory.py 2009-07-09 11:37:49 +0000
3+++ beeseek/app/directory.py 2009-07-14 16:07:24 +0000
4@@ -15,24 +15,37 @@
5
6 import os
7 import stat
8+import sys
9 import tempfile
10
11
12-tempdirs = tempfile._candidate_tempdir_list()
13+lockdirs = tempfile._candidate_tempdir_list()
14+if os.name != 'nt':
15+ lockdirs.insert(0, '/var/lock')
16
17 class Directory(object):
18
19 __slots__ = 'dirlist', '_mode', '_subdirs', '_directory', '_create'
20
21- def __init__(self, dirlist, **kwargs):
22+ def __init__(self, dirlist, mode='rw', subdirs=(), create=False,
23+ adjust=False):
24 if isinstance(dirlist, basestring):
25 dirlist = (dirlist,)
26+ if adjust and os.name == 'nt':
27+ dirlist = self._adjust_for_win(dirlist)
28 self.dirlist = tuple(os.path.normcase(os.path.abspath(
29 os.path.expanduser(directory)))
30 for directory in dirlist)
31- self._mode = kwargs.get('mode', 'rw')
32- self._subdirs = kwargs.get('subdirs', ())
33- self._create = kwargs.get('create', ())
34+ self._mode = mode
35+ self._subdirs = subdirs
36+ self._create = create
37+
38+ def _adjust_for_win(self, dirlist):
39+ basepath = os.path.dirname(sys.executable)
40+ for directory in dirlist:
41+ yield os.path.join(basepath,
42+ 'BeeSeek',
43+ os.path.basename(directory))
44
45 def _check_permissions(self, directory):
46 strmode = self._mode
47@@ -41,7 +54,6 @@
48 stat_result = os.stat(directory)
49 usermode = groupmode = othermode = 0
50
51- # _issuitable() should be called rarely so we can use hasattr() here
52 if not hasattr(os, 'getuid') or stat_result.st_uid == os.getuid():
53 if 'r' in strmode:
54 usermode = stat.S_IXUSR
55
56=== modified file 'beeseek/app/options.py'
57--- beeseek/app/options.py 2009-07-11 12:46:12 +0000
58+++ beeseek/app/options.py 2009-07-14 16:10:16 +0000
59@@ -15,7 +15,7 @@
60
61 import os
62 from beeseek.app import instance
63-from beeseek.app.directory import Directory, tempdirs
64+from beeseek.app.directory import Directory, lockdirs
65 from beeseek.ui import BaseUserInterface, html
66 from beeseek.interface import Interface, implements
67
68@@ -212,7 +212,7 @@
69 lockdir = Option(Directory, 'LockDirectory',
70 ('-L', '--lock-dir'), None,
71 'The directory for lock files.',
72- default=['/var/lock'] + tempdirs,
73+ default=lockdirs,
74 convert_default=True)
75
76 user = Option(str, 'User',
77@@ -235,7 +235,8 @@
78 convert_kwargs={
79 'subdirs': ('keywords', 'pages', 'configuration',
80 'statistics', 'keys', 'needed-results'),
81- 'create': True})
82+ 'create': True,
83+ 'adjust': True})
84
85 daemon = Option(bool, 'Daemon',
86 ('-b', '--daemon'), ('-f', '--foreground'),
87@@ -254,7 +255,9 @@
88 testing_default='webdata',
89 convert_default=True,
90 convert_kwargs={
91- 'mode': 'r', 'subdirs': ('css', 'html', 'images', 'javascript')})
92+ 'mode': 'r',
93+ 'subdirs': ('css', 'html', 'images', 'javascript'),
94+ 'adjust': True})
95
96 server_hostname = Option(str, 'ServerHostname',
97 ('-s', '--server'), None,
98
99=== modified file 'beeseek/app/session.py'
100--- beeseek/app/session.py 2009-07-12 16:46:07 +0000
101+++ beeseek/app/session.py 2009-07-14 16:10:16 +0000
102@@ -200,7 +200,10 @@
103 scriptname = os.path.basename(sys.argv[0])
104
105 # Configuration
106- configdir = Directory(('/etc/beeseek', '~/.beeseek', 'config'), mode='r')
107+ # XXX This should be set elsewhere
108+ configdir = Directory(('/etc/beeseek', 'config'),
109+ mode='r',
110+ adjust=True)
111 logfile = open(os.devnull, 'w')
112
113 # Server specific objects and methods
114
115=== modified file 'setup.py'
116--- setup.py 2009-07-05 19:05:50 +0000
117+++ setup.py 2009-07-14 16:10:39 +0000
118@@ -23,19 +23,34 @@
119 import os
120 from distutils.core import setup
121 from distutils.command.install_data import install_data
122-import pwd
123+try:
124+ import pwd
125+except ImportError:
126+ pwd = None
127 import beeseek
128
129
130 class configure_and_install_data(install_data):
131
132+ def initialize_options(self):
133+ install_data.initialize_options(self)
134+ if os.name != 'nt':
135+ self.install_dir = '/'
136+
137 def run(self):
138 data_files = self.data_files = []
139- dirs_map = {
140- 'etc/beeseek': 'config',
141- 'var/lib/beeseek/database': 'database',
142- 'usr/share/beeseek/webdata': 'webdata'
143- }
144+ if os.name == 'nt':
145+ dirs_map = {
146+ 'BeeSeek/config': 'config',
147+ 'BeeSeek/database': 'database',
148+ 'BeeSeek/webdata': 'webdata'
149+ }
150+ else:
151+ dirs_map = {
152+ 'etc/beeseek': 'config',
153+ 'var/lib/beeseek/database': 'database',
154+ 'usr/share/beeseek/webdata': 'webdata'
155+ }
156
157 for destination, source in dirs_map.iteritems():
158 sourcelen = len(source) + 1
159@@ -46,20 +61,23 @@
160 data_files.append((path, subfiles))
161
162 install_data.run(self)
163- self.mkpath(os.path.join(self.install_dir, 'etc/init.d'))
164- self.copy_file('beeseek-peer.init',
165- os.path.join(self.install_dir,
166- 'etc/init.d/beeseek-peer'))
167- self.mkpath(os.path.join(self.install_dir, 'var/log/beeseek'))
168-
169- items = pwd.getpwnam('www-data')
170- uid, gid = items[2], items[3]
171- for path in ('var/log/beeseek', 'var/lib/beeseek'):
172- path = os.path.join(self.install_dir, path)
173- for directory, subdirs, subfiles in os.walk(path):
174- os.chown(directory, uid, gid)
175- for filename in subfiles:
176- os.chown(os.path.join(directory, filename), uid, gid)
177+
178+ if os.name != 'nt':
179+ self.mkpath(os.path.join(self.install_dir, 'etc/init.d'))
180+ self.copy_file('beeseek-peer.init',
181+ os.path.join(self.install_dir,
182+ 'etc/init.d/beeseek-peer'))
183+ self.mkpath(os.path.join(self.install_dir, 'var/log/beeseek'))
184+
185+ if not self.dry_run and pwd:
186+ items = pwd.getpwnam('www-data')
187+ uid, gid = items[2], items[3]
188+ for path in ('var/log/beeseek', 'var/lib/beeseek'):
189+ path = os.path.join(self.install_dir, path)
190+ for directory, subdirs, subfiles in os.walk(path):
191+ os.chown(directory, uid, gid)
192+ for filename in subfiles:
193+ os.chown(os.path.join(directory, filename), uid, gid)
194
195
196 def add_packages(metadata):

Subscribers

People subscribed via source and target branches