Example #1
0
	def __init__(self, dataLines):

		self.peopleDataLines = []

		formatChecker = FormatChecker()

		if not formatChecker.checkPeopleFormat(dataLines):
			print '(!) please format these lines, and try again \n'		

		else:
			self.peopleDataLines = dataLines
Example #2
0
	def __init__(self, dataLines):

		self.sizeCatalogDataLines = []

		formatChecker = FormatChecker()

		if not formatChecker.checkSizeCatalogFormat(dataLines):
			print '(!) please format these lines, and try again \n'		

		else:
			self.sizeCatalogDataLines = dataLines
Example #3
0
	def __init__(self, dataLines):

		# inverted index of clothe category to parent categories list
		self.clotheCategoriesInvertedIndex = { 
						"POLOS" : ["T-SHIRTS"],
						"RUGBYS" : ["T-SHIRTS"],
						"TOPS" : ["T-SHIRTS"],
						"POLO" : ["T-SHIRTS"],
						"SWEATSHIRTS" : ["T-SHIRTS"],
						"T-SHIRTS" : ["T-SHIRTS"],
						"RUGBY" : ["T-SHIRTS"],
						"MEN'S TOPS" : ["T-SHIRTS", "JACKETS & COATS", "SHIRTS", "KNITWEAR"],
						"SHEP SHIRTS" : ["T-SHIRTS"],
						"TEES" : ["T-SHIRTS"],
						"BUSINESS SUITS" : ["SUITS"],
						"SUITS TROUSERS" : ["SUITS"],
						"SUIT" : ["SUITS"],
						"SUITS" : ["SUITS"],
						"TAILORED JACKETS"  : ["SUITS"],
						"COATS" : ["JACKETS & COATS"],
						"OUTERWEAR" : ["JACKETS & COATS"],
						"BLAZERS" : ["JACKETS & COATS"],
						"JACKETS" : ["JACKETS & COATS"],
						"SPORTSWEAR" : ["SPORTSWEAR"],
						"ELASTICATED WAIST TROUSERS" : ["SPORTSWEAR"],
						"SPORT SHIRTS" : ["SPORTSWEAR"],
						"SWIMWEAR" : ["SPORTSWEAR"],
						"TRACK PANTS" : ["SPORTSWEAR"],
						"SHIRTS" : ["SHIRTS"],
						"BUSINESS SHIRTS" : ["SHIRTS"],
						"CASUAL" : ["SHIRTS"],
						"SHIRT" : ["SHIRTS"],
						"DRESS SHIRTS" : ["SHIRTS"],
						"APPAREL (POLO)" : ["APPAREL"],
						"APPAREL" : ["APPAREL"],
						"MERINO" : ["KNITWEAR"],
						"CARDIGANS" : ["KNITWEAR"],
						"PULLOVERS" : ["KNITWEAR"],
						"JUMPERS" : ["KNITWEAR"],
						"KNITWEAR" : ["KNITWEAR"],
						"FLEECE" : ["KNITWEAR"],
						"SWEATERS" : ["KNITWEAR"],
						"BOTTOMS" : ["TROUSERS"],
						"SHORTS" : ["TROUSERS"],
						"MEN'S SHORTS" : ["TROUSERS"],
						"MEN'S BOTTOMS" : ["TROUSERS"],
						"PANTS" : ["TROUSERS"],
						"MEN'S PANTS" : ["TROUSERS"],
						"CHINOS" : ["TROUSERS"],
						"DENIM" : ["TROUSERS"],
						"JEANS" : ["TROUSERS"],
						"TROUSERS" : ["TROUSERS"],
						"BELTS" : ["ACCESSORIES"],
						"SOCKS" : ["ACCESSORIES"],
						"UNDERWEAR" : ["UNDERWEAR"],
						"BOXERS" : ["UNDERWEAR"],
						"SHOES" : ["SHOES"]
					      }

		self.sizesDataLines = []

		formatChecker = FormatChecker()

		if not formatChecker.checkSizeFormat(dataLines):
			print '(!) please format these lines, and try again \n'		

		else:
			self.sizesDataLines = dataLines
