Mercurial > hg > pyloader
annotate pyloader/cast.py @ 77:efb7a8a189e8
update comments/docstring
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Thu, 09 Jun 2011 18:40:52 -0700 |
parents | 2261cf505daf |
children | 36f5d31c3ed6 |
rev | line source |
---|---|
77 | 1 #!/usr/bin/env python |
2 | |
3 """ | |
4 cast strings to python objects | |
5 """ | |
6 | |
2
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
7 class StringCastException(Exception): |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
8 """raised on unsucessful cast""" |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
9 |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
10 class StringCaster(object): |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
11 """cast strings to other things""" |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
12 # as yet unused |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
13 |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
14 def __init__(self, *casts): |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
15 self.casts = casts |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
16 |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
17 def __call__(self, string): |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
18 for cast in self.casts: |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
19 try: |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
20 return cast(string) |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
21 except: |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
22 continue |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
23 return string |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
24 |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
25 ### casters |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
26 |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
27 def str2bool(string): |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
28 mapping = {'true': True, |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
29 'True': True, |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
30 'false': False, |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
31 'False': False} |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
32 return mapping[string] |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
33 |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
34 def str2list(string, separator=None): |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
35 string = string.rstrip(separator) |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
36 return [i.strip() for i in string.split(separator)] |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
37 |
71
2261cf505daf
interpolate "inline" wrapper arguments
Jeff Hammel <jhammel@mozilla.com>
parents:
6
diff
changeset
|
38 def str2args(string, separator=','): |
2
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
39 args = str2list(string, separator) |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
40 _args = [] |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
41 kw = {} |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
42 for arg in args: |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
43 if '=' in arg: |
4
5ce55f6c8964
invokation works in the barest sense
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
44 key, value = arg.split('=', 1) |
5ce55f6c8964
invokation works in the barest sense
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
45 key = key.strip() |
5ce55f6c8964
invokation works in the barest sense
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
46 value = value.strip() |
5ce55f6c8964
invokation works in the barest sense
Jeff Hammel <jhammel@mozilla.com>
parents:
2
diff
changeset
|
47 kw[key] = value |
2
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
48 else: |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
49 _args.append(arg) |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
50 return _args, kw |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
51 |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
52 # convenience functions |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
53 casts = [int, float, str2bool, str2list, str2args] |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
54 cast = StringCaster(*casts) |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
55 |
6
886009132409
start a dict for type-based stringcasting
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
56 # cast by type |
886009132409
start a dict for type-based stringcasting
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
57 cast_dict = dict([(i,i) for i in int, float]) |
886009132409
start a dict for type-based stringcasting
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
58 cast_dict[bool] = str2bool |
886009132409
start a dict for type-based stringcasting
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
59 cast_dict[tuple] = cast_dict[list] = str2list |
886009132409
start a dict for type-based stringcasting
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
60 |
2
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
61 if __name__ == '__main__': |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
62 import sys |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
63 for arg in sys.argv[1:]: |
6cb7696edc4d
add some more stuff for string loady type things and rearrange structure
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
64 print cast(arg) |