Commit ce6f57e5 authored by Alessandro Frigeri's avatar Alessandro Frigeri
Browse files

sistemato

parent 9d519d80
Loading
Loading
Loading
Loading
+208 −59
Original line number Diff line number Diff line
#!/usr/bin/python
#!/usr/bin/python3
# 
# Alessandro Frigeri 2019 
# (c) 2019 Alessandro Frigeri, Istituto Nazionale di Astrofisica
# 
# MoonDB Python module
# https://realpython.com/api-integration-in-python/

import requests
import json 
import urllib.parse
from collections import namedtuple

def _url(path):
   return "http://api.moondb.org" + path
class Mission:
   def __init__(self,name):
      self.name = name
   def __str__(self):
      return self.name

def get_specimen():
   pass
class Landmark:
   def __init__(self,name):
      self.name = name

def get_specimentype():
   pass
class Specimen:
   def __init__(self):
       self.specimenCode = ""
       self.specimenName = ""
       self.parentSpecimen = ""
       self.childSpecimens = ""
       self.specimenType = ""
       self.samplingTechnique = ""
       self.mission = ""
       self.landmark = ""
       self.lunarStation = ""
       self.returnContainer = ""
       self.weight = ""
       self.pristinity = ""
       self.pristinityDate = ""
       self.description = ""
   def say_hello(self):
      print('Hello Moon!')
   def __str__(self):
      return self.specimenName
   def __repr__(self):
      return self.specimenName

def get_mission():
   pass
class SpecimenType:
   def __init__(self,name):
      self.name = name
   def __str__(self):
      return self.name
   def __repr__(self):
      return self.name

class SamplingTechnique:
   def __init__(self,name):
      self.name = name
   def __str__(self):
      return self.name
   def __repr__(self):
      return self.name

class AnalyzedMaterial:
   def __init__(self,name):
      self.name = name
   def __str__(self):
      return self.name
   def __repr__(self):
      return self.name

class Analyte:
   def __init__(self,name):
      self.name = name
   def __str__(self):
      return self.name
   def __repr__(self):
      return self.name

class AnalysisMethod:
   def __init__(self,code,name):
      self.name = name
      self.code = code
   def __str__(self):
      return self.name
   def __repr__(self):
      return self.name



class AnalyisMethod:
   def __init__(self,name):
      self.name = name



def _url(path):
   print(urllib.parse.quote(path))
   return "http://api.moondb.org" + urllib.parse.quote(path)

def _check_resp(resp):
   if resp.status_code != 200:
      #raise ApiError('Cannot fetch all objects: {}'.format(resp.status_code))
      pass

def _get_resp(path):
   resp = requests.get(_url( path ))
   _check_resp(resp)
   r = resp.json()
   # To be checked with Peng
   if 'results' in r:
      return r['results']
   if 'result' in r:
      return r['result']

def get_specimen(sc=None,mn=None,ln=None,sty=None,ste=None):
   '''
   Get specimen by:
   - specimen code - sc
   - mission name - mn
   - landmark name - ln
   - speciment type - sty
   - sampling technique - ste
   '''
   sp_list = []
   if sc:
      for s in sc: 
         spec = _get_resp('/specimen/'+s) 
         sp_list.extend(spec)
   if mn:
      for n in mn:
         spec = _get_resp('/specimenlist/mission/'+n) 
         sp_list.extend(spec)

   if ln:
      for n in ln:
         spec = _get_resp('/specimenlist/mission/'+n) 
         sp_list.extend(spec)

   if sty:
      for st in sty:
         spec = _get_resp('/specimenlist/mission/'+st) 
         sp_list.extend(spec)

   if ste:
      for st in ste:
         spec = _get_resp('/specimenlist/mission/'+st) 
         sp_list.extend(spec)

   from collections import namedtuple
   
   sp_obj_list = []

   for s in sp_list:
      s_obj = namedtuple("Specimen", s.keys())(*s.values())
      sp_obj_list.append(s_obj)

   return sp_obj_list






def _json_object_hook(d): 
   return namedtuple('X', d.keys())(*d.values())

def json2obj(data): 
   return json.loads(data, object_hook=_json_object_hook)

def get_analytes():
   analytes = []
   resp = requests.get(_url('/cv/analytes/'))
   _check_resp(resp)
   for m_item in resp.json()['result']:
      analytes.append( Analyte(m_item['name'] ))
   return analytes


def get_missions():
   missions = []
   resp = requests.get(_url('/authorities/missions/'))
   _check_resp(resp)
   print resp.json()['result']
   for m_item in resp.json()['result']:
   for m_item in resp.json()['results']:
      missions.append( Mission(m_item['name'] ))
      print(m_item)
      #this_m = json.load( "{'name': 'Apollo 11'}" )
   return missions

def get_missions2():
   resp = requests.get(_url('/authorities/missions/'))
   #m2 = json.loads(resp)
   print(resp)
   return resp.json()['result']   
## Controlled Vocabularies

def get_specimentypes():
   st_list = []
   st = _get_resp('/cv/specimentypes') 
   for s in st:
      stobj = SpecimenType(s['name'])
      st_list.append(stobj)
   return st_list

