Renaming / Error handling

IndividualSpeedTest
- changed sys.exit(0) to raise SystemExit
- changed .readTo module calls to .utils
- changed SpeedPings to PingThread

Pings
- sys.exit to SystemExit
- readTo to utils

Created PingThread

STDs
- sys.exit to SystemExit
- changed how check for system version works
- Checking for “CPUC Beta….” line in STDs (that way no object is
created if it’s not a CPUC data file)

SpeedTestFile
- sys.exit to SystemExit
- readTo to utils
- ADDED obj attar. FileStreamLoc (representing location in stream.
Integer represents which byte to jump to
- ADDED obj attar. Latitude and Longitude. Holds 0 by default.
- REMOVED isWBBD (no longer necessary)
- __init__ just reads file name and passes initialization to load()
- REMOVED “CPUC Beta…” test. Just read through that line and assign
stream location to FileStreamLoc (using .tell())
- Most header information now follows this structure:
—— seek to stored stream location
—— read until header line
—— if returned line is empty, attr. holds “N/A”
—— seek back to stored stream loc
- in the case of the date time, in non-WBBD files, the date is parsed
and translated into [mm/dd/yyyy hh:mm:ss]
- Some blocks have nested try/excepts. This is because in non-WBBD
files, there is a line “Location ID:”, but in WBBD, it is “Location:”
- Slightly modified __str__ output

utils
- checkVersion uses sys module. Compares to tuple that was passed in
[e.g (2,7) or (3,0)]
- monthAbbrToNum found on stackoverflow.com. In return, creates
dictionary and returns the value as the passed in index (must be
abbreviation)
- monthNumToAbbr works very similarly, only with numbers not
abbreviations
Almost working down to Individual Test Layer

There is a problem with the parsing. Python3.4 does something different
than Python2.7, and it’s cutting off a character. See testing~bash
diff.txt for diff between output1 and output2

utils
- added global_str_padding variable that will be used in all class
__str__ methods (for nice indentation between levels). At the beginning
of each class, pad is multiplied X times, based on what “level” the
class is at. (i.e. STDs = level 0, File=1, Individ=2, thread=3, ping=4)

main.py
- commented out section of code I used to do some testing of what was
in the iPerf command line (i.e., -i is always followed by 1)

IndividualSpeedTest
- large comment with copied text from testing~example_iPerf_commands.
Split up options that were in one test, and what were common options
- ClientIP -> RecieverIP
- added TestInterval
- __init__ calls load with data string passed in
- load()
—— save first line of data into string (Iperf command…..etc.)
—— determine attributes (TCP vs UDP, East vs West, etc.)
—— last if/else is where we will declare the ping threads
- __str__ prints out data

Pings
- kinda started __init__

PingThread
- __init__ by default adds empty Ping to this_Pings (should we do it
like this, for test files with no data?)

STDs
- added another command line option, -css (compact super short). uses
only one file

SpeedTestFile
- speedTests -> this_speedTests
- changed check for empty line (see line 274). Now just use temp[:-2]
to “remove” last two characters, and compare that to empty string
- removed findSpeedTest()
- added printSpeedTests()
- changed how __str__ works (added pad to pad out print lines)
Merge branch 'Walker-TestBranch'