Example #1
0
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')
Example #2
0
    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'], '')
Example #3
0
    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"], "")
Example #4
0
 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'],'') 
Example #5
0
    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'], '')
Example #6
0
    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'], '')
Example #7
0
    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"], "")
Example #8
0
    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"], "")
Example #9
0
 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'],'') 
Example #10
0
 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'],'') 
Example #11
0
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')
Example #12
0
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)