예제 #1
0
 def import_footprints(self):
   dialog = ImportFootprintsDialog(self)
   if dialog.exec_() != QtGui.QDialog.Accepted: return
   (footprint_names, importer, selected_library) = dialog.get_data()
   lib_dir = QtCore.QDir(self.explorer.coffee_lib[selected_library].directory)
   l = []
   for footprint_name in footprint_names:
     interim = inter.import_footprint(importer, footprint_name) 
     l.append((footprint_name, interim))
   cl = []
   for (footprint_name, interim) in l:
     try:
      coffee = generatesimple.generate_coffee(interim)
      cl.append((footprint_name, coffee))
     except Exception as ex:
       tb = traceback.format_exc()
       s = "warning: skipping footprint %s\nerror: %s" % (footprint_name, str(ex) + '\n' + tb)
       QtGui.QMessageBox.warning(self, "warning", s)
   for (footprint_name, coffee) in cl:
     meta = pycoffee.eval_coffee_meta(coffee)
     new_file_name = lib_dir.filePath("%s.coffee" % (meta['id']))
     with open(new_file_name, 'w+') as f:
       f.write(coffee)
   self.explorer.rescan_library(selected_library)
   self.status('Importing done.')
예제 #2
0
파일: cli.py 프로젝트: agschult/madparts
def import_footprint(remaining):
  parser = argparse.ArgumentParser(prog=sys.argv[0] + ' import')
  parser.add_argument('library', help='library file')
  parser.add_argument('footprint', help='footprint name')
  args = parser.parse_args(remaining)
  try:
    importer = detect.make_importer(args.library)
  except Exception as ex:
    print >> sys.stderr, str(ex)
    return 1
  names = map(lambda (a,_): a, importer.list_names())
  if not args.footprint in names:
    print >> sys.stderr, "Footprint %s not found in %s." % (args.footprint, args.library)
    return 1
  interim = inter.import_footprint(importer, args.footprint) 
  try:
    coffee = generatesimple.generate_coffee(interim)
  except Exception as ex:
    tb = traceback.format_exc()
    print >> sys.stderr, "Footprint %s\nerror: %s" % (args.footprint, str(ex) + '\n' + tb)
    return 1
  meta = pycoffee.eval_coffee_meta(coffee)
  new_file_name = "%s.coffee" % (meta['id'])
  with open(new_file_name, 'w+') as f:
    f.write(coffee)
  print "%s/%s written to %s." % (args.library, args.footprint, new_file_name)
  return 0
예제 #3
0
파일: cli.py 프로젝트: bharrisau/madparts
def import_footprint(remaining):
    parser = argparse.ArgumentParser(prog=sys.argv[0] + ' import')
    parser.add_argument('library', help='library file')
    parser.add_argument('footprint', help='footprint name')
    args = parser.parse_args(remaining)
    try:
        version = export.eagle.check_xml_file(args.library)
    except Exception as ex:
        print >> sys.stderr, str(ex)
        return 1
    importer = export.eagle.Import(args.library)
    names = map(lambda (a, _): a, importer.list_names())
    if not args.footprint in names:
        print >> sys.stderr, "Footprint %s not found in %s." % (args.footprint,
                                                                args.library)
        return 1
    interim = inter.import_footprint(importer, args.footprint)
    try:
        coffee = generatesimple.generate_coffee(interim)
    except Exception as ex:
        tb = traceback.format_exc()
        print >> sys.stderr, "Footprint %s\nerror: %s" % (args.footprint,
                                                          str(ex) + '\n' + tb)
        return 1
    meta = pycoffee.eval_coffee_meta(coffee)
    new_file_name = "%s.coffee" % (meta['id'])
    with open(new_file_name, 'w+') as f:
        f.write(coffee)
    print "%s/%s written to %s." % (args.library, args.footprint,
                                    new_file_name)
    return 0
