import repository from arizona
[raven.git] / lib / ravenlib / listutil.py
1 import re
2 import ravenlib.typecheck
3
4 def uniq(orig_list):
5    """
6    <Purpose>
7       Performs "uniq" on a list (returns the unique items in a list), with
8       the new list retaining the order of the original list.  Doesn't use
9       sort.
10
11    <Arguments>
12       orig_list:
13               List or other iterable type from which to collect unique
14               items.
15
16    <Exceptions>
17       TypeError if a bad parameter is detected.
18
19    <Side Effects>
20       None.
21
22    <Returns>
23       Returns a list of the unique items in the original list.
24    """
25    # check params
26    ravenlib.typecheck.simple(orig_list, "orig_list", list, "listutil.uniq")
27
28    # None returns an empty list
29    uniq_list = []
30    if not orig_list:
31       return uniq_list
32
33    # check each item in the original list
34    for item in orig_list:
35
36       # if this item wasn't in our new uniq list, add it
37       if item not in uniq_list:
38          uniq_list = uniq_list + [item]
39
40    return uniq_list
41
42 def list_to_args(raw_list):
43    """
44    <Purpose>
45       Converts a list of command line parameters into a space separated
46       list, with special characters escaped for command-line use.  Will
47       have a leading space unless len(raw_list) == 0.
48
49    <Arguments>
50       raw_list:
51               List of strings each contaning a command line argument.
52
53    <Exceptions>
54       TypeError:
55               If a type mismatch or parameter error is detected.
56
57    <Side Effects>
58       None.
59
60    <Returns>
61       String containing space separated args.
62    """
63    # check params
64    ravenlib.typecheck.stringlist(raw_list, "raw_list", "list_to_args")
65
66    args = ""
67    for item in raw_list:
68       args += " " + re.escape(item)
69    return args
70