コード例 #1
0
class TestFilterWheel(object):
    def setup(self):

        self.manager = Manager(port=8000)

        self.manager.addClass(FakeFilterWheel, "fake",
                              {"device": "/dev/ttyS0"})
        self.manager.addClass(FilterWheel, "filter", {
            "driver": "/FakeFilterWheel/0",
            "filters": "U B V R I"
        })

        #self.manager.addClass(SBIG, "sbig", {"device": Device.USB})
        #self.manager.addClass(FilterWheel, "filter", {"driver": "/SBIG/0",
        #                                              "filters": "R G B LUNAR CLEAR"})

    def teardown(self):
        self.manager.shutdown()

    def test_filters(self):

        f = self.manager.getProxy(FilterWheel)

        filters = f.getFilters()

        for filter in filters:
            f.setFilter(filter)
            assert f.getFilter() == filter

    def test_get_filters(self):

        f = self.manager.getProxy(FilterWheel)
        filters = f.getFilters()

        assert isinstance(filters, tuple) or isinstance(filters, list)
コード例 #2
0
class TestFocuser(object):
    def setup(self):

        self.manager = Manager(port=8000)

        self.manager.addClass(
            Site, "lna", {
                "name": "LNA",
                "latitude": "-22 32 03",
                "longitude": "-45 34 57",
                "altitude": "1896",
                "utc_offset": "-3"
            })

        self.manager.addClass(FakeFocuser, "fake", {"device": "/dev/ttyS0"})
        self.manager.addClass(Focuser, "focus", {"driver": "/FakeFocuser/0"})

        #self.manager.addClass(OptecTCFS, "optec", {"device": "/dev/ttyS0"})
        #self.manager.addClass(Focuser, "focus", {"driver": "/OptecTCFS/0"})

    def teardown(self):
        self.manager.shutdown()

    def test_get_position(self):

        focus = self.manager.getProxy(Focuser)

        assert focus.getPosition() >= 0

    def test_move(self):

        focus = self.manager.getProxy(Focuser)

        start = focus.getPosition()
        delta = int(random.Random().random() * 1000)

        # assumes IN moving to lower values
        focus.moveIn(delta)
        assert focus.getPosition() == start - delta

        # assumes OUT moving to larger values
        start = focus.getPosition()
        focus.moveOut(delta)
        assert focus.getPosition() == start + delta

        # TO
        focus.moveTo(1000)
        assert focus.getPosition() == 1000

        # TO where?
        assert_raises(InvalidFocusPositionException, focus.moveTo, 1e9)
コード例 #3
0
ファイル: test_pointverify.py プロジェクト: agati/chimera
class TestPointVerify (object):

    def setup (self):

        self.manager = Manager(port=8000)

        # real
        self.manager.addClass(SBIG, "sbig", {"device": "USB"})
        self.manager.addClass(Camera, "cam", {"driver": "/SBIG/0"})

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20"})

        self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS6"})
        self.manager.addClass(Telescope, "meade", {"driver": "/Meade/meade"})

        self.manager.addClass(PointVerify, "Point")



    def teardown (self):
        self.manager.shutdown()
        del self.manager

    def test_point (self):

        point = self.manager.getProxy(PointVerify)
コード例 #4
0
ファイル: test_site.py プロジェクト: carriercomm/chimera-1
class TestSite (object):

    def setup (self):

        self.manager = Manager(port=8000)

        #self.manager.addClass(Site, "lna", {"name": "LNA",
        #                                    "latitude": "-22 32 03",
        #                                    "longitude": "-45 34 57",
        #                                    "altitude": "1896"}

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20"})

    def teardown (self):
        self.manager.shutdown()

    def test_times (self):

        site = self.manager.getProxy(Site)

        try:
            print
            print "local:", site.localtime()
            print "UT   :", site.ut()
            print "JD   :", site.JD()
            print "MJD  :", site.MJD()
            print "LST  :", site.LST()
            print "GST  :", site.GST()
        except Exception, e:
            printException(e)
コード例 #5
0
class TestSite(object):
    def setup(self):

        self.manager = Manager(port=8000)

        #self.manager.addClass(Site, "lna", {"name": "LNA",
        #                                    "latitude": "-22 32 03",
        #                                    "longitude": "-45 34 57",
        #                                    "altitude": "1896"}

        self.manager.addClass(
            Site, "lna", {
                "name": "UFSC",
                "latitude": "-27 36 13 ",
                "longitude": "-48 31 20",
                "altitude": "20"
            })

    def teardown(self):
        self.manager.shutdown()

    def test_times(self):

        site = self.manager.getProxy(Site)

        try:
            print
            print "local:", site.localtime()
            print "UT   :", site.ut()
            print "JD   :", site.JD()
            print "MJD  :", site.MJD()
            print "LST  :", site.LST()
            print "GST  :", site.GST()
        except Exception, e:
            printException(e)
コード例 #6
0
class TestAutofocus(object):
    def setup(self):

        self.manager = Manager(port=8000)

        # real
        self.manager.addClass(SBIG, "sbig", {"device": "USB"})
        self.manager.addClass(Camera, "cam", {"driver": "/SBIG/0"})

        self.manager.addClass(
            Site, "lna", {
                "name": "UFSC",
                "latitude": "-27 36 13 ",
                "longitude": "-48 31 20",
                "altitude": "20",
                "utc_offset": "-3"
            })

        self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS6"})
        self.manager.addClass(Telescope, "meade", {"driver": "/Meade/meade"})

        self.manager.addClass(PointVerify, "Point")

    def teardown(self):
        self.manager.shutdown()
        del self.manager

    def test_point(self):

        point = self.manager.getProxy(PointVerify)
コード例 #7
0
ファイル: mkqueue.py プロジェクト: tribeiro/SMAPS
	def setJD(self,options):
		'''
		Configure time domain by specifing a julian day. It will use information on exposure time to build time bins that will be 
		filled when selecting targets.
		'''
		
		sysconfig = SystemConfig.fromFile(options.config)

		manager = Manager()
		site = manager.getProxy(sysconfig.sites[0])
		jd = options.JD
		
		if not jd:
			jd = np.floor(site.JD())+0.5
		
		lat = np.array([float(tt) / 60.**i for i,tt in enumerate(str(site['latitude']).split(':'))])
		lat[1:] *= lat[0]/np.abs(lat[0])
		sitelat = np.sum(lat)
		long = np.array([float(tt) / 60.**i for i,tt in enumerate(str(site['longitude']).split(':'))])
		long[1:] *= long[0]/np.abs(long[0])
		sitelong = abs(np.sum(long)/360*24.)
		
		print site['latitude'],'->',sitelat
		print site['longitude'],'->',sitelong
		
		nightstart = _skysub.jd_sun_alt(self.sunMaxAlt, jd, sitelat, sitelong)
		nightend   = _skysub.jd_sun_alt(self.sunMaxAlt, jd+0.5, sitelat, sitelong)
		print('Nigh Start @JD= %.3f # Night End @JD = %.3f'%(nightstart,nightend))

		
		# Creating a 1 minute time bin
		tbin = self.tbin

		self.obsTimeBins = np.arange(nightstart,nightend+tbin,tbin)
		self.obsTimeMask = np.zeros(len(self.obsTimeBins))
		self.obsTimeMask[-1] = 1.0
		
		# Marking filled bins
		
		session = Session()
		
		scheduled = session.query(Program)
		
		for target in scheduled:
			tindex = np.abs(self.obsTimeBins - 2400000.5 - target.slewAt).argmin()
			self.obsTimeMask[tindex] = 1.0

		self.isJD = True
