pygpibtoolkit/tools.py

Thu, 21 Aug 2008 19:10:57 +0200

author
David Douard <david.douard@logilab.fr>
date
Thu, 21 Aug 2008 19:10:57 +0200
changeset 66
2a97995628a3
parent 40
1bbea188a7e5
child 86
96e30b092f70
permissions
-rw-r--r--

added copyright header to every python file

66
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
1 # This program is free software; you can redistribute it and/or modify it under
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
2 # the terms of the GNU General Public License as published by the Free Software
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
3 # Foundation; either version 2 of the License, or (at your option) any later
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
4 # version.
36
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
5 #
66
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
6 # This program is distributed in the hope that it will be useful, but WITHOUT
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
7 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
8 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
9 #
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
10 # You should have received a copy of the GNU General Public License along with
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
11 # this program; if not, write to the Free Software Foundation, Inc.,
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
12 # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
13 """ Copyright (c) 2007-2008 David Douard (Paris, FRANCE).
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
14 http://www.logilab.org/project/pygpibtoolkit -- mailto:david.douard@logilab.fr
2a97995628a3 added copyright header to every python file
David Douard <david.douard@logilab.fr>
parents: 40
diff changeset
15
36
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
16 Helper functions and classes
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
17 """
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
18 import re
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
19
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
20 def str_num_cmp(s1,s2):
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
21 """
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
22 string comparator function that will put 'toto_10' after 'toto_2'
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
23 Also works for strings like 'toto_1_et_23er25'.
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
24 """
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
25 r = re.compile(r'((?<=\d)\D+|(?<=\D)\d+)')
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
26 r1= r.split(s1)
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
27 r2= r.split(s2)
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
28 r1=[not x.isdigit() and x or int(x) for x in r1 if x!='']
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
29 r2=[not x.isdigit() and x or int(x) for x in r2 if x!='']
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
30 return cmp(r1,r2)
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
31
cb4124e3e75b some improvements; can now give a bunch of files to open on cmd line; removed print statements
David Douard <david.douard@logilab.fr>
parents: 35
diff changeset
32
35
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
33 class AbstractRegister(object):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
34 _instance = None
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
35 _registered_type = None
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
36 def __new__(cls):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
37 # implements a singleton
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
38 if cls._instance is None:
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
39 #debug('Instanciating %s', cls.__name__)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
40 cls._instance = super(AbstractRegister, cls).__new__(cls)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
41 cls._instance.registered = {}
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
42 cls._instance.accepts = set()
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
43 return cls._instance
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
44
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
45 def add(self, cls):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
46 assert issubclass(cls, self._registered_type)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
47 if cls is self._registered_type:
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
48 return
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
49 if cls._accepts is None:
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
50 return
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
51 #assert isinstance(cls._accepts, (basestring, tuple))
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
52
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
53 #debug("Registerered %s for %s", cls.__name__)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
54 if not isinstance(cls._accepts, tuple):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
55 cls._accepts = (cls._accepts,)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
56 for key in cls._accepts:
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
57 key = self._get_typ(key)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
58 #debug(" new key = %s", key)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
59 self.registered.setdefault(key, []).append(cls)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
60 self.accepts.add(key)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
61
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
62 def _get_typ(self, typ):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
63 if not isinstance(typ, basestring):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
64 if not isinstance(typ, type):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
65 return None
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
66 typ = typ.__name__
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
67 return typ
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
68
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
69 def __contains__(self, val):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
70 val = self._get_typ(val)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
71 return val in self.accepts
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
72
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
73 def get_class(self, typ):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
74 item = typ
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
75 if not isinstance(typ, type):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
76 typ = typ.__class__
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
77 name = typ.__name__
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
78 #debug("Looking a widget for %s", typ.__name__)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
79 orig_typ = typ
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
80 while typ is not None:
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
81 if typ.__name__ in self.registered:
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
82 for w in self.registered[typ.__name__]:
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
83 if w._filter is None or w._filter(item):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
84 #debug("Widget for %s is %s", typ.__name__, w)
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
85 return w#self.registered[typ.__name__]
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
86 if typ.__bases__:
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
87 typ = typ.__bases__[0]
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
88 if typ == object:
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
89 typ = None
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
90 elif typ.__name__ in ("ObjectItem_", "AbstractListItem_"):
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
91 typ = orig_typ._type
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
92 else:
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
93 typ = None
3b7a38af5c42 Refactored the preference system for the qt gpib plotter app. One can now set the colors for plotting pens.
David Douard <david.douard@logilab.fr>
parents:
diff changeset
94 raise ValueError('No registered class for %s' % (name))

mercurial