Please separate includes to each on their own line. PEP8 says no to multiples on one line. Not: include random, string
But instead: include string include random Also, if we only need sample from random, can we just use "from random import sample"? -Jaben > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > Yonghong Zhu > Sent: Tuesday, October 30, 2018 6:28 AM > To: edk2-devel@lists.01.org > Cc: Gao, Liming <liming....@intel.com> > Subject: [edk2] [Patch] BaseTools: Add special handle for '\' use in Pcd Value > > From: zhijufan <zhijux....@intel.com> > > Case: > gEfiOzmosisPkgTokenSpaceGuid.PcdBootLogFolderPath|L"\\Logs\\"|VOID* > |12 > > Fixes: https://bugzilla.tianocore.org/show_bug.cgi?id=1287 > Cc: Liming Gao <liming....@intel.com> > Cc: Yonghong Zhu <yonghong....@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Zhiju.Fan <zhijux....@intel.com> > --- > BaseTools/Source/Python/Common/Expression.py | 13 ++++++++++++- > BaseTools/Source/Python/Common/Misc.py | 9 ++++++--- > 2 files changed, 18 insertions(+), 4 deletions(-) > > diff --git a/BaseTools/Source/Python/Common/Expression.py > b/BaseTools/Source/Python/Common/Expression.py > index 05459b9..6eec0de 100644 > --- a/BaseTools/Source/Python/Common/Expression.py > +++ b/BaseTools/Source/Python/Common/Expression.py > @@ -20,10 +20,11 @@ from CommonDataClass.Exceptions import > WrnExpression > from .Misc import GuidStringToGuidStructureString, ParseFieldValue > import Common.EdkLogger as EdkLogger > import copy > from Common.DataType import * > import sys > +import random, string > > ERR_STRING_EXPR = 'This operator cannot be used in string expression: > [%s].' > ERR_SNYTAX = 'Syntax error, the rest of expression cannot be > evaluated: [%s].' > ERR_MATCH = 'No matching right parenthesis.' > ERR_STRING_TOKEN = 'Bad string token: [%s].' > @@ -53,10 +54,12 @@ PcdPattern = re.compile(r'[_a-zA-Z][0-9A-Za- > z_]*\.[_a-zA-Z][0-9A-Za-z_]*$') > # Split string to list according double quote > # For example: abc"de\"f"ghi"jkl"mn will be: ['abc', '"de\"f"', 'ghi', > '"jkl"', > 'mn'] > # > def SplitString(String): > # There might be escaped quote: "abc\"def\\\"ghi", 'abc\'def\\\'ghi' > + RanStr = ''.join(random.sample(string.ascii_letters + string.digits, 8)) > + String = String.replace('\\\\', RanStr).strip() > RetList = [] > InSingleQuote = False > InDoubleQuote = False > Item = '' > for i, ch in enumerate(String): > @@ -85,15 +88,20 @@ def SplitString(String): > Item += String[i] > if InSingleQuote or InDoubleQuote: > raise BadExpression(ERR_STRING_TOKEN % Item) > if Item: > RetList.append(Item) > + for i, ch in enumerate(RetList): > + if RanStr in ch: > + RetList[i] = ch.replace(RanStr,'\\\\') > return RetList > > def SplitPcdValueString(String): > # There might be escaped comma in GUID() or DEVICE_PATH() or " " > # or ' ' or L' ' or L" " > + RanStr = ''.join(random.sample(string.ascii_letters + string.digits, 8)) > + String = String.replace('\\\\', RanStr).strip() > RetList = [] > InParenthesis = 0 > InSingleQuote = False > InDoubleQuote = False > Item = '' > @@ -122,10 +130,13 @@ def SplitPcdValueString(String): > Item += String[i] > if InSingleQuote or InDoubleQuote or InParenthesis: > raise BadExpression(ERR_STRING_TOKEN % Item) > if Item: > RetList.append(Item) > + for i, ch in enumerate(RetList): > + if RanStr in ch: > + RetList[i] = ch.replace(RanStr,'\\\\') > return RetList > > def IsValidCName(Str): > return True if __ValidString.match(Str) else False > > @@ -388,11 +399,11 @@ class ValueExpression(BaseExpression): > if Val == 'L""': > Val = False > elif not Val: > Val = False > RealVal = '""' > - elif not Val.startswith('L"') and not Val.startswith('{') and not > Val.startswith("L'"): > + elif not Val.startswith('L"') and not Val.startswith('{') and not > Val.startswith("L'") and not Val.startswith("'"): > Val = True > RealVal = '"' + RealVal + '"' > > # The expression has been parsed, but the end of expression is not > reached > # It means the rest does not comply EBNF of <Expression> > diff --git a/BaseTools/Source/Python/Common/Misc.py > b/BaseTools/Source/Python/Common/Misc.py > index b32b7cd..b27268a 100644 > --- a/BaseTools/Source/Python/Common/Misc.py > +++ b/BaseTools/Source/Python/Common/Misc.py > @@ -15,11 +15,11 @@ > # Import Modules > # > from __future__ import absolute_import > import Common.LongFilePathOs as os > import sys > -import string > +import random, string > import threading > import time > import re > import pickle > import array > @@ -1234,11 +1234,12 @@ def IsFieldValueAnArray (Value): > if Value[0] == "'" and Value[-1] == "'" and len(list(Value[1:-1])) > 1: > return True > return False > > def AnalyzePcdExpression(Setting): > - Setting = Setting.strip() > + RanStr = ''.join(random.sample(string.ascii_letters + string.digits, 8)) > + Setting = Setting.replace('\\\\', RanStr).strip() > # There might be escaped quote in a string: \", \\\" , \', \\\' > Data = Setting > # There might be '|' in string and in ( ... | ... ), replace it with '-' > NewStr = '' > InSingleQuoteStr = False > @@ -1267,11 +1268,13 @@ def AnalyzePcdExpression(Setting): > if Pos < 0: > FieldList.append(Setting[StartPos:].strip()) > break > FieldList.append(Setting[StartPos:Pos].strip()) > StartPos = Pos + 1 > - > + for i, ch in enumerate(FieldList): > + if RanStr in ch: > + FieldList[i] = ch.replace(RanStr,'\\\\') > return FieldList > > def ParseDevPathValue (Value): > if '\\' in Value: > Value.replace('\\', '/').replace(' ', '') > -- > 2.6.1.windows.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel