Created
June 7, 2017 20:08
-
-
Save Kerogi/80d771ab2eb028ba615aad2b707efde1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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