kbandla / dpkt

fast, simple packet creation / parsing, with definitions for the basic TCP/IP protocols
Other
1.09k stars 270 forks source link

Investigate Flake8 F82 errors #512

Closed brifordwylie closed 3 years ago

brifordwylie commented 3 years ago

So by default Github Actions normally includes Flake8 F82 errors and will 'block' a PR. Obviously we have a lot of these.. I'll remove the F82 category for now, but we should circle back and revisit these at some point.

flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
./dpkt/pcap.py:496:17: F821 undefined name 'writer'
                writer.close()
                ^
./dpkt/pcap.py:503:5: F821 undefined name 'writer'
    writer.writepkt(pkt, ts=ts)
    ^
./dpkt/pcap.py:509:5: F821 undefined name 'writer'
    writer.writepkt(pkt, ts=ts)
    ^
./dpkt/pcap.py:516:5: F821 undefined name 'writer'
    writer.writepkt(pkt, ts=ts)
    ^
./dpkt/pcap.py:524:5: F821 undefined name 'writer'
    writer.writepkt(pkt)
    ^
./dpkt/pcap.py:531:5: F821 undefined name 'writer'
    writer.writepkt(pkt, ts)
    ^
./dpkt/pcap.py:537:5: F821 undefined name 'writer'
    writer.writepkt(pkt, ts)
    ^
./dpkt/pcap.py:543:5: F821 undefined name 'writer'
    writer.writepkt_time(pkt, ts)
    ^
./dpkt/pcap.py:556:5: F821 undefined name 'writer'
    writer.writepkts(pkts)
    ^
./dpkt/ethernet.py:18:30: F821 undefined name 'basestring'
        return isinstance(s, basestring)
                             ^
./dpkt/pcapng.py:932:17: F821 undefined name 'writer'
                writer.close()
                ^
./dpkt/pcapng.py:977:5: F821 undefined name 'fobj'
    fobj.write(bytes(shb))
    ^
./dpkt/pcapng.py:984:5: F821 undefined name 'fobj'
    fobj.write(bytes(shb))
    ^
./dpkt/pcapng.py:992:5: F821 undefined name 'fobj'
    fobj.write(bytes(shb))
    ^
./dpkt/pcapng.py:998:5: F821 undefined name 'fobj'
    fobj.write(bytes(shb)+b'aaaa')
    ^
./dpkt/pcapng.py:1010:5: F821 undefined name 'fobj'
    fobj.write(bytes(shb)+bytes(idb))
    ^
./dpkt/pcapng.py:1020:5: F821 undefined name 'fobj'
    fobj.write(bytes(shb)+bytes(idb))
    ^
./dpkt/pcapng.py:1038:5: F821 undefined name 'fobj'
    fobj.write(buf)
    ^
./dpkt/pcapng.py:1039:5: F821 undefined name 'fobj'
    fobj.flush()
    ^
./dpkt/pcapng.py:1040:5: F821 undefined name 'fobj'
    fobj.seek(0)
    ^
./dpkt/pcapng.py:1041:21: F821 undefined name 'fobj'
    reader = Reader(fobj)
                    ^
./dpkt/pcapng.py:1050:5: F821 undefined name 'fobj'
    fobj.write(define_testdata().valid_pcapng)
    ^
./dpkt/pcapng.py:1056:5: F821 undefined name 'fobj'
    fobj.write(define_testdata().valid_pcapng)
    ^
./dpkt/pcapng.py:1061:5: F821 undefined name 'fobj'
    fobj.write(define_testdata().valid_pcapng)
    ^
./dpkt/pcapng.py:1062:5: F821 undefined name 'fobj'
    fobj.flush()
    ^
./dpkt/pcapng.py:1063:5: F821 undefined name 'fobj'
    fobj.seek(0)
    ^
./dpkt/pcapng.py:1068:21: F821 undefined name 'fobj'
    reader = Reader(fobj)
                    ^
./dpkt/pcapng.py:1073:5: F821 undefined name 'fobj'
    fobj.write(define_testdata().valid_pcapng)
    ^
./dpkt/pcapng.py:1074:5: F821 undefined name 'fobj'
    fobj.flush()
    ^
./dpkt/pcapng.py:1075:5: F821 undefined name 'fobj'
    fobj.seek(0)
    ^
./dpkt/pcapng.py:1080:21: F821 undefined name 'fobj'
    reader = Reader(fobj)
                    ^
./dpkt/pcapng.py:1152:25: F821 undefined name 'fobj'
        writer = Writer(fobj, shb=shb)
                        ^
./dpkt/pcapng.py:1162:21: F821 undefined name 'fobj'
    writer = Writer(fobj, shb=shb, idb=idb)
                    ^
./dpkt/pcapng.py:1183:25: F821 undefined name 'fobj'
        writer = Writer(fobj, shb=shb)
                        ^
./dpkt/pcapng.py:1199:25: F821 undefined name 'fobj'
        writer = Writer(fobj, shb=shb)
                        ^
./dpkt/pcapng.py:1212:5: F821 undefined name 'writer'
    writer.writepkt(pkt)
    ^
./dpkt/pcapng.py:1219:5: F821 undefined name 'writer'
    writer.writepkt(pkt, ts)
    ^
./dpkt/pcapng.py:1225:5: F821 undefined name 'writer'
    writer.writepkt(pkt, ts)
    ^
./dpkt/pcapng.py:1238:5: F821 undefined name 'writer'
    writer.writepkts(pkts)
    ^
obormot commented 3 years ago

Yeah writer and fobj are mocked in the unit test and injected into function globals.. hacky stuff

                f.__globals__['writer'] = Writer(fobj, **self.kwargs.get('writer', {}))
                f.__globals__['fobj'] = fobj

so obviously any statistical analysis tool will see them as undefined.

As for the basestring it's undefined in Python3; dpkt catches a NameError.

try:
    isinstance("", basestring)
except NameError:
    ...

We should be able to refactor this..

$ python2 -c "print(hasattr(__builtins__, 'basestring'))"
True
$ python3 -c "print(hasattr(__builtins__, 'basestring'))"
False