コード例 #8
0
ファイル: test_telescope.py プロジェクト: agati/chimera
class TestRealTelescope(RealHardwareTest, TelescopeTest):
    
    def setup (self):

        self.manager = Manager(port=8000)

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20"})

        from chimera.instruments.meade import Meade
        self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS6"})
        self.TELESCOPE = "/Meade/0"
        #self.TELESCOPE = "150.162.110.3:7666/TheSkyTelescope/0"
        self.tel = self.manager.getProxy(self.TELESCOPE)

        FiredEvents = {}
        self.setupEvents()

    def teardown (self):
        self.manager.shutdown()
コード例 #9
0
ファイル: test_telescope.py プロジェクト: orsa-unige/chimera
class TestFakeTelescope(FakeHardwareTest, TelescopeTest):

    def setup(self):

        self.manager = Manager(port=8000)

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20"})

        from chimera.instruments.faketelescope import FakeTelescope
        self.manager.addClass(FakeTelescope, "fake")
        self.TELESCOPE = "/FakeTelescope/0"

        self.tel = self.manager.getProxy(self.TELESCOPE)

        FiredEvents = {}
        self.setupEvents()

    def teardown (self):
        self.manager.shutdown()
コード例 #10
0
    def test_log(self):
        class Simple(ChimeraObject):
            def __init__(self):
                ChimeraObject.__init__(self)

            def answer(self):
                try:
                    raise ChimeraException("I'm an Exception, sorry.")
                except ChimeraException:
                    self.log.exception("from except: wow, exception caught.")
                    raise ChimeraException("I'm a new Exception, sorry again")

        manager = Manager()
        manager.addClass(Simple, "simple")

        simple = manager.getProxy(Simple)

        try:
            simple.answer()
        except ChimeraException, e:
            assert e.cause != None
            log.exception("wow, something wrong")
コード例 #11
0
ファイル: test_telescope.py プロジェクト: agati/chimera
class TestFakeTelescope(FakeHardwareTest, TelescopeTest):

    def setup(self):

        self.manager = Manager(port=8000)

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20"})

        from chimera.instruments.faketelescope import FakeTelescope
        self.manager.addClass(FakeTelescope, "fake")
        self.TELESCOPE = "/FakeTelescope/0"

        self.tel = self.manager.getProxy(self.TELESCOPE)

        FiredEvents = {}
        self.setupEvents()

    def teardown (self):
        self.manager.shutdown()
コード例 #12
0
ファイル: test_telescope.py プロジェクト: orsa-unige/chimera
class TestRealTelescope(RealHardwareTest, TelescopeTest):
    
    def setup (self):

        self.manager = Manager(port=8000)

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20"})

        from chimera.instruments.meade import Meade
        self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS6"})
        self.TELESCOPE = "/Meade/0"
        #self.TELESCOPE = "150.162.110.3:7666/TheSkyTelescope/0"
        self.tel = self.manager.getProxy(self.TELESCOPE)

        FiredEvents = {}
        self.setupEvents()

    def teardown (self):
        self.manager.shutdown()
コード例 #13
0
ファイル: test_log.py プロジェクト: agati/chimera
    def test_log (self):

        class Simple (ChimeraObject):
            def __init__ (self):
                ChimeraObject.__init__(self)

            def answer (self):
                try:
                    raise ChimeraException("I'm an Exception, sorry.")
                except ChimeraException:
                    self.log.exception("from except: wow, exception caught.")
                    raise ChimeraException("I'm a new Exception, sorry again")

        manager = Manager()
        manager.addClass(Simple, "simple")

        simple = manager.getProxy(Simple)

        try:
            simple.answer()
        except ChimeraException, e:
            assert e.cause != None
            log.exception("wow, something wrong")
コード例 #14
0
ファイル: test_events.py プロジェクト: agati/chimera
class TestEvents (object):

    def setup (self):
        self.manager = Manager()

    def teardown (self):
        self.manager.shutdown()
        del self.manager

    def test_publish (self):

        assert self.manager.addClass (Publisher, "p") != False
        assert self.manager.addClass (Subscriber, "s") != False

        p = self.manager.getProxy("/Publisher/p")
        assert isinstance(p, Proxy)
        
        s = self.manager.getProxy("/Subscriber/s")
        assert isinstance(s, Proxy)

        p.fooDone += s.fooDoneClbk

        assert p.foo() == 42
        time.sleep (0.5) # delay to get messages delivered
        assert s.getCounter() == 1
        assert p.getCounter() == 1

        assert p.foo() == 42
        time.sleep (0.5) # delay to get messages delivered
        assert s.getCounter() == 2
        assert p.getCounter() == 2        

        # unsubscribe
        p.fooDone -= s.fooDoneClbk
        p.fooDone -= p.fooDoneClbk        
        
        assert p.foo() == 42
        time.sleep (0.5) # delay to get messages delivered
        assert s.getCounter() == 2
        assert p.getCounter() == 2        

    def test_performance (self):

        assert self.manager.addClass (Publisher, "p") != False
        assert self.manager.addClass (Subscriber, "s") != False

        p = self.manager.getProxy("/Publisher/p")
        assert isinstance(p, Proxy)
        
        s = self.manager.getProxy("/Subscriber/s")
        assert isinstance(s, Proxy)

        p.fooDone += s.fooDoneClbk

        for check in range (1):

            start = time.time()
            for i in range (100):
                p.foo()
            end = time.time()

            time.sleep (5)

            results = s.getResults()

            dt   = [ (t - t0)*1000 for t0, t in results]
            mean = sum (dt) / len(dt)
        
            sigma = math.sqrt(sum([ (t - mean)**2 for t in dt]) / len(dt))

            print "#"*25
            print "# %d events (%.3f s)" % (len(dt), (end-start))
            print "# %.2f events/s" % (len(dt)/(end-start))
            print "# min   : %-6.3f ms" % min(dt)
            print "# max   : %-6.3f ms" % max(dt)        
            print "# mean  : %-6.3f ms" % mean
            print "# sigma : %-6.3f ms" % sigma
            print "#"*25
コード例 #15
0
import logging
logging.getLogger("chimera").setLevel(logging.WARNING)

from chimera.core.manager import Manager
from chimera.core.callback import callback
from chimera.core.exceptions import printException

from minimo import Minimo, MinimoException

manager = Manager()

m = manager.getProxy(Minimo, "m", host='localhost', port=8000)

# method
print m.doMethod("bar")

# event


@callback(manager)
def doEventClbk(result):
    print result


m.eventDone += doEventClbk
m.doEvent()

# exception
try:
    m.doRaise()
except MinimoException, e:
コード例 #16
0
#
# 1. Adding objects and getting a proxy
#

# just add a min Minimoescope class (returns a valid proxy)
minimo = manager.addClass(Minimo, "min", start=True)

# synchronous "doFoo"
minimo.doFoo("ra dec")

#
# 2. There are other ways to get proxy
#

# from manager (this ensure that the object exists on the manager, see ChimeraProxy below)
minimo = manager.getProxy("/Minimo/min")
minimo.doFoo("ra dec")

# if you don't know the name of the instance no problem, pass an index starting with 0
minimo = manager.getProxy("/Minimo/0")
minimo.doFoo("ra dec")

minimo = manager.getProxy(Minimo, "min")
minimo.doFoo("ra dec")

# if you don't know the name of the instance no problem, pass an index starting with 0
minimo = manager.getProxy(Minimo)
minimo.doFoo("ra dec")