Example #4
0
    def __init__(self, dataLines):

        # inverted index of clothe category to parent categories list
        self.clotheCategoriesInvertedIndex = {
            "POLOS": ["T-SHIRTS"],
            "RUGBYS": ["T-SHIRTS"],
            "TOPS": ["T-SHIRTS"],
            "POLO": ["T-SHIRTS"],
            "SWEATSHIRTS": ["T-SHIRTS"],
            "T-SHIRTS": ["T-SHIRTS"],
            "RUGBY": ["T-SHIRTS"],
            "MEN'S TOPS":
            ["T-SHIRTS", "JACKETS & COATS", "SHIRTS", "KNITWEAR"],
            "SHEP SHIRTS": ["T-SHIRTS"],
            "TEES": ["T-SHIRTS"],
            "BUSINESS SUITS": ["SUITS"],
            "SUITS TROUSERS": ["SUITS"],
            "SUIT": ["SUITS"],
            "SUITS": ["SUITS"],
            "TAILORED JACKETS": ["SUITS"],
            "COATS": ["JACKETS & COATS"],
            "OUTERWEAR": ["JACKETS & COATS"],
            "BLAZERS": ["JACKETS & COATS"],
            "JACKETS": ["JACKETS & COATS"],
            "SPORTSWEAR": ["SPORTSWEAR"],
            "ELASTICATED WAIST TROUSERS": ["SPORTSWEAR"],
            "SPORT SHIRTS": ["SPORTSWEAR"],
            "SWIMWEAR": ["SPORTSWEAR"],
            "TRACK PANTS": ["SPORTSWEAR"],
            "SHIRTS": ["SHIRTS"],
            "BUSINESS SHIRTS": ["SHIRTS"],
            "CASUAL": ["SHIRTS"],
            "SHIRT": ["SHIRTS"],
            "DRESS SHIRTS": ["SHIRTS"],
            "APPAREL (POLO)": ["APPAREL"],
            "APPAREL": ["APPAREL"],
            "MERINO": ["KNITWEAR"],
            "CARDIGANS": ["KNITWEAR"],
            "PULLOVERS": ["KNITWEAR"],
            "JUMPERS": ["KNITWEAR"],
            "KNITWEAR": ["KNITWEAR"],
            "FLEECE": ["KNITWEAR"],
            "SWEATERS": ["KNITWEAR"],
            "BOTTOMS": ["TROUSERS"],
            "SHORTS": ["TROUSERS"],
            "MEN'S SHORTS": ["TROUSERS"],
            "MEN'S BOTTOMS": ["TROUSERS"],
            "PANTS": ["TROUSERS"],
            "MEN'S PANTS": ["TROUSERS"],
            "CHINOS": ["TROUSERS"],
            "DENIM": ["TROUSERS"],
            "JEANS": ["TROUSERS"],
            "TROUSERS": ["TROUSERS"],
            "BELTS": ["ACCESSORIES"],
            "SOCKS": ["ACCESSORIES"],
            "UNDERWEAR": ["UNDERWEAR"],
            "BOXERS": ["UNDERWEAR"],
            "SHOES": ["SHOES"]
        }

        self.sizesDataLines = []

        formatChecker = FormatChecker()

        if not formatChecker.checkSizeFormat(dataLines):
            print '(!) please format these lines, and try again \n'

        else:
            self.sizesDataLines = dataLines
