caom2 2.6.2__tar.gz → 2.6.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. {caom2-2.6.2/caom2.egg-info → caom2-2.6.4}/PKG-INFO +11 -2
  2. {caom2-2.6.2 → caom2-2.6.4}/caom2/common.py +1 -1
  3. {caom2-2.6.2 → caom2-2.6.4}/caom2/diff.py +1 -1
  4. {caom2-2.6.2 → caom2-2.6.4}/caom2/obs_reader_writer.py +31 -4
  5. {caom2-2.6.2 → caom2-2.6.4}/caom2/plane.py +4 -5
  6. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/SampleDerived-CAOM-2.4.xml +5386 -5660
  7. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/diff-actual-CAOM-2.3.xml +1 -1
  8. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/diff-expected-CAOM-2.3.xml +1 -1
  9. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/diff-expected-CAOM-2.4.xml +1 -1
  10. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_obs_reader_writer.py +8 -3
  11. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_shape.py +3 -3
  12. caom2-2.6.4/caom2/version.py +1 -0
  13. {caom2-2.6.2 → caom2-2.6.4/caom2.egg-info}/PKG-INFO +11 -2
  14. {caom2-2.6.2 → caom2-2.6.4}/setup.cfg +4 -1
  15. caom2-2.6.2/caom2/version.py +0 -1
  16. {caom2-2.6.2 → caom2-2.6.4}/LICENSE +0 -0
  17. {caom2-2.6.2 → caom2-2.6.4}/MANIFEST.in +0 -0
  18. {caom2-2.6.2 → caom2-2.6.4}/README.rst +0 -0
  19. {caom2-2.6.2 → caom2-2.6.4}/caom2/__init__.py +0 -0
  20. {caom2-2.6.2 → caom2-2.6.4}/caom2/artifact.py +0 -0
  21. {caom2-2.6.2 → caom2-2.6.4}/caom2/caom_util.py +0 -0
  22. {caom2-2.6.2 → caom2-2.6.4}/caom2/checksum.py +0 -0
  23. {caom2-2.6.2 → caom2-2.6.4}/caom2/chunk.py +0 -0
  24. {caom2-2.6.2 → caom2-2.6.4}/caom2/data/CAOM-2.2.xsd +0 -0
  25. {caom2-2.6.2 → caom2-2.6.4}/caom2/data/CAOM-2.3.xsd +0 -0
  26. {caom2-2.6.2 → caom2-2.6.4}/caom2/data/CAOM-2.4.xsd +0 -0
  27. {caom2-2.6.2 → caom2-2.6.4}/caom2/observation.py +0 -0
  28. {caom2-2.6.2 → caom2-2.6.4}/caom2/part.py +0 -0
  29. {caom2-2.6.2 → caom2-2.6.4}/caom2/shape.py +0 -0
  30. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/__init__.py +0 -0
  31. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/caom_test_instances.py +0 -0
  32. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/CompleteCompositeCircle-CAOM-2.2.xml +0 -0
  33. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/CompleteCompositeCircle-CAOM-2.3.xml +0 -0
  34. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/CompleteCompositePolygon-CAOM-2.2.xml +0 -0
  35. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/CompleteCompositePolygon-CAOM-2.3.xml +0 -0
  36. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/CompleteSimpleCircle-CAOM-2.2.xml +0 -0
  37. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/CompleteSimpleCircle-CAOM-2.3.xml +0 -0
  38. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/CompleteSimplePolygon-CAOM-2.2.xml +0 -0
  39. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/CompleteSimplePolygon-CAOM-2.3.xml +0 -0
  40. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/MinimalCompositeCircle-CAOM-2.2.xml +0 -0
  41. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/MinimalCompositeCircle-CAOM-2.3.xml +0 -0
  42. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/MinimalCompositePolygon-CAOM-2.2.xml +0 -0
  43. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/MinimalCompositePolygon-CAOM-2.3.xml +0 -0
  44. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/MinimalSimpleCircle-CAOM-2.2.xml +0 -0
  45. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/MinimalSimpleCircle-CAOM-2.3.xml +0 -0
  46. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/MinimalSimplePolygon-CAOM-2.2.xml +0 -0
  47. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/MinimalSimplePolygon-CAOM-2.3.xml +0 -0
  48. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/SampleComposite-CAOM-2.3.xml +0 -0
  49. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/SampleSimple-CAOM-2.3.xml +0 -0
  50. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/data/diff-actual-CAOM-2.4.xml +0 -0
  51. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_artifact.py +0 -0
  52. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_caom_util.py +0 -0
  53. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_checksum.py +0 -0
  54. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_chunk.py +0 -0
  55. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_common.py +0 -0
  56. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_diffs.py +0 -0
  57. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_observation.py +0 -0
  58. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_part.py +0 -0
  59. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_plane.py +0 -0
  60. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/test_wcs.py +0 -0
  61. {caom2-2.6.2 → caom2-2.6.4}/caom2/tests/xml_compare.py +0 -0
  62. {caom2-2.6.2 → caom2-2.6.4}/caom2/wcs.py +0 -0
  63. {caom2-2.6.2 → caom2-2.6.4}/caom2.egg-info/SOURCES.txt +0 -0
  64. {caom2-2.6.2 → caom2-2.6.4}/caom2.egg-info/dependency_links.txt +0 -0
  65. {caom2-2.6.2 → caom2-2.6.4}/caom2.egg-info/entry_points.txt +0 -0
  66. {caom2-2.6.2 → caom2-2.6.4}/caom2.egg-info/not-zip-safe +0 -0
  67. {caom2-2.6.2 → caom2-2.6.4}/caom2.egg-info/requires.txt +0 -0
  68. {caom2-2.6.2 → caom2-2.6.4}/caom2.egg-info/top_level.txt +0 -0
  69. {caom2-2.6.2 → caom2-2.6.4}/docs/Makefile +0 -0
  70. {caom2-2.6.2 → caom2-2.6.4}/docs/_templates/autosummary/base.rst +0 -0
  71. {caom2-2.6.2 → caom2-2.6.4}/docs/_templates/autosummary/class.rst +0 -0
  72. {caom2-2.6.2 → caom2-2.6.4}/docs/_templates/autosummary/module.rst +0 -0
  73. {caom2-2.6.2 → caom2-2.6.4}/docs/conf.py +0 -0
  74. {caom2-2.6.2 → caom2-2.6.4}/docs/index.rst +0 -0
  75. {caom2-2.6.2 → caom2-2.6.4}/docs/make.bat +0 -0
  76. {caom2-2.6.2 → caom2-2.6.4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: caom2
3
- Version: 2.6.2
3
+ Version: 2.6.4
4
4
  Summary: CAOM-2.4 library
5
5
  Home-page: http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/caom2
6
6
  Author: Canadian Astronomy Data Centre
@@ -20,6 +20,15 @@ Requires-Dist: pytest>=4.6; extra == "test"
20
20
  Requires-Dist: pytest-cov>=2.5.1; extra == "test"
21
21
  Requires-Dist: flake8>=3.4.1; extra == "test"
22
22
  Requires-Dist: funcsigs>=1.0.2; extra == "test"
23
+ Dynamic: author
24
+ Dynamic: author-email
25
+ Dynamic: classifier
26
+ Dynamic: description
27
+ Dynamic: home-page
28
+ Dynamic: license
29
+ Dynamic: license-file
30
+ Dynamic: requires-python
31
+ Dynamic: summary
23
32
 
24
33
  caom2
25
34
  =====
@@ -150,7 +150,7 @@ class CaomObject(object):
150
150
  for arg in args])
