首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hydra.main在主要方法上的应用

hydra.main在主要方法上的应用
EN

Stack Overflow用户
提问于 2022-05-16 08:36:23
回答 1查看 251关注 0票数 0

问题摘要:

  1. 我正在一个API端点上运行一个请求调用,它的请求参数隐藏在一个配置文件中,我决定尝试hydra来检索那些参数,因为请求参数确实会改变,因为我正在使用RapidAPI

收集自定义数据集。

  1. I已经创建了一个名为QueryParamsLocations的类,它实现了getter方法来获取参数,以便稍后由run_query方法使用。

代码语言:javascript
复制
class QueryParamsLocations(QueryParams):
    
    @hydra.main(config_path='configs', config_name='location_query')
    def get_params_query_string(self, cfg: DictConfig) -> dict():
        return {
            'query': cfg.location_params.query,
            'locale': cfg.location_params.locale,
            'currency': cfg.location_params.currency
        }
    
    @hydra.main(config_path='configs', config_name='location_query')
    def get_url(self, cfg: DictConfig) -> str():
        return cfg.urls.location_url

    @hydra.main(config_path='configs', config_name='location_query')
    def get_headers(self, cfg: DictConfig) -> dict():
        return {
            'X-RapidAPI-Host': cfg.headers.x_rapidapi_host, 
            'X-RapidAPI-Key': cfg.headers.x_rapidapi_key
        }

  1. 类QueryParams是一个抽象类,它具有以下3个getter模板。run_query方法是运行请求的外部调用.

代码语言:javascript
复制
@hydra.main(config_path='configs', config_name='location_query')
def run_query(cfg: DictConfig) -> None:
    try:
        LoggerFactory.get_logger('logs/logger.log', 'INFO').info('Running query for location')
        qpl = QueryParamsLocations()    
        response = requests.request("GET", qpl.get_url(cfg), headers=qpl.get_headers(cfg), params=qpl.get_params_query_string(cfg))
        print(response.json())
    except Exception as e:
        LoggerFactory.get_logger('logs/logger.log',
                                 'ERROR').error(f'Error in running query: {e}')


run_query()

  1. 在不使用if 名称 ==‘main’的情况下运行run_query时也会遇到以下错误:

代码语言:javascript
复制
[2022-05-16 13:43:32,614][logs/logger.log][ERROR] - Error in running query: **decorated_main()** takes from 0 to 1 positional arguments but 2 were given

尽管较新版本的hydra (我使用的是hydra-core==1.1.2)在创建cfg对象时使用两个参数,但我不确定是否有其他方法来处理这个问题。

此外,通过搜索其他线程,也尝试了以下操作- Compose API

但是,从文档中,它需要一个覆盖参数,而这个参数并不需要atm。

想知道是否可以尝试其他方法。如果需要,很乐意提供更多的细节。

EN

回答 1

Stack Overflow用户

发布于 2022-05-16 11:08:52

对于这个用例,一定要使用Compose而不是hydra.main()。如果没有要重写的内容,只需为覆盖列表传递一个空数组即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72256296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档