From 56b3d4794abfa6257c6a8a4ed8fcf8b099f7cd98 Mon Sep 17 00:00:00 2001
From: Alessandro Frigeri <alessandro.frigeri@inaf.it>
Date: Thu, 9 May 2019 10:55:09 +0200
Subject: [PATCH] updated example

---
 examples/Apollo11_soils.py             |  51 ++++++++++++++++++++++++-
 moondb/__pycache__/core.cpython-37.pyc | Bin 11087 -> 12111 bytes
 moondb/core.py                         |  48 +++++++++++++++++------
 3 files changed, 85 insertions(+), 14 deletions(-)

diff --git a/examples/Apollo11_soils.py b/examples/Apollo11_soils.py
index 4a40924..9939bce 100644
--- a/examples/Apollo11_soils.py
+++ b/examples/Apollo11_soils.py
@@ -1,4 +1,48 @@
-import moondb
+import moondb,sys
+
+#s0 = moondb.get_specimens(mn=['Apollo 11',])
+
+s = moondb.SpecimenFilter()
+s.missionName = ["Apollo 11"]
+res = s.get_results()
+
+apollo11_weight = 0
+for r in res:
+   if r.weight is not None:
+      apollo11_weight += float(r.weight.split(' ')[0])
+
+print(apollo11_weight)
+
+s1 = moondb.SpecimenFilter()
+s1.missionName = ["Apollo 17"]
+res = s1.get_results()
+
+apollo17_weight = 0
+for r in res:
+   if r.weight is not None:
+      apollo17_weight += float(r.weight.split(' ')[0])
+
+print(apollo17_weight)
+
+
+moon_missions = moondb.get_missions()
+
+weight_cum = 0
+for m in moon_missions:
+   s = moondb.SpecimenFilter()
+   s.missionName = [ m.name ]
+   res = s.get_results()
+   weight = 0
+   for r in res:
+      if r.weight is not None:
+         weight += float(r.weight.split(' ')[0])
+   weight_cum += weight
+   print("MoonDB holds {:.3f} kg of specimens from {}".format(weight/1000.0,m.name))
+
+print("MoonDB contains a total of {:.3f} kg of specimen from the Moon!".format(weight_cum/1000.0))
+
+sys.exit(0)
+
 
 f = moondb.AnalysisFilter()
 f.mission = ["Apollo 11"]
@@ -6,10 +50,13 @@ f.analyte = ["Na2O","CaO"]
 f.specimenType = ["SOIL"]
 
 
+
 results = f.get_results()
 
 for r in results:
    for dr in r.dataResults:
-      print(dr.variable,dr.value,dr.unit)
+      print(dr)
+      #print(dr.laboratory,dr.variable,dr.value,dr.unit)
+      
 
 
diff --git a/moondb/__pycache__/core.cpython-37.pyc b/moondb/__pycache__/core.cpython-37.pyc
index ac4a12a0619b1cfa4a59c9813c828a38d796c341..0816258664bb2a023d963806c0222da6c1df54df 100644
GIT binary patch
delta 3204
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
L6B3*(uWbMTwG_@f

delta 2545
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
A`2YX_

diff --git a/moondb/core.py b/moondb/core.py
index c2ae961..a062a1c 100644
--- a/moondb/core.py
+++ b/moondb/core.py
@@ -128,8 +128,8 @@ def _get_resp(path):
    r = resp.json()
    #print(r)
    # To be checked with Peng
-   if 'result' and 'count' in r:
-      return r['count'],r['result']
+   #if 'result' and 'count' in r:
+   #   return r['count'],r['result']
    if 'results' and 'count' in r:
       return r['count'],r['results']
    else:
@@ -169,35 +169,37 @@ def get_specimens(sc=None,mn=None,ln=None,sty=None,ste=None):
    ste: list
        list of sampling techniques
    '''
+   #print(mn)
    sp_list = []
    if sc:
       for s in sc: 
-         spec = _get_resp('/specimen/'+s) 
-         sp_list.append(spec)
+         count,spec = _get_resp('/specimen/'+s) 
+         sp_list.extend(spec)
    if mn:
       for n in mn:
-         spec = _get_resp('/specimenlist/mission/'+n) 
-         sp_list.append(spec)
+         count,spec = _get_resp('/specimenlist/mission/'+n) 
+         sp_list.extend(spec)
 
    if ln:
       for n in ln:
-         spec = _get_resp('/specimenlist/mission/'+n) 
-         sp_list.append(spec)
+         count,spec = _get_resp('/specimenlist/mission/'+n) 
+         sp_list.extend(spec)
 
    if sty:
       for st in sty:
-         spec = _get_resp('/specimenlist/mission/'+st) 
-         sp_list.append(spec)
+         count,spec = _get_resp('/specimenlist/mission/'+st) 
+         sp_list.extend(spec)
 
    if ste:
       for st in ste:
-         spec = _get_resp('/specimenlist/mission/'+st) 
-         sp_list.append(spec)
+         count,spec = _get_resp('/specimenlist/mission/'+st) 
+         sp_list.extend(spec)
 
    sp_obj_list = []
 
    for s in sp_list:
       # dict unpack
+      # print(s)
       s_o = Specimen(**s)
       sp_obj_list.append(s_o)
 
@@ -272,6 +274,28 @@ def get_samplingtechnique():
    pass
 
 
+class dataFilter:
+   def __init__(self):
+      pass
+   def _toJSON(self):
+      return json.dumps(self, default=lambda o: o.__dict__,sort_keys=True,separators=(",", ":"))
+
+@dataclass
+class SpecimenFilter:
+   specimenCode: list = None
+   missionName: list = None
+   landmarkName: list = None
+   specimenType: list = None
+   samplingTechnique: list = None
+
+   def get_results(self):
+      #res_list = get_specimens(mn=["Apollo 11"])
+      res_list = get_specimens(sc=self.specimenCode,
+                               mn=self.missionName,
+                               ln=self.landmarkName,
+                               sty=self.specimenType,
+                               ste=self.samplingTechnique)
+      return res_list
 
 class AnalysisFilter:
    def __init__(self):
-- 
GitLab