diff --git a/scapy/base_classes.py b/scapy/base_classes.py index 4b2584fa36bcb45d28efb58d918f48546ff29f4f..d9c26aaeec697543a1637f12a03f26ef92f085fa 100644 --- a/scapy/base_classes.py +++ b/scapy/base_classes.py @@ -21,21 +21,21 @@ class Gen(object): return iter([]) class SetGen(Gen): - def __init__(self, set, _iterpacket=1): + def __init__(self, values, _iterpacket=1): self._iterpacket=_iterpacket - if isinstance(set, (list, BasePacketList)): - self.set = list(set) - elif (type(set) is tuple) and (2 <= len(set) <= 3) and \ - all(type(i) is int for i in set): - # We use set[1] + 1 as stop value for xrange to maintain - # the behavior of using tuples as field `set` - self.set = [xrange(*((set[0], set[1] + 1) + set[2:]))] + if isinstance(values, (list, BasePacketList)): + self.values = list(values) + elif (type(values) is tuple) and (2 <= len(values) <= 3) and \ + all(type(i) is int for i in values): + # We use values[1] + 1 as stop value for xrange to maintain + # the behavior of using tuples as field `values` + self.values = [xrange(*((values[0], values[1] + 1) + values[2:]))] else: - self.set = [set] + self.values = [values] def transf(self, element): return element def __iter__(self): - for i in self.set: + for i in self.values: if (isinstance(i, Gen) and (self._iterpacket or not isinstance(i,BasePacket))) or ( isinstance(i, (xrange, types.GeneratorType))): @@ -44,7 +44,7 @@ class SetGen(Gen): else: yield i def __repr__(self): - return "<SetGen %s>" % self.set.__repr__() + return "<SetGen %r>" % self.values class Net(Gen): """Generate a list of IPs from a network address or a name""" diff --git a/scapy/tools/UTscapy.py b/scapy/tools/UTscapy.py index 90f15b22f0ebeac41f01f934316b2a87d63aa907..7753e1a1dec2bdbd452a8c5a01b79204fed89106 100755 --- a/scapy/tools/UTscapy.py +++ b/scapy/tools/UTscapy.py @@ -82,10 +82,12 @@ vzM985aHXOHAxQN2UQZbQkUv3D4Vc+lyvalAffv3Tyg4ks3a22kPXiyeCGweviNX 0K8TKasyOhGsVamTUAZBXfQVw1zmdS4rHDnbHgtIjX3DcCt6UIr0BHTYjdV0JbPj r1APYgXihjQwM2M83AKIhwQQJv/F3JFOFCQNsEI0QA==""") def get_local_dict(cls): - return dict(map(lambda (x,y): (x, y.name), filter(lambda (x,y): isinstance(y, File), cls.__dict__.items()))) + return dict((x, y.name) for (x, y) in cls.__dict__.iteritems() + if isinstance(y, File)) get_local_dict = classmethod(get_local_dict) def get_URL_dict(cls): - return dict(map(lambda (x,y): (x, y.URL), filter(lambda (x,y): isinstance(y, File), cls.__dict__.items()))) + return dict((x, y.URL) for (x, y) in cls.__dict__.iteritems() + if isinstance(y, File)) get_URL_dict = classmethod(get_URL_dict) @@ -138,15 +140,15 @@ class TestCampaign(TestClass): class TestSet(TestClass): def __init__(self, name): self.name = name - self.set = [] + self.tests = [] self.comments = "" self.keywords = [] self.crc = None self.expand = 1 def add_test(self, test): - self.set.append(test) + self.tests.append(test) def __iter__(self): - return self.set.__iter__() + return self.tests.__iter__() class UnitTest(TestClass): def __init__(self, name): @@ -257,8 +259,9 @@ def compute_campaign_digests(test_campaign): def filter_tests_on_numbers(test_campaign, num): if num: for ts in test_campaign: - ts.set = filter(lambda t: t.num in num, ts.set) - test_campaign.campaign = filter(lambda ts: len(ts.set) > 0, test_campaign.campaign) + ts.tests = [t for t in ts.tests if t.num in num] + test_campaign.campaign = [ts for ts in test_campaign.campaign + if ts.tests] def filter_tests_keep_on_keywords(test_campaign, kw): def kw_match(lst, kw): @@ -269,7 +272,7 @@ def filter_tests_keep_on_keywords(test_campaign, kw): if kw: for ts in test_campaign: - ts.set = filter(lambda t: kw_match(t.keywords, kw), ts.set) + ts.tests = [t for t in ts.tests if kw_match(t.keywords, kw)] def filter_tests_remove_on_keywords(test_campaign, kw): def kw_match(lst, kw): @@ -280,11 +283,11 @@ def filter_tests_remove_on_keywords(test_campaign, kw): if kw: for ts in test_campaign: - ts.set = filter(lambda t: not kw_match(t.keywords, kw), ts.set) + ts.tests = [t for t in ts.tests if not kw_match(t.keywords, kw)] def remove_empty_testsets(test_campaign): - test_campaign.campaign = filter(lambda ts: len(ts.set) > 0, test_campaign.campaign) + test_campaign.campaign = [ts for ts in test_campaign.campaign if ts.tests] #### RUN CAMPAIGN ##### @@ -569,13 +572,12 @@ def main(argv): LOCAL = 1 elif opt == "-n": NUM = [] - for v in map( lambda x: x.strip(), optarg.split(",") ): + for v in (x.strip() for x in optarg.split(",")): try: NUM.append(int(v)) except ValueError: - v1,v2 = map(int, v.split("-")) - for vv in xrange(v1, v2 + 1): - NUM.append(vv) + v1, v2 = map(int, v.split("-", 1)) + NUM.extend(xrange(v1, v2 + 1)) elif opt == "-m": MODULES.append(optarg) elif opt == "-k":