From cc5e8aa703266c64213032bfab5b1e12e5b09273 Mon Sep 17 00:00:00 2001
From: pcain <pcain@usgs.gov>
Date: Mon, 23 Aug 2021 15:14:11 +0000
Subject: [PATCH] _set_metadata as placeholder is TSFactory

---
 geomagio/DerivedTimeseriesFactory.py |  8 ++++++++
 geomagio/TimeseriesFactory.py        | 12 +----------
 geomagio/edge/EdgeFactory.py         | 30 +++++++++++++++++++++++++---
 geomagio/edge/MiniSeedFactory.py     | 30 +++++++++++++++++++++++++---
 4 files changed, 63 insertions(+), 17 deletions(-)

diff --git a/geomagio/DerivedTimeseriesFactory.py b/geomagio/DerivedTimeseriesFactory.py
index 01d7a5c44..c2a4fca2b 100644
--- a/geomagio/DerivedTimeseriesFactory.py
+++ b/geomagio/DerivedTimeseriesFactory.py
@@ -63,6 +63,14 @@ class DerivedTimeseriesFactory(TimeseriesFactory):
                     data_type=type,
                     interval=interval,
                 )
+        for channel in channels:
+            self.factory._set_metadata(
+                stream=timeseries.select(channel=channel),
+                observatory=observatory,
+                channel=channel,
+                type=type,
+                interval=interval,
+            )
         # file-based factories return all channels found in file
         timeseries = Stream([t for t in timeseries if t.stats.channel in channels])
         return timeseries
diff --git a/geomagio/TimeseriesFactory.py b/geomagio/TimeseriesFactory.py
index 21fd3b37a..fe4e63cb4 100644
--- a/geomagio/TimeseriesFactory.py
+++ b/geomagio/TimeseriesFactory.py
@@ -320,13 +320,6 @@ class TimeseriesFactory(object):
             network=network,
             location=location,
         )
-        self._set_metadata(
-            stream=[trace],
-            observatory=observatory,
-            channel=channel,
-            type=data_type,
-            interval=interval,
-        )
         return trace
 
     def _get_file_from_url(self, url):
@@ -558,7 +551,4 @@ class TimeseriesFactory(object):
         interval
             interval length {minute, second}
         """
-        for trace in stream:
-            self.observatoryMetadata.set_metadata(
-                trace.stats, observatory, channel, type, interval
-            )
+        return stream
diff --git a/geomagio/edge/EdgeFactory.py b/geomagio/edge/EdgeFactory.py
index e02b68982..43ad19524 100644
--- a/geomagio/edge/EdgeFactory.py
+++ b/geomagio/edge/EdgeFactory.py
@@ -9,7 +9,6 @@ to take advantage of it's newer realtime abilities.
 Edge is the USGS earthquake hazard centers replacement for earthworm.
 """
 from __future__ import absolute_import
-from typing import Optional
 
 import sys
 import numpy
@@ -23,7 +22,7 @@ from ..TimeseriesFactory import TimeseriesFactory
 from ..TimeseriesFactoryException import TimeseriesFactoryException
 from ..ObservatoryMetadata import ObservatoryMetadata
 from .RawInputClient import RawInputClient
-from .LegacySNCL import LegacySNCL, get_location
+from .LegacySNCL import LegacySNCL
 
 
 class EdgeFactory(TimeseriesFactory):
@@ -347,7 +346,6 @@ class EdgeFactory(TimeseriesFactory):
         for trace in data:
             trace.data = trace.data.astype("i4")
         data.merge()
-        self._set_metadata(data, observatory, channel, type, interval)
         if data.count() == 0 and add_empty_channels:
             data += self._get_empty_trace(
                 starttime=starttime,
@@ -359,6 +357,7 @@ class EdgeFactory(TimeseriesFactory):
                 network=sncl.network,
                 location=sncl.location,
             )
+        self._set_metadata(data, observatory, channel, type, interval)
         return data
 
     def _post_process(self, timeseries, starttime, endtime, channels):
@@ -468,3 +467,28 @@ class EdgeFactory(TimeseriesFactory):
         if self.forceout:
             ric.forceout()
         ric.close()
+
+    def _set_metadata(
+        self,
+        stream: obspy.core.Trace,
+        observatory: str,
+        channel: str,
+        type: str,
+        interval: str,
+    ):
+        """set metadata for a given stream/channel
+        Parameters
+        ----------
+        observatory
+            observatory code
+        channel
+            edge channel code {MVH, MVE, MVD, ...}
+        type
+            data type {definitive, quasi-definitive, variation}
+        interval
+            interval length {minute, second}
+        """
+        for trace in stream:
+            self.observatoryMetadata.set_metadata(
+                trace.stats, observatory, channel, type, interval
+            )
diff --git a/geomagio/edge/MiniSeedFactory.py b/geomagio/edge/MiniSeedFactory.py
index 1b0684373..7208e36e1 100644
--- a/geomagio/edge/MiniSeedFactory.py
+++ b/geomagio/edge/MiniSeedFactory.py
@@ -11,7 +11,6 @@ Edge is the USGS earthquake hazard centers replacement for earthworm.
 from __future__ import absolute_import
 
 import sys
-from typing import Optional
 import numpy
 import numpy.ma
 
@@ -24,7 +23,7 @@ from ..TimeseriesFactory import TimeseriesFactory
 from ..TimeseriesFactoryException import TimeseriesFactoryException
 from ..ObservatoryMetadata import ObservatoryMetadata
 from .MiniSeedInputClient import MiniSeedInputClient
-from .SNCL import SNCL, get_location
+from .SNCL import SNCL
 
 
 class MiniSeedFactory(TimeseriesFactory):
@@ -353,7 +352,6 @@ class MiniSeedFactory(TimeseriesFactory):
             sncl.network, sncl.station, sncl.location, sncl.channel, starttime, endtime
         )
         data.merge()
-        self._set_metadata(data, observatory, channel, type, interval)
         if data.count() == 0 and add_empty_channels:
             data += self._get_empty_trace(
                 starttime=starttime,
@@ -365,6 +363,7 @@ class MiniSeedFactory(TimeseriesFactory):
                 network=sncl.network,
                 location=sncl.location,
             )
+        self._set_metadata(data, observatory, channel, type, interval)
         return data
 
     def _convert_timeseries(
@@ -500,3 +499,28 @@ class MiniSeedFactory(TimeseriesFactory):
             trace.stats.channel = sncl.channel
         # finally, send to edge
         self.write_client.send(to_write)
+
+    def _set_metadata(
+        self,
+        stream: obspy.core.Trace,
+        observatory: str,
+        channel: str,
+        type: str,
+        interval: str,
+    ):
+        """set metadata for a given stream/channel
+        Parameters
+        ----------
+        observatory
+            observatory code
+        channel
+            edge channel code {MVH, MVE, MVD, ...}
+        type
+            data type {definitive, quasi-definitive, variation}
+        interval
+            interval length {minute, second}
+        """
+        for trace in stream:
+            self.observatoryMetadata.set_metadata(
+                trace.stats, observatory, channel, type, interval
+            )
-- 
GitLab