def test_from_file(self): s = """%,Head,Stack,X,Y,R,H,skip,Ref,Comment, 1,1,1,4,22,-45,1,0,LED7,-LED-805 2,2,1,4,19,-45,1,0,LED8,-LED-805 3,1,1,4,16,-45,1,0,LED9,-LED-805""" f = StringIO(s) p = PlacementInstructions.from_file(f) self.assertEqual(s, p.to_csv())
def test_copies(self): s = """65535,0,0,0,, 65535,1,1,0,0.05,0402 65535,2,1,2, 0,1,1,141.73,-64.52,-90,0,0,, 1,1,1,156.59,-77.98,-90,0,0,, 2,1,1,144.78,-64.52,90,0,0,, 3,1,1,135.38,-64.52,0,0,0,,""" f = StringIO(s) p = PlacementInstructions.from_file(f) self.assertEqual(p.get_copies(), [])
def test_from_file_parse_error(self): s = """%,Head,Stack,X,Y,R,H,skip,Ref,Comment, 1,1,1,4,22,-45,1,0,LED7,-LED-805 2,2,1,4,19,-45,1,0,LED8,-LED-805 PARSE ERROR NOT IN YOUR FAVOR""" f = StringIO(s) with LogCapture() as logs: try: p = PlacementInstructions.from_file(f) except: pass else: self.fail() logs.check(('root', 'ERROR', "Error parsing line: PARSE ERROR NOT IN YOUR FAVOR"))
def main(): logging.basicConfig(stream=sys.stderr, level=logging.DEBUG, format='(%(levelname)s): %(message)s') try: arguments = parse_command_line(sys.argv) with open(arguments.kicad_file) as kicad_handle: if arguments.csv_file: try: csv_handle = open(arguments.csv_file) instructions = PlacementInstructions.from_file(csv_handle) p = Placement.from_instructions(instructions) csv_handle.close() except IOError: raise else: p = Placement() kicad_parts = KicadPartPositions.from_file(kicad_handle) if arguments.side == "front": side = "Front" elif arguments.side == "back": side = "Back" else: raise Exception("Unknown side") p.clear_parts() cli = PlacementCLI(placement=p, unassigned_parts=kicad_parts.instructions[side], output_filename=arguments.output_filename) cli.run() finally: logging.shutdown()