From 054bbbc6fbe009baa8fd46cad28abc633e53166d Mon Sep 17 00:00:00 2001 From: Emanuele Danovaro Date: Tue, 10 Mar 2026 09:54:11 +0000 Subject: [PATCH 1/7] initial cleanup of MarsExpension, ExpandCallback, DummyContext --- src/metkit/CMakeLists.txt | 1 - src/metkit/mars/MarsExpandContext.h | 6 ------ src/metkit/mars/MarsExpansion.cc | 16 ---------------- src/metkit/mars/MarsExpansion.h | 11 ----------- src/metkit/mars/MarsExpension.h | 28 ---------------------------- src/metkit/mars/MarsParser.cc | 8 -------- src/metkit/mars/MarsParser.h | 18 ------------------ src/tools/parse-mars-request.cc | 11 ----------- 8 files changed, 99 deletions(-) delete mode 100644 src/metkit/mars/MarsExpension.h diff --git a/src/metkit/CMakeLists.txt b/src/metkit/CMakeLists.txt index fe61d790..45ffa6ea 100644 --- a/src/metkit/CMakeLists.txt +++ b/src/metkit/CMakeLists.txt @@ -28,7 +28,6 @@ list( APPEND metkit_srcs mars/MarsExpandContext.h mars/MarsExpansion.cc mars/MarsExpansion.h - mars/MarsExpension.h mars/MarsHandle.cc mars/MarsHandle.h mars/MarsLanguage.cc diff --git a/src/metkit/mars/MarsExpandContext.h b/src/metkit/mars/MarsExpandContext.h index 11f497ae..75554ed4 100644 --- a/src/metkit/mars/MarsExpandContext.h +++ b/src/metkit/mars/MarsExpandContext.h @@ -33,10 +33,4 @@ class MarsExpandContext { //---------------------------------------------------------------------------------------------------------------------- -class [[deprecated]] DummyContext : public MarsExpandContext { - using MarsExpandContext::MarsExpandContext; -}; - -//---------------------------------------------------------------------------------------------------------------------- - } // namespace metkit::mars diff --git a/src/metkit/mars/MarsExpansion.cc b/src/metkit/mars/MarsExpansion.cc index 1f095617..e76adaba 100644 --- a/src/metkit/mars/MarsExpansion.cc +++ b/src/metkit/mars/MarsExpansion.cc @@ -19,8 +19,6 @@ namespace metkit::mars { FlattenCallback::~FlattenCallback() = default; -ExpandCallback::~ExpandCallback() = default; - //---------------------------------------------------------------------------------------------------------------------- MarsExpansion::MarsExpansion(bool inherit, bool strict) : inherit_(inherit), strict_(strict) {} @@ -68,24 +66,10 @@ MarsRequest MarsExpansion::expand(const MarsRequest& request) { return lang.expand(request, inherit_, strict_); } - -void MarsExpansion::expand(const MarsRequest& request, ExpandCallback& callback) { - MarsRequest r = language(request.verb()).expand(request, inherit_, strict_); - callback(r); -} - - void MarsExpansion::flatten(const MarsRequest& request, FlattenCallback& callback) { language(request.verb()).flatten(request, callback); } -void MarsExpansion::expand(const MarsExpandContext&, const MarsRequest& request, ExpandCallback& callback) { - expand(request, callback); -} -void MarsExpansion::flatten(const MarsExpandContext&, const MarsRequest& request, FlattenCallback& callback) { - flatten(request, callback); -} - //---------------------------------------------------------------------------------------------------------------------- } // namespace metkit::mars diff --git a/src/metkit/mars/MarsExpansion.h b/src/metkit/mars/MarsExpansion.h index b4a60fd9..6fd67582 100644 --- a/src/metkit/mars/MarsExpansion.h +++ b/src/metkit/mars/MarsExpansion.h @@ -41,14 +41,6 @@ class FlattenCallback { virtual void operator()(const MarsRequest&) = 0; }; -class ExpandCallback { -public: - - virtual ~ExpandCallback(); - virtual void operator()(const MarsRequest& request) { this->operator()(DummyContext{}, request); } - virtual void operator()(const MarsExpandContext&, const MarsRequest&) = 0; -}; - //---------------------------------------------------------------------------------------------------------------------- class MarsExpansion : public eckit::NonCopyable { @@ -62,10 +54,7 @@ class MarsExpansion : public eckit::NonCopyable { MarsRequest expand(const MarsRequest&); std::vector expand(const std::vector&); - void expand(const MarsRequest&, ExpandCallback&); - void expand(const MarsExpandContext&, const MarsRequest&, ExpandCallback&); void flatten(const MarsRequest&, FlattenCallback&); - void flatten(const MarsExpandContext&, const MarsRequest&, FlattenCallback&); private: diff --git a/src/metkit/mars/MarsExpension.h b/src/metkit/mars/MarsExpension.h deleted file mode 100644 index b76a7a36..00000000 --- a/src/metkit/mars/MarsExpension.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * (C) Copyright 1996- ECMWF. - * - * This software is licensed under the terms of the Apache Licence Version 2.0 - * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - * In applying this licence, ECMWF does not waive the privileges and immunities - * granted to it by virtue of its status as an intergovernmental organisation nor - * does it submit to any jurisdiction. - */ - -#ifndef metkit_MarsExpension_H -#define metkit_MarsExpension_H - -#include "metkit/mars/MarsExpansion.h" - -namespace metkit::mars { - -//---------------------------------------------------------------------------------------------------------------------- - -struct [[deprecated("Use MarsExpansion instead")]] MarsExpension : MarsExpansion { - using MarsExpansion::MarsExpansion; -}; - -//---------------------------------------------------------------------------------------------------------------------- - -} // namespace metkit::mars - -#endif diff --git a/src/metkit/mars/MarsParser.cc b/src/metkit/mars/MarsParser.cc index e715561e..9e259cb3 100644 --- a/src/metkit/mars/MarsParser.cc +++ b/src/metkit/mars/MarsParser.cc @@ -196,13 +196,5 @@ std::vector MarsParser::parse() { return result; } -void MarsParser::parse(MarsParserCallback& cb) { - - while (peek() != 0) { - auto r = parseRequest(); - cb(DummyContext{}, r); - } -} - //---------------------------------------------------------------------------------------------------------------------- } // namespace metkit::mars diff --git a/src/metkit/mars/MarsParser.h b/src/metkit/mars/MarsParser.h index 5d6f2a47..8059f625 100644 --- a/src/metkit/mars/MarsParser.h +++ b/src/metkit/mars/MarsParser.h @@ -22,24 +22,8 @@ namespace metkit::mars { class MarsExpandContext; class MarsRequest; - -//---------------------------------------------------------------------------------------------------------------------- - - -class MarsParserCallback { -public: - - virtual void operator()(const MarsExpandContext&, const MarsRequest&) = 0; - -protected: - - virtual ~MarsParserCallback() = default; -}; - - //---------------------------------------------------------------------------------------------------------------------- - class MarsParser : public eckit::StreamParser { public: // methods @@ -48,8 +32,6 @@ class MarsParser : public eckit::StreamParser { std::vector parse(); - void parse(MarsParserCallback& cb); - static void quoted(std::ostream& out, const std::string& value); private: // methods diff --git a/src/tools/parse-mars-request.cc b/src/tools/parse-mars-request.cc index 52361e91..a67dc567 100644 --- a/src/tools/parse-mars-request.cc +++ b/src/tools/parse-mars-request.cc @@ -157,17 +157,6 @@ void ParseRequest::process(const eckit::PathName& path) { } } } - - class Print : public FlattenCallback { - virtual void operator()(const MarsRequest& request) { std::cout << request << std::endl; } - }; - - - Print cb; - - // for (std::vector::const_iterator j = v.begin(); j != v.end(); ++j) { - // expand.flatten(*j, cb, filter); - // } } //---------------------------------------------------------------------------------------------------------------------- From 0945e8f980dd53816a170a6146f7250b22f7edfb Mon Sep 17 00:00:00 2001 From: Emanuele Danovaro Date: Thu, 19 Mar 2026 06:22:22 +0000 Subject: [PATCH 2/7] wip --- src/metkit/mars/MarsExpandContext.h | 2 +- src/metkit/mars/MarsExpansion.h | 6 +++--- src/metkit/mars/MarsParser.h | 2 +- src/metkit/mars/Type.cc | 6 +++--- src/metkit/mars/Type.h | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/metkit/mars/MarsExpandContext.h b/src/metkit/mars/MarsExpandContext.h index 11f497ae..aa23e2ae 100644 --- a/src/metkit/mars/MarsExpandContext.h +++ b/src/metkit/mars/MarsExpandContext.h @@ -33,7 +33,7 @@ class MarsExpandContext { //---------------------------------------------------------------------------------------------------------------------- -class [[deprecated]] DummyContext : public MarsExpandContext { +class DummyContext : public MarsExpandContext { using MarsExpandContext::MarsExpandContext; }; diff --git a/src/metkit/mars/MarsExpansion.h b/src/metkit/mars/MarsExpansion.h index b4a60fd9..6aaece8c 100644 --- a/src/metkit/mars/MarsExpansion.h +++ b/src/metkit/mars/MarsExpansion.h @@ -62,10 +62,10 @@ class MarsExpansion : public eckit::NonCopyable { MarsRequest expand(const MarsRequest&); std::vector expand(const std::vector&); - void expand(const MarsRequest&, ExpandCallback&); - void expand(const MarsExpandContext&, const MarsRequest&, ExpandCallback&); + [[deprecated]] void expand(const MarsRequest&, ExpandCallback&); + [[deprecated]] void expand(const MarsExpandContext&, const MarsRequest&, ExpandCallback&); void flatten(const MarsRequest&, FlattenCallback&); - void flatten(const MarsExpandContext&, const MarsRequest&, FlattenCallback&); + [[deprecated]] void flatten(const MarsExpandContext&, const MarsRequest&, FlattenCallback&); private: diff --git a/src/metkit/mars/MarsParser.h b/src/metkit/mars/MarsParser.h index 5d6f2a47..d50a0aad 100644 --- a/src/metkit/mars/MarsParser.h +++ b/src/metkit/mars/MarsParser.h @@ -48,7 +48,7 @@ class MarsParser : public eckit::StreamParser { std::vector parse(); - void parse(MarsParserCallback& cb); + [[deprecated]] void parse(MarsParserCallback& cb); static void quoted(std::ostream& out, const std::string& value); diff --git a/src/metkit/mars/Type.cc b/src/metkit/mars/Type.cc index eec42e4c..c661f7d9 100644 --- a/src/metkit/mars/Type.cc +++ b/src/metkit/mars/Type.cc @@ -269,9 +269,9 @@ bool Type::expand(std::string& value, const MarsRequest&) const { oss << *this << ": expand not implemented (" << value << ")"; throw eckit::SeriousBug(oss.str()); } -bool Type::expand(const MarsExpandContext&, std::string& value, const MarsRequest& request) const { - return expand(value, request); -} +// bool Type::expand(const MarsExpandContext&, std::string& value, const MarsRequest& request) const { +// return expand(value, request); +// } void Type::expand(std::vector& values, const MarsRequest& request) const { diff --git a/src/metkit/mars/Type.h b/src/metkit/mars/Type.h index 67f7c5dc..cf138534 100644 --- a/src/metkit/mars/Type.h +++ b/src/metkit/mars/Type.h @@ -192,7 +192,7 @@ class Type : public eckit::Counted { ~Type() noexcept override = default; virtual bool expand(std::string& value, const MarsRequest& request = {}) const; - [[deprecated]] bool expand(const MarsExpandContext& ctx, std::string& value, const MarsRequest& request = {}) const; + // [[deprecated]] bool expand(const MarsExpandContext& ctx, std::string& value, const MarsRequest& request = {}) const; void expand(std::vector& values, const MarsRequest& request = {}) const; std::string tidy(const std::string& value, const MarsRequest& request = {}) const; From 17fa143f1582414e7d58fc110d9b100ab2309c54 Mon Sep 17 00:00:00 2001 From: Emanuele Danovaro Date: Tue, 10 Mar 2026 09:17:57 +0000 Subject: [PATCH 3/7] check verb on MarsRequest creation --- CMakeLists.txt | 4 ++-- src/metkit/mars/MarsLanguage.cc | 6 +++--- src/metkit/mars/MarsRequest.cc | 4 +++- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b1c52b6..f1fa76a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,14 +36,14 @@ ecbuild_add_option( FEATURE EXPERIMENTAL ecbuild_add_option( FEATURE GRIB DEFAULT ON DESCRIPTION "Add support for GRIB format" - REQUIRED_PACKAGES "NAME eccodes VERSION 2.27" ) + REQUIRED_PACKAGES "NAME eccodes VERSION 2.46" ) # BUFR support ecbuild_add_option( FEATURE BUFR DEFAULT ON DESCRIPTION "Add support for BUFR format" - REQUIRED_PACKAGES "NAME eccodes VERSION 2.27" ) + REQUIRED_PACKAGES "NAME eccodes VERSION 2.46" ) # netcdf support diff --git a/src/metkit/mars/MarsLanguage.cc b/src/metkit/mars/MarsLanguage.cc index a22076de..30706bba 100644 --- a/src/metkit/mars/MarsLanguage.cc +++ b/src/metkit/mars/MarsLanguage.cc @@ -100,12 +100,12 @@ void MarsLanguage::parseModifier(ModifierType typ, std::shared_ptr ctx, } } -MarsLanguage::MarsLanguage(const std::string& verb) : verb_(verb) { +MarsLanguage::MarsLanguage(const std::string& verb) { pthread_once(&once, init); - eckit::Value lang = languages_[verb]; + verb_ = MarsLanguage::expandVerb(verb); + eckit::Value lang = languages_[verb_]; eckit::Value params = lang.keys(); - eckit::Value options = lang["_options"]; for (size_t i = 0; i < params.size(); ++i) { diff --git a/src/metkit/mars/MarsRequest.cc b/src/metkit/mars/MarsRequest.cc index d1b646d4..83e28361 100644 --- a/src/metkit/mars/MarsRequest.cc +++ b/src/metkit/mars/MarsRequest.cc @@ -30,7 +30,9 @@ namespace mars { MarsRequest::MarsRequest() {} -MarsRequest::MarsRequest(const std::string& s) : verb_(s) {} +MarsRequest::MarsRequest(const std::string& s) : verb_(s) { + ASSERT(s.find(',') == std::string::npos); +} MarsRequest::MarsRequest(const std::string& s, const std::map& values) : verb_(s) { for (auto j = values.begin(); j != values.end(); ++j) { From 3c233e1f89db170ae4172cb32bc26af121e01ccf Mon Sep 17 00:00:00 2001 From: Emanuele Danovaro Date: Wed, 8 Apr 2026 13:58:23 +0200 Subject: [PATCH 4/7] version bump (1.18.0) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index b9a05a6d..84cc5294 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.17.3 +1.18.0 From 05c78884b8a82fdb069f71ebd5395eb90e0a67ff Mon Sep 17 00:00:00 2001 From: Emanuele Danovaro Date: Wed, 8 Apr 2026 14:03:59 +0200 Subject: [PATCH 5/7] format --- src/metkit/mars/MarsLanguage.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/metkit/mars/MarsLanguage.cc b/src/metkit/mars/MarsLanguage.cc index 30706bba..ce6f2bc5 100644 --- a/src/metkit/mars/MarsLanguage.cc +++ b/src/metkit/mars/MarsLanguage.cc @@ -103,9 +103,9 @@ void MarsLanguage::parseModifier(ModifierType typ, std::shared_ptr ctx, MarsLanguage::MarsLanguage(const std::string& verb) { pthread_once(&once, init); - verb_ = MarsLanguage::expandVerb(verb); - eckit::Value lang = languages_[verb_]; - eckit::Value params = lang.keys(); + verb_ = MarsLanguage::expandVerb(verb); + eckit::Value lang = languages_[verb_]; + eckit::Value params = lang.keys(); eckit::Value options = lang["_options"]; for (size_t i = 0; i < params.size(); ++i) { From 1c712c9d6ac968563a450adc317acaafd37249bc Mon Sep 17 00:00:00 2001 From: Emanuele Danovaro Date: Wed, 8 Apr 2026 17:53:14 +0200 Subject: [PATCH 6/7] reverted ExpandCallback --- src/metkit/CMakeLists.txt | 1 - src/metkit/mars/MarsExpansion.cc | 12 +++++------- src/metkit/mars/MarsExpansion.h | 12 +++++++++--- src/metkit/mars/MarsParser.cc | 10 ++++++++-- src/metkit/mars/MarsParser.h | 15 ++++++++++++++- src/metkit/mars/Type.h | 2 -- 6 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/metkit/CMakeLists.txt b/src/metkit/CMakeLists.txt index 45ffa6ea..5fb6f064 100644 --- a/src/metkit/CMakeLists.txt +++ b/src/metkit/CMakeLists.txt @@ -25,7 +25,6 @@ list( APPEND metkit_srcs mars/DHSProtocol.h mars/Matcher.cc mars/Matcher.h - mars/MarsExpandContext.h mars/MarsExpansion.cc mars/MarsExpansion.h mars/MarsHandle.cc diff --git a/src/metkit/mars/MarsExpansion.cc b/src/metkit/mars/MarsExpansion.cc index e76adaba..f879d9c4 100644 --- a/src/metkit/mars/MarsExpansion.cc +++ b/src/metkit/mars/MarsExpansion.cc @@ -17,10 +17,6 @@ namespace metkit::mars { //---------------------------------------------------------------------------------------------------------------------- -FlattenCallback::~FlattenCallback() = default; - -//---------------------------------------------------------------------------------------------------------------------- - MarsExpansion::MarsExpansion(bool inherit, bool strict) : inherit_(inherit), strict_(strict) {} MarsExpansion::~MarsExpansion() { @@ -35,7 +31,6 @@ void MarsExpansion::reset() { } } - MarsLanguage& MarsExpansion::language(const std::string& verb) { auto v = MarsLanguage::expandVerb(verb); @@ -62,8 +57,11 @@ std::vector MarsExpansion::expand(const std::vector #include -#include "metkit/mars/MarsExpandContext.h" #include "metkit/mars/MarsParsedRequest.h" #include "metkit/mars/MarsRequest.h" - namespace metkit::mars { class MarsLanguage; @@ -36,9 +34,16 @@ class MarsLanguage; class FlattenCallback { public: + virtual void operator()(const MarsRequest&) = 0; +protected: + virtual ~FlattenCallback() = default; +}; - virtual ~FlattenCallback(); +class ExpandCallback { +public: virtual void operator()(const MarsRequest&) = 0; +protected: + virtual ~ExpandCallback() = default; }; //---------------------------------------------------------------------------------------------------------------------- @@ -54,6 +59,7 @@ class MarsExpansion : public eckit::NonCopyable { MarsRequest expand(const MarsRequest&); std::vector expand(const std::vector&); + void expand(const MarsRequest&, ExpandCallback&); void flatten(const MarsRequest&, FlattenCallback&); private: diff --git a/src/metkit/mars/MarsParser.cc b/src/metkit/mars/MarsParser.cc index 9e259cb3..d4145c12 100644 --- a/src/metkit/mars/MarsParser.cc +++ b/src/metkit/mars/MarsParser.cc @@ -15,8 +15,6 @@ #include "metkit/mars/MarsParser.h" -#include "metkit/mars/MarsExpandContext.h" - namespace metkit::mars { //---------------------------------------------------------------------------------------------------------------------- @@ -196,5 +194,13 @@ std::vector MarsParser::parse() { return result; } +void MarsParser::parse(MarsParserCallback& cb) { + + while (peek() != 0) { + auto r = parseRequest(); + cb(r); + } +} + //---------------------------------------------------------------------------------------------------------------------- } // namespace metkit::mars diff --git a/src/metkit/mars/MarsParser.h b/src/metkit/mars/MarsParser.h index 8059f625..c12cb56e 100644 --- a/src/metkit/mars/MarsParser.h +++ b/src/metkit/mars/MarsParser.h @@ -19,11 +19,22 @@ namespace metkit::mars { -class MarsExpandContext; class MarsRequest; //---------------------------------------------------------------------------------------------------------------------- +class MarsParserCallback { +public: + + virtual void operator()(const MarsRequest&) = 0; + +protected: + + virtual ~MarsParserCallback() = default; +}; + +//---------------------------------------------------------------------------------------------------------------------- + class MarsParser : public eckit::StreamParser { public: // methods @@ -32,6 +43,8 @@ class MarsParser : public eckit::StreamParser { std::vector parse(); + void parse(MarsParserCallback& cb); + static void quoted(std::ostream& out, const std::string& value); private: // methods diff --git a/src/metkit/mars/Type.h b/src/metkit/mars/Type.h index 236a5489..d55c59e1 100644 --- a/src/metkit/mars/Type.h +++ b/src/metkit/mars/Type.h @@ -30,8 +30,6 @@ namespace metkit::mars { -class MarsExpandContext; - //---------------------------------------------------------------------------------------------------------------------- /// @brief abstract class - ContextRule subclasses are used to define a context. A MarsRequest matches a context, if it From 4134d2f5566f7604c4316317accc85ca9d804697 Mon Sep 17 00:00:00 2001 From: Emanuele Danovaro Date: Wed, 8 Apr 2026 17:56:33 +0200 Subject: [PATCH 7/7] format --- src/metkit/mars/MarsExpansion.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/metkit/mars/MarsExpansion.h b/src/metkit/mars/MarsExpansion.h index a4d26f4d..70f3ff85 100644 --- a/src/metkit/mars/MarsExpansion.h +++ b/src/metkit/mars/MarsExpansion.h @@ -34,15 +34,21 @@ class MarsLanguage; class FlattenCallback { public: + virtual void operator()(const MarsRequest&) = 0; + protected: + virtual ~FlattenCallback() = default; }; class ExpandCallback { public: + virtual void operator()(const MarsRequest&) = 0; + protected: + virtual ~ExpandCallback() = default; };