151
151
 
152
152
  def __eq__(self, other):
153
- if type(other) == type(self):
153
+ if isinstance(other, CaomObject):
154
154
  return self.__dict__ == other.__dict__
155
155
  else:
156
156
  return False
@@ -105,7 +105,7 @@ def get_differences(expected, actual, parent=None):
105
105
  """
106
106
  report = []
107
107
 
108
- if type(expected) != type(actual):
108
+ if not isinstance(actual, expected.__class__):
109
109
  report.append(
110
110
  'Types:: expected \'{}\' actual \'{}\''.format(type(expected),
111
111
  type(actual)))
@@ -3,7 +3,7 @@
3
3
  # ****************** CANADIAN ASTRONOMY DATA CENTRE *******************
4
4
  # ************* CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES **************
5
5
  #
6
- # (c) 2022. (c) 2022.
6
+ # (c) 2025. (c) 2025.
7
7
  # Government of Canada Gouvernement du Canada
8
8
  # National Research Council Conseil national de recherches
9
9
  # Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6
@@ -631,6 +631,23 @@ class ObservationReader(object):
631
631
  data_quality = plane.DataQuality(plane.Quality(flag))
632
632
  return data_quality
633
633
 
634
+ def _get_observable(self, parent, ns):
635
+ """Build an Observable object from an XML representation
636
+
637
+ Arguments:
638
+ parent : element containing the Observable element
639
+ ns : namespace of the document
640
+ return : an Observable object or None if the document does not contain one
641
+ raise : ObservationParsingException
642
+ """
643
+ el = self._get_child_element("observable", parent, ns, False)
644
+ if el is None:
645
+ return None
646
+ else:
647
+ ucd = self._get_child_text("ucd", el, ns, True)
648
+ observable = plane.Observable(ucd)
649
+ return observable
650
+
634
651
  def _get_point(self, point, ns, required):
635
652
  """Build an Point object from an XML representation