def get_samplingtechniques():
   st_list = []
   st = _get_resp('/cv/samplingtechniques') 
   for s in st:
      stobj = SamplingTechnique(s['name'])
      st_list.append(stobj)
   return st_list

def get_analyzedmaterials():
   st_list = []
   st = _get_resp('/cv/analyzedmaterials') 
   for s in st:
      stobj = AnalyzedMaterial(s['name'])
      st_list.append(stobj)
   return st_list

def get_analytes():
   analytes = []
   an = _get_resp('/cv/analyzedmaterials') 
   for a in an:
      analytes.append( Analyte(m_item['name'] ))
   return analytes

def get_analysismethods():
   am_list = []
   am = _get_resp('/cv/analysismethods') 
   for a in am:
      aobj = AnalysisMethod(s['name'])
      am_list.append(aobj)
   return am_list

def get_landmark():
   pass
@@ -73,11 +234,9 @@ class Filter:
      self.analyte = []
      self.analysisMethod = []
   def _toJSON(self):
      #indent=4
      return json.dumps(self, default=lambda o: o.__dict__,sort_keys=True,separators=(",", ":"))

   def get_results(self):
      #print self._toJSON()
      #print _url('/data/'+self._toJSON() )
      resp = requests.get(_url('/data/'+self._toJSON() ))
      res_list = []
      
@@ -86,50 +245,40 @@ class Filter:
         res_list.append(rd) 
      return res_list

class Mission:
   def __init__(self,name):
      self.name = name

class Specimen:
   def __init__(self):
       self.specimenCode = ""
       self.specimenName = ""
       self.parentSpecimen = ""
       self.childSpecimens = ""
       self.specimenType = ""
       #self.samplingTechnique":null,"mission":"Apollo 12","landmark":null,"lunarStation":null,"returnContainer":null,"weight":null,"pristinity":null,"pristinityDate":null,"description":null}
    

class AnalysisMethos:
   def __init__(self,code,name):
      self.name = name
      self.code = code

class Analyte:
   def __init__(self,name):
      self.name = name



if __name__ == "__main__":
   m = get_missions()
   print m
   f = Filter()
   f.specimenType = ["SOIL"]
   f.analyte = ["H2O","Ti"]
   f.mission = ["Apollo 11"]
   print 80*"#"
   print(80*"#")
   #print f.toJSON()
   results = f.get_results()
   for r in results:
       print r
       print "********"
       this_res = r['dataResults'][0]
       print this_res
       var = this_res['variable']
       val = this_res['value']
       unit = this_res['unit']
       print var,": ",val,unit
       print(var,": ",val,unit)

   s = get_specimen(mn=['Apollo 12','Apollo 11'])
   print(len(s))
   s1 = s[0]

   m = get_missions()
   ml = []
   for mn in m:
      ml.append(mn.name)
   s = get_specimen(mn=ml)
   print(len(s))
   s1 = s[0]
   #s1.say_hello()
   #print(type(s1))
   #for sp in s:
   #   print(sp['specimenName'])
   #sp_types = get_specimentypes()
   #print(sp_types)


notebooks/print.prt

deleted100644 → 0
+0 −60
Original line number Diff line number Diff line
Object = cam2map
  IsisVersion       = "3.6.2  | 2-28-2019"
  ProgramVersion    = 2016-06-29
  ProgramPath       = /Users/alf/miniconda2/envs/isis3/bin
  ExecutionDateTime = 2019-04-17T15:14:19
  HostName          = Unknown
  UserName          = alf
  Description       = "Convert camera image to a map projection"

  Group = UserParameters
    MAP           = $base/templates/maps/sinusoidal.map
    MATCHMAP      = false
    PIXRES        = CAMERA
    DEFAULTRANGE  = MINIMIZE
    LONSEAM       = AUTO
    INTERP        = CUBICCONVOLUTION
    WARPALGORITHM = AUTOMATIC
  End_Group

  Group = Error
    Program = cam2map
    Class   = "USER ERROR"
    Code    = 2
    Message = "Parameter [FROM] must be entered"
    File    = IsisAml.cpp
    Line    = 2867
  End_Group
End_Object


Object = cam2map
  IsisVersion       = "3.6.2  | 2-28-2019"
  ProgramVersion    = 2016-06-29
  ProgramPath       = /Users/alf/miniconda2/envs/isis3/bin
  ExecutionDateTime = 2019-04-17T15:17:02
  HostName          = Unknown
  UserName          = alf
  Description       = "Convert camera image to a map projection"

  Group = UserParameters
    MAP           = $base/templates/maps/sinusoidal.map
    MATCHMAP      = false
    PIXRES        = CAMERA
    DEFAULTRANGE  = MINIMIZE
    LONSEAM       = AUTO
    INTERP        = CUBICCONVOLUTION
    WARPALGORITHM = AUTOMATIC
  End_Group

  Group = Error
    Program = cam2map
    Class   = "USER ERROR"
    Code    = 2
    Message = "Parameter [FROM] must be entered"
    File    = IsisAml.cpp
    Line    = 2867
  End_Group
End_Object