def startmulti(grammardir): ''' specialized tool for bulk checking of grammars while developing botsgrammars grammardir: directory with gramars (eg bots/usersys/grammars/edifact) editype: eg edifact ''' configdir = 'config' botsinit.generalinit( configdir) # find locating of bots, configfiles, init paths etc. process_name = 'grammarcheck' botsglobal.logger = botsinit.initenginelogging(process_name) atexit.register(logging.shutdown) files = glob.iglob(grammardir, recursive=True) files = [f for f in files if os.path.isfile(f)] for filename in files: filename_basename = os.path.basename(filename) editype = os.path.basename(os.path.dirname(filename)) if filename_basename in ['__init__.py', '__pycache__', 'envelope.py']: continue if filename_basename.startswith( 'edifact') or filename_basename.startswith( 'records') or filename_basename.endswith('records.py'): continue if not filename_basename.endswith('py'): continue filename_noextension = os.path.splitext(filename_basename)[0] try: grammar.grammarread(editype, filename_noextension, typeofgrammarfile='grammars') except: print(botslib.txtexc(), end='\n\n') sys.exit(1) else: print('OK - no error found in grammar', filename, end='\n\n')
def testgramfieldfixed(self): tabel = grammar.grammarread('fixed', 'invoicfixed') gramfield = tabel._checkfield #fixed formats to bots formats field = ['S001.0001', 'M', 1, 'A'] fieldresult = ['S001.0001', 1, 1, 'A', True, 0, 1, 'A', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'D'] fieldresult = ['S001.0001', 1, 4, 'D', True, 0, 4, 'D', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'T'] fieldresult = ['S001.0001', 1, 4, 'T', True, 0, 4, 'T', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'R'] fieldresult = ['S001.0001', 1, 4, 'R', True, 0, 4, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4.3, 'N'] fieldresult = ['S001.0001', 1, 4, 'N', True, 3, 4, 'N', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4.3, 'I'] fieldresult = ['S001.0001', 1, 4, 'I', True, 3, 4, 'I', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4.3, 'R'] fieldresult = ['S001.0001', 1, 4, 'R', True, 3, 4, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'C', 4.3, 'R'] fieldresult = ['S001.0001', 0, 4, 'R', True, 3, 4, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', ('C', 5), 4.3, 'R'] fieldresult = ['S001.0001', 0, 4, 'R', True, 3, 4, 'R', 5] gramfield(field, '') self.assertEqual(field, fieldresult) self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4, 'B'], '')
def testgramfieldfixed(self): tabel = grammar.grammarread("fixed", "invoicfixed") gramfield = tabel._checkfield # fixed formats to bots formats field = ["S001.0001", "M", 1, "A"] fieldresult = ["S001.0001", 1, 1, "A", True, 0, 1, "A", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "D"] fieldresult = ["S001.0001", 1, 4, "D", True, 0, 4, "D", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "T"] fieldresult = ["S001.0001", 1, 4, "T", True, 0, 4, "T", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "R"] fieldresult = ["S001.0001", 1, 4, "R", True, 0, 4, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4.3, "N"] fieldresult = ["S001.0001", 1, 4, "N", True, 3, 4, "N", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4.3, "I"] fieldresult = ["S001.0001", 1, 4, "I", True, 3, 4, "I", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4.3, "R"] fieldresult = ["S001.0001", 1, 4, "R", True, 3, 4, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "C", 4.3, "R"] fieldresult = ["S001.0001", 0, 4, "R", True, 3, 4, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", ("C", 5), 4.3, "R"] fieldresult = ["S001.0001", 0, 4, "R", True, 3, 4, "R", 5] gramfield(field, "") self.assertEqual(field, fieldresult) self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 4, "B"], "")
def testgramfieldfixed(self): tabel = grammar.grammarread('fixed','invoicfixed') gramfield = tabel._checkfield #fixed formats to bots formats field = ['S001.0001','M', 1,'A'] fieldresult = ['S001.0001',1, 1,'A',True,0,1,'A',1] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'D'] fieldresult = ['S001.0001',1, 4,'D',True,0,4,'D',1] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'T'] fieldresult = ['S001.0001',1, 4,'T',True,0,4,'T',1] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'R'] fieldresult = ['S001.0001',1, 4,'R',True,0,4,'R',1] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4.3,'N'] fieldresult = ['S001.0001',1, 4,'N',True,3,4,'N',1] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4.3,'I'] fieldresult = ['S001.0001',1, 4,'I',True,3,4,'I',1] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M',4.3,'R'] fieldresult = ['S001.0001',1, 4,'R',True,3,4,'R',1] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','C',4.3,'R'] fieldresult = ['S001.0001',0, 4,'R',True,3,4,'R',1] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001',('C',5),4.3,'R'] fieldresult = ['S001.0001',0, 4,'R',True,3,4,'R',5] gramfield(field,'') self.assertEqual(field,fieldresult) self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4,'B'],'')
def testgramfieldedifact_and_general(self): tabel = grammar.grammarread('edifact', 'edifact') gramfield = tabel._checkfield #edifact formats to bots formats field = ['S001.0001', 'M', 1, 'A'] fieldresult = ['S001.0001', 1, 1, 'A', True, 0, 0, 'A', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'N'] fieldresult = ['S001.0001', 1, 4, 'N', True, 0, 0, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'AN'] fieldresult = ['S001.0001', 1, 4, 'AN', True, 0, 0, 'A', 1] gramfield(field, '') self.assertEqual(field, fieldresult) #min&max length field = ['S001.0001', 'M', (2, 4), 'AN'] fieldresult = ['S001.0001', 1, 4, 'AN', True, 0, 2, 'A', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', (0, 4), 'AN'] fieldresult = ['S001.0001', 1, 4, 'AN', True, 0, 0, 'A', 1] gramfield(field, '') self.assertEqual(field, fieldresult) #decimals field = ['S001.0001', 'M', 3.2, 'N'] fieldresult = ['S001.0001', 1, 3, 'N', True, 2, 0, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 18.9, 'N'] fieldresult = ['S001.0001', 1, 18, 'N', True, 9, 0, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', (4, 4.3), 'N'] fieldresult = ['S001.0001', 1, 4, 'N', True, 3, 4, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult), field = ['S001.0001', 'M', (3.2, 4.2), 'N'] fieldresult = ['S001.0001', 1, 4, 'N', True, 2, 3, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult), field = ['S001.0001', 'C', (3.2, 4.2), 'N'] fieldresult = ['S001.0001', 0, 4, 'N', True, 2, 3, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult), field = ['S001.0001', ('C', 1234567), (3.2, 4.2), 'N'] fieldresult = ['S001.0001', 0, 4, 'N', True, 2, 3, 'R', 1234567] gramfield(field, '') self.assertEqual(field, fieldresult), #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #test all types of fields (I,R,N,A,D,T); tests not needed repeat for other editypes #check field itself self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M'], '') self.assertRaises(botslib.GrammarError, gramfield, [ 'S001.0001', 'M', ], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4, '', 'M', 4, '', 'M'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4, '', 'M', 4, ''], '') #check ID self.assertRaises(botslib.GrammarError, gramfield, ['', 'M', 4, 'A'], '') self.assertRaises(botslib.GrammarError, gramfield, [None, 'M', 4, 'A'], '') #check M/C self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'A', 4, 'I'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', '', 4, 'I'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', [], 4, 'I'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'MC', 4, 'I'], '') #check format self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4, 'I'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4, 'N7'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4, ''], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4, 5], '') #check length self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 'N', 'N'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 0, 'N'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', -2, 'N'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', -3.2, 'N'], '') #length for formats without float self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 2.1, 'A'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', (2.1, 3), 'A'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', (2, 3.2), 'A'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', (3, 2), 'A'], '') #length for formats with float self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 1.1, 'N'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', ('A', 5), 'N'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', (-1, 1), 'N'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', (5, None), 'N'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', (0, 1.1), 'N'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', (0, 0), 'N'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', (2, 1), 'N'], '')
def testgramfieldx12(self): tabel = grammar.grammarread('x12', 'x12') gramfield = tabel._checkfield #x12 formats to bots formats field = ['S001.0001', 'M', 1, 'AN'] fieldresult = ['S001.0001', 1, 1, 'AN', True, 0, 0, 'A', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'DT'] fieldresult = ['S001.0001', 1, 4, 'DT', True, 0, 0, 'D', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'TM'] fieldresult = ['S001.0001', 1, 4, 'TM', True, 0, 0, 'T', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'B'] fieldresult = ['S001.0001', 1, 4, 'B', True, 0, 0, 'A', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'ID'] fieldresult = ['S001.0001', 1, 4, 'ID', True, 0, 0, 'A', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'R'] fieldresult = ['S001.0001', 1, 4, 'R', True, 0, 0, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'N'] fieldresult = ['S001.0001', 1, 4, 'N', True, 0, 0, 'I', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'N0'] fieldresult = ['S001.0001', 1, 4, 'N0', True, 0, 0, 'I', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'N3'] fieldresult = ['S001.0001', 1, 4, 'N3', True, 3, 0, 'I', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4, 'N9'] fieldresult = ['S001.0001', 1, 4, 'N9', True, 9, 0, 'I', 1] gramfield(field, '') self.assertEqual(field, fieldresult) #decimals field = ['S001.0001', 'M', 3, 'R'] fieldresult = ['S001.0001', 1, 3, 'R', True, 0, 0, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'M', 4.3, 'R'] fieldresult = ['S001.0001', 1, 4, 'R', True, 3, 0, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', 'C', 4.3, 'R'] fieldresult = ['S001.0001', 0, 4, 'R', True, 3, 0, 'R', 1] gramfield(field, '') self.assertEqual(field, fieldresult) field = ['S001.0001', ('M', 99999), 4.3, 'R'] fieldresult = ['S001.0001', 1, 4, 'R', True, 3, 0, 'R', 99999] gramfield(field, '') self.assertEqual(field, fieldresult) self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4, 'D'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4.3, 'I'], '') self.assertRaises(botslib.GrammarError, gramfield, ['S001.0001', 'M', 4.3, 'NO'], '')
def testgramfieldedifact_and_general(self): tabel = grammar.grammarread("edifact", "edifact") gramfield = tabel._checkfield # edifact formats to bots formats field = ["S001.0001", "M", 1, "A"] fieldresult = ["S001.0001", 1, 1, "A", True, 0, 0, "A", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "N"] fieldresult = ["S001.0001", 1, 4, "N", True, 0, 0, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "AN"] fieldresult = ["S001.0001", 1, 4, "AN", True, 0, 0, "A", 1] gramfield(field, "") self.assertEqual(field, fieldresult) # min&max length field = ["S001.0001", "M", (2, 4), "AN"] fieldresult = ["S001.0001", 1, 4, "AN", True, 0, 2, "A", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", (0, 4), "AN"] fieldresult = ["S001.0001", 1, 4, "AN", True, 0, 0, "A", 1] gramfield(field, "") self.assertEqual(field, fieldresult) # decimals field = ["S001.0001", "M", 3.2, "N"] fieldresult = ["S001.0001", 1, 3, "N", True, 2, 0, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 18.9, "N"] fieldresult = ["S001.0001", 1, 18, "N", True, 9, 0, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", (4, 4.3), "N"] fieldresult = ["S001.0001", 1, 4, "N", True, 3, 4, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult), field = ["S001.0001", "M", (3.2, 4.2), "N"] fieldresult = ["S001.0001", 1, 4, "N", True, 2, 3, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult), field = ["S001.0001", "C", (3.2, 4.2), "N"] fieldresult = ["S001.0001", 0, 4, "N", True, 2, 3, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult), field = ["S001.0001", ("C", 1_234_567), (3.2, 4.2), "N"] fieldresult = ["S001.0001", 0, 4, "N", True, 2, 3, "R", 1_234_567] gramfield(field, "") self.assertEqual(field, fieldresult), # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # test all types of fields (I,R,N,A,D,T); tests not needed repeat for other editypes # check field itself self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 4], "") self.assertRaises( botslib.GrammarError, gramfield, ["S001.0001", "M", 4, "", "M", 4, "", "M"], "", ) self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 4, "", "M", 4, ""], "") # check ID self.assertRaises(botslib.GrammarError, gramfield, ["", "M", 4, "A"], "") self.assertRaises(botslib.GrammarError, gramfield, [None, "M", 4, "A"], "") # check M/C self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "A", 4, "I"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "", 4, "I"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", [], 4, "I"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "MC", 4, "I"], "") # check format self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 4, "I"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 4, "N7"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 4, ""], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 4, 5], "") # check length self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", "N", "N"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 0, "N"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", -2, "N"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", -3.2, "N"], "") # length for formats without float self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 2.1, "A"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", (2.1, 3), "A"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", (2, 3.2), "A"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", (3, 2), "A"], "") # length for formats with float self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 1.1, "N"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", ("A", 5), "N"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", (-1, 1), "N"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", (5, None), "N"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", (0, 1.1), "N"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", (0, 0), "N"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", (2, 1), "N"], "")
def testgramfieldx12(self): tabel = grammar.grammarread("x12", "x12") gramfield = tabel._checkfield # x12 formats to bots formats field = ["S001.0001", "M", 1, "AN"] fieldresult = ["S001.0001", 1, 1, "AN", True, 0, 0, "A", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "DT"] fieldresult = ["S001.0001", 1, 4, "DT", True, 0, 0, "D", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "TM"] fieldresult = ["S001.0001", 1, 4, "TM", True, 0, 0, "T", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "B"] fieldresult = ["S001.0001", 1, 4, "B", True, 0, 0, "A", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "ID"] fieldresult = ["S001.0001", 1, 4, "ID", True, 0, 0, "A", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "R"] fieldresult = ["S001.0001", 1, 4, "R", True, 0, 0, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "N"] fieldresult = ["S001.0001", 1, 4, "N", True, 0, 0, "I", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "N0"] fieldresult = ["S001.0001", 1, 4, "N0", True, 0, 0, "I", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "N3"] fieldresult = ["S001.0001", 1, 4, "N3", True, 3, 0, "I", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4, "N9"] fieldresult = ["S001.0001", 1, 4, "N9", True, 9, 0, "I", 1] gramfield(field, "") self.assertEqual(field, fieldresult) # decimals field = ["S001.0001", "M", 3, "R"] fieldresult = ["S001.0001", 1, 3, "R", True, 0, 0, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "M", 4.3, "R"] fieldresult = ["S001.0001", 1, 4, "R", True, 3, 0, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", "C", 4.3, "R"] fieldresult = ["S001.0001", 0, 4, "R", True, 3, 0, "R", 1] gramfield(field, "") self.assertEqual(field, fieldresult) field = ["S001.0001", ("M", 99999), 4.3, "R"] fieldresult = ["S001.0001", 1, 4, "R", True, 3, 0, "R", 99999] gramfield(field, "") self.assertEqual(field, fieldresult) self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 4, "D"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 4.3, "I"], "") self.assertRaises(botslib.GrammarError, gramfield, ["S001.0001", "M", 4.3, "NO"], "")
def testgramfieldedifact_and_general(self): tabel = grammar.grammarread('edifact','edifact') gramfield = tabel._checkfield #edifact formats to bots formats field = ['S001.0001','M', 1,'A'] fieldresult = ['S001.0001','M', 1,'A',True,0,0,'A'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'N'] fieldresult = ['S001.0001','M', 4,'N',True,0,0,'R'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'AN'] fieldresult = ['S001.0001','M', 4,'AN',True,0,0,'A'] gramfield(field,'') self.assertEqual(field,fieldresult) #min&max length field = ['S001.0001','M', (2,4),'AN'] fieldresult = ['S001.0001','M', 4,'AN',True,0,2,'A'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', (0,4),'AN'] fieldresult = ['S001.0001','M', 4,'AN',True,0,0,'A'] gramfield(field,'') self.assertEqual(field,fieldresult) #decimals field = ['S001.0001','M', 3.2,'N'] fieldresult = ['S001.0001','M', 3,'N',True,2,0,'R'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', (4,4.3),'N'] fieldresult = ['S001.0001','M', 4,'N',True,3,4,'R'] gramfield(field,'') self.assertEqual(field,fieldresult), field = ['S001.0001','M', (3.2,4.2),'N'] fieldresult = ['S001.0001','M', 4,'N',True,2,3,'R'] gramfield(field,'') self.assertEqual(field,fieldresult), #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #test all types of fields (I,R,N,A,D,T); tests not needed repeat for other editypes #check field itself self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4,'','M', 4,'','M'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4,'','M', 4,''],'') #check ID self.assertRaises(botslib.GrammarError,gramfield,['','M', 4,'A'],'') self.assertRaises(botslib.GrammarError,gramfield,[None,'M', 4,'A'],'') #check M/C self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','A',4,'I'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','',4,'I'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001',[],4,'I'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','MC',4,'I'],'') #check format self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4,'I'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4,'N7'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4,''],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4,5],'') #check length self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M','N','N'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',0,'N'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',-2,'N'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',-3.2,'N'],'') #length for formats without float self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',2.1,'A'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',(2.1,3),'A'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',(2,3.2),'A'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',(3,2),'A'],'') #length for formats with float self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',1.1,'N'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',('A',5),'N'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',(-1,1),'N'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',(5,None),'N'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',(0,1.1),'N'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',(0,0),'N'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',(2,1),'N'],'')
def testgramfieldx12(self): tabel = grammar.grammarread('x12','x12') gramfield = tabel._checkfield #x12 formats to bots formats field = ['S001.0001','M', 1,'AN'] fieldresult = ['S001.0001','M', 1,'AN',True,0,0,'A'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'DT'] fieldresult = ['S001.0001','M', 4,'DT',True,0,0,'D'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'TM'] fieldresult = ['S001.0001','M', 4,'TM',True,0,0,'T'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'B'] fieldresult = ['S001.0001','M', 4,'B',True,0,0,'A'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'ID'] fieldresult = ['S001.0001','M', 4,'ID',True,0,0,'A'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'R'] fieldresult = ['S001.0001','M', 4,'R',True,0,0,'R'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'N'] fieldresult = ['S001.0001','M', 4,'N',True,0,0,'I'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'N0'] fieldresult = ['S001.0001','M', 4,'N0',True,0,0,'I'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'N3'] fieldresult = ['S001.0001','M', 4,'N3',True,3,0,'I'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M', 4,'N9'] fieldresult = ['S001.0001','M', 4,'N9',True,9,0,'I'] gramfield(field,'') self.assertEqual(field,fieldresult) #decimals field = ['S001.0001','M', 3,'R'] fieldresult = ['S001.0001','M', 3,'R',True,0,0,'R'] gramfield(field,'') self.assertEqual(field,fieldresult) field = ['S001.0001','M',4.3,'R'] fieldresult = ['S001.0001','M', 4,'R',True,3,0,'R'] gramfield(field,'') self.assertEqual(field,fieldresult) self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4,'D'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4.3,'I'],'') self.assertRaises(botslib.GrammarError,gramfield,['S001.0001','M',4.3,'NO'],'')
def startall(): #NOTE: bots directory should always be on PYTHONPATH - otherwise it will not start. #********command line arguments************************** usage = ''' This is "%(name)s" version %(version)s, part of Bots open source edi translator (http://bots.sourceforge.net). Checks all installed bots grammars. Same checks are used as in translations with bots-engine. Usage: %(name)s -c<directory> Options: -c<directory> directory for configuration files (default: config). Examples: %(name)s -cconfig ''' % { 'name': os.path.basename(sys.argv[0]), 'version': botsglobal.version } configdir = 'config' for arg in sys.argv[1:]: if arg.startswith('-c'): configdir = arg[2:] if not configdir: print( 'Error: configuration directory indicated, but no directory name.' ) sys.exit(1) else: print(usage) sys.exit(0) #***end handling command line arguments************************** botsinit.generalinit( configdir) # find locating of bots, configfiles, init paths etc. process_name = 'grammarcheck' botsglobal.logger = botsinit.initenginelogging(process_name) atexit.register(logging.shutdown) usersysdirectory = botsglobal.ini['directories']['usersysabs'] files = glob.iglob(usersysdirectory + '/grammars/**', recursive=True) files = [f for f in files if os.path.isfile(f)] for filename in files: filename_basename = os.path.basename(filename) editype = os.path.basename(os.path.dirname(filename)) if filename_basename in ['__init__.py', '__pycache__', 'envelope.py']: continue if filename_basename.startswith( 'edifact') or filename_basename.startswith( 'records') or filename_basename.endswith('records.py'): continue if not filename_basename.endswith('py'): continue filename_noextension = os.path.splitext(filename_basename)[0] try: grammar.grammarread(editype, filename_noextension, typeofgrammarfile='grammars') except: print(botslib.txtexc(), end='\n\n') sys.exit(1) else: print('OK - no error found in grammar', filename, end='\n\n')
def start(): #NOTE: bots directory should always be on PYTHONPATH - otherwise it will not start. #********command line arguments************************** usage = ''' This is "%(name)s" version %(version)s, part of Bots open source edi translator (http://bots.sourceforge.net). Checks a Bots grammar. Same checks are used as in translations with bots-engine. Searches for grammar in regular place: bots/usersys/grammars/<editype>/<messagetype>.py (even if a path is passed). Usage: %(name)s -c<directory> <editype> <messagetype> or %(name)s -c<directory> <path to grammar> Options: -c<directory> directory for configuration files (default: config). Examples: %(name)s -cconfig edifact ORDERSD96AUNEAN008 %(name)s -cconfig C:/python27/lib/site-packages/bots/usersys/grammars/edifact/ORDERSD96AUNEAN008.py ''' % { 'name': os.path.basename(sys.argv[0]), 'version': botsglobal.version } configdir = 'config' editype = '' messagetype = '' for arg in sys.argv[1:]: if arg.startswith('-c'): configdir = arg[2:] if not configdir: print( 'Error: configuration directory indicated, but no directory name.' ) sys.exit(1) elif arg in ['?', '/?', '-h', '--help'] or arg.startswith('-'): print(usage) sys.exit(0) else: if os.path.isfile(arg): p1, p2 = os.path.split(arg) editype = os.path.basename(p1) messagetype, ext = os.path.splitext(p2) messagetype = unicode(messagetype) print('grammarcheck', editype, messagetype) elif not editype: editype = arg else: messagetype = arg if not (editype and messagetype): print( 'Error: both editype and messagetype, or a file path, are required.' ) sys.exit(1) #***end handling command line arguments************************** botsinit.generalinit( configdir) # find locating of bots, configfiles, init paths etc. process_name = 'grammarcheck' botsglobal.logger = botsinit.initenginelogging(process_name) atexit.register(logging.shutdown) try: grammar.grammarread(editype, messagetype, typeofgrammarfile='grammars') except: print('Found error in grammar: ', botslib.txtexc()) sys.exit(1) else: print('OK - no error found in grammar') sys.exit(0)