예제 #4
0
파일: library.py 프로젝트: andete/madparts
 def scan(self, select_id = None):
   self.meta_list = []
   self.fail_list = []
   if not self.exists: return
   for path in glob.glob(self.directory + '/*.coffee'):
     with open(path) as f:
       code = f.read()
     meta = pycoffee.eval_coffee_meta(code)
     if not 'name' in meta or not 'id' in meta: 
       self.fail_list.append(meta)
       continue
     meta['readonly'] = not os.access(path, os.W_OK)
     meta['filename'] = path
     self.meta_list.append(meta)
   self.meta_list = [Meta(meta) for meta in self.meta_list]
   self.meta_list.sort(key=lambda x: x.name)
   self.meta_by_id = {}
   for meta in self.meta_list:
     self.meta_by_id[meta.id] = meta
   self.meta_by_name = {}
   for meta in self.meta_list:
     self.meta_by_name[meta.name] = meta
   # scan child relationships
   found_as_child = []
   for meta in self.meta_list:
     if meta.parent != None and meta.parent in self.meta_by_id:
       self.meta_by_id[meta.parent].child_ids.append(meta.id)
       found_as_child.append(meta.id)
   self.root_meta_list = filter(lambda meta: meta.id not in found_as_child, self.meta_list)
예제 #5
0
 def import_footprint(self, initial=False):
     dialog = gui.dialogs.ImportFootprintsDialog(self)
     if dialog.exec_() != QtGui.QDialog.Accepted:
         return None
     (footprint_names, importer, lib_filename) = dialog.get_data()
     (lib_name, _ext) = os.path.splitext(os.path.basename(lib_filename))
     lib_dir = QtCore.QDir(".")
     footprint_name = footprint_names[0]
     print "doing footprint:", footprint_name
     interim = inter.import_footprint(importer, footprint_name)
     try:
         coffee = generatesimple.generate_coffee(interim)
     except Exception as ex:
         tb = traceback.format_exc()
         s = "warning: skipping footprint %s\nerror: %s" % (
             footprint_name, str(ex) + '\n' + tb)
         QtGui.QMessageBox.warning(self, "warning", s)
         return None
     meta = pycoffee.eval_coffee_meta(coffee)
     new_file_name = lib_dir.filePath("%s_%s.coffee" %
                                      (lib_name, meta['name']))
     with open(new_file_name, 'w+') as f:
         f.write(coffee)
     self.status('Importing done.')
     if not initial:
         self.file_name = new_file_name
         self.readonly = not os.access(self.file_name, os.W_OK)
         with open(self.file_name) as f:
             self.update_text(f.read())
             self.set_code_textedit_readonly(self.readonly)
         self.update_title()
     else:
         return new_file_name
예제 #6
0
파일: madparts.py 프로젝트: andete/madparts
 def import_footprint(self, initial=False):
   dialog = gui.dialogs.ImportFootprintsDialog(self)
   if dialog.exec_() != QtGui.QDialog.Accepted:
     return None
   (footprint_names, importer, lib_filename) = dialog.get_data()
   (lib_name, _ext) = os.path.splitext(os.path.basename(lib_filename))
   lib_dir = QtCore.QDir(".")
   footprint_name = footprint_names[0]
   print "doing footprint:", footprint_name
   interim = inter.import_footprint(importer, footprint_name) 
   try:
     coffee = generatesimple.generate_coffee(interim)
   except Exception as ex:
     tb = traceback.format_exc()
     s = "warning: skipping footprint %s\nerror: %s" % (footprint_name, str(ex) + '\n' + tb)
     QtGui.QMessageBox.warning(self, "warning", s)
     return None
   meta = pycoffee.eval_coffee_meta(coffee)
   new_file_name = lib_dir.filePath("%s_%s.coffee" % (lib_name, meta['name']))
   with open(new_file_name, 'w+') as f:
     f.write(coffee)
   self.status('Importing done.')
   if not initial:
     self.file_name = new_file_name
     self.readonly = not os.access(self.file_name, os.W_OK)
     with open(self.file_name) as f:
       self.update_text(f.read())
       self.set_code_textedit_readonly(self.readonly)
     self.update_title()
   else:
     return new_file_name