636
653
  of an Point element.
@@ -1696,6 +1713,8 @@ class ObservationReader(object):
1696
1713
  _plane.provenance = \
1697
1714
  self._get_provenance("provenance", plane_element, ns,
1698
1715
  False)
1716
+ _plane.observable = self._get_observable(plane_element, ns)
1717
+
1699
1718
  _plane.metrics = \
1700
1719
  self._get_metrics("metrics", plane_element, ns, False)
1701
1720
  _plane.quality = \
@@ -2080,6 +2099,7 @@ class ObservationWriter(object):
2080
2099
  _plane.calibration_level.value,
2081
2100
  plane_element)
2082
2101
  self._add_provenance_element(_plane.provenance, plane_element)
2102
+ self._add_observable_element(_plane.observable, plane_element)
2083
2103
  self._add_metrics_element(_plane.metrics, plane_element)
2084
2104
  self._add_quality_element(_plane.quality, plane_element)
2085
2105
 
@@ -2131,9 +2151,9 @@ class ObservationWriter(object):
2131
2151
  "Attempt to write CAOM2.4 element "
2132
2152
  "(energy.resolving_power_bands) as "
2133
2153
  "CAOM2.3 Observation")
2134
- else:
2135
- self._add_interval_element("resolvingPowerBounds",
2136
- energy.resolving_power_bounds, element)
2154
+ else:
2155
+ self._add_interval_element("resolvingPowerBounds",
2156
+ energy.resolving_power_bounds, element)
2137
2157
  self._add_element("sampleSize", energy.sample_size, element)
2138
2158
  self._add_element("bandpassName", energy.bandpass_name, element)
2139
2159
  if energy.energy_bands:
@@ -2280,6 +2300,13 @@ class ObservationWriter(object):
2280
2300
  element = self._get_caom_element("quality", parent)
2281
2301
  self._add_element("flag", quality.flag.value, element)
2282
2302
 
2303
+ def _add_observable_element(self, observable, parent):
2304
+ if observable is None:
2305
+ return
2306
+
2307
+ element = self._get_caom_element("observable", parent)
2308
+ self._add_element("ucd", observable.ucd, element)
2309
+
2283
2310
  def _add_transition_element(self, transition, parent):
2284
2311
  if transition is None:
2285
2312
  return
@@ -79,11 +79,9 @@ from . import caom_util
79
79
  from . import shape
80
80
  from . import wcs
81
81
  from .artifact import Artifact
82
- from .common import AbstractCaomEntity, CaomObject, ObservationURI,\
83
- VocabularyTerm, OrderedEnum
82
+ from .common import AbstractCaomEntity, CaomObject, ObservationURI, VocabularyTerm, OrderedEnum
84
83
  from .common import _CAOM_VOCAB_NS, _OBSCORE_VOCAB_NS
85
84
  import warnings
86
- from enum import Enum
87
85
  with warnings.catch_warnings():
88
86
  warnings.simplefilter('ignore')
89
87
  from aenum import Enum, extend_enum
@@ -208,10 +206,11 @@ class Quality(Enum):
208
206
  JUNK = VocabularyTerm(_CAOM_VOCAB_NS, "junk", True).get_value()
209
207
 
210
208
 
211
- class Observable():
209
+ class Observable(CaomObject):
212
210
  """ Observable class"""
213
211
 
214
212
  def __init__(self, ucd):
213
+ super(Observable, self).__init__()
215
214
  self.ucd = ucd
216
215
 
217
216
  @property
@@ -487,7 +486,7 @@ class Plane(AbstractCaomEntity):
487
486
 
488
487
  @observable.setter
489
488
  def observable(self, value):
490
- caom_util.type_check(value, str, 'observable')
489
+ caom_util.type_check(value, Observable, 'observable')
491
490
  self._observable = value
492
491
 
493
492
  @property