2017-10-02 9 views
1

私はkwargsから使用して外側の関数OWSLibwms130.getfeatureinfo、持っている:さらにkwargsを渡すには?

def getfeatureinfo(self, layers=None, 
... 
         method='Get', 
         timeout=None, 
         **kwargs 
         ): 

を、私は内側の機能wms130.__build_getmap_requestにkwargsからの使用を持っている:

... 
    request['transparent'] = str(transparent).upper() 
    request['bgcolor'] = '0x' + bgcolor[1:7] 
    request['exceptions'] = str(exceptions) 

    if time is not None: 
     request['time'] = str(time) 

    if elevation is not None: 
     request['elevation'] = str(elevation) 

    # any other specified dimension, prefixed with "dim_" 
    for k, v in six.iteritems(dimensions): 
     request['dim_' + k] = str(v) 

    if kwargs: 
     for kw in kwargs: 
      request[kw]=kwargs[kw] 
    return request 

どうやら、作者の意図は入れていましたすべてのキーワード引数をそのままHTTPクエリのパラメータに変換します。

残念ながら、私は外側の関数に自分kwargを通過するとき、それは値

{'MAXCC': '100'} 

を有しているが、この内符号に到達したとき、それは値

{'kwargs': {'MAXCC': '100'}} 

すなわち余分なレベルを追加しました。内部機能は

# GetMap-Request 
     request = self.__build_getmap_request(
      layers=layers, 
      styles=styles, 
      srs=srs, 
      bbox=bbox, 
      dimensions=dimensions, 
      elevation=elevation, 
      format=format, 
      size=size, 
      time=time, 
      transparent=transparent, 
      bgcolor=bgcolor, 
      exceptions=exceptions, 
      kwargs=kwargs) 

即ち外kwargsからは、名前kwargs持つ単一キーワードとして引数にラップされると呼び出されるためです。それはOWSLibのバグであると意図が拡大kwargsからを入れていたどのように可能性の高い

1):

質問は二重のでしょうか? (単一の既知のエントリで辞書を繰り返し処理するためにループを追加する必要がないため、99%と言います)

2)kwargsが単一エントリではなくkwargsとして渡されるようにPythonの内部関数を呼び出す方法?

+0

ので、これはあなたのコードが、モジュールOWSlibではないでしょうか?私ははいと言うでしょう、これは彼らの誤りのように思われますが、おそらく行動の理由があります。 – Stael

+0

追加の引数を追加すると、 'kwargs'が明示的なHTTP引数として表示されるため、sentinel hub web APIがクラッシュします。したがって、彼らには1%の理由があります。 – Dims

答えて

1

アンパックを使用して前のkwargsをさらに下にします。これらのキーワード引数のすべてとアンパックkwargsは、次のレベルkwargsにキャプチャされます

request = self.__build_getmap_request(
      ... 
      exceptions=exceptions, 
      **kwargs) 

:それのための新しいキーワード引数を導入しないでください。ループとは対照的に、

もっとので、要求辞書は、単純なdict.updateを使用して更新することができます。

request.update(kwargs) 
関連する問題