minimo = manager.getProxy(Minimo, host="localhost", port=9090)
minimo.doFoo("ra dec")
コード例 #17
0
class TestCamera(object):
    def setup(self):

        self.manager = Manager(port=8000)

        #self.manager.addClass(SBIG, "sbig", {"device": Device.USB})
        #self.manager.addClass(Camera, "cam", {"driver": "/SBIG/sbig"})

        self.manager.addClass(FakeCamera, "fake", {"device": Device.USB})
        self.manager.addClass(Camera, "cam", {"driver": "/FakeCamera/fake"})

        @callback(self.manager)
        def exposeBeginClbk(request):
            print
            print time.time(), "Expose begin for request %s." % request

        @callback(self.manager)
        def exposeCompleteClbk(request):
            print time.time(), "Expose complete for request %s." % request

        @callback(self.manager)
        def readoutBeginClbk(request):
            print time.time(
            ), "Readout begin for request %s." % request["filename"]

        @callback(self.manager)
        def readoutCompleteClbk(request):
            print time.time(
            ), "Readout complete for request %s." % request["filename"]

        @callback(self.manager)
        def abortCompleteClbk():
            print time.time(), "Abort complete."

        cam = self.manager.getProxy(Camera)
        cam.exposeBegin += exposeBeginClbk
        cam.exposeComplete += exposeCompleteClbk
        cam.readoutBegin += readoutBeginClbk
        cam.readoutComplete += readoutCompleteClbk
        cam.abortComplete += abortCompleteClbk

    def teardown(self):
        self.manager.shutdown()

    def test_simple(self):

        cam = self.manager.getProxy(Camera)
        assert cam.isExposing() == False

    def test_expose(self):

        cam = self.manager.getProxy(Camera)

        frames = 0

        try:
            frames = cam.expose(exptime=2,
                                frames=2,
                                interval=0.5,
                                filename="autogen-expose.fits")
        except Exception, e:
            log.exception("problems")

        assert len(frames) == 2
        assert isinstance(frames[0], Proxy)
        assert isinstance(frames[1], Proxy)
コード例 #18
0
ファイル: dome_test.py プロジェクト: astroufsc/chimera-lna
credentials = ServiceAccountCredentials.from_json_keyfile_name('LNA40-acf26ff37a3d.json', scope)

gc = gspread.authorize(credentials)

wks = gc.open_by_key('')

sheet = wks.get_worksheet(0)

if len(sys.argv) < 2:
    print 'Usage: %s ip_chimera' % sys.argv[0]
    sys.exit()

manager = Manager()

site = manager.getProxy("%s:7666/Site/0" % sys.argv[1])
telescope = manager.getProxy("%s:7666/Telescope/0" % sys.argv[1])
dome = manager.getProxy("%s:7666/Dome/0" % sys.argv[1])


make_alt_list = False
if make_alt_list:
    i = 1
    while sheet.cell(i, 1).value != '':
        i += 1
    for az, alt in [(ii, jj) for ii in np.arange(15, 360, 10) for jj in np.arange(25, 90, 20)]:
        sheet.update_cell(i, 1, az)
        sheet.update_cell(i, 2, alt)
        i += 1

コード例 #19
0
class TestAutoMap(object):
    def setup(self):

        self.manager = Manager(port=8000)

        self.manager.addClass(
            Site, "lna", {
                "name": "LNA",
                "latitude": "-22 32 03",
                "longitude": "-45 34 57",
                "altitude": "1896",
                "utc_offset": "-3"
            })

        # fake
        self.manager.addClass(FakeTelescope, "fake", {"skip_init": False})
        self.manager.addClass(Telescope, "fake",
                              {"driver": "/FakeTelescope/0"})

        self.manager.addClass(FakeCamera, "fake")
        self.manager.addClass(Camera, "cam", {"driver": "/FakeCamera/0"})

        self.manager.addClass(FakeDome, "fake")
        self.manager.addClass(Dome, "dome", {
            "driver": "/FakeDome/0",
            "mode": "Track",
            "telescope": "/Telescope/0"
        })

        # real
        #self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS6", "skip_init": False})
        #self.manager.addClass(Telescope, "meade", {"driver": "/Meade/meade"})

        #self.manager.addClass(SBIG, "sbig", {"device": "USB"})
        #self.manager.addClass(Camera, "cam", {"driver": "/SBIG/0"})

        #self.manager.addClass(DomeLNA40cm, "lna40", {"device": "/dev/ttyS0"})
        #self.manager.addClass(Dome, "dome", {"driver": "/DomeLNA40cm/0",
        #                                     "mode": "Track",
        #                                     "telescope": "/Telescope/0"})

        @callback(self.manager)
        def exposeBeginClbk(exp_time):
            print time.time(), "[cam] Expose begin for %.3f s." % exp_time

        @callback(self.manager)
        def exposeCompleteClbk():
            print time.time(), "[cam] Expose complete."

        @callback(self.manager)
        def readoutBeginClbk(frame):
            print time.time(), "[cam] Readout begin for %s." % frame

        @callback(self.manager)
        def readoutCompleteClbk(frame):
            print time.time(), "[cam] Readout complete for %s." % frame

        @callback(self.manager)
        def camAbortCompleteClbk():
            print time.time(), "[cam] Abort complete."

        cam = self.manager.getProxy(Camera)
        cam.exposeBegin += exposeBeginClbk
        cam.exposeComplete += exposeCompleteClbk
        cam.readoutBegin += readoutBeginClbk
        cam.readoutComplete += readoutCompleteClbk
        cam.abortComplete += camAbortCompleteClbk

        @callback(self.manager)
        def slewBeginClbk(target):
            print time.time(), "[tel] Slew begin. target=%s" % str(target)

        @callback(self.manager)
        def slewCompleteClbk(position):
            print time.time(
            ), "[tel] Slew complete. position=%s" % str(position)

        @callback(self.manager)
        def telAbortCompleteClbk(position):
            print time.time(
            ), "[tel] Abort complete. position=%s" % str(position)

        self.tel = self.manager.getProxy(Telescope)
        self.tel.slewBegin += slewBeginClbk
        self.tel.slewComplete += slewCompleteClbk
        self.tel.abortComplete += telAbortCompleteClbk

        @callback(self.manager)
        def domeSlewBeginClbk(target):
            print
            print time.time(), "[dome] Slew begin. target=%s" % str(target)

        @callback(self.manager)
        def domeSlewCompleteClbk(position):
            print time.time(
            ), "[dome] Slew complete. position=%s" % str(position)

        @callback(self.manager)
        def domeAbortCompleteClbk(position):
            print time.time(
            ), "[dome] Abort slew at position=%s" % str(position)

        dome = self.manager.getProxy(Dome)
        dome.slewBegin += domeSlewBeginClbk
        dome.slewComplete += domeSlewCompleteClbk
        dome.abortComplete += domeAbortCompleteClbk

    def teardown(self):
        self.manager.shutdown()
        del self.manager

    def test_map(self):

        tel = self.manager.getProxy(Telescope)
        cam = self.manager.getProxy(Camera)
        dome = self.manager.getProxy(Dome)

        site = self.manager.getProxy(Site)
