#!/usr/bin/python
import requests
import base64

class ElasticsearchApi:
  def __init__(self, url, user, password):
    self.url     = url
    self.basic = None
    if user and password:
      self.basic = requests.auth.HTTPBasicAuth(user, password)

  def get(self, path):
    r = requests.get(
      '{}/{}'.format(self.url, path),
      auth=self.basic
    )

    if r.status_code == 500:
      raise Exception('Server return 500 error: {}'.format(r.text))
      
    return r.status_code, r.json()

  def post(self, path, data):
    r = requests.post(
      '{}/{}'.format(self.url, path),
      auth=self.basic,
      json=data
    )
    
    if r.status_code == 500:
      raise Exception('Server return 500 error: {}'.format(r.text))
    elif r.status_code == 401:
      raise Exception('Authentification has failed')
    elif r.status_code != 200:
      raise Exception('Server return an unknown error: {}'.format(r.text))

  def put(self, path, data):
    r = requests.put(
      '{}/{}'.format(self.url, path),
      auth=self.basic,
      json=data
    )
    
    if r.status_code == 500:
      raise Exception('Server return 500 error: {}'.format(r.text))
    elif r.status_code == 401:
      raise Exception('Authentification has failed')
    elif r.status_code != 200:
      raise Exception('Server return an unknown error: {}'.format(r.text))