예제 #7
0
파일: library.py 프로젝트: jonpry/madparts
 def move_footprint(self):
     old_code = self.parent.code_textedit.toPlainText()
     old_meta = pycoffee.eval_coffee_meta(old_code)
     dialog = MoveFootprintDialog(self, old_meta)
     if dialog.exec_() != QtGui.QDialog.Accepted: return
     (new_name, new_lib) = dialog.get_data()
     old_name = old_meta['name']
     my_id = self.active_footprint.id
     fn = my_id + '.coffee'
     old_lib = self.active_library
     new_code = old_code.replace("#name %s" % (old_name),
                                 "#name %s" % (new_name))
     new_lib_dir = QtCore.QDir(self.coffee_lib[new_lib].directory)
     new_file_name = new_lib_dir.filePath(fn)
     with open(new_file_name, 'w+') as f:
         f.write(new_code)
     status_str = "moved %s/%s to %s/%s." % (old_lib.name, old_name,
                                             new_lib, new_name)
     self.parent.status(status_str)
     if old_lib.name == new_lib:
         self.rescan_library(old_lib.name,
                             my_id)  # just to update the nameq
     else:
         full_fn = os.path.join(old_lib.directory, fn)
         os.unlink(full_fn)
         self.rescan_library(old_lib.name)
         self.active_library = self.rescan_library(new_lib, my_id)
예제 #8
0
파일: madparts.py 프로젝트: pelrun/madparts
 def move_footprint(self):
   old_code = self.te1.toPlainText()
   old_meta = pycoffee.eval_coffee_meta(old_code)
   dialog = MoveFootprintDialog(self, old_meta)
   if dialog.exec_() != QtGui.QDialog.Accepted: return
   (new_name, new_lib) = dialog.get_data()
   old_name = old_meta['name']
   my_id = self.active_footprint_id
   fn = my_id + '.coffee'
   old_lib = self.active_library
   new_code = old_code.replace("#name %s" % (old_name), "#name %s" % (new_name))
   new_lib_dir = QtCore.QDir(self.lib_dir[new_lib])
   new_file_name = new_lib_dir.filePath(fn)
   with open(new_file_name, 'w+') as f:
     f.write(new_code)
   self.te1.setPlainText(new_code)
   self.status("moved %s/%s to %s/%s." % (old_lib, old_name, new_lib, new_name))
   if old_lib == new_lib: 
     self.rescan_library(old_lib, my_id) # just to update the name
   else:
     old_lib_dir = QtCore.QDir(self.lib_dir[old_lib])
     old_lib_dir.remove(fn)
     self.rescan_library(old_lib)
     self.rescan_library(new_lib, my_id)
     self.active_library = new_lib
예제 #9
0
 def scan(self, select_id=None):
     self.meta_list = []
     self.fail_list = []
     if not self.exists: return
     for path in glob.glob(self.directory + '/*.coffee'):
         with open(path) as f:
             code = f.read()
         meta = pycoffee.eval_coffee_meta(code)
         if not 'name' in meta or not 'id' in meta:
             self.fail_list.append(meta)
             continue
         meta['readonly'] = not os.access(path, os.W_OK)
         meta['filename'] = path
         self.meta_list.append(meta)
     self.meta_list = [Meta(meta) for meta in self.meta_list]
     self.meta_list.sort(key=lambda x: x.name)
     self.meta_by_id = {}
     for meta in self.meta_list:
         self.meta_by_id[meta.id] = meta
     self.meta_by_name = {}
     for meta in self.meta_list:
         self.meta_by_name[meta.name] = meta
     # scan child relationships
     found_as_child = []
     for meta in self.meta_list:
         if meta.parent != None and meta.parent in self.meta_by_id:
             self.meta_by_id[meta.parent].child_ids.append(meta.id)
             found_as_child.append(meta.id)
     self.root_meta_list = filter(
         lambda meta: meta.id not in found_as_child, self.meta_list)
예제 #10
0
파일: library.py 프로젝트: npk/madparts
 def load(self, path):
   with open(path) as f:
     code = f.read()
   meta = pycoffee.eval_coffee_meta(code)
   if not 'name' in meta:
     raise Exception('Error loading footprint from %s' % (path))
   self.name = meta['name']
   self.id = meta['id']
   self.identify = ('footprint', (self.lib_name, self.id))
   self.desc = oget(meta, 'desc', '')
   self.parent = oget(meta, 'parent', None)