コード例 #20
0
ファイル: test_manager.py プロジェクト: agati/chimera
class TestManager (object):

    def setup (self):
        self.manager = Manager()

    def teardown (self):
        self.manager.shutdown()
        del self.manager

    def test_add_start (self):

        # add by class
        assert self.manager.addClass(Simple, "simple", start=True)

        # already started
        assert_raises(InvalidLocationException, self.manager.addClass, Simple, "simple")
       
        assert_raises(NotValidChimeraObjectException, self.manager.addClass, NotValid, "nonono")
        assert_raises(InvalidLocationException, self.manager.addClass, Simple, "")

        # by location
        assert self.manager.addLocation('/ManagerHelper/h', path=[os.path.dirname(__file__)])
        assert_raises(ClassLoaderException, self.manager.addLocation, '/What/h')
        assert_raises(InvalidLocationException, self.manager.addLocation, 'foo')

        # start with error
        #assert self.manager.addLocation('/ManagerHelperWithError/h', start=False)
        #assert_raises(ChimeraObjectException, self.manager.start, '/ManagerHelperWithError/h')

        # start who?
        assert_raises(InvalidLocationException, self.manager.start, "/Who/am/I")

        # exceptional cases
        # __init__
        assert_raises(ChimeraObjectException, self.manager.addLocation,
                                             "/ManagerHelperWithInitException/h",
                                             [os.path.dirname(__file__)])

        # __start__
        assert_raises(ChimeraObjectException, self.manager.addLocation,
                                             "/ManagerHelperWithStartException/h",
                                             [os.path.dirname(__file__)])

        # __main__
        #assert_raises(ChimeraObjectException, self.manager.addLocation, "/ManagerHelperWithMainException/h")
        

    def test_remove_stop (self):

        assert self.manager.addClass(Simple, "simple")

        # who?
        assert_raises(InvalidLocationException, self.manager.remove, 'Simple/what')
        assert_raises(InvalidLocationException, self.manager.remove, 'foo')

        # stop who?
        assert_raises(InvalidLocationException, self.manager.stop, 'foo')

        # ok
        assert self.manager.remove('/Simple/simple') == True

        # __stop__ error
        assert self.manager.addLocation("/ManagerHelperWithStopException/h", path=[os.path.dirname(__file__)])
        assert_raises(ChimeraObjectException, self.manager.stop, '/ManagerHelperWithStopException/h')

        # another path to stop
        assert_raises(ChimeraObjectException, self.manager.remove, '/ManagerHelperWithStopException/h')

        # by index
        assert self.manager.addClass(Simple, "simple")
        assert self.manager.remove('/Simple/0') == True

    def test_proxy (self):

        assert self.manager.addClass(Simple, "simple")

        # who?
        assert_raises(InvalidLocationException, self.manager.getProxy, 'wrong')
        assert_raises(InvalidLocationException, self.manager.getProxy, 'Simple/simple')

        # ok
        assert self.manager.getProxy ('/Simple/simple')
        assert self.manager.getProxy ('/Simple/0')

        # calling
        p = self.manager.getProxy ('/Simple/0')
        assert isinstance(p, Proxy)

        assert p.answer() == 42

        # oops
        assert_raises (AttributeError, p.wrong)

    def test_manager (self):

        assert self.manager.addClass(Simple, "simple")
        
        p = self.manager.getProxy(Simple)
        assert p

        m = p.getManager()
        assert m.GUID() == self.manager.GUID()
コード例 #21
0
ファイル: test_locks.py プロジェクト: agati/chimera
    def test_autolock(self):
        class Minimo(ChimeraObject):
            def __init__(self):
                ChimeraObject.__init__(self)

                self.t0 = time.time()

            def doUnlocked(self):
                time.sleep(1)
                t = time.time() - self.t0
                print "[unlocked] - %s - %.3f" % (threading.currentThread().getName(), t)
                return t

            @lock
            def doLocked(self):
                time.sleep(1)
                t = time.time() - self.t0
                print "[ locked ] - %s - %.3f" % (threading.currentThread().getName(), t)
                return t

        #            def doLockedWith (self):
        #                with self:
        #                    time.sleep(1)
        #                    t = time.time()-self.t0
        #                    print "[ locked ] - %s - %.3f" % (threading.currentThread().getName(), t)
        #                    return t

        def doTest(obj):

            """Rationale: We use 5 threads for each method (locked and
            unlocked). As unlocked methods isn't serialized, they runs
            'at the same instant', while locked methods will be
            serialized and will run only when the previous one
            finishes.  Each method simulate a load (sleep of 1s) and
            then returns the time of completion (with an arbitrary
            zero point to give small numbers). The deviation from the
            mean of unlocked methods termination times should be
            nearly zero, as every methods runs at the same time. For
            locked ones, the termination time will be a linear
            function with the slope equals to the load (sleep in this
            case), and as we use 10 threads for the locked case, the
            deviation will be ~ 2.872. We use a simple equals_eps to
            handle load factors that may influence scheduler
            performance and timmings.
            """
            unlocked = []
            locked = []

            def getObj(o):
                """
                Copy Proxy to share between threads.
                """
                if isinstance(o, Proxy):
                    return copy.copy(o)
                return o

            def runUnlocked():
                unlocked.append(getObj(obj).doUnlocked())

            def runLocked():
                locked.append(getObj(obj).doLocked())

            #            def runLockedWith():
            #                locked.append(getObj(obj).doLockedWith())

            threads = []

            print

            for i in range(10):
                t1 = threading.Thread(target=runUnlocked, name="unlocked-%d" % i)
                t2 = threading.Thread(target=runLocked, name="  lock-%d" % i)
                # t3 = threading.Thread(target=runLockedWith, name="  with-%d" % i)

                t1.start()
                t2.start()
                # t3.start()

                threads += [t1, t2]

            for t in threads:
                t.join()

            unlocked_mean = sum(unlocked) / len(unlocked)
            locked_mean = sum(locked) / len(locked)

            unlocked_sigma = sqrt(sum([(unlocked_mean - u) ** 2 for u in unlocked]) / len(unlocked))
            locked_sigma = sqrt(sum([(locked_mean - l) ** 2 for l in locked]) / len(locked))

            def equals_eps(a, b, eps=1e-3):
                return abs(a - b) <= eps

            print "unlocked: mean: %.6f sigma: %.6f" % (unlocked_mean, unlocked_sigma)
            print "locked  : mean: %.6f sigma: %.6f" % (locked_mean, locked_sigma)

            assert equals_eps(unlocked_sigma, 0.0, 0.5)
            assert equals_eps(locked_sigma, 2.875, 1.0)

        # direct metaobject
        m = Minimo()
        doTest(m)

        # proxy
        manager = Manager()
        manager.addClass(Minimo, "m", start=True)

        p = manager.getProxy(Minimo)
        doTest(p)

        manager.shutdown()
