def _compile(self, filename, source): """ Compiles the Python source code to a code object and attempts to write it to an appropriate .pyc file. May raise SyntaxError or other errors generated by the compiler. """ if source and source[-1] != '\n': source = source + '\n' code = __builtin__.compile(source, filename.toOsSpecific(), 'exec') # try to cache the compiled code pycFilename = Filename(filename) pycFilename.setExtension(compiledExtensions[0]) try: f = open(pycFilename.toOsSpecific(), 'wb') except IOError: pass else: f.write('\0\0\0\0') f.write(chr(self.timestamp & 0xff) + chr((self.timestamp >> 8) & 0xff) + chr((self.timestamp >> 16) & 0xff) + chr((self.timestamp >> 24) & 0xff)) f.write(marshal.dumps(code)) f.flush() f.seek(0, 0) f.write(imp.get_magic()) f.close() return code
def _compile(self, filename, source): """ Compiles the Python source code to a code object and attempts to write it to an appropriate .pyc file. May raise SyntaxError or other errors generated by the compiler. """ if source and source[-1] != '\n': source = source + '\n' code = __builtin__.compile(source, filename.toOsSpecific(), 'exec') # try to cache the compiled code pycFilename = Filename(filename) pycFilename.setExtension(compiledExtensions[0]) try: f = open(pycFilename.toOsSpecific(), 'wb') except IOError: pass else: f.write('\0\0\0\0') f.write( chr(self.timestamp & 0xff) + chr((self.timestamp >> 8) & 0xff) + chr((self.timestamp >> 16) & 0xff) + chr((self.timestamp >> 24) & 0xff)) f.write(marshal.dumps(code)) f.flush() f.seek(0, 0) f.write(imp.get_magic()) f.close() return code
def _compile(self, filename, source): """ Compiles the Python source code to a code object and attempts to write it to an appropriate .pyc file. May raise SyntaxError or other errors generated by the compiler. """ if source and source[-1] != "\n": source = source + "\n" code = compile(source, filename.toOsSpecific(), "exec") # try to cache the compiled code pycFilename = Filename(filename) pycFilename.setExtension(compiledExtensions[0]) try: f = open(pycFilename.toOsSpecific(), "wb") except IOError: pass else: f.write(imp.get_magic()) if sys.version_info >= (3, 0): f.write((self.timestamp & 0xFFFFFFFF).to_bytes(4, "little")) f.write(b"\0\0\0\0") else: f.write( chr(self.timestamp & 0xFF) + chr((self.timestamp >> 8) & 0xFF) + chr((self.timestamp >> 16) & 0xFF) + chr((self.timestamp >> 24) & 0xFF) ) f.write(marshal.dumps(code)) f.close() return code
def loaderPhaseChecker(self, path, loaderOptions): if 'audio/' in path: return 1 file = Filename(path) if not file.getExtension(): file.setExtension('bam') mp = getModelPath() path = mp.findFile(file).cStr() if not path: return match = re.match('.*phase_([^/]+)/', path) if not match: if 'dmodels' in path: return self.errorAccumulatorBuffer += 'file not in phase (%s, %s)\n' % ( file, path) return basePhase = float(match.groups()[0]) if not launcher.getPhaseComplete(basePhase): self.errorAccumulatorBuffer += 'phase is not loaded for this model %s\n' % path model = loader.loader.loadSync(Filename(path), loaderOptions) if model: model = NodePath(model) for tex in model.findAllTextures(): texPath = tex.getFullpath().cStr() match = re.match('.*phase_([^/]+)/', texPath) if match: texPhase = float(match.groups()[0]) if texPhase > basePhase: self.errorAccumulatorBuffer += 'texture phase is higher than the models (%s, %s)\n' % ( path, texPath)
def _read_source(self): """ Returns the Python source for this file, if it is available, or None if it is not. May raise IOError. """ if self.desc[2] == imp.PY_COMPILED or self.desc[2] == imp.C_EXTENSION: return None filename = Filename(self.filename) filename.setExtension("py") filename.setText() return open(self.filename, self.desc[1]).read()
def find_module(self, fullname, path = None): if path is None: dir_path = self.dir_path else: dir_path = path #print >>sys.stderr, "find_module(%s), dir_path = %s" % (fullname, dir_path) basename = fullname.split('.')[-1] path = Filename(dir_path, basename) # First, look for Python files. filename = Filename(path) filename.setExtension('py') vfile = vfs.getFile(filename, True) if vfile: return VFSLoader(dir_path, vfile, filename, desc=('.py', 'U', imp.PY_SOURCE)) # If there's no .py file, but there's a .pyc file, load that # anyway. for ext in compiledExtensions: filename = Filename(path) filename.setExtension(ext) vfile = vfs.getFile(filename, True) if vfile: return VFSLoader(dir_path, vfile, filename, desc=('.'+ext, 'rb', imp.PY_COMPILED)) # Look for a C/C++ extension module. for desc in imp.get_suffixes(): if desc[2] != imp.C_EXTENSION: continue filename = Filename(path + desc[0]) vfile = vfs.getFile(filename, True) if vfile: return VFSLoader(dir_path, vfile, filename, desc=desc) # Finally, consider a package, i.e. a directory containing # __init__.py. filename = Filename(path, '__init__.py') vfile = vfs.getFile(filename, True) if vfile: return VFSLoader(dir_path, vfile, filename, packagePath=path, desc=('.py', 'U', imp.PY_SOURCE)) for ext in compiledExtensions: filename = Filename(path, '__init__.' + ext) vfile = vfs.getFile(filename, True) if vfile: return VFSLoader(dir_path, vfile, filename, packagePath=path, desc=('.'+ext, 'rb', imp.PY_COMPILED)) #print >>sys.stderr, "not found." return None
def _read_source(self): """ Returns the Python source for this file, if it is available, or None if it is not. May raise IOError. """ if self.desc[2] == imp.PY_COMPILED or \ self.desc[2] == imp.C_EXTENSION: return None filename = Filename(self.filename) filename.setExtension('py') filename.setText() return open(self.filename, self.desc[1]).read()
def _read_source(self): """ Returns the Python source for this file, if it is available, or None if it is not. May raise IOError. """ if self.desc[2] == imp.PY_COMPILED or self.desc[2] == imp.C_EXTENSION: return None filename = Filename(self.filename) filename.setExtension("py") filename.setText() vfile = vfs.getFile(filename) if not vfile: raise IOError("Could not find '%s'" % (filename)) return vfile.readFile(True)
def _read_source(self): """ Returns the Python source for this file, if it is available, or None if it is not. May raise IOError. """ if self.fileType == FTPythonCompiled or \ self.fileType == FTExtensionModule: return None filename = Filename(self.filename) filename.setExtension('py') filename.setText() vfile = vfs.getFile(filename) if not vfile: raise IOError return vfile.readFile(True)
def _read_source(self): """ Returns the Python source for this file, if it is available, or None if it is not. May raise IOError. """ if self.desc[2] == imp.PY_COMPILED or \ self.desc[2] == imp.C_EXTENSION: return None filename = Filename(self.filename) filename.setExtension('py') filename.setText() vfile = vfs.getFile(filename) if not vfile: raise IOError("Could not find '%s'" % (filename)) return vfile.readFile(True)
def _read_source(self): """ Returns the Python source for this file, if it is available, or None if it is not. May raise IOError. """ if self.desc[2] == imp.PY_COMPILED or \ self.desc[2] == imp.C_EXTENSION: return None filename = Filename(self.filename) filename.setExtension('py') filename.setText() # Use the tokenize module to detect the encoding. import tokenize fh = open(self.filename, 'rb') encoding, lines = tokenize.detect_encoding(fh.readline) return (b''.join(lines) + fh.read()).decode(encoding)
def _read_code(self): """ Returns the Python compiled code object for this file, if it is available, or None if it is not. May raise IOError, ValueError, SyntaxError, or a number of other errors generated by the low-level system. """ if self.fileType == FTPythonCompiled: # It's a pyc file; just read it directly. pycVfile = vfs.getFile(self.filename, False) if pycVfile: return self._loadPyc(pycVfile, None) raise IOError, 'Could not read %s' % (self.filename) elif self.fileType == FTExtensionModule: return None # It's a .py file (or an __init__.py file; same thing). Read # the .pyc file if it is available and current; otherwise read # the .py file and compile it. t_pyc = None for ext in compiledExtensions: pycFilename = Filename(self.filename) pycFilename.setExtension(ext) pycVfile = vfs.getFile(pycFilename, False) if pycVfile: t_pyc = pycVfile.getTimestamp() break code = None if t_pyc and t_pyc >= self.timestamp: try: code = self._loadPyc(pycVfile, self.timestamp) except ValueError: code = None if not code: source = self._read_source() filename = Filename(self.filename) filename.setExtension('py') code = self._compile(filename, source) return code
def __init__(self, fileName, size, hpr, position, tag, color, texture, name, parent, duration, frame, joints, animation): Proxy.Proxy.__init__(self, name = str(name) + ":" + str(PandaGlobals.nextModelId), updater = modelUpdater, types = {"position": p3Type, "hpr": hprType , "size": numType, "color": colorType, "texture": stringType}) modelTypes = {"localOrientation": hprType, "localSize": numType, "localPosition": p3Type, "cRadius": numType, "cType": stringType, "cFloor": numType, "cTop": numType} #(p3Type, SP3(0,0,0)), "hpr": (hprType, SHPR(0,0,0)), "size": (numType, 1)}) PandaGlobals.nextModelId = PandaGlobals.nextModelId + 1 self._parent = getModel(parent) self._mFile = FileSearch.fileSearch(fileName, "models",["egg"]) #print "Object Name: "+ str(fileName)+"-gID: "+str(PandaGlobals.nextModelId); if type(tag) == type("s"): collections = [tag] else: collections = tag self._collections = collections if fileName in parameterCache: self._mParams = parameterCache[fileName] elif self._mFile is None: print("Can't find model " + repr(fileName)) #should substitute pandafor unknown models #self._mFile = Filename("/c/Panda3D-1.8.1/models/"+fileName) #print "File Path: " + repr(mFile) else: mParamFile = Filename(self._mFile) #print repr(mParamFile) mParamFile.setExtension("model") if mParamFile.exists(): self._mParams = FileIO.loadDict(mParamFile,types = modelTypes, defaults = defaultModelParameters) else: print("No .model for " + str(fileName)) self._mParams = defaultModelParameters parameterCache[fileName] = self._mParams self._hasJoints = len(joints) != 0 self._joints = joints self._jointNodes = {} self._animation = animation if animation != None: self._pandaModel = Actor.Actor(fileName, animation) if frame != None: self._frame = frame else: # Not animated self._pandaModel = loader.loadModel(self._mFile) if self._pandaModel == None: print 'Model not found: ' + fileName exit() if self._hasJoints: for j,pj in joints: self._jointNodes[j] = self._pandaModel.controlJoint(None, "modelRoot", pj) if self._jointNodes[j] == None: print 'joint not found: ' + j exit() self._pandaModel.setTag('rpandaid', str(self._name)) self._fileName = fileName self._onScreen = False self._animPlaying = False self._size=self._mParams['localSize'] self._hpr=self._mParams['localOrientation'] self._position=self._mParams['localPosition'] self._cRadius = float(self._mParams['cRadius']) self._cType = self._mParams['cType'] self._cFloor = float(self._mParams['cFloor']) self._cTop = float(self._mParams['cTop']) self._currentTexture = "" self._onscreen = False # This defers the reparenting until the model has been updated the first time self._parent = getModel(parent) if position is not None: self.position = position else: self.position = P3(0,0,0) if hpr is not None: self.hpr = hpr else: self.hpr = SHPR(0,0,0) if size is not None: self.size = size else: self.size = 1 if texture is not None: self.texture = texture else: self.texture = "" if color is not None: self.color = color else: self.color = noColor for tag in collections: if tag not in frpGlobals.collections: frpGlobals.collections[tag] = [self] frpGlobals.collections[tag].append(self) #Get saved reaction functions for this collection for t, v in frpGlobals.collectionReactions.items(): for tag in collections: if tag in v: for args in v[tag]: getattr(Functions, t)(self, args[0], what = args[1]) if duration > 0: react(self, delay(duration), exitScene)
def __init__(self, fileName, size, hpr, position, tag, color, texture, name, parent, duration, frame, joints, animation): Proxy.Proxy.__init__(self, name = str(name) + ":" + str(PandaGlobals.nextModelId), updater = modelUpdater, types = {"position": p3Type, "hpr": hprType , "size": numType, "color": colorType, "texture": stringType}) modelTypes = {"localOrientation": hprType, "localSize": numType, "localPosition": p3Type, "cRadius": numType, "cType": stringType, "cFloor": numType, "cTop": numType} #(p3Type, SP3(0,0,0)), "hpr": (hprType, SHPR(0,0,0)), "size": (numType, 1)}) PandaGlobals.nextModelId = PandaGlobals.nextModelId + 1 self._parent = getModel(parent) self._mFile = FileSearch.fileSearch(fileName, "models", ["egg"]) #print("Object Name: "+ str(fileName)+"-gID: "+str(PandaGlobals.nextModelId)) if type(tag) == type("s"): collections = [tag] else: collections = tag self._collections = collections if fileName in parameterCache: self._mParams = parameterCache[fileName] elif self._mFile is None: print("Can't find model " + repr(fileName)) #should substitute pandafor unknown models #self._mFile = Filename("/c/Panda3D-1.8.1/models/"+fileName) #print("File Path: " + repr(mFile)) else: mParamFile = Filename(self._mFile) #print(repr(mParamFile)) mParamFile.setExtension("model") if mParamFile.exists(): self._mParams = FileIO.loadDict(mParamFile, types = modelTypes, defaults = defaultModelParameters) else: print("No .model for " + str(fileName)) self._mParams = defaultModelParameters parameterCache[fileName] = self._mParams self._hasJoints = len(joints) != 0 self._joints = joints self._jointNodes = {} self._animation = animation if animation != None: self._pandaModel = Actor.Actor(fileName, animation) if frame != None: self._frame = frame else: # Not animated self._pandaModel = loader.loadModel(self._mFile) if self._pandaModel == None: print('Model not found: ' + fileName) exit() if self._hasJoints: for j,pj in joints: self._jointNodes[j] = self._pandaModel.controlJoint(None, "modelRoot", pj) if self._jointNodes[j] == None: print('joint not found: ' + j) exit() self._pandaModel.setTag('rpandaid', str(self._name)) self._fileName = fileName self._onScreen = False self._animPlaying = False self._size=self._mParams['localSize'] self._hpr=self._mParams['localOrientation'] self._position=self._mParams['localPosition'] self._cRadius = float(self._mParams['cRadius']) self._cType = self._mParams['cType'] self._cFloor = float(self._mParams['cFloor']) self._cTop = float(self._mParams['cTop']) self._currentTexture = "" self._onscreen = False # This defers the reparenting until the model has been updated the first time self._parent = getModel(parent) if position is not None: self.position = position else: self.position = P3(0,0,0) if hpr is not None: self.hpr = hpr else: self.hpr = SHPR(0,0,0) if size is not None: self.size = size else: self.size = 1 if texture is not None: self.texture = texture else: self.texture = "" if color is not None: self.color = color else: self.color = noColor for tag in collections: if tag not in frpGlobals.collections: frpGlobals.collections[tag] = [self] frpGlobals.collections[tag].append(self) #Get saved reaction functions for this collection for t, v in frpGlobals.collectionReactions.items(): for tag in collections: if tag in v: for args in v[tag]: getattr(Functions, t)(self, args[0], what = args[1]) if duration > 0: react(self, delay(duration), exitScene)
def p_font(p): filename = Filename(p[5]) if not filename.getExtension(): filename.setExtension('bam') p.parser.dnaStore.storeFont(FontPool.loadFont(filename.cStr()), p[4])
def p_modeldef(p): filename = Filename(p[2]) filename.setExtension('bam') p.parser.nodePath = base.loader.loadModel(filename) p.parser.modelType = p[1]