예제 #11
0
 def clone_footprint(self):    
   if self.parent.executed_footprint == []:
     s = "Can't clone if footprint doesn't compile."
     QtGui.QMessageBox.warning(self, "warning", s)
     self.parent.status(s) 
     return
   old_code = self.parent.code_textedit.toPlainText()
   old_meta = pycoffee.eval_coffee_meta(old_code)
   dialog = CloneFootprintDialog(self, old_meta, old_code)
   if dialog.exec_() != QtGui.QDialog.Accepted: return
   (new_id, new_name, new_lib) = dialog.get_data()
   new_code = pycoffee.clone_coffee_meta(old_code, old_meta, new_id, new_name)
   lib_dir = QtCore.QDir(self.coffee_lib[new_lib].directory)
   new_file_name = lib_dir.filePath("%s.coffee" % (new_id))
   with open(new_file_name, 'w+') as f:
     f.write(new_code)
   s = "%s/%s cloned to %s/%s." % (self.active_library.name, old_meta['name'], new_lib, new_name)
   self.active_library = self.rescan_library(new_lib, new_id)
   self.active_footprint = self.active_library.meta_by_id(new_id)
   self.parent.update_text(new_code)
   self.parent.show_footprint_tab()
   self.parent.status(s)
예제 #12
0
파일: cli.py 프로젝트: metacollin/madparts
def import_footprint(remaining):
    parser = argparse.ArgumentParser(prog=sys.argv[0] + ' import')
    parser.add_argument('library', help='library file')
    parser.add_argument('footprint', help='footprint name', nargs='?')
    args = parser.parse_args(remaining)
    try:
        importer = detect.make_importer(args.library)
    except Exception as ex:
        print >> sys.stderr, str(ex)
        return 1
    names = map(lambda (a, _): a, importer.list_names())
    if args.footprint is None:
        if len(names) == 1:
            args.footprint = names[0]
        else:
            print >> sys.stderr, "Please specify the footprint name as more then one were found in %s." % (
                args.library)
            return 1
    elif not args.footprint in names:
        print >> sys.stderr, "Footprint %s not found in %s." % (args.footprint,
                                                                args.library)
        return 1
    interim = inter.import_footprint(importer, args.footprint)
    try:
        coffee = generatesimple.generate_coffee(interim)
    except Exception as ex:
        tb = traceback.format_exc()
        print >> sys.stderr, "Footprint %s\nerror: %s" % (args.footprint,
                                                          str(ex) + '\n' + tb)
        return 1
    meta = pycoffee.eval_coffee_meta(coffee)
    new_file_name = "%s.coffee" % (meta['id'])
    with open(new_file_name, 'w+') as f:
        f.write(coffee)
    print "%s/%s written to %s." % (args.library, args.footprint,
                                    new_file_name)
    return 0
예제 #13
0
 def move_footprint(self):
   old_code = self.parent.code_textedit.toPlainText()
   old_meta = pycoffee.eval_coffee_meta(old_code)
   dialog = MoveFootprintDialog(self, old_meta)
   if dialog.exec_() != QtGui.QDialog.Accepted: return
   (new_name, new_lib) = dialog.get_data()
   old_name = old_meta['name']
   my_id = self.active_footprint.id
   fn = my_id + '.coffee'
   old_lib = self.active_library
   new_code = old_code.replace("#name %s" % (old_name), "#name %s" % (new_name))
   new_lib_dir = QtCore.QDir(self.coffee_lib[new_lib].directory)
   new_file_name = new_lib_dir.filePath(fn)
   with open(new_file_name, 'w+') as f:
     f.write(new_code)
   status_str = "moved %s/%s to %s/%s." % (old_lib.name, old_name, new_lib, new_name)
   self.parent.status(status_str)
   if old_lib.name == new_lib: 
     self.rescan_library(old_lib.name, my_id) # just to update the nameq
   else:
     full_fn = os.path.join(old_lib.directory, fn)
     os.unlink(full_fn)
     self.rescan_library(old_lib.name)
     self.active_library = self.rescan_library(new_lib, my_id)