- ## Get unique file ID for the gvien file\r
- def GetFileId(self, FilePath):\r
- return self.TblFile.GetFileId(FilePath)\r
-\r
- ## Get file type value for the gvien file ID\r
- def GetFileType(self, FileId):\r
- return self.TblFile.GetFileType(FileId)\r
-\r
- ## Get time stamp stored in file table\r
- def GetTimeStamp(self, FileId):\r
- return self.TblFile.GetFileTimeStamp(FileId)\r
-\r
- ## Update time stamp in file table\r
- def SetTimeStamp(self, FileId, TimeStamp):\r
- return self.TblFile.SetFileTimeStamp(FileId, TimeStamp)\r
-\r
- ## Check if a table integrity flag exists or not\r
- def CheckIntegrity(self, TableName):\r
- try:\r
- Result = self.Cur.execute("select min(ID) from %s" % (TableName)).fetchall()\r
- if Result[0][0] != -1:\r
- return False\r
- #\r
- # Check whether the meta data file has external dependency by comparing the time stamp\r
- #\r
- Sql = "select Value1, Value2 from %s where Model=%d" % (TableName, MODEL_EXTERNAL_DEPENDENCY)\r
- for Dependency in self.Cur.execute(Sql).fetchall():\r
- if str(os.stat(Dependency[0])[8]) != Dependency[1]:\r
- return False\r
- except:\r
- return False\r
- return True\r
-\r
- ## Compose table name for given file type and file ID\r
- def GetTableName(self, FileType, FileId):\r
- return "_%s_%s" % (FileType, FileId)\r
-\r
- ## Return a temp table containing all content of the given file\r
- #\r
- # @param FileInfo The tuple containing path and type of a file\r
- #\r
- def __getitem__(self, FileInfo):\r
- FilePath, FileType, Macros = FileInfo\r
- if FileType not in self._FILE_TABLE_:\r
- return None\r
-\r
- # flag used to indicate if it's parsed or not\r
- FilePath = str(FilePath)\r
- Parsed = False\r
- FileId = self.GetFileId(FilePath)\r
- if FileId != None:\r
- TimeStamp = os.stat(FilePath)[8]\r
- TableName = self.GetTableName(FileType, FileId)\r
- if TimeStamp != self.GetTimeStamp(FileId):\r
- # update the timestamp in database\r
- self.SetTimeStamp(FileId, TimeStamp)\r
- else:\r
- # if the table exists and is integrity, don't parse it\r
- Parsed = self.CheckIntegrity(TableName)\r
- else:\r
- FileId = self.TblFile.InsertFile(FilePath, FileType)\r
- TableName = self.GetTableName(FileType, FileId)\r
-\r
- FileTable = self._FILE_TABLE_[FileType](self.Cur, TableName, FileId)\r
- FileTable.Create(not Parsed)\r
- Parser = self._FILE_PARSER_[FileType](FilePath, FileType, FileTable, Macros)\r
- # set the "Finished" flag in parser in order to avoid re-parsing (if parsed)\r
- Parser.Finished = Parsed\r
- return Parser\r
-\r