Example #5
0
    def FunctionHeaderFormat(self):
        """ Verify the function header format and content
            keywords:
                <TheFunctionName> matches the current functions name
                <TheParameters> names of parameters must match, void matches empty string
                <TheReturnType> names the return type, void matches empty string

        """
        # Function Header Specific keywords
        eFunctionName = '<TheFunctionName>'
        eParams = '<TheParameters>'
        eParamsIn = '<TheParametersIn>'
        eParamsOut = '<TheParametersOut>'
        eParamsInOut = '<TheParametersInOut>'
        eReturnType = '<TheReturnType>'

        self.SetStatusMsg(msg='Check Function Header Format')

        # in the function header we look for important items
        fhDesc = self.projFile.formats[PF.eFmtFunction]
        fhRawDesc = self.projFile.rawFormats[PF.eFmtFunction]

        fc = FormatChecker(eDbDetectId, self.updateTime, fhDesc, fhRawDesc)

        pctCtr = 0
        totalFiles = len(self.srcFiles)
        for i in self.srcFiles:
            if self.abortRequest:
                break

            pctCtr += 1
            self.SetStatusMsg((pctCtr / float(totalFiles) * 100))

            # compute the relative path from a srcRoot
            rpfn, fn = self.projFile.RelativePathName(i)

            # Get file/function information
            funcInfo = self.udb.GetFileFunctionInfo(fn)

            for func in funcInfo:
                if func == 'ConvertToDegC':
                    pass

                # get function info
                fi = funcInfo[func]
                hdr = fi[udb.eFiHeader]
                params = fi[udb.eFiParams]
                lineNum = fi[udb.eFiStart]

                # header split by line
                if hdr:
                    hdrLines = hdr.split('\n')
                    fc.Check(hdr)
                    fc.ReportErrors(self.vDb, rpfn, lineNum, 'Function Header',
                                    func, 'FuncHdr')
                else:
                    # No function header
                    severity = 'Error'
                    violationId = 'FuncHdr.NoHeader'
                    desc = 'Function Header %s is missing' % (func)
                    details = 'N/A'
                    self.vDb.Insert(rpfn, func, severity, violationId, desc,
                                    details, lineNum, eDbDetectId,
                                    self.updateTime)
                    continue

                # is the function name supposed to be in the header?
                keyItems = fc.GetKeywordItems(eFunctionName)
                if keyItems:
                    for item in keyItems:
                        keyInfo = item.keywords[eFunctionName]
                        searchIn = '\n'.join(keyInfo.lines)
                        if searchIn.find(func) == -1:
                            severity = 'Error'
                            violationId = 'FuncHdr.FuncName'
                            desc = 'Function Name %s Missing in header' % func
                            details = 'Expected at offset %d of %d lines' % (
                                keyInfo.line0, len(hdrLines))
                            self.vDb.Insert(rpfn, func, severity, violationId,
                                            desc, details, lineNum,
                                            eDbDetectId, self.updateTime)

                # check parameters - if requested and collect associated lines
                # TODO: detect actual out param types *, & report misplaced comments
                expectParams = False
                paramLines = []
                for p in (eParams, eParamsIn, eParamsOut, eParamsInOut):
                    keyItems = fc.GetKeywordItems(p)
                    for item in keyItems:
                        expectParams = True
                        paramLines.extend(item.keywords[p].lines)

                # collect any lines associated with parameters and see if all the params are defined
                if expectParams:
                    searchIn = '\n'.join(paramLines)
                    for px, p in enumerate(params):
                        if searchIn.find(p) == -1:
                            severity = 'Error'
                            violationId = 'FuncHdr.Param'
                            desc = 'Function Header %s Missing Param %s' % (
                                func, p)
                            details = 'Parameter <%s> not in description' % p
                            self.vDb.Insert(rpfn, func, severity, violationId,
                                            desc, details, lineNum,
                                            eDbDetectId, self.updateTime)

                # check return type - if requested
                keyItems = fc.GetKeywordItems(eReturnType)
                for item in keyItems:
                    searchIn = '\n'.join(item.keywords[eReturnType].lines)
                    rawText = item.JoinRaw()
                    rtnLineDesc = rawText.replace(eReturnType, '')
                    searchIn = searchIn.replace(rtnLineDesc, '').strip()
                    if not searchIn and fi[udb.eFiReturnType] != 'void':
                        severity = 'Error'
                        violationId = 'FuncHdr.Return'
                        desc = 'Function Header %s Missing return info' % (
                            func)
                        details = 'Function header consists of %d lines' % len(
                            hdrLines)
                        self.vDb.Insert(rpfn, func, severity, violationId,
                                        desc, details, lineNum, eDbDetectId,
                                        self.updateTime)

        self.vDb.Commit()
