from os import walk\r
from os import environ\r
import re\r
-from collections import UserDict as IterableUserDict\r
+from collections import OrderedDict\r
\r
import Logger.Log as Logger\r
from Logger import StringTable as ST\r
#\r
def SaveFileOnChange(File, Content, IsBinaryFile=True):\r
if os.path.exists(File):\r
- try:\r
- if isinstance(Content, bytes):\r
+ if IsBinaryFile:\r
+ try:\r
if Content == __FileHookOpen__(File, "rb").read():\r
return False\r
- else:\r
+ except BaseException:\r
+ Logger.Error(None, ToolError.FILE_OPEN_FAILURE, ExtraData=File)\r
+ else:\r
+ try:\r
if Content == __FileHookOpen__(File, "r").read():\r
return False\r
- except BaseException:\r
- Logger.Error(None, ToolError.FILE_OPEN_FAILURE, ExtraData=File)\r
+ except BaseException:\r
+ Logger.Error(None, ToolError.FILE_OPEN_FAILURE, ExtraData=File)\r
\r
CreateDirectory(os.path.dirname(File))\r
- try:\r
- if isinstance(Content, bytes):\r
+ if IsBinaryFile:\r
+ try:\r
FileFd = __FileHookOpen__(File, "wb")\r
- else:\r
+ FileFd.write(Content)\r
+ FileFd.close()\r
+ except BaseException:\r
+ Logger.Error(None, ToolError.FILE_CREATE_FAILURE, ExtraData=File)\r
+ else:\r
+ try:\r
FileFd = __FileHookOpen__(File, "w")\r
- FileFd.write(Content)\r
- FileFd.close()\r
- except BaseException:\r
- Logger.Error(None, ToolError.FILE_CREATE_FAILURE, ExtraData=File)\r
+ FileFd.write(Content)\r
+ FileFd.close()\r
+ except BaseException:\r
+ Logger.Error(None, ToolError.FILE_CREATE_FAILURE, ExtraData=File)\r
\r
return True\r
\r
\r
return None, None\r
\r
-## A dict which can access its keys and/or values orderly\r
-#\r
-# The class implements a new kind of dict which its keys or values can be\r
-# accessed in the order they are added into the dict. It guarantees the order\r
-# by making use of an internal list to keep a copy of keys.\r
-#\r
-class Sdict(IterableUserDict):\r
- ## Constructor\r
- #\r
- def __init__(self):\r
- IterableUserDict.__init__(self)\r
- self._key_list = []\r
-\r
- ## [] operator\r
- #\r
- def __setitem__(self, Key, Value):\r
- if Key not in self._key_list:\r
- self._key_list.append(Key)\r
- IterableUserDict.__setitem__(self, Key, Value)\r
-\r
- ## del operator\r
- #\r
- def __delitem__(self, Key):\r
- self._key_list.remove(Key)\r
- IterableUserDict.__delitem__(self, Key)\r
-\r
- ## used in "for k in dict" loop to ensure the correct order\r
- #\r
- def __iter__(self):\r
- return self.iterkeys()\r
-\r
- ## len() support\r
- #\r
- def __len__(self):\r
- return len(self._key_list)\r
-\r
- ## "in" test support\r
- #\r
- def __contains__(self, Key):\r
- return Key in self._key_list\r
-\r
- ## indexof support\r
- #\r
- def index(self, Key):\r
- return self._key_list.index(Key)\r
-\r
- ## insert support\r
- #\r
- def insert(self, Key, Newkey, Newvalue, Order):\r
- Index = self._key_list.index(Key)\r
- if Order == 'BEFORE':\r
- self._key_list.insert(Index, Newkey)\r
- IterableUserDict.__setitem__(self, Newkey, Newvalue)\r
- elif Order == 'AFTER':\r
- self._key_list.insert(Index + 1, Newkey)\r
- IterableUserDict.__setitem__(self, Newkey, Newvalue)\r
-\r
- ## append support\r
- #\r
- def append(self, Sdict2):\r
- for Key in Sdict2:\r
- if Key not in self._key_list:\r
- self._key_list.append(Key)\r
- IterableUserDict.__setitem__(self, Key, Sdict2[Key])\r
- ## hash key\r
- #\r
- def has_key(self, Key):\r
- return Key in self._key_list\r
-\r
- ## Empty the dict\r
- #\r
- def clear(self):\r
- self._key_list = []\r
- IterableUserDict.clear(self)\r
-\r
- ## Return a copy of keys\r
- #\r
- def keys(self):\r
- Keys = []\r
- for Key in self._key_list:\r
- Keys.append(Key)\r
- return Keys\r
-\r
- ## Return a copy of values\r
- #\r
- def values(self):\r
- Values = []\r
- for Key in self._key_list:\r
- Values.append(self[Key])\r
- return Values\r
-\r
- ## Return a copy of (key, value) list\r
- #\r
- def items(self):\r
- Items = []\r
- for Key in self._key_list:\r
- Items.append((Key, self[Key]))\r
- return Items\r
-\r
- ## Iteration support\r
- #\r
- def iteritems(self):\r
- return iter(self.items())\r
-\r
- ## Keys interation support\r
- #\r
- def iterkeys(self):\r
- return iter(self.keys())\r
-\r
- ## Values interation support\r
- #\r
- def itervalues(self):\r
- return iter(self.values())\r
-\r
- ## Return value related to a key, and remove the (key, value) from the dict\r
- #\r
- def pop(self, Key, *Dv):\r
- Value = None\r
- if Key in self._key_list:\r
- Value = self[Key]\r
- self.__delitem__(Key)\r
- elif len(Dv) != 0 :\r
- Value = Dv[0]\r
- return Value\r
-\r
- ## Return (key, value) pair, and remove the (key, value) from the dict\r
- #\r
- def popitem(self):\r
- Key = self._key_list[-1]\r
- Value = self[Key]\r
- self.__delitem__(Key)\r
- return Key, Value\r
- ## update method\r
- #\r
- def update(self, Dict=None, **Kwargs):\r
- if Dict is not None:\r
- for Key1, Val1 in Dict.items():\r
- self[Key1] = Val1\r
- if len(Kwargs):\r
- for Key1, Val1 in Kwargs.items():\r
- self[Key1] = Val1\r
-\r
## CommonPath\r
#\r
# @param PathList: PathList\r
FileGuidString = ""\r
VerString = ""\r
\r
- OrignalString = String\r
+ OriginalString = String\r
String = String.strip()\r
if not String:\r
return None, None\r
ST.ERR_FILELIST_EXIST % (String),\r
File=GlobalData.gINF_MODULE_NAME,\r
Line=LineNo,\r
- ExtraData=OrignalString)\r
+ ExtraData=OriginalString)\r
\r
#\r
# Validate file exist/format.\r
ST.ERR_INF_PARSER_FILE_NOT_EXIST_OR_NAME_INVALID % (String),\r
File=GlobalData.gINF_MODULE_NAME,\r
Line=LineNo,\r
- ExtraData=OrignalString)\r
+ ExtraData=OriginalString)\r
return False\r
if IsValidFileFlag:\r
FileLinesList = []\r
ExtraData=Path)\r
\r
#\r
- # Check if '..' in the file name(without suffixe)\r
+ # Check if '..' in the file name(without suffix)\r
#\r
if (TAB_SPLIT + TAB_SPLIT) in Path:\r
Logger.Error("Unicode File Parser",\r