The Collection Part 1 #try_exception

Bagaimana cara menangani event exception pada saat kita melakukan request ke webservice ?

ada kalanya kita memerlukan sebuah function yang bisa melakukan reload ulang pada sebuah event yang kita buat jika event tersebut mengalami mal function. cara yang paling sederhana kita bisa menggunakan try exception, seperti sample di bawah ini :

class NetworkError(RuntimeError):
    pass
 
def retryer(max_retries=10, timeout=5):
    def wraps(func):
        request_exceptions = (
            requests.exceptions.Timeout,
            requests.exceptions.ConnectionError,
            requests.exceptions.HTTPError,
            requests.exceptions.SSLError,
        )
 
    def inner(*args, **kwargs):
        for i in range(max_retries):
            try:
                result = func(*args, **kwargs)
            except request_exceptions:
                time.sleep(timeout)
                continue
            else:
                return result
            else:
                raise NetworkError
        return inner
    return wraps
 
@retryer(max_retries=7, timeout=1)
def foo():
    print('Stuff')
    requests.get('https://www.google.com')

sumber : stack overflow

good lucks

Get Json Use Python Requests

Bagaimana cara mendownload json dari sebuah web service  ?

Python menyediakan sebuah library canggih bernama python requests, yang dapat kita gunakan untuk melakukan action POST dan GET ke webservice.

untuk mempermudah pembuatan object parameter GET, kita bisa menggunakan library urllib

pertama buat terlebih dahulu object parameternya :

get_param={    
    'arrivalDate':"2017-07-02",
    'departureDate':"2017-07-03",
    'countryCode':'ID'
}

 

kemudian encode dengan menggunakan urllib

params =urllib.parse.urlencode(get_param)

 

Kode lengkapnya di bawah ini

import json
import requests
import urllib.parse
get_param={    
    'arrivalDate':"2017-07-02",
    'departureDate':"2017-07-03",
    'countryCode':'ID'
}
params =urllib.parse.urlencode(get_param)
url = 'http://xxx.com/list?'+params
r = requests.get(url)
print(json.dumps(r.json()))

 

Good Lucks ….!

Multiple Replace On Python

Bagaimana untuk mereplace sebuah list ?

kita asumsikan mempunyai sebuah bilangan integer 123456, lalu kita ingin mengubahnya menjadi 1,2,3,4,5,6

untuk mengubah bilangan di atas ubah kedalam bentuk list kemudian ubah list ke string agar kita bisa menggunakan fungsi replace pada python.

 

Example

rating = "123456"
lst = list(rating)
cut = {"[": "", "'": "", "]": ""}
for x,y in cut.items():
   lst = str(lst).replace(x,y)
hotel_start = lst
print(hotel_start)

good lucks ….!

 

Implement JWT On Django Rest

Pada tutorial sebelumnya kita sudah mempelajari tentang

selanjutnya kali ini kita akan mengimplementasikan JWT pada Django Rest Framework

install jwt pada django :
pip install djangorestframework-jwt
tambahkan pada setting.py script di bawah ini untuk membuat screet key dan token expired
SECRET_KEY = "12345"
EXPIRY_TIME = datetime.timedelta(seconds=20)
JWT_AUTH = {
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=20),  # Token expires * seconds after being issued
    'JWT_ALLOW_REFRESH': True,
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(seconds=120),  # Token can be refreshed up to * seconds after being issued
 }

 

buat function untuk encode dan decode JWT
def get_token(request):
    username =request.GET.get('username')
    password = request.GET.get('password')
    if username and password is not None:
        payload = {
            'username': username,
            'password':password,
            'exp':datetime.utcnow() + settings.EXPIRY_TIME
        }
        token = jwt.encode(payload, settings.SECRET_KEY, algorithm='HS256')
        token =str(token).replace("b'","")
        token = str(token).replace("'", "")
        token= {'token':token}
        return HttpResponse(
            json.dumps(token)
        )
    else:
        return HttpResponse(
            json.dumps({'Error': "Invalid credentials"}),
            status=400
        )
def get_verivy_token(request):
    token =request.GET.get('token')
    try:
        payload = jwt.decode(token, settings.SECRET_KEY, algorithm='HS256')
        return HttpResponse(
            json.dumps(payload),
            status=200
        )
 
    except jwt.ExpiredSignature:
        return HttpResponse(json.dumps({'Error': "Token is invalid"}))
    except:
        return HttpResponse(json.dumps({'Error': "Token DoesNotExist"}))
good luck ….!

Encode Decode JWT on Python

Generate JWT Token

  • Define secret key
  • Example using pyjwt
import jwt
 token = jwt.encode({'user_id': 1}, '12345', algorithm='HS256')
 token      b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxfQ.0X_1nSfbSETzHhcoeywtv6zXXlQd13M3d0-su89rfvM'
  • Here, 12345 is considered as secret key and HS256 is the algorithm we are using.

Example of Verifying Token

# Assume token is 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxfQ.0X_1nSfbSETzHhcoeywtv6zXXlQd13M3d0-su89rfvM'
 
jwt.decode(token, '12345', algorithms=['HS256'])
  {'user_id': 1}


  • Here, 12345 is secret key.

 

good luck …!