Esempio n. 1
0
File: sym.py Progetto: bapcyk/pybase
    def clone(name1, name2):
        """Clone symbol with name1 to name2. Doesn't chech that name1 is
        consistent symbol directory
        """
        if not SymModule._ready:
            raise ValueError("not mounted")

        symdir1 = SymModule.DIR.hpath(name1)
        symdir2 = SymModule.DIR.hpath(name2)

        if not path.exists(symdir1):
            raise Exception("Source symbol does not exist")
        if path.exists(symdir2):
            raise Exception("Destination symbol already exists")

        # copy unmodified files
        shutil.copytree(symdir1, symdir2)
        # modify descr-file
        descr2 = path.join(symdir2, SymModule.DESCR)
        dc = DotCfg()
        with codecs.open(descr2, "r", encoding="utf8") as f:
            dc.parse(f)
            par = dc.get(u"date")
            if par:
                par.value = time.strftime("%Y-%m-%d %H:%M:%S")
            par = dc.get(u"author")
            if par:
                par.value = os.getenv("USER", os.getenv("USERNAME", "Unknown"))
        dc.flush()
Esempio n. 2
0
File: sym.py Progetto: bapcyk/pybase
    def __init__(self, name, canvas, x, y):
        self.fs = self.files(name)
        if not self.fs:
            raise Exception(u"Inconsistent symbol (or mismatched location)")
        self.name = name
        self.c = canvas
        self._vlayers = []
        self._rlayers = []
        self._vilayers = [] # all visible only layers
        self.x = x
        self.y = y
        self.width = self.height = 0
        self._pmenu = None # popup menu
        self.k = {} # keywords, for ex. "sid" (Signal IDeintifier)

        # Try to load keywords from descr. Keywords are options in
        # 'descr' file like:
        #   k.something = some_value
        try:
            dc = DotCfg()
            with codecs.open(self.fs["descr"], "r", encoding="utf8") as f:
                dc.parse(f)
                for p in dc.paths:
                    if len(p) == 2 and p[0] == u"k":
                        self.k[p[1]] = dc.get(DOT.join(p)).value
        except:
            pass

        # create Vlayers
        for i,p in enumerate(self.fs["vlayers"]):
            g = GFigRender(self.c, BaseSymbol._GFIG_ENCODING)
            self._vlayers.append(Vlayer(self, i, g, p))

        # create Rlayer
        imfilename = self.fs["gif"] or self.fs["tiff"]
        if not imfilename:
            raise ValueError(u"No symbol image found")
        for i,f in enumerate(_load_image_frames(imfilename)):
            if not getattr(f, "_noimage", False):
                ph = ImageTk.PhotoImage(f)
                self._rlayers.append(Rlayer(self, i, f, ph))

        # size of symbol will be size of last frame (all are equals)
        self.width = f.size[0]
        self.height = f.size[1]