#!/usr/bin/env python #*-----------------------------------------------------------------------* #| | #| Copyright (c) 2016 by Paul Scherrer Institute (http://www.psi.ch) | #| | #| Author Thierry Zamofing (thierry.zamofing@psi.ch) | #*-----------------------------------------------------------------------* ''' utilities classes ''' import json import numpy as np import time,os class dotdict(dict): """dot.notation access to dictionary attributes""" def __init__(self,arg=None,**kwargs): if arg!=None: self.__fill__(arg) self.__fill__(kwargs) def __fill__(self,kw): for k,v in kw.iteritems(): if type(v)==dict: self[k]=dotdict(v) else: self[k]=v if type(v)==list: for i,w in enumerate(v): if type(w)==dict: v[i]=dotdict(w) pass def __dir__(self): l=dir(object) #l.extend(self.keys()) l.extend(map(str,self.keys())) return l def __getattr__(self, attr): #return self.get(attr) try: return self[attr] except KeyError as e: raise AttributeError("%r instance has no attribute %r" % (self.__class__, attr)) def __repr__(self): return '<' + dict.__repr__(self)[1:-1] + '>' def PrettyPrint(self,indent=0): for k,v in self.iteritems(): if type(v)==dotdict: print ' '*indent,str(k)+':' v.PrettyPrint(indent+2) else: print ' '*indent+str(k)+'\t'+str(v) __setattr__= dict.__setitem__ __delattr__= dict.__delitem__ #__getattr__= dict.__getattr__ def ConvUtf8(s): 'convert unicoded json object to ASCII encoded' #http://stackoverflow.com/questions/956867/how-to-get-string-objects-instead-of-unicode-ones-from-json-in-python if isinstance(s, dict): return {ConvUtf8(key): ConvUtf8(value) for key, value in s.iteritems()} elif isinstance(s, list): return [ConvUtf8(element) for element in s] elif isinstance(s, unicode): return s.encode('utf-8') else: return s class GpasciiCommunicator(): '''Communicates with the Delta Tau gpascii programm ''' gpascii_ack="\x06\r\n" gpascii_inp='Input\r\n' def connect(self, host, username='root', password='deltatau',prompt='ppmac# '): p=telnetlib.Telnet(host) print p.read_until('login: ') p.write(username+'\n') print p.read_until('Password: ') p.write(password+'\n') print p.read_until(prompt) # command prompt p.write('gpascii -2\n') # execute gpascii command print p.read_until(self.gpascii_inp) return p