From d9cd2b5bd6183f4b0e51a49d6c272f497cbf33b5 Mon Sep 17 00:00:00 2001
From: Philippe Hamy <philippe.hamy@obspm.fr>
Date: Wed, 18 Nov 2020 17:08:56 +0100
Subject: [PATCH] modifie q.rd de planets

---
 services/planets/q.rd |  99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 94 insertions(+), 5 deletions(-)

diff --git a/services/planets/q.rd b/services/planets/q.rd
index bf3674c..3c8d4b7 100644
--- a/services/planets/q.rd
+++ b/services/planets/q.rd
@@ -1,5 +1,7 @@
 <resource schema="planets">
   <meta name="title">Characteristics of Planets (demo)</meta>
+  <meta name="shortname">Planets</meta>
+  <meta name="shortName">Planets</meta>
   <meta name="description" format="plain">
 Demonstration service of EPN-TAP v1: main characteristics of planets. Data are included in the table, therefore most relevant parameters are non-standard in EPN-TAP. Data are retrieved from Archinal et al 2009 (IAU report, 2011CeMDA.109..101A) [radii] and Cox et al 2000 (Allen's astrophysical quantities, 2000asqu.book.....C) [masses, heliocentric distances, and rotation periods]. </meta>
   <meta name="creationDate">2015-08-16T09:42:00Z</meta>
@@ -126,7 +128,7 @@ Demonstration service of EPN-TAP v1: main characteristics of planets. Data are i
         <make table="epn_core">
             <rowmaker idmaps="*">
                 <var key="dataproduct_type">"ci"</var>
-                <var key="spatial_frame_type">"celestial"</var>
+                <var key="spatial_frame_type">"none"</var>
 
                 <var key="target_name" source="target_name" />
                 <var key="granule_uid" source="target_name" />
@@ -145,8 +147,14 @@ Demonstration service of EPN-TAP v1: main characteristics of planets. Data are i
                 <var key="service_title">"planets" </var>
                 <var key="bib_reference">"2011CeMDA.109..101A#2000asqu.book.....C"</var>
                 <var key="publisher">"LESIA" </var>
-                <var key="target_class">"planet"</var>
+                                <var key="target_class">"planet"</var>
 
+                                <!-- the id for our datalink services is artificial: it's
+                                just the concatenation of the object class and the object name
+                                -->
+                                <var key="ds_id">@target_class+"/"+@target_name</var>
+                                <var key="datalink_url">("\getConfig{web}{serverURL}/\rdId/epdl/dlmeta"
+                                        +"?ID="+urllib.parse.quote(@ds_id))</var> 
 
                 <apply procDef="//epntap2#populate-2_0" name="fillepn">
                     <bind name="granule_gid">@granule_gid</bind>
@@ -154,12 +162,18 @@ Demonstration service of EPN-TAP v1: main characteristics of planets. Data are i
                     <bind name="obs_id">@obs_id</bind>
                     <bind name="target_class">@target_class</bind>
                     <bind name="time_scale">"UTC"</bind>
+
                     <bind name="target_name">@target_name</bind>
                     <bind name="instrument_host_name">""</bind>
                     <bind name="instrument_name">""</bind>
+
+
                     <bind key="processing_level">5</bind>
+
                     <bind name="dataproduct_type">@dataproduct_type</bind>
                     <bind name="measurement_type">"phys.mass#phys.size.radius"</bind>
+
+
                     <bind name="service_title">@service_title</bind>
                     <bind name="creation_date">@creation_date</bind>
                     <bind name="modification_date">@modification_date</bind>
@@ -171,8 +185,83 @@ Demonstration service of EPN-TAP v1: main characteristics of planets. Data are i
         </make>
     </data>
 
-    <data id="collection" auto="false">
-        <make table="epn_core"/>
-        <publish/>
+    <service id="epdl" allowed="dlget,dlmeta">
+        <datalinkCore>
+            <metaMaker>
+                <code>
+                    yield MS(InputKey, name="epoch", 
+                        type="double precision",
+                        unit="d", ucd="meta.epoch",
+                        description="Time the ephemeris is to be computed for, JD",
+                        multiplicity="forced-single",
+                        values=MS(Values,
+                            min=2400000,
+                            max=3000000))
+                </code>
+            </metaMaker>
+
+            <metaMaker>
+                <code>
+                    with base.getTableConn() as conn:
+                         url = list(conn.query("SELECT thumbnail_url from \schema.epn_core where"
+                                " target_class=%(targetClass)s and target_name=%(targetName)s", {
+                                "targetClass": descriptor.targetClass,
+                                "targetName": descriptor.targetName}))[0][0]
+                    yield LinkDef(descriptor.pubDID,
+                        url,
+                        description="A preview of the planet",
+                        semantics="#preview",
+                        contentType="image/jpeg")
+                </code>
+            </metaMaker>
+
+            <descriptorGenerator>
+            <setup>
+                <code>
+                    class PlanetDescriptor(object):
+                        def __init__(self, pubDID):
+                            self.pubDID = pubDID
+                            self.targetClass, self.targetName = self.pubDID.split("/", 1)
+                            self.computeEphemerisId()
+
+                        def computeEphemerisId(self):
+                                shortClass = {
+                                        'planet': 'p',
+                                        'satellite': 's',
+                                }[self.targetClass]
+                                self.ephId = "{}:{}".format(
+                                        shortClass, self.targetName)
+                        description="computed ephemeris of the planet",
+                </code>
+            </setup>
+                <code>
+                    return PlanetDescriptor(pubDID)
+                </code>
+            </descriptorGenerator>
+
+            <dataFunction>
+                <setup>
+                    <par name="upstream_service_url"
+                        >"http://vo.imcce.fr/webservices/miriade/ephemcc_query.php?-from=vespa&amp;"</par>
+                    <code>
+            
+	    from urllib.parse import urlencode
+            from gavo.svcs import WebRedirect
+	    import urllib.parse
+                    </code>
+                </setup>
+                <code>
+                    parameters = {
+                        "-name": descriptor.ephId,
+                        "-ep": args["epoch"],
+                    }
+                    raise WebRedirect(upstream_service_url+urlencode(parameters))
+                </code>
+            </dataFunction>
+        </datalinkCore>
+    </service>
+       <data id="collection" auto="false">
+       <make table="epn_core"/>
+       <publish/>
     </data>
 </resource>
--
libgit2 0.21.2