Example #6
0
    def CheckLine(self, rpfn, funcInfo, lines):
        """ Analyze for:
        1. Lines exceed the max line length
        2. Lines with the word TODO, TBD
        3. No tabs in the file
        report the line number(s) for the above
        """
        # File Specific keywords
        eFileName = '<TheFileName>'
        eTheDescription = '<TheDescription>'
        # leave these - PCLint should report these may need to do some work on it
        eLocalFuncProto = '<TheLocalFunctionPrototypes>'
        eLocalFunctions = '<TheLocalFunctions>'
        eGlobalFunctions = '<TheGlobalFunctions>'

        # check all line lengths
        fileSize = len(lines)
        fn = os.path.split(rpfn)[1]
        lineLimit = self.projFile.metrics[PF.eMetricLine]

        # get the filename and start/end line numbers
        data = {}
        for func in funcInfo:
            start = funcInfo[func]['start']
            end = funcInfo[func]['end']
            data[(start, end)] = func

        #--------------------------------- init the file format check
        # determine file type c/h
        ext = os.path.splitext(rpfn)[1]
        # build format name
        fmtName = 'File_%s' % ext.replace('.', '').upper()
        fileDescLines = self.projFile.formats.get(fmtName, '')
        rawDescLines = self.projFile.rawFormats.get(fmtName, '')
        fc = FormatChecker(eDbDetectId, self.updateTime, fileDescLines,
                           rawDescLines)

        for lx, line in enumerate(lines):
            txt = line.rstrip()
            lineLen = len(txt)
            u4cLine = lx + 1  # U4C refs start at line 1

            func = None

            # feed the file format checker
            fc.CheckLine(lx, line)

            if lineLen > lineLimit:
                func = 'N/A'
                for ds, de in data:
                    if u4cLine >= ds and u4cLine <= de:
                        func = data[(ds, de)]

                severity = 'Warning'
                violationId = 'Metric.Line'
                desc = 'Line Length in %s line %d' % (fn, lx)
                details = '%3d: %s' % (lineLen, txt.strip())
                self.vDb.Insert(rpfn, func, severity, violationId, desc,
                                details, u4cLine, eDbDetectId, self.updateTime)

            # check for TO-DO or T.B.D.
            txtl = txt.lower()
            todoRe = re.compile(r' ?todo[: ]+')
            tbdRe = re.compile(r' ?tbd[: ]+')
            if todoRe.search(txtl) or tbdRe.search(txtl):
                if func is None:
                    func = 'N/A'
                    for ds, de in data:
                        if ds <= u4cLine <= de:
                            func = data[(ds, de)]
                severity = 'Info'
                violationId = 'Misc.TODO'
                desc = 'Line contains TODO/TBD %s line %d' % (fn, lx)
                details = '%s' % (txt.strip())
                self.vDb.Insert(rpfn, func, severity, violationId, desc,
                                details, u4cLine, eDbDetectId, self.updateTime)

            # check for tabs
            if txt.find('\t') != -1:
                if txt.lower().find('todo') != -1 or txt.lower().find(
                        'tbd') != -1:
                    if func is None:
                        func = 'N/A'
                        for ds, de in data:
                            if u4cLine >= ds and u4cLine <= de:
                                func = data[(ds, de)]
                    severity = 'Error'
                    violationId = 'Misc.TAB'
                    desc = 'Line contains TAB(s) %s line %d' % (fn, lx)
                    details = '%s' % (txt.strip())
                    self.vDb.Insert(rpfn, func, severity, violationId, desc,
                                    details, u4cLine, eDbDetectId,
                                    self.updateTime)

        # check any lines remaining in the line buffer
        fc.FinishBuffer()

        #------------------------------------------------- report and file format errors
        # save this info incase we need to do some work for the three eLocal/Global above
        self.fileKeywordData[rpfn] = copy.deepcopy(fc.items)
        fc.ReportErrors(self.vDb, rpfn, -1, 'File Format', rpfn, 'FileFmt')

        # check for the filename being were it is supposed to be
        keyItems = fc.GetKeywordItems(eFileName)
        if keyItems:
            for item in keyItems:
                keyInfo = item.keywords[eFileName]
                text = '\n'.join(keyInfo.lines)
                if text.lower().find(fn.lower()) == -1:
                    # no mention of file name
                    severity = 'Error'
                    violationId = 'FileFmt.FileName'
                    func = 'N/A'
                    desc = 'Missing Filename near line %d' % keyInfo.line0
                    details = 'Expected filename at line %d [Item %d]' % (
                        keyInfo.line0, item.itemId)
                    self.vDb.Insert(rpfn, func, severity, violationId, desc,
                                    details, keyInfo.line0, eDbDetectId,
                                    self.updateTime)

        # check for a file description
        keyItems = fc.GetKeywordItems(eTheDescription)
        if keyItems:
            for item in keyItems:
                keyInfo = item.keywords[eTheDescription]
                text = '\n'.join(keyInfo.lines)
                rawText = item.JoinRaw()
                replaceTxt = rawText.replace(eTheDescription, '').strip()
                text = text.replace(replaceTxt, '').strip()
                if not text:
                    # no mention of file name
                    severity = 'Error'
                    violationId = 'FileFmt.NoDesc'
                    func = 'N/A'
                    desc = 'Missing File Desc near line %d' % keyInfo.line0
                    details = 'Expected file description at line %d [Item %d]' % (
                        keyInfo.line0, item.itemId)
                    self.vDb.Insert(rpfn, func, severity, violationId, desc,
                                    details, keyInfo.line0, eDbDetectId,
                                    self.updateTime)

        self.vDb.Commit()