Ejemplo n.º 1
0
def input_loop(datatimes=None, spq=None):
    global request
    line = ''
    # loop over the lines in a sqp adding them with priority 1001 which should put them at the top
    if spq is not None:
        request = spq
    else:
        request = Request()
    while True:
        line = raw_input(':::: ')
        if line in ['stop', 'write']:
            break
        if line == 'help':
            print_inst()
            continue
        # make an entry from the input
        try:
            line = line.split(',')
        except AttributeError:
            continue
        line = [v.strip() for v in line]
        # is the input a ShortCut?
        if len(line) == 2:
            try:
                sc = int(line[0])
            except ValueError:
                print("** invalid sc [1,2,3,4]**")
                continue            
            if line[1].upper() == 'DATA_TIMES::':
                entry = Entry(sc, 'DATA_TIMES', datetime.datetime.utcnow().replace(microsecond=0), 1, 1000)
                print('{0}: CREATED    --  {1} to {2}').format(entry, entry.date.isoformat(), entry.endDate.isoformat())
                request.addEntry(entry)
                continue
            elif line[1].upper().startswith('CONFIG'):
                tmp = line[1].split(':')
                try:
                    date =  datetime.datetime.strptime(tmp[1], '%Y%m%d')
                except ValueError:
                    continue
                date2 = date
                while date2.day == date.day: 
                    try:
                        entry = Entry(sc, 'CONFIG', date2, int(typeDict['CONFIG']['dataPerBlock'])*60 , 900, datatimes=datatimes) # hi pri
                    except FIREOffException:
                        date2 += datetime.timedelta(seconds=1)
                        continue
                    print('{0}: created    --  {1} to {2}').format(entry, entry.date.isoformat(), entry.endDate.isoformat())
                    request.addEntry(entry)
                    date2 += datetime.timedelta(seconds=entry.duration)
                continue
            elif line[1].upper().startswith('CONTEXT'):
                tmp = line[1].split(':')
                try:
                    date =  datetime.datetime.strptime(tmp[1], '%Y%m%d')
                except ValueError:
                    continue
                date2 = date
                while date2.day == date.day: 
                    try:
                        entry = Entry(sc, 'CONTEXT', date2, int(typeDict['CONTEXT']['dataPerBlock'])*60 , 700, datatimes=datatimes) # hi pri
                    except FIREOffException:
                        date2 += datetime.timedelta(seconds=1)
                        continue
                    print('{0}: created    --  {1} to {2}').format(entry, entry.date.isoformat(), entry.endDate.isoformat())
                    request.addEntry(entry)
                    date2 += datetime.timedelta(seconds=entry.duration)
                continue               
            elif line[1].upper().startswith('MICRO_BURST'):
                tmp = line[1].split(':')
                try:
                    date =  datetime.datetime.strptime(tmp[1], '%Y%m%dT%H')
                except ValueError:
                    continue
                date2 = date
                while date2.day == date.day: 
                    try:
                        entry = Entry(sc, 'MICRO_BURST', date2, int(typeDict['MICRO_BURST']['dataPerBlock'])*60 , 500, datatimes=datatimes) 
                    except FIREOffException:
                        date2 += datetime.timedelta(seconds=1)
                        continue
                    print('{0}: created    --  {1} to {2}').format(entry, entry.date.isoformat(), entry.endDate.isoformat())
                    request.addEntry(entry)
                    date2 += datetime.timedelta(seconds=entry.duration)
                continue               
                
        elif len(line) != 5:
            print('** input much be 5 entries **')
            continue
        else:
            try:
                sc = int(line[0])
            except ValueError:
                print("** invalid sc [1,2,3,4]**")
                continue
            typ = line[1].upper()
            if typ not in typeDict:
                print("** invalid type [{0}]**".format(' '.join(typeDict.keys())))
                continue
            try:
                date = datetime.datetime.strptime(line[2], '%Y%m%dT%H:%M:%S')
            except ValueError, e:
                try:
                    date = datetime.datetime.strptime(line[2], '%Y-%m-%dT%H:%M:%S')
                except ValueError, e:
                    print e
                    continue
            try:
                dur = int(line[3])
            except ValueError:
                print("** invalid duration**")
                continue
            if dur <= 0:
                print("** invalid duration**")
                continue
            try:
                pri = int(line[4])
            except ValueError:
                print("** invalid priority**")
                continue
            if pri <= 0:
                print("** invalid priority**")
                continue

            warnings.simplefilter('error')
            try:
                entry = Entry(sc, typ, date, dur, pri, datatimes=datatimes)
            except UserWarning, e:
                warnings.simplefilter('always')
                entry = Entry(sc, typ, date, dur, pri, datatimes=datatimes)
                print('** {0} **'.format(e))