mirror of
https://github.com/house-of-vanity/fesmoo_perdoliq.git
synced 2025-07-06 21:54:07 +00:00
Improve perdoliq class
This commit is contained in:
52
__app__.py
52
__app__.py
@ -5,30 +5,43 @@ import random
|
||||
config = configparser.ConfigParser()
|
||||
|
||||
|
||||
def input_line():
|
||||
allah = [
|
||||
'>>>'
|
||||
]
|
||||
return allah[random.randint(0, len(allah)-1)]
|
||||
|
||||
# just parse user input and make proper action
|
||||
def act(q):
|
||||
if (q == 'h') or (q== 'help'):
|
||||
print('''I don't know how to help you...
|
||||
if (q == 'h') or (q == 'help'):
|
||||
print('''
|
||||
`list` - list all test
|
||||
`resolve <Subj> <Test>`
|
||||
''')
|
||||
elif q == 'list':
|
||||
list_all()
|
||||
elif q[:7] == 'resolve':
|
||||
|
||||
# chance to override accuracy
|
||||
global accuracy
|
||||
accuracy_new = input('Accuracy level [%s]: ' % accuracy)
|
||||
if accuracy_new != '':
|
||||
try:
|
||||
accuracy = int(accuracy_new)
|
||||
except:
|
||||
pass
|
||||
|
||||
# set delay if needed
|
||||
is_delayed = input(
|
||||
'Wait random time per question and auto commit? [y/N]: ')
|
||||
if is_delayed == 'y' or is_delayed == 'Y':
|
||||
is_delayed = True
|
||||
else:
|
||||
is_delayed = False
|
||||
|
||||
q = q.split(' ')
|
||||
print(q[1], q[2])
|
||||
if len(q) != 3:
|
||||
print('''Specify Subj number and Test number.
|
||||
List it with `list` command
|
||||
example:
|
||||
resolve 4 1''')
|
||||
return 1
|
||||
app.resolve(int(q[1]), int(q[2]), accuracy)
|
||||
app.resolve(int(q[1]), int(q[2]), accuracy, is_delayed=is_delayed)
|
||||
|
||||
|
||||
def list_all():
|
||||
i = 0
|
||||
@ -39,26 +52,28 @@ def list_all():
|
||||
for test in app.subjects[subj]:
|
||||
print("\t[%s] %s" % (j, test))
|
||||
j += 1
|
||||
|
||||
|
||||
|
||||
# read config. in case of missing config create new one.
|
||||
try:
|
||||
config.read("creds.ini")
|
||||
username = config['creds']['user']
|
||||
password = config['creds']['pass']
|
||||
accuracy = config['mics']['accuracy']
|
||||
accuracy = int(config['mics']['accuracy'])
|
||||
except:
|
||||
print("Couldn't find appropriate config file. Let's create new.")
|
||||
print("Provide credentials for fesmu.ru/eport/eport/ below")
|
||||
|
||||
username = input('User ID %s ' % input_line())
|
||||
password = input('Password %s ' % input_line())
|
||||
username = input('User ID %s ' % '>>>')
|
||||
password = input('Password %s ' % '>>>')
|
||||
config['creds'] = {}
|
||||
config['creds']['user'] = username
|
||||
config['creds']['pass'] = password
|
||||
print("Also you are able to set desired level of accuracy in percent (%).")
|
||||
accuracy = int(input('Accuracy %s ' % input_line()))
|
||||
accuracy = int(input('Accuracy %s ' % '>>>'))
|
||||
while (accuracy < 0) or (accuracy > 100):
|
||||
print("Are you stupid? Try again.")
|
||||
accuracy = int(input('Accuracy %s ' % input_line()))
|
||||
accuracy = int(input('Accuracy %s ' % '>>>'))
|
||||
config['mics'] = {}
|
||||
config['mics']['accuracy'] = str(accuracy)
|
||||
with open('creds.ini', 'w') as configfile:
|
||||
@ -66,7 +81,9 @@ except:
|
||||
|
||||
app = Main(username, password)
|
||||
|
||||
# make auth
|
||||
app.auth()
|
||||
# update tests
|
||||
app.get_tests()
|
||||
|
||||
print('''
|
||||
@ -75,6 +92,5 @@ Type h or help for help.
|
||||
''')
|
||||
|
||||
while True:
|
||||
q = input('Command %s ' % input_line())
|
||||
|
||||
q = input('Command %s ' % '>>>')
|
||||
act(q)
|
||||
|
39
main.py
39
main.py
@ -17,6 +17,7 @@ class Main:
|
||||
self.name = ''
|
||||
self.subjects = {}
|
||||
|
||||
# make auth
|
||||
def auth(self):
|
||||
r = requests.get(settings.fesmu_root_url)
|
||||
for c in r.cookies:
|
||||
@ -43,6 +44,9 @@ class Main:
|
||||
'', soup.find(id="ctl00_MainContent_Label1").get_text())[14:]
|
||||
logging.info('Current user is %s', self.name)
|
||||
|
||||
return self.SessionId
|
||||
|
||||
# update and return list of subjs and tests
|
||||
def get_tests(self):
|
||||
r = requests.get(
|
||||
settings.fesmu_root_url + 'studtst1.aspx',
|
||||
@ -70,7 +74,7 @@ class Main:
|
||||
test.get_text()))
|
||||
i += 1
|
||||
|
||||
#print(self.subjects)
|
||||
return self.subjects
|
||||
|
||||
def start_test(self, pred, test):
|
||||
# start test
|
||||
@ -161,6 +165,7 @@ class Main:
|
||||
(q_number, answers))
|
||||
return answers
|
||||
|
||||
# mark answers into requested question
|
||||
def answer(self, q_number, answers):
|
||||
def gen_a(a_count, answers):
|
||||
a = {}
|
||||
@ -205,6 +210,7 @@ class Main:
|
||||
logging.info("Send correct answer for %s. It's %s" % (q_number,
|
||||
answers))
|
||||
|
||||
# commit test
|
||||
def finish_test(self):
|
||||
requests.post(
|
||||
settings.fesmu_root_url + 'studtst2.aspx',
|
||||
@ -215,44 +221,37 @@ class Main:
|
||||
data=settings.scam_data_10,
|
||||
cookies={'ASP.NET_SessionId': self.SessionId})
|
||||
|
||||
def resolve(self, subj, test, accuracy):
|
||||
def resolve(self, subj, test, accuracy, is_delayed=False):
|
||||
# renew auth
|
||||
self.auth()
|
||||
accuracy = int(accuracy)
|
||||
# chance to override accuracy
|
||||
accuracy_new = input('Accuracy level [%s]: ' % accuracy)
|
||||
if accuracy_new != '':
|
||||
try:
|
||||
accuracy = int(accuracy_new)
|
||||
except:
|
||||
pass
|
||||
is_delayd = input('Wait random time per question and auto commit? [y/N]: ')
|
||||
if is_delayd == 'y' or is_delayd == 'Y':
|
||||
is_delayd = True
|
||||
else:
|
||||
is_delayd = False
|
||||
|
||||
# get count of questions
|
||||
q_count = self.start_test(subj, test)
|
||||
|
||||
def sleep_rand():
|
||||
delay = randint(20, 40)
|
||||
logging.info("Going to wait %s sec for this question." % delay)
|
||||
time.sleep(delay)
|
||||
|
||||
# applying accuracy here. trying to make resulting
|
||||
# accuracy no less than requested.
|
||||
# accuracy NO LESSthan requested.
|
||||
spoil_count = int(q_count - q_count * (accuracy / 100))
|
||||
if int(spoil_count / q_count * (-100) + 100) < accuracy:
|
||||
spoil_count -= 1
|
||||
|
||||
# skip random `spoil_count` questions.
|
||||
# Choose questions which going to be skipped
|
||||
skip_this = []
|
||||
for i in range(0, spoil_count):
|
||||
skip_this.append(randint(1, q_count + 1))
|
||||
|
||||
# start resolve test
|
||||
for i in range(1, q_count + 1):
|
||||
if is_delayd == True:
|
||||
if is_delayed == True:
|
||||
sleep_rand()
|
||||
if i not in skip_this:
|
||||
prediction = self.predict(i)
|
||||
self.answer(i, prediction)
|
||||
if is_delayd == True:
|
||||
self.finish_test()
|
||||
|
||||
# make autocommit
|
||||
if is_delayed == True:
|
||||
self.finish_test()
|
||||
|
Reference in New Issue
Block a user