コード例 #22
0
class TestTelescope (object):

    def setup (self):

        self.manager = Manager(port=8000)

        #self.manager.addClass(Site, "lna", {"name": "LNA",
        #                                    "latitude": "-22 32 03",
        #                                    "longitude": "-45 34 57",
        #                                    "altitude": "1896",
        #                                    "utc_offset": "-3"})

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20",
                                            "utc_offset": "-3"})

        #self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS6"})
        #self.manager.addClass(Telescope, "meade", {"driver": "/Meade/meade"})

        self.manager.addClass(FakeTelescope, "fake")
        self.manager.addClass(Telescope, "fake", {"driver": "/FakeTelescope/fake"})

        #self.manager.addClass(Telescope, "meade",
        #                      {"driver": "200.131.64.134:7666/TheSkyTelescope/0"})

        self.tel = self.manager.getProxy(Telescope)

    def teardown (self):
        self.manager.shutdown()

    def test_slew (self):

        ra  = self.tel.getRa()
        dec = self.tel.getDec()

        dest_ra  = (ra+"1 00 00")
        dest_dec = (dec+"15 00 00")

        @callback(self.manager)
        def slewBeginClbk(target):
            assert target.ra == dest_ra
            assert target.dec == dest_dec

        @callback(self.manager)
        def slewCompleteClbk(position):
            assertEpsEqual(position.ra, dest_ra, 60)
            assertEpsEqual(position.dec, dest_dec, 60)

        self.tel.slewBegin += slewBeginClbk
        self.tel.slewComplete += slewCompleteClbk

        self.tel.slewToRaDec((dest_ra, dest_dec))

    def test_slew_abort (self):

        last_ra  = self.tel.getRa()
        last_dec = self.tel.getDec()

        dest_ra  = last_ra  + "01 00 00"
        dest_dec = last_dec + "10 00 00"

        @callback(self.manager)
        def abortCompleteClbk(position):
            assert last_ra  < position.ra  < dest_ra
            assert last_dec < position.dec < dest_dec

        self.tel.abortComplete += abortCompleteClbk

        # async slew
        def slew():
            self.tel = self.manager.getProxy(Telescope)
            self.tel.slewToRaDec((dest_ra, dest_dec))

        pool = ThreadPool()
        pool.queueTask(slew)

        # wait thread to be scheduled
        time.sleep(2)

        # abort and test (on abortCompleteClbk).
        self.tel.abortSlew()

        pool.joinAll()

    def test_sync (self):

        # get current position, drift the scope, and sync on the first
        # position (like done when aligning the telescope).

        real_ra  = self.tel.getRa()
        real_dec = self.tel.getDec()

        @callback(self.manager)
        def syncCompleteClbk(position):
            assert position.ra == real_ra
            assert position.dec == real_dec

        self.tel.syncComplete += syncCompleteClbk

        # drift to "real" object coordinate
        self.tel.slewToRaDec((real_ra+"01 00 00", real_dec+"01 00 00"))

        self.tel.syncRaDec((real_ra, real_dec))

    def test_park (self):
        
        # FIXME: make a real test.
        return

        def printPosition():
            print self.tel.getPositionRaDec(), self.tel.getPositionAltAz()
            sys.stdout.flush()
            
        print

        ra  = self.tel.getRa()
        dec = self.tel.getDec()

        print "current position:", self.tel.getPositionRaDec()
        print "moving to:", (ra-"01 00 00"), (dec-"01 00 00")

        self.tel.slewToRaDec((ra-"01 00 00", dec-"01 00 00"))

        for i in range(10):
            printPosition()
            time.sleep(0.5)

        print "parking..."
        sys.stdout.flush()
        self.tel.park()

        t0 = time.time()
        wait = 30

        for i in range(10):
            printPosition()
            time.sleep(0.5)
       
        while time.time() < t0+wait:
            print "\rwaiting ... ",
            sys.stdout.flush()
            time.sleep(1)

        print "unparking..."
        sys.stdout.flush()

        self.tel.unpark()

        for i in range(10):
            printPosition()
            time.sleep(0.5)
コード例 #23
0
class TestAutofocus(object):
    def setup(self):

        self.manager = Manager(port=8000)

        # fake
        self.manager.addClass(FakeCamera, "fake")
        self.manager.addClass(Camera, "cam", {"driver": "/FakeCamera/fake"})

        self.manager.addClass(FakeFocuser, "fake")
        self.manager.addClass(Focuser, "focus", {"driver": "/FakeFocuser/0"})

        # real
        #self.manager.addClass(SBIG, "sbig", {"device": "USB"})
        #self.manager.addClass(Camera, "cam", {"driver": "/SBIG/0"})

        #self.manager.addClass(OptecTCFS, "optec", {"device": "/dev/ttyS0"})
        #self.manager.addClass(Focuser, "focus", {"driver": "/OptecTCFS/0"})

        #self.manager.addClass(Autofocus, "autofocus", {"camera" : "200.131.64.203:7666/Camera/0",
        #                                               "focuser": "******"})

        self.manager.addClass(Autofocus, "autofocus", {
            "camera": "/Camera/0",
            "focuser": "******"
        })

        @callback(self.manager)
        def exposeBeginClbk(exp_time):
            print time.time(), "Expose begin for %.3f s." % exp_time

        @callback(self.manager)
        def exposeCompleteClbk():
            print time.time(), "Expose complete."

        @callback(self.manager)
        def readoutBeginClbk(frame):
            print time.time(), "Readout begin for %s." % frame

        @callback(self.manager)
        def readoutCompleteClbk(frame):
            print time.time(), "Readout complete for %s." % frame

        @callback(self.manager)
        def abortCompleteClbk():
            print time.time(), "Abort complete."

        cam = self.manager.getProxy(Camera)
        cam.exposeBegin += exposeBeginClbk
        cam.exposeComplete += exposeCompleteClbk
        cam.readoutBegin += readoutBeginClbk
        cam.readoutComplete += readoutCompleteClbk
        cam.abortComplete += abortCompleteClbk

    def teardown(self):
        self.manager.shutdown()
        del self.manager

    def test_focus(self):

        autofocus = self.manager.getProxy(Autofocus)
        best_focus = autofocus.focus(debug="/home/henrique/ph/basic-run")
コード例 #24
0
class TestMeade (object):

    def setup (self):

        self.manager = Manager(port=8000)

        self.manager.addClass(Site, "lna", {"name": "LNA",
                                            "latitude": "-22 32 03",
                                            "longitude": "-45 34 57",
                                            "altitude": "1896",
                                            "utc_offset": "-3"})

        self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS0"})

        @callback(self.manager)
        def slewBeginClbk(target):
            print time.time(), "Slew begin. target=%s" % str(target)

        @callback(self.manager)
        def slewCompleteClbk(position):
            print time.time(), "Slew complete. position=%s" % str(position)

        @callback(self.manager)
        def parkCompleteClbk(position):
            print time.time(), "Park complete. position=%s" % str(position)

        @callback(self.manager)
        def unparkCompleteClbk(position):
            print time.time(), "Unpark complete. position=%s" % str(position)

        self.m = self.manager.getProxy(Meade)
        self.m.slewBegin    += slewBeginClbk
        self.m.slewComplete += slewCompleteClbk
        self.m.parkComplete += parkCompleteClbk
        self.m.unparkComplete += unparkCompleteClbk


    def test_print_info (self):

        m = self.m

        print "align mode:", m.getAlignMode()
        print "ra :", m.getRa()
        print "dec:", m.getDec()
        print "az :", m.getAz()
        print "alt:", m.getAlt()
        
        print "lat :", m.getLat()
        print "long:", m.getLong()
        
        print "date:" , m.getDate()
        print "time:" , m.getLocalTime()
        print "to utc:", m.getUTCOffset()
        print "lst:", m.getLocalSiderealTime()

        print "tracking rate:", m.getCurrentTrackingRate ()

    def test_set_info (self):

        m = self.m

        try:
            m.setLat("-22 32 03")
            m.setLong("-45 34 57")
            m.setDate(time.time())
            m.setLocalTime(time.time())
            m.setUTCOffset(3)

            m.setLat(Coord.fromDMS("-22 32 03"))
            m.setLong(Coord.fromDMS("-45 34 57"))
            m.setDate(dt.date.today())
            m.setLocalTime(dt.datetime.now().time())
            m.setUTCOffset(3)
        except Exception:
            log.exception("error")

    def printCoord (self, header=False):

        m = self.m

        if header:
            print "%20s %20s %20s %20s %20s" % ("LST", "RA", "DEC", "AZ", "ALT")

        print "%20s %20s %20s %20s %20s" % (m.getLocalSiderealTime(),
                                            m.getRa(), m.getDec(), m.getAz(), m.getAlt())

    def test_sync (self):
        # FIXME
        m = self.m
        print "syncing..."
        m.sync ("10 00 00", "00 00 00")

    def test_slew_rate (self):
        m = self.m
        print
        print "current slew rate:", m.getSlewRate()
        
        for rate in SlewRate:
            m.setSlewRate(rate)
            print "current slew rate:", m.getSlewRate()

    def test_movement (self):
        m = self.m

        print

        for rate in SlewRate:
                
            print "moving to East at %s rate:" % rate,
            
            t = time.time ()
            m.moveEast (5, rate)
            print time.time () - t
                
            print "moving to West at %s rate:" % rate,

            t = time.time ()
            m.moveWest (5, rate)
            print time.time () - t

            print "moving to North at %s rate:" % rate,
                        
            t = time.time ()
            m.moveNorth (5, rate)
            print time.time () - t

            print "moving to South at %s rate:" % rate,
            
            t = time.time ()
            m.moveSouth (5, rate)
            print time.time () - t

            print
            print

    def test_align_mode (self):

        m = self.m

        for mode in AlignMode:
            print "current align mode:", m.getAlignMode()
            print "switching to:", mode

            m.setAlignMode (mode)

            print "current align mode:", m.getAlignMode()
            print

    def test_tracking (self):

        m = self.m

        print

        m.setAlignMode (AlignMode.POLAR)
        print "current align mode:", m.getAlignMode()

        print "setting new date and time..."
        self.test_set_info()

        print
        self.printCoord(header=True)
        for i in range(10):
            self.printCoord ()
            time.sleep (1)

        print "stopping tracking..."
        sys.stdout.flush()
            
        m.stopTracking()

        start = time.time ()
        finish = start + 30

        print "waiting",
        sys.stdout.flush ()

        while time.time() < finish:
            time.sleep (1)
            
        print "re-starting tracking..."
        sys.stdout.flush()

        m.startTracking()

        print "using old date and time..."
        print
        self.printCoord(header=True)
        for i in range(10):
            self.printCoord ()
            time.sleep (1)

        print
        print "setting new date and time..."
        self.test_set_info()
        
        print
        for i in range(10):
            self.printCoord ()
            time.sleep (1)

    def test_park (self):

        m = self.m

        print
        print "="*50
        print "Park and unpark test"
        print "="*50
        
        print "Initial conditions (post power-on):"
        self.test_print_info()
        print

        print "Starting the scope..."
        self.test_set_info()
        print

        print "Scope location, date, time updated, new conditions:"
        self.test_print_info()
        print


        print "Pooling telescope position:"

        ra = m.getRa()

        self.printCoord(header=True)
        for i in range(10):
            self.printCoord ()
            time.sleep (1)

        print

        print "Slewing... to %s -70:00:00" % ra
        m.slewToRaDec (Position.fromRaDec(ra, "-70:00:00"))
        print
            
        print "Parking the scope at %s (lst: %s)" % (time.strftime("%c"), m.getLocalSiderealTime())

        m.park ()

        print

        print "Pooling telescope position:"

        self.printCoord(header=True)
        for i in range(10):
            self.printCoord ()
            time.sleep (1)

        print

        start = time.time ()
        finish = start + (2*60) # wait 30 minutes

        print "Waiting              ",
        
        while time.time() < finish:
            update_scroll_spinner()
            time.sleep (0.2)
            
        print

        print "Unparking the scope at %s (lst: %s)" % (time.strftime("%c"),
                                                       m.getLocalSiderealTime())

        m.unpark ()
        print

        print "Pooling telescope position:"

        for i in range(10):
            self.printCoord ()
            time.sleep (1)
            
        print "="*50

    def test_slew_to_az_alt (self):

        # FIXME

        m = self.m

        self.printCoord()

        m.slewToAltAz(("40:00:00", "180:00:00"))

        self.printCoord()

    def test_slew_to_ra_dec (self):

        m = self.m

        print
        self.printCoord (header=True)

        ra = m.getRa()

        m.slewToRaDec (Position.fromRaDec(ra, "-70:00:00"))
        #m.slewToRaDec (Position.fromRaDec("13h25m38.903s", "-11:12:24.928"))

        self.printCoord()

    def test_move_calibration (self):
        
        print "Calibrating movement..."
        self.m.calibrateMove()

        for rate in SlewRate:
            start = self.m.getPositionRaDec()
            print rate, start, "moving 30\" E..."
            self.m.moveEast(30, rate)
            end = self.m.getPositionRaDec()
            print rate, end, "real =", end.angsep(start).arcsec()
            

            start = self.m.getPositionRaDec()
            print rate, start, "moving 30\" W..."
            self.m.moveWest(30, rate)
            end = self.m.getPositionRaDec()
            print rate, end, "real =", end.angsep(start).arcsec()
            

            start = self.m.getPositionRaDec()
            print rate, start, "moving 30\" N..."
            self.m.moveNorth(30, rate)
            end = self.m.getPositionRaDec()
            print rate, end, "real =", end.angsep(start).arcsec()
            

            start = self.m.getPositionRaDec()
            print rate, start, "moving 30\" S..."
            self.m.moveSouth(30, rate)
            end = self.m.getPositionRaDec()
            print rate, end, "real =", end.angsep(start).arcsec()

            print
コード例 #25
0
class TestSite(object):
    def setup(self):

        self.manager = Manager(port=8000)

        #self.manager.addClass(Site, "lna", {"name": "LNA",
        #                                    "latitude": "-22 32 03",
        #                                    "longitude": "-45 34 57",
        #                                    "altitude": "1896"}

        self.manager.addClass(
            Site, "lna", {
                "name": "UFSC",
                "latitude": "-27 36 13 ",
                "longitude": "-48 31 20",
                "altitude": "20"
            })

    def teardown(self):
        self.manager.shutdown()

    def test_times(self):

        site = self.manager.getProxy(Site)

        try:
            print()
            print("local:", site.localtime())
            print("UT   :", site.ut())
            print("JD   :", site.JD())
            print("MJD  :", site.MJD())
            print("LST  :", site.LST())
            print("GST  :", site.GST())
        except Exception as e:
            printException(e)

    def test_sidereal_clock(self):

        return True

        site = self.manager.getProxy(Site)

        times = []
        real_times = []

        for i in range(100):
            t0 = time.clock()
            t0_r = time.time()
            print("\r%s" % site.LST(), end=' ')
            times.append(time.clock() - t0)
            real_times.append(time.time() - t0_r)

        print()
        print(sum(times) / len(times))
        print(sum(real_times) / len(real_times))

    def test_astros(self):

        site = self.manager.getProxy(Site)

        try:
            print()
            print("local   :", site.localtime())
            print()
            print("moonrise  :", site.moonrise())
            print("moonset   :", site.moonset())
            print("moon pos  :", site.moonpos())
            print("moon phase:", site.moonphase())
            print()
            print("sunrise:", site.sunrise())
            print("sunset :", site.sunset())
            print("sun pos:", site.sunpos())
            print()

            sunset_twilight_begin = site.sunset_twilight_begin()
            sunset_twilight_end = site.sunset_twilight_end()
            sunset_twilight_duration = relativedelta(sunset_twilight_end,
                                                     sunset_twilight_begin)

            sunrise_twilight_begin = site.sunrise_twilight_begin()
            sunrise_twilight_end = site.sunrise_twilight_end()
            sunrise_twilight_duration = relativedelta(sunrise_twilight_end,
                                                      sunrise_twilight_begin)

            print("next sunset twilight begins at:", sunset_twilight_begin)
            print("next sunset twilight ends   at:", sunset_twilight_end)
            print("sunset twilight duration      :", sunset_twilight_duration)
            print()
            print("next sunrise twilight begins at:", sunrise_twilight_begin)
            print("next sunrise twilight ends   at:", sunrise_twilight_end)
            print("sunrise twilight duration      :",
                  sunrise_twilight_duration)

        except Exception as e:
            printException(e)
コード例 #26
0
from chimera.core.manager import Manager

manager = Manager()

example = manager.getProxy("localhost:8000/Example1/example")
example.doSomething("client argument")
コード例 #27
0
class TestDome(object):
    def setup(self):

        self.manager = Manager()

        self.manager.addClass(
            Site, "lna", {
                "name": "LNA",
                "latitude": "-22 32 03",
                "longitude": "-45 34 57",
                "altitude": "1896",
                "utc_offset": "-3"
            })

        #self.manager.addClass(Meade, "meade", {"device": "/dev/ttyUSB0"})
        #self.manager.addClass(Telescope, "tel", {"driver": "/Meade/meade"})

        #self.manager.addClass(DomeLNA40cm, "lna40", {"device": "/dev/ttyS0"})
        #self.manager.addClass(Dome, "dome", {"driver": "/DomeLNA40cm/0",
        #                                     "telescope": "/Telescope/0"})

        self.manager.addClass(FakeTelescope, "fake")
        self.manager.addClass(Telescope, "tel", {"driver": "/FakeTelescope/0"})

        self.manager.addClass(FakeDome, "fake")
        self.manager.addClass(Dome, "dome", {
            "driver": "/FakeDome/0",
            "telescope": "/Telescope/0"
        })

        @callback(self.manager)
        def slewBeginClbk(target):
            print
            print time.time(), "[dome] Slew begin. target=%s" % str(target)
            print

        @callback(self.manager)
        def slewCompleteClbk(position):
            print
            print time.time(
            ), "[dome] Slew complete. position=%s" % str(position)
            print

        @callback(self.manager)
        def abortCompleteClbk(position):
            print
            print time.time(
            ), "[dome] Abort slew at position=%s" % str(position)
            print

        @callback(self.manager)
        def slitOpenedClbk(position):
            print
            print time.time(
            ), "[dome] Slit opened with dome at at position=%s" % str(position)
            print

        @callback(self.manager)
        def slitClosedClbk(position):
            print
            print time.time(
            ), "[dome] Slit closed with dome at at position=%s" % str(position)
            print

        dome = self.manager.getProxy(Dome)
        dome.slewBegin += slewBeginClbk
        dome.slewComplete += slewCompleteClbk
        dome.abortComplete += abortCompleteClbk
        dome.slitOpened += slitOpenedClbk
        dome.slitClosed += slitClosedClbk

    def test_stress_dome_track(self):
        dome = self.manager.getProxy(Dome)
        tel = self.manager.getProxy(Telescope)

        dome.track()

        for i in range(25):
            ra = "%d %d 00" % (random.randint(0, 23), random.randint(0, 59))
            dec = "%d %d 00" % (random.randint(-90, 0), random.randint(0, 59))
            tel.slewToRaDec((ra, dec))
            time.sleep(random.randint(0, 10))

        dome.sync()

    def test_stress_dome_slew(self):

        dome = self.manager.getProxy(Dome)

        for i in range(25):
            az = random.randint(0, 359)
            dome.slewToAz(az)
            assert dome.getAz() == az

    def test_get_az(self):
        dome = self.manager.getProxy(Dome)
        assert dome.getAz() >= 0

    def test_slew_to_az(self):

        dome = self.manager.getProxy(Dome)

        start = dome.getAz()
        delta = 20

        dome.slewToAz(start + delta)

        assert dome.getAz() == (start + delta)

    def test_slit(self):

        dome = self.manager.getProxy(Dome)

        dome.openSlit()
        assert dome.isSlitOpen() == True

        dome.closeSlit()
        assert dome.isSlitOpen() == False
コード例 #28
0
ファイル: test_locks.py プロジェクト: orsa-unige/chimera
    def test_autolock(self):
        class Minimo(ChimeraObject):
            def __init__(self):
                ChimeraObject.__init__(self)

                self.t0 = time.time()

            def doUnlocked(self):
                time.sleep(1)
                t = time.time() - self.t0
                print("[unlocked] - %s - %.3f" %
                      (threading.currentThread().getName(), t))
                return t

            @lock
            def doLocked(self):
                time.sleep(1)
                t = time.time() - self.t0
                print("[ locked ] - %s - %.3f" %
                      (threading.currentThread().getName(), t))
                return t

#            def doLockedWith (self):
#                with self:
#                    time.sleep(1)
#                    t = time.time()-self.t0
#                    print "[ locked ] - %s - %.3f" % (threading.currentThread().getName(), t)
#                    return t

        def doTest(obj):
            """Rationale: We use 5 threads for each method (locked and
            unlocked). As unlocked methods isn't serialized, they runs
            'at the same instant', while locked methods will be
            serialized and will run only when the previous one
            finishes.  Each method simulate a load (sleep of 1s) and
            then returns the time of completion (with an arbitrary
            zero point to give small numbers). The deviation from the
            mean of unlocked methods termination times should be
            nearly zero, as every methods runs at the same time. For
            locked ones, the termination time will be a linear
            function with the slope equals to the load (sleep in this
            case), and as we use 10 threads for the locked case, the
            deviation will be ~ 2.872. We use a simple equals_eps to
            handle load factors that may influence scheduler
            performance and timmings.
            """
            unlocked = []
            locked = []

            def getObj(o):
                """
                Copy Proxy to share between threads.
                """
                if isinstance(o, Proxy):
                    return copy.copy(o)
                return o

            def runUnlocked():
                unlocked.append(getObj(obj).doUnlocked())

            def runLocked():
                locked.append(getObj(obj).doLocked())

#            def runLockedWith():
#                locked.append(getObj(obj).doLockedWith())

            threads = []

            print()

            for i in range(10):
                t1 = threading.Thread(target=runUnlocked,
                                      name="unlocked-%d" % i)
                t2 = threading.Thread(target=runLocked, name="  lock-%d" % i)
                #t3 = threading.Thread(target=runLockedWith, name="  with-%d" % i)

                t1.start()
                t2.start()
                #t3.start()

                threads += [t1, t2]

            for t in threads:
                t.join()

            unlocked_mean = sum(unlocked) / len(unlocked)
            locked_mean = sum(locked) / len(locked)

            unlocked_sigma = sqrt(
                sum([(unlocked_mean - u)**2
                     for u in unlocked]) / len(unlocked))
            locked_sigma = sqrt(
                sum([(locked_mean - l)**2 for l in locked]) / len(locked))

            def equals_eps(a, b, eps=1e-3):
                return abs(a - b) <= eps

            print("unlocked: mean: %.6f sigma: %.6f" %
                  (unlocked_mean, unlocked_sigma))
            print("locked  : mean: %.6f sigma: %.6f" %
                  (locked_mean, locked_sigma))

            assert equals_eps(unlocked_sigma, 0.0, 0.5)
            assert equals_eps(locked_sigma, 2.875, 1.0)

        # direct metaobject
        m = Minimo()
        doTest(m)

        # proxy
        manager = Manager()
        manager.addClass(Minimo, "m", start=True)

        p = manager.getProxy(Minimo)
        doTest(p)

        manager.shutdown()
コード例 #29
0
ファイル: test_manager.py プロジェクト: rayshifu/chimera
class TestManager(object):
    def setup(self):
        self.manager = Manager()

    def teardown(self):
        self.manager.shutdown()
        del self.manager

    def test_add_start(self):

        # add by class
        assert self.manager.addClass(Simple, "simple", start=True)

        # already started
        assert_raises(InvalidLocationException, self.manager.addClass, Simple,
                      "simple")

        assert_raises(NotValidChimeraObjectException, self.manager.addClass,
                      NotValid, "nonono")
        assert_raises(InvalidLocationException, self.manager.addClass, Simple,
                      "")

        # by location
        assert self.manager.addLocation('/ManagerHelper/h',
                                        path=[os.path.dirname(__file__)])
        assert_raises(ClassLoaderException, self.manager.addLocation,
                      '/What/h')
        assert_raises(InvalidLocationException, self.manager.addLocation,
                      'foo')

        # start with error
        #assert self.manager.addLocation('/ManagerHelperWithError/h', start=False)
        #assert_raises(ChimeraObjectException, self.manager.start, '/ManagerHelperWithError/h')

        # start who?
        assert_raises(InvalidLocationException, self.manager.start,
                      "/Who/am/I")

        # exceptional cases
        # __init__
        assert_raises(ChimeraObjectException, self.manager.addLocation,
                      "/ManagerHelperWithInitException/h",
                      [os.path.dirname(__file__)])

        # __start__
        assert_raises(ChimeraObjectException, self.manager.addLocation,
                      "/ManagerHelperWithStartException/h",
                      [os.path.dirname(__file__)])

        # __main__
        #assert_raises(ChimeraObjectException, self.manager.addLocation, "/ManagerHelperWithMainException/h")

    def test_remove_stop(self):

        assert self.manager.addClass(Simple, "simple")

        # who?
        assert_raises(InvalidLocationException, self.manager.remove,
                      'Simple/what')
        assert_raises(InvalidLocationException, self.manager.remove, 'foo')

        # stop who?
        assert_raises(InvalidLocationException, self.manager.stop, 'foo')

        # ok
        assert self.manager.remove('/Simple/simple') == True

        # __stop__ error
        assert self.manager.addLocation("/ManagerHelperWithStopException/h",
                                        path=[os.path.dirname(__file__)])
        assert_raises(ChimeraObjectException, self.manager.stop,
                      '/ManagerHelperWithStopException/h')

        # another path to stop
        assert_raises(ChimeraObjectException, self.manager.remove,
                      '/ManagerHelperWithStopException/h')

        # by index
        assert self.manager.addClass(Simple, "simple")
        assert self.manager.remove('/Simple/0') == True

    def test_proxy(self):

        assert self.manager.addClass(Simple, "simple")

        # who?
        assert_raises(InvalidLocationException, self.manager.getProxy, 'wrong')
        assert_raises(InvalidLocationException, self.manager.getProxy,
                      'Simple/simple')

        # ok
        assert self.manager.getProxy('/Simple/simple')
        assert self.manager.getProxy('/Simple/0')

        # calling
        p = self.manager.getProxy('/Simple/0')
        assert isinstance(p, Proxy)

        assert p.answer() == 42

        # oops
        assert_raises(AttributeError, p.wrong)

    def test_manager(self):

        assert self.manager.addClass(Simple, "simple")

        p = self.manager.getProxy(Simple)
        assert p

        m = p.getManager()
        assert m.GUID() == self.manager.GUID()
コード例 #30
0
class TestEvents(object):
    def setup(self):
        self.manager = Manager()

    def teardown(self):
        self.manager.shutdown()
        del self.manager

    def test_publish(self):

        assert self.manager.addClass(Publisher, "p") != False
        assert self.manager.addClass(Subscriber, "s") != False

        p = self.manager.getProxy("/Publisher/p")
        assert isinstance(p, Proxy)

        s = self.manager.getProxy("/Subscriber/s")
        assert isinstance(s, Proxy)

        p.fooDone += s.fooDoneClbk

        assert p.foo() == 42
        time.sleep(0.5)  # delay to get messages delivered
        assert s.getCounter() == 1
        assert p.getCounter() == 1

        assert p.foo() == 42
        time.sleep(0.5)  # delay to get messages delivered
        assert s.getCounter() == 2
        assert p.getCounter() == 2

        # unsubscribe
        p.fooDone -= s.fooDoneClbk
        p.fooDone -= p.fooDoneClbk

        assert p.foo() == 42
        time.sleep(0.5)  # delay to get messages delivered
        assert s.getCounter() == 2
        assert p.getCounter() == 2

    def test_performance(self):

        assert self.manager.addClass(Publisher, "p") != False
        assert self.manager.addClass(Subscriber, "s") != False

        p = self.manager.getProxy("/Publisher/p")
        assert isinstance(p, Proxy)

        s = self.manager.getProxy("/Subscriber/s")
        assert isinstance(s, Proxy)

        p.fooDone += s.fooDoneClbk

        for check in range(1):

            start = time.time()
            for i in range(100):
                p.foo()
            end = time.time()

            time.sleep(5)

            results = s.getResults()

            dt = [(t - t0) * 1000 for t0, t in results]
            mean = sum(dt) / len(dt)

            sigma = math.sqrt(sum([(t - mean)**2 for t in dt]) / len(dt))

            print("#" * 25)
            print("# %d events (%.3f s)" % (len(dt), (end - start)))
            print("# %.2f events/s" % (len(dt) / (end - start)))
            print("# min   : %-6.3f ms" % min(dt))
            print("# max   : %-6.3f ms" % max(dt))
            print("# mean  : %-6.3f ms" % mean)
            print("# sigma : %-6.3f ms" % sigma)
            print("#" * 25)
コード例 #31
0
ファイル: client.py プロジェクト: agati/chimera
import logging
logging.getLogger("chimera").setLevel(logging.WARNING)

from chimera.core.manager       import Manager
from chimera.core.callback      import callback
from chimera.core.exceptions    import printException

from minimo import Minimo, MinimoException

manager = Manager()

m = manager.getProxy(Minimo, "m", host='localhost', port=8000)

# method
print m.doMethod("bar")

# event

@callback(manager)
def doEventClbk (result):
    print result

m.eventDone += doEventClbk
m.doEvent()

# exception
try:
    m.doRaise()
except MinimoException, e:
    printException(e)
コード例 #32
0
ファイル: proxy.py プロジェクト: agati/chimera
#
# 1. Adding objects and getting a proxy
# 

# just add a min Minimoescope class (returns a valid proxy)
minimo = manager.addClass(Minimo, "min", start=True)

# synchronous "doFoo"
minimo.doFoo ("ra dec")

#
# 2. There are other ways to get proxy
#

# from manager (this ensure that the object exists on the manager, see ChimeraProxy below)
minimo = manager.getProxy ("/Minimo/min")
minimo.doFoo ("ra dec")

# if you don't know the name of the instance no problem, pass an index starting with 0
minimo = manager.getProxy ("/Minimo/0")
minimo.doFoo ("ra dec")

minimo = manager.getProxy (Minimo, "min")
minimo.doFoo ("ra dec")

# if you don't know the name of the instance no problem, pass an index starting with 0
minimo = manager.getProxy (Minimo)
minimo.doFoo ("ra dec")

minimo = manager.getProxy (Minimo, host="localhost", port=9090)
minimo.doFoo ("ra dec")