import requests
import os
from .encryption import Encryption
BASE_URL = "https://app.ecourts.gov.in/ecourt_mobile_DC"
RETRY_ATTEMPTS = 10
TIMEOUT = 5
class Interface:
def __init__(self):
self.token = self.fetch_token()
def fetch_token(self):
uid = os.urandom(8).hex() + ':in.gov.ecourts.eCourtsServices'
payload = Encryption.encrypt({"version": "3.0", "uid": uid})
r1 = requests.get(f"{BASE_URL}/appReleaseWebService.php", params={'params': payload})
token = Encryption.decrypt(r1.text)['token']
token = Encryption.encrypt(token)
if not token:
raise Exception
return token
def get(self, endpoint, data):
for _ in range(RETRY_ATTEMPTS):
try:
resp = requests.get(
f"{BASE_URL}/{endpoint}",
params={'params': data},
headers={"Authorization": f"Bearer {self.token}"},
timeout=TIMEOUT
)
return Encryption.decrypt(resp.text)
except:
continue
raise Exception
def get_states(self):
try:
data = Encryption.encrypt({'action_code': 'fillState'})
states_list = self.get('stateWebService.php', data)['states']
return list(map(lambda x: (x['state_code'], x['state_name']), states_list))
except RuntimeError:
raise Exception("Failed to scrape states")
def get_districts(self, state_code):
try:
data = Encryption.encrypt({"state_code": str(state_code)})
districts_list = self.get('districtWebService.php', data)['districts']
return list(map(lambda x: (x['dist_code'], x['dist_name']), districts_list))
except RuntimeError:
raise Exception("Failed to scrape districts")
def get_complexes(self, state_code, dist_code):
try:
data = Encryption.encrypt({
"action_code": "fillCourtComplex",
"state_code": str(state_code),
"dist_code": str(dist_code)
})
complexes_list = self.get('courtEstWebService.php', data)['courtComplex']
if complexes_list is None:
return []
return list(map(lambda x: (x['njdg_est_code'], x['court_complex_name']), complexes_list))
except RuntimeError:
raise Exception("Failed to scrape court complexes")
def get_acts(self, state_code, dist_code, complex_code):
try:
data = Encryption.encrypt({
"state_code": str(state_code),
"dist_code": str(dist_code),
"court_code": str(complex_code),
"searchText": "",
"language_flag": "english",
"bilingual_flag": "0"
})
acts_list = self.get('actWebService.php', data)['actsList'][0]['acts'].split('#')
return list(map(lambda x: (x.split('~')[0], x.split('~')[1]) if '~' in x else (x, None), acts_list))
except RuntimeError:
raise Exception("Failed to scrape acts")
def search_by_act(self, state_code, dist_code, complex_code, act_number, section=""):
try:
data = Encryption.encrypt({
"state_code": str(state_code),
"dist_code": str(dist_code),
"court_code_arr": str(complex_code),
"language_flag": "english",
"bilingual_flag": "0",
"selectActTypeText": str(act_number),
"underSectionText": section,
"pendingDisposed": "Disposed"
})
cases_list = self.get('searchByActWebService.php', data)
return cases_list['0']['caseNos']
except RuntimeError:
raise Exception("Failed to scrape cases by act")
def case_history(self, state_code, dist_code, complex_code, case_no):
try:
data = Encryption.encrypt({
"state_code": str(state_code),
"dist_code": str(dist_code),
"court_code": str(complex_code),
"language_flag": "english",
"bilingual_flag": "0",
"case_no": case_no
})
return self.get('caseHistoryWebService.php', data)['history']
except RuntimeError:
raise Exception("Failed to scrape case history")