Skip to content

Instantly share code, notes, and snippets.

@Kerogi
Created June 7, 2017 20:08
Show Gist options
  • Save Kerogi/80d771ab2eb028ba615aad2b707efde1 to your computer and use it in GitHub Desktop.
Save Kerogi/80d771ab2eb028ba615aad2b707efde1 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import pprint
import sys
import codecs
import locale
#reload(sys)
#print sys.getdefaultencoding()
#print sys.getfilesystemencoding()
#print locale.getpreferredencoding()
#sys.stdout = codecs.getwriter("cp1251")(sys.stdout, errors='replace')
class MyPrettyPrinter(pprint.PrettyPrinter):
def format(self, object, context, maxlevels, level):
if isinstance(object, unicode):
return (object.encode('utf8'), True, False)
return pprint.PrettyPrinter.format(self, object, context, maxlevels, level)
pp = MyPrettyPrinter()
#58b318baabd93dbbf97d3094 - 143
#58b55b17abd93dbbf97f6717 - 457
email = '[email protected]'
hline = 80*"-"
delim ='\t'
def validate_json(j):
if u'data' in j and len(j[u'data']) > 0:
return j[u'data']
else:
raise RuntimeError('Returned invalid json ')
#print (hline)
r = requests.get('https://osvita.kievcity.gov.ua/v1/requests?email='+email)
r.raise_for_status()
my_info = validate_json(r.json())
#pp.pprint(my_info)
kg_list = []
for crit_rec in my_info[0][u'criterias']:
if crit_rec[u'key'] == u'kindergartenId':
for val in crit_rec['values']:
kg_list += [val]
def slice_by(lst, key = lambda x: x):
last_key = False
last_pos = 0
for curr_pos, it in enumerate(lst):
curr_key = key(it)
if last_key and last_key != curr_key:
yield last_key, lst[last_pos:curr_pos], curr_key
last_pos = curr_pos
last_key = curr_key
yield last_key, lst[last_pos:], None
def cmp_by_queueNumber(a, b):
cmp_res = int(str(a[u'queueNumber'])[0:-4]) - int(str(b[u'queueNumber'])[0:-4])
if cmp_res>0:
return 1
elif cmp_res<0:
return -1
return 0
for kd_id in kg_list:
r = requests.get('https://osvita.kievcity.gov.ua/v1/kindergartens/'+kd_id)
r.raise_for_status()
kg_info = validate_json(r.json())[0]
#kg_edrpou = kg_info[u'edrpou']
# r = requests.get('https://osvita.kievcity.gov.ua/v1/kindergartens_state?edrpou='+kg_edrpou)
# r.raise_for_status()
# kg_state = validate_json(r.json())[0]
# isActive = kg_state[u'isActive']
#print(u'Садочок №{0[number]}: {0[name]}'.format(kg_info))
#fields_format = [
# 'req[_id]'
# ,'child[birthCertificate][number]'
# ,'child[firstName]'
# ]
print (hline)
r = requests.get('https://osvita.kievcity.gov.ua/v1/requests/main_info?with_selected_kindergarten='+kd_id)
r.raise_for_status()
kg_requests = []
kg_requests = validate_json(r.json())
last_id = kg_requests[len(kg_requests)-1][u'_id']
#print (hline)
r = requests.get('https://osvita.kievcity.gov.ua/v1/requests/main_info?with_selected_kindergarten='+kd_id+'&request_to='+last_id)
r.raise_for_status()
kg_requests += validate_json(r.json())
kg_requests = [req for req in kg_requests if req[u'statuses'][-1][u'name'].lower() in [u'approved',u'need-additional-check',u'invite-sent',u'invite-accepted',u'invite-declined']]
#print (hline)
#print(u'Заявки : {0}'.format(len(kg_requests)))
kg_groups = {}
for req in kg_requests:
periodFrom = req[u'periodFrom']
if periodFrom not in kg_groups: kg_groups[periodFrom] = []
kg_groups[periodFrom] += [req]
#print(u'Групи : {0}'.format(len(kg_groups)))
for k, orders in kg_groups.iteritems():
pf = set()
pt = set()
for order in orders:
pf.add(order[u'periodFrom'])
pt.add(order[u'periodTo'])
#print(u'Навчальний рiк {0}/{1} [{2}]'.format(', '.join([str(f) for f in pf]), ', '.join([str(t) for t in pt]), len(orders)))
sorted_orders = sorted(orders, key=lambda order: order[u'ageLimitFrom'])
sliced_orders = {}
places_in_sub_group = []
for age, orders_by_age, _ in slice_by(sorted_orders, lambda order: order[u'ageLimitFrom']):
orders_by_age_sorted = sorted(orders_by_age, cmp=cmp_by_queueNumber)
for index, order in enumerate(orders_by_age_sorted):
for my_order in my_info:
if my_order[u'statuses'][-1][u'name'] != u'removed' and my_order[u'child'][u'birthCertificate'][u'number'] == order[u'child'][u'birthCertificate'][u'number']:
places_in_sub_group += [ (my_order, index+1) ]
print(u'Садочок №{0[number]}: {0[name]} - Навчальний рiк {1}/{2} группа від {3} до {4} років, позиція у черзі {5}'.format(
kg_info
, ', '.join([str(f) for f in pf])
, ', '.join([str(t) for t in pt])
, age
, orders_by_age[0][u'ageLimitTo']
, index+1))
sliced_orders[age] = orders_by_age_sorted
#pp.pprint(kg_groups)
# #for num, req in enumerate(kg_requests):
# # print((u'{num}{delim}'+'{delim}'.join(['{%s}'%field_fmt for field_fmt in fields_format])).format(req=req, child=req[u'child'], num=num, delim=delim))
# # r = requests.get('https://osvita.kievcity.gov.ua/v1/requests/main_info?with_selected_kindergarten='+object_id+'&request_to=58d527d7e6a91f9429f2409c')
# # r.raise_for_status()
# # #print (hline)
# # #print(u'Заявки : {0}'.format(len(kg_requests)))
# # kg_requests = validate_json(r.json())
# # for num, req in enumerate(kg_requests):
# # print((u'{num}{delim}'+'{delim}'.join(['{%s}'%field_fmt for field_fmt in fields_format])).format(req=req, child=req[u'child'], num=num, delim=delim))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment