def test_last ( self ):
   
    # Make an annotation 
    annid = makeAnno ( 2, SITE_HOST )

    # set the type
    synapse_type = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/synapse_type/%s/" % ( SITE_HOST, 'unittest',str(annid), synapse_type )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the synapse_type
    url =  "http://%s/ca/%s/%s/getField/synapse_type/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert synapse_type == int(f.read()) 

    # set the weight
    weight = random.random ()
    url =  "http://%s/ca/%s/%s/setField/weight/%s/" % ( SITE_HOST, 'unittest',str(annid), weight )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the weight
    url =  "http://%s/ca/%s/%s/getField/weight/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert weight - float(f.read()) < 0.001

    # check inheritance
    # set the status
    status = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/status/%s/" % ( SITE_HOST, 'unittest',str(annid), status )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the status
    url =  "http://%s/ca/%s/%s/getField/status/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert status == int(f.read()) 
  def test_query (self):
    """Test the function that lists objects of different types."""

    # synapse annotations
    anntype = 2
    status = random.randint(0,100)
    confidence = random.random()*0.3+0.1   # number between 0.1 and 0.4
    synapse_type = random.randint(0,100)
    synapse_weight = random.random()*0.9+0.1   # number between 0.1 and 0.9

    for i in range (10):

      # Make an annotation 
      annid = makeAnno ( anntype, SITE_HOST )

      # set some fields in the even annotations
      if i % 2 == 0:
        url =  "http://%s/ca/%s/%s/setField/status/%s/" % ( SITE_HOST, 'unittest',str(annid), status )
        req = urllib2.Request ( url )
        f = urllib2.urlopen ( url )
        assert f.read()==''

        # set the confidence
        url =  "http://%s/ca/%s/%s/setField/confidence/%s/" % ( SITE_HOST, 'unittest',str(annid), confidence )
        req = urllib2.Request ( url )
        f = urllib2.urlopen ( url )
        assert f.read()==''

        # set the type
        url =  "http://%s/ca/%s/%s/setField/synapse_type/%s/" % ( SITE_HOST, 'unittest',str(annid), synapse_type )
        req = urllib2.Request ( url )
        f = urllib2.urlopen ( url )
        assert f.read()==''

      # set some fields in the even annotations
      if i % 2 == 1:
        # set the confidence
        url =  "http://%s/ca/%s/%s/setField/confidence/%s/" % ( SITE_HOST, 'unittest',str(annid), 1.0-confidence )
        req = urllib2.Request ( url )
        f = urllib2.urlopen ( url )
        assert f.read()==''

            
    # check the status 
    url =  "http://%s/ca/%s/query/status/%s/" % ( SITE_HOST, 'unittest', status )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    retfile = tempfile.NamedTemporaryFile ( )
    retfile.write ( f.read() )
    retfile.seek(0)
    h5ret = h5py.File ( retfile.name, driver='core', backing_store=False )
    assert h5ret['ANNOIDS'].shape[0] ==5

    # check all the confidence variants 
    url =  "http://%s/ca/%s/query/confidence/%s/%s/" % ( SITE_HOST, 'unittest', 'lt', 1.0-confidence-0.0001 )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    retfile = tempfile.NamedTemporaryFile ( )
    retfile.write ( f.read() )
    retfile.seek(0)
    h5ret = h5py.File ( retfile.name, driver='core', backing_store=False )
    assert h5ret['ANNOIDS'].shape[0] ==5

    url =  "http://%s/ca/%s/query/confidence/%s/%s/" % ( SITE_HOST, 'unittest', 'gt', confidence+0.00001 )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    retfile = tempfile.NamedTemporaryFile ( )
    retfile.write ( f.read() )
    retfile.seek(0)
    h5ret = h5py.File ( retfile.name, driver='core', backing_store=False )
    assert h5ret['ANNOIDS'].shape[0] ==5
  def test_fields (self):
    """Test the getField and setField"""

    # Make an annotation 
    annid = makeAnno ( 1, SITE_HOST )

    # set the status
    status = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/status/%s/" % ( SITE_HOST, 'unittest',str(annid), status )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the status
    url =  "http://%s/ca/%s/%s/getField/status/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert status == int(f.read()) 

    # set the confidence
    confidence = random.random ()
    url =  "http://%s/ca/%s/%s/setField/confidence/%s/" % ( SITE_HOST, 'unittest',str(annid), confidence )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the confidence
    url =  "http://%s/ca/%s/%s/getField/confidence/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert confidence - float(f.read()) < 0.001
    
    # get the author
    url =  "http://%s/ca/%s/%s/getField/author/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert 'Unit Test' == f.read()

    # Make a synapse
    annid = makeAnno ( 2, SITE_HOST )

    # set the type
    synapse_type = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/synapse_type/%s/" % ( SITE_HOST, 'unittest',str(annid), synapse_type )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the synapse_type
    url =  "http://%s/ca/%s/%s/getField/synapse_type/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert synapse_type == int(f.read()) 

    # set the weight
    weight = random.random ()
    url =  "http://%s/ca/%s/%s/setField/weight/%s/" % ( SITE_HOST, 'unittest',str(annid), weight )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the weight
    url =  "http://%s/ca/%s/%s/getField/weight/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert weight - float(f.read()) < 0.001

    # check inheritance
    # set the status
    status = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/status/%s/" % ( SITE_HOST, 'unittest',str(annid), status )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the status
    url =  "http://%s/ca/%s/%s/getField/status/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert status == int(f.read()) 

    
    # Make a seed
    annid = makeAnno ( 3, SITE_HOST )

    # set the parent
    parent = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/parent/%s/" % ( SITE_HOST, 'unittest',str(annid), parent )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the parent
    url =  "http://%s/ca/%s/%s/getField/parent/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert parent == int(f.read()) 

    # set the source
    source = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/source/%s/" % ( SITE_HOST, 'unittest',str(annid), source )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the source
    url =  "http://%s/ca/%s/%s/getField/source/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert source == int(f.read()) 

    # set the cubelocation
    cubelocation = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/cubelocation/%s/" % ( SITE_HOST, 'unittest',str(annid), cubelocation )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the cubelocation
    url =  "http://%s/ca/%s/%s/getField/cubelocation/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert cubelocation == int(f.read()) 

    # Make a segment
    annid = makeAnno ( 4, SITE_HOST )

    # set the parentseed
    parentseed = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/parentseed/%s/" % ( SITE_HOST, 'unittest',str(annid), parentseed )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the parentseed
    url =  "http://%s/ca/%s/%s/getField/parentseed/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert parentseed == int(f.read()) 

    # set the segmentclass
    segmentclass = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/segmentclass/%s/" % ( SITE_HOST, 'unittest',str(annid), segmentclass )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the segmentclass
    url =  "http://%s/ca/%s/%s/getField/segmentclass/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert segmentclass == int(f.read()) 

    # set the neuron
    neuron = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/neuron/%s/" % ( SITE_HOST, 'unittest',str(annid), neuron )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the neuron
    url =  "http://%s/ca/%s/%s/getField/neuron/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert neuron == int(f.read()) 

    # check inheritance
    # set the status
    status = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/status/%s/" % ( SITE_HOST, 'unittest',str(annid), status )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the status
    url =  "http://%s/ca/%s/%s/getField/status/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert status == int(f.read()) 

    # Make a neuron
    annid = makeAnno ( 5, SITE_HOST )

    # no independently set fields

    # check inheritance
    # set the status
    status = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/status/%s/" % ( SITE_HOST, 'unittest',str(annid), status )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the status
    url =  "http://%s/ca/%s/%s/getField/status/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert status == int(f.read()) 

    # Make an organelle 
    annid = makeAnno ( 6, SITE_HOST )

    # set the parentseed
    parentseed = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/parentseed/%s/" % ( SITE_HOST, 'unittest',str(annid), parentseed )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the parentseed
    url =  "http://%s/ca/%s/%s/getField/parentseed/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert parentseed == int(f.read()) 

    # set the organelleclass
    organelleclass = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/organelleclass/%s/" % ( SITE_HOST, 'unittest',str(annid), organelleclass )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the organelleclass
    url =  "http://%s/ca/%s/%s/getField/organelleclass/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert organelleclass == int(f.read()) 

    # check inheritance
    # set the status
    status = random.randint (0,100)
    url =  "http://%s/ca/%s/%s/setField/status/%s/" % ( SITE_HOST, 'unittest',str(annid), status )
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert f.read()==''

    # get the status
    url =  "http://%s/ca/%s/%s/getField/status/" % ( SITE_HOST, 'unittest',str(annid))
    req = urllib2.Request ( url )
    f = urllib2.urlopen ( url )
    assert status == int(f.read()) 

    # TODO error caes.
    #  bad format to a number
    url =  "http://%s/ca/%s/%s/setField/status/aa/" % ( SITE_HOST, 'unittest',str(annid))
    with pytest.raises(urllib2.HTTPError): 
      req = urllib2.Request ( url )
      f = urllib2.urlopen ( url )

# RBTODO add tests key/value and compound fields.
    #  assign a field for a wrong annotation type
#    url =  "http://%s/ca/%s/%s/setField/segmentclass/2/" % ( SITE_HOST, 'unittest',str(annid))
#    with pytest.raises(urllib2.HTTPError): 
#      req = urllib2.Request ( url )
#      f = urllib2.urlopen ( url )

    #  assign a missing field
#    url =  "http://%s/ca/%s/%s/setField/nonesuch/2/" % ( SITE_HOST, 'unittest',str(annid))
#    with pytest.raises(urllib2.HTTPError): 
#      req = urllib2.Request ( url )
#      f = urllib2.urlopen ( url )

    #  request a missing field
    url =  "http://%s/ca/%s/%s/getField/othernonesuch/" % ( SITE_HOST, 'unittest',str(annid))
    with pytest.raises(urllib2.HTTPError): 
      req = urllib2.Request ( url )
      f = urllib2.urlopen ( url )