from resp import Redis, RedisError
r, other = Redis(), Redis()
try:
    r.call('SET','lab08:n','text')
    print('multi:',r.call('MULTI'))
    print('queue:',r.call('INCR','lab08:n'),r.call('SET','lab08:ok','yes'))
    result=r.call('EXEC')
    print('exec:',[str(x) if isinstance(x,RedisError) else x for x in result])
    print('after-exec:',r.call('GET','lab08:n'),r.call('GET','lab08:ok'))
    r.call('MULTI')
    print('queue-error:',str(r.call('SET','lab08:bad')))
    print('abort:',str(r.call('EXEC')))
    r.call('SET','lab08:v','1')
    r.call('WATCH','lab08:v')
    other.call('SET','lab08:v','2')
    r.call('MULTI')
    r.call('SET','lab08:v','3')
    print('watch-exec:',r.call('EXEC'),'value=',r.call('GET','lab08:v'))
    script="redis.call('SET', KEYS[1], 'written'); return redis.call('INCR', KEYS[2])"
    print('lua-error:',str(r.call('EVAL',script,2,'lab08:lua','lab08:n')).split(' script:')[0])
    print('after-lua:',r.call('GET','lab08:lua'))
    r.call('SET','lab08:ttl','old','PX',60000)
    print('ttl-before-positive:',r.call('PTTL','lab08:ttl')>0)
    r.call('SET','lab08:ttl','new')
    print('ttl-after-set:',r.call('PTTL','lab08:ttl'))
    print('missing-ttl:',r.call('PTTL','lab08:missing'))
finally:
    r.close(); other.close()
