POST request usando python-maas-client

0

Como podemos fazer o post request para o maas api usando o python-maas-client.

Estou obtendo os detalhes do maas api usando o maas-client pelo seguinte código.

print maas_access.get(u"networks").read()
print maas_access.get(u"users").read()

Mas quando tento postar uma solicitação, recebo o erro. código está abaixo

data = {'username':'murali','email':'[email protected]','password':'murali','is_superuser': 0}
maas_access.post(u"users/", "new", data)
Traceback (most recent call last):
  File "api.py", line 48, in <module>
    maas_access.post(u"users/", "new", data)
  File "/usr/lib/python2.7/dist-packages/apiclient/maas_client.py", line 250, in post
    url, method="POST", headers=headers, data=body)
  File "/usr/lib/python2.7/dist-packages/apiclient/maas_client.py", line 116, in dispatch_query
    res = urllib2.urlopen(req)
  File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 410, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: BAD REQUEST

e se eu usar

 data = {'username':'murali','email':'[email protected]','password':'murali','is_superuser': 0}
maas_access.post(u"users/", data)
Traceback (most recent call last):
  File "api.py", line 49, in <module>
    maas_access.post(u"users/", data)
  File "/usr/lib/python2.7/dist-packages/apiclient/maas_client.py", line 248, in post
    path, kwargs, as_json=as_json)
  File "/usr/lib/python2.7/dist-packages/apiclient/maas_client.py", line 218, in _formulate_change
    url += '?' + urlencode([('op', op)])
  File "/usr/lib/python2.7/dist-packages/apiclient/utils.py", line 48, in urlencode
    for name, value in data)
  File "/usr/lib/python2.7/dist-packages/apiclient/utils.py", line 48, in <genexpr>
    for name, value in data)
  File "/usr/lib/python2.7/dist-packages/apiclient/utils.py", line 45, in <lambda>
    string.encode("utf-8") if isinstance(string, unicode) else string)
  File "/usr/lib/python2.7/urllib.py", line 1295, in quote_plus
    return quote(s, safe)
  File "/usr/lib/python2.7/urllib.py", line 1286, in quote
    if not s.rstrip(safe):
AttributeError: 'dict' object has no attribute 'rstrip'

Estou perdendo alguma coisa ou os dados que estou fornecendo estão errados? Por favor me ajude

    
por binoy 17.09.2015 / 16:38

2 respostas

0

Enquanto não houver documentação real para a forma atual do apiclient, leia a fonte para a assinatura do método post ():

def post(self, path, op, as_json=False, **kwargs):
    """Dispatch POST method 'op' on 'path', with the given parameters.

    :param as_json: Instead of POSTing the content as multipart/form-data
        POST it as application/json
    :return: The result of the dispatch_query call on the dispatcher.
    """

Isso sugere que quaisquer dados fornecidos por você precisam ser enviados como kwargs; como abaixo:

maas_access.post(u"users/", "new", **data)

Existe mais um problema com seus dados, que é o de que você está enviando um inteiro como argumento; Em vez disso, envie-o como a string '0':

data = {'username':'murali', 'email':'[email protected]', 
     'password':'murali', 'is_superuser': '0'}
maas_access.post(u"users/", "new", **data)

Por fim, observe que a API é insegura, pois fornece a senha como texto sem formatação, conforme indicado na documentação da API .

Veja link para obter um exemplo mais completo de uso API do post () do cliente.

    
por kiko 21.09.2015 / 16:36
0
sshKeys = {"key": [keyValue]}
maas_access.post(u"account/prefs/sshkeys/", "new", **sshKeys)

O código acima irá postar a chave ssh no maas usando o maas-api. Mas no caso de usuário não está funcionando. Ainda recebendo 400 erros

    
por binoy 28.09.2015 / 16:20