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"))
Example #4
0
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()