Compare commits

..

1 Commits

Author SHA1 Message Date
Jakub Adamski
ba1be1ec14 fixes 2022-06-15 10:32:26 +02:00
9 changed files with 102 additions and 132 deletions

View File

@ -4,11 +4,11 @@ grammar brefing;
public <brefing> = <action> {action} (<git> {git} | [repozytorium] <repo> {repo}); public <brefing> = <action> {action} (<git> {git} | [repozytorium] <repo> {repo});
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia; <repozytoria> = gra - kolko i krzyzyk | zajęcia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<git> = gicie | githubie | githubie; <git> = gicie | githubie | githubie;
<action> = [opowiedz | powiedz] co nowego na moim | [opowiedz | powiedz] co nowego w moich | (opowiedz | powiedz) mi co sie u mnie dzialo na; <action> = [opowiedz | powiedz] co nowego na moim | [opowiedz | powiedz] co nowego w moim | (opowiedz | powiedz) mi co sie u mnie dzialo na;
<repo> = <repozytoria> {repozytoria}; <repo> = <repozytoria> {repozytoria};

View File

@ -4,7 +4,7 @@ grammar issues;
public <issue> = (pokaz [mi] [moje] | wyswietl [mi] [moje] | powiedz mi o| przedstaw [mi] [moje]) [nowe | nowych] <issues> [<time>] w <repo>; public <issue> = (pokaz [mi] [moje] | wyswietl [mi] [moje] | powiedz mi o| przedstaw [mi] [moje]) [nowe | nowych] <issues> [<time>] w <repo>;
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia; <repozytoria> = gra - kolko i krzyzyk | zajęcia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<time> = <time_when> {time_when} [ostatniego | ostatnich] [<liczba> {liczba}] <timeunit> {timeunit}; <time> = <time_when> {time_when} [ostatniego | ostatnich] [<liczba> {liczba}] <timeunit> {timeunit};
@ -16,7 +16,7 @@ public <issue> = (pokaz [mi] [moje] | wyswietl [mi] [moje] | powiedz mi o| przed
<new> = [nowe] | [nowych]; <new> = [nowe] | [nowych];
<repo> = <repozytoria> {repo}; <repo> = <repozytoria> {repozytoria};
<liczba> = (dwa | dwoch | dwojki) | (trzy | trzech | trojki ) | (cztery | czterech) | (piec | pieciu ) | (szesc | szesciu ) | (siedem| siedmiu) | (osiem | osmiu) | (dziewiec | dziewieciu ); <liczba> = (dwa | dwoch | dwojki) | (trzy | trzech | trojki ) | (cztery | czterech) | (piec | pieciu ) | (szesc | szesciu ) | (siedem| siedmiu) | (osiem | osmiu) | (dziewiec | dziewieciu );

View File

@ -8,14 +8,14 @@ public <notifications> = (pokaz [mi] | wyświetl [mi] | przedstaw [mi]) [<liczba
<time_when> = z | od | ze | w; <time_when> = z | od | ze | w;
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<repo> = <repozytoria> {repo};
<timeunit> = (miesiaca | miesiecy | <miesiac>) | tygodni | miesiecy | dni; <timeunit> = (miesiaca | miesiecy | <miesiac>) | tygodni | miesiecy | dni;
<liczba> = (dwa | dwoch | dwojki | dwojki) | (trzy | trzech | trojki ) | (cztery | czterech) | (piec | pieciu ) | (szesc | szesciu ) | (siedem | siedmiu) | (osiem | osmiu) | (dziewiec | dziewieciu ); <liczba> = (dwa | dwoch | dwojki | dwojki) | (trzy | trzech | trojki ) | (cztery | czterech) | (piec | pieciu ) | (szesc | szesciu ) | (siedem | siedmiu) | (osiem | osmiu) | (dziewiec | dziewieciu );
<powiadomienia> = notif | pow | powiadomienia | notification | notifications; <powiadomienia> = notif | pow | powiadomienia | notification | notifications;
<repo> = <repozytoria> {repo};
<repozytoria> = gra - kolko i krzyzyk | zajęcia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<miesiac> = (styczen | stycznia | styczniu) | (luty | lutego | lutym) | (marzec | marca | marcu) | (kwiecien | kwietniu | kwietnia) | (maj | maja | maju) | (czerwiec | czerwca | czerwcu) | (lipiec | lipca | lipcu) | (sierpien | sierpnia | sierpniu) | (wrzesien | wrzesieniu | wrzesnia) | (pazdziernik | październiku | pazdziernika) | (listopad | listopada | listopadzie) | (grudzien | grudnia | grudniu); <miesiac> = (styczen | stycznia | styczniu) | (luty | lutego | lutym) | (marzec | marca | marcu) | (kwiecien | kwietniu | kwietnia) | (maj | maja | maju) | (czerwiec | czerwca | czerwcu) | (lipiec | lipca | lipcu) | (sierpien | sierpnia | sierpniu) | (wrzesien | wrzesieniu | wrzesnia) | (pazdziernik | październiku | pazdziernika) | (listopad | listopada | listopadzie) | (grudzien | grudnia | grudniu);

View File

@ -4,11 +4,11 @@ grammar pullrequest;
public <pull_request_zapytanie> = <action> {action} <new> <pullrequest> [w <repo> {repo}]; public <pull_request_zapytanie> = <action> {action} <new> <pullrequest> [w <repo> {repo}];
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia; <repozytoria> = gra - kolko i krzyzyk | zajęcia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<new> = [nowe] | [nowych]; <new> = [nowe] | [nowych];
<repo> = <repozytoria> {repo}; <repo> = <repozytoria> {repozytoria};
<pullrequest> = pull requesty | pull requestow; <pullrequest> = pull requesty | pull requestow;

View File

@ -2,9 +2,9 @@
grammar tests; grammar tests;
public <tests> = (pokaz mi | wyswietl mi | powiedz mi o | przedstaw mi) [<new>] <test> {test} [<time>] w <repo>; public <tests> = (pokaz mi | wyswietl mi | powiedz mi o | przedstaw mi) [<new>] <test> {test} w <repo> [<time>];
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia; <repozytoria> = gra - kolko i krzyzyk | zajęcia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
<time> = <time_when> {time_when} [ostatniego | ostatnich] [<liczba> {liczba}] <timeunit> {timeunit}; <time> = <time_when> {time_when} [ostatniego | ostatnich] [<liczba> {liczba}] <timeunit> {timeunit};
@ -18,7 +18,7 @@ public <tests> = (pokaz mi | wyswietl mi | powiedz mi o | przedstaw mi) [<new>]
<new> = [nowe] | [nowych]; <new> = [nowe] | [nowych];
<repo> = <repozytoria> {repo}; <repo> = <repozytoria> {repozytoria};
<test> = testy | testach | test; <test> = testy | testach | test;

View File

@ -1,5 +1,4 @@
repositoriesMock = ["repo1", "repo2", "repo3", "repo4"] repositoriesMock = ["repo1", "repo2", "repo3"]
repositoriesPublicMock = ["repo1", "repo2", "repo3"]
issuesMock = [ issuesMock = [
{ {
"name": "Issue 1", "name": "Issue 1",
@ -68,7 +67,7 @@ def listRepositories():
return repositoriesMock return repositoriesMock
def listPublicRepositories(): def listPublicRepositories():
return repositoriesPublicMock return repositoriesMock
def listRepositoryIssues(repositoryName): def listRepositoryIssues(repositoryName):
return issuesMock return issuesMock
@ -79,8 +78,8 @@ def listRepositoryPullRequests(repositoryName):
def listNotifications(repositoryName): def listNotifications(repositoryName):
return notificationsMock return notificationsMock
def listRepositoryTests(repositoryName):
return testMock
def getBrefing(): def getBrefing():
return brefingMock return brefingMock
def listRepositoryTests(repositoryName):
return testMock

View File

@ -5,10 +5,10 @@ import sys
commands = [ commands = [
'pomoc', 'pomoc',
'powiedz co nowego na moim repozytorium nazwa', 'powiedz co nowego w moim repozytorium x',
'do widzenia', 'do widzenia',
'pokaz issue w', 'pokaz issue w',
'pokaz mi powiadomienia w', 'pokaz mi powiadomienia',
'jakie sa pull requesty', 'jakie sa pull requesty',
'pokaz mi testy w' 'pokaz mi testy w'
] ]
@ -34,8 +34,8 @@ other = [
] ]
bye = [ bye = [
"Żegnaj!", "Żegnaj!",
"Do zobaczenia", "Do zobaczenia",
"Do widzenia", "Do widzenia",
"Miłego dnia", "Miłego dnia",
"Do widzenia i miłego dnia", "Do widzenia i miłego dnia",
@ -46,9 +46,9 @@ help = ["Obsługuję przekazywanie informacji z systemu GitHub - repozytoria, pu
time = ["Z jakiego czasu?", "Z jakiego okresu?", "Podaj z jakiego przedziału czasowego"] time = ["Z jakiego czasu?", "Z jakiego okresu?", "Podaj z jakiego przedziału czasowego"]
repo = [ repo = [
"Z jakiego repozytorium", "Z jakiego repozytorium",
"Wskaż repozytorium", "Wskaż repozytorium",
"Podaj z jakiego repozytorium chciałbyć otrzymać informacje", "Podaj z jakiego repozytorium chciałbyć otrzymać informacje",
"Określ repozytorium" "Określ repozytorium"
] ]
@ -56,98 +56,74 @@ howmany = ["Ile ostatnich elemntów chcesz zobaczyć?", "Ile ostatnich elmentów
error_time = ["Podano nie prawidłowy czas, popraw ramy czasowe", "Czas jest nie prawidłowy, podaj ponownie", "Podaj przedział czasowy jeszcze raz"] error_time = ["Podano nie prawidłowy czas, popraw ramy czasowe", "Czas jest nie prawidłowy, podaj ponownie", "Podaj przedział czasowy jeszcze raz"]
error_repo = ["Podano nieprawidłową nazwę repozytorium", "Podaj ponownie nazwę repozytorium, ponieważ podania nie prawidłową"] error_repo = ["Podano nieprawidłową nazwę repozytorium", "Podaj ponownie nazwę repozytorium, ponieważ podania nie prawidłową"]
def find(args, key):
#print(args, key)
for item in args:
if item[0] == key:
return item
def generator_jezyka_nautalnego(frame, tactic, state, text): def generator_jezyka_nautalnego(frame, tactic, state, text):
#print(tactic)
if tactic == 'null': if tactic == 'null':
beastMatch = dl.get_close_matches(text, commands) beastMatch = dl.get_close_matches(text, commands)
print(random.choice(unknown)) print(random.choice(unknown))
if len(beastMatch) > 0: if len(beastMatch) > 0:
print(random.choice(other) + ', '.join(beastMatch)) print(random.choice(other) + ', '.join(beastMatch))
elif tactic[0] == False: #ASK elif tactic[1] == 'help':
_, required_empty, act, req_args, opt_args = tactic print(random.choice(help))
# print('DEBUG: ', act, 'req', req_args, opt_args,sep = '\n') print("Dostępne komendy: \n - " + '\n - '.join(commands))
if required_empty[0] == 'repo':
print("Dodaj nazwę repozytorium na końcu komendy") elif tactic == 'bye':
print("np. w nazwarepozytorium") print(random.choice(bye))
else: print()
print(f'Proszę podaj {required_empty[0]}') sys.exit(0)
elif tactic[0] == 'ANSWER' and tactic[1] == 'issues':
print("Lista issues w repozytorium " + tactic[2][0][1] + ":")
issues = listRepositoryIssues(tactic[2][0][1])
for issue in issues:
print(issue['name'])
print(issue['description'])
print(issue['status'])
print() print()
elif tactic[0] == True: elif tactic[0] == 'ANSWER' and tactic[1] == 'pullrequest':
_, act, req_args, opt_args = tactic print("Lista pull requestów w repozytorium " + tactic[2][0][1] + ":")
# print('DEBUG: ', act, 'req', req_args, opt_args,sep = '\n') prs = listRepositoryPullRequests(tactic[2][0][1])
for pr in prs:
if act == 'help': print(pr['name'])
print(random.choice(help)) print(pr['description'])
print("Dostępne komendy: \n - " + '\n - '.join(commands)) print(pr['state'])
elif act == 'bye':
print(random.choice(bye))
print() print()
sys.exit(0)
elif act == 'hello': elif tactic[0] == 'ANSWER' and tactic[1] == 'brefing':
print(random.choice(welcome)) print("Podsumowanie w repozytorium " + tactic[2][0][1] + ":")
brefings = getBrefing()
for brefing in brefings:
print(brefing['name'])
print(brefing['description'])
print()
elif act == 'issues': elif tactic[0] == 'ANSWER' and tactic[1] == 'tests':
print("Lista issues w repozytorium " + find(req_args, 'repo')[0] + ":") print("Lista testów w repozytorium " + tactic[2][0][1] + ":")
issues = listRepositoryIssues(find(req_args, 'repo')) tests = listRepositoryTests(tactic[2][0][1])
for issue in issues: for test in tests:
print(issue['name']) print(test['name'])
print(issue['description']) print(test['description'])
print(issue['status']) print(test['status'])
print() print()
elif act == 'pullrequest': elif tactic[0] == 'ANSWER' and tactic[1] == 'notifications':
print("Lista pull requestów w repozytorium " + find(req_args, 'repo')[0] + ":") print("Lista powidomień w repozytorium " + tactic[2][0][1] + ":")
prs = listRepositoryPullRequests(find(req_args, repo)) notifications = listNotifications(tactic[2][0][1])
for pr in prs: for notification in notifications:
print(pr['name']) print(notification['name'])
print(pr['description']) print(notification['description'])
print(pr['state']) print()
print()
elif act == 'brefing': elif tactic == 'hello':
print("Podsumowanie w repozytorium " + find(req_args, 'repo')[0] + ":") print(random.choice(welcome))
brefings = getBrefing()
for brefing in brefings:
print(brefing['name'])
print(brefing['description'])
print()
elif act == 'tests': elif tactic[0] == 'QUESTION' and tactic[1][0] == 'repo':
print("Lista testów w repozytorium " + find(req_args, 'repo')[0] + ":") print("Dodaj nazwę repozytorium na końcu komendy")
tests = listRepositoryTests(find(req_args, 'repo')[0]) print("np. w nazwarepozytorium")
for test in tests:
print(test['name'])
print(test['description'])
print(test['status'])
print()
elif act == 'notifications':
print("Lista powidomień w repozytorium " + find(req_args, 'repo')[0] + ":")
notifications = listNotifications(find(req_args, 'repo')[0])
for notification in notifications:
print(notification['name'])
print(notification['description'])
print()
#
# elif tactic[0] == 'QUESTION' and act[0] == 'repo':
# print("Dodaj nazwę repozytorium na końcu komendy")
# print("np. w nazwarepozytorium")
else:
print(tactic)
else: else:
print('ERROR') print(tactic)
print() print()

View File

@ -12,10 +12,6 @@ dialogue_state = {
'counter': 0 'counter': 0
} }
def add_fact(key, value):
global dialogue_state
dialogue_state['facts'][key] = value
def monitor_stanu_dialogowego(frame): def monitor_stanu_dialogowego(frame):
not_pivot_acts = ['time', not_pivot_acts = ['time',

View File

@ -1,5 +1,4 @@
from apimock import * from apimock import *
from monitor_stanu_dialogowego import add_fact
gramar_slots = { gramar_slots = {
'pullrequest': (('action', 'optional'), 'pullrequest': (('action', 'optional'),
@ -12,7 +11,7 @@ gramar_slots = {
('repo', 'required') ('repo', 'required')
), ),
'tests': (('test', 'optional'), 'tests': (('test', 'optional'),
('repo', 'required') ('repozytoria', 'required')
), ),
'time': (('time_when', 'required'), 'time': (('time_when', 'required'),
('timeunit', 'required'), ('timeunit', 'required'),
@ -21,14 +20,14 @@ gramar_slots = {
'issues': (('time_when','optional'), 'issues': (('time_when','optional'),
('liczba','optional'), ('liczba','optional'),
('timeunit','optional'), ('timeunit','optional'),
('repo', 'required') ('repozytoria', 'required')
), ),
'number': (('liczba', 'required') 'number': (('liczba', 'required')
), ),
'help': (('functions', 'optional'), 'help': (('functions', 'optional'),
('help', 'optional') ('help', 'optional')
), ),
'repo': (('repo', 'required') 'repo': (('repozytoria', 'required')
), ),
'hello': (), 'hello': (),
'bye': (), 'bye': (),
@ -38,23 +37,23 @@ gramar_slots = {
def taktyka_dialogu(state, frame): def taktyka_dialogu(state, frame):
if frame['act'] == 'null': if frame['act'] == 'null':
return 'null' return 'null'
# if state['current_context'] in ['hello', 'pomoc', 'bye']: if state['current_context'] in ['hello', 'pomoc', 'bye']:
# return short_thread(state) return short_thread(state)
# else: else:
return long_thread(state) return long_thread(state)
# def short_thread(state): def short_thread(state):
# if state['current_context'] == 'pomoc': if state['current_context'] == 'pomoc':
# return state['current_context'] return state['current_context']
# else: else:
# return state['current_context'] return state['current_context']
def validate_repo(repo): def validate_repo(repo):
if repo not in listRepositories(): if repo not in listRepositories():
print('repo not in listRepositories') return 'repo not in listRepositories'
if repo not in listPublicRepositories(): if repo not in listPublicRepositories():
print('repo not in listPublicRepositories') return 'repo not in listPublicRepositories'
def long_thread(state): def long_thread(state):
act = state['current_context'] act = state['current_context']
if act == None: if act == None:
@ -64,13 +63,13 @@ def long_thread(state):
slots = topic['slots'] slots = topic['slots']
required = gramar_slots[act] required = gramar_slots[act]
req_args, opt_args = agregate(required, slots) req_args, opt_args = agregate(required, slots)
facts = state['facts'] facts = state['facts']# osobno validuj repo z req i z facts
req_args = add_facts(req_args, facts) req_args = add_facts(req_args, facts)
opt_args = add_facts(opt_args, facts) opt_args = add_facts(opt_args, facts)
required_empty = check_req(req_args) required_empty = check_req(req_args)
if required_empty: if required_empty:
return False, required_empty[0], act, req_args, opt_args #slot do uzupełnienia return "QUESTION", required_empty[0] #slot do uzupełnienia
return True, act, req_args, opt_args #wyświetl użytkownikowi return "ANSWER", act, req_args, opt_args #wyświetl użytkownikowi
def check_req(req_args): def check_req(req_args):
req = [] req = []
@ -82,13 +81,12 @@ def check_req(req_args):
def add_facts(args, facts): def add_facts(args, facts):
for key, value in facts.items(): for key, value in facts.items():
for idx, item in enumerate(args): for idx, item in enumerate(args):
if key == item[0]: if key == item[0] and value != None and item[1] == None:
if value != None and item[1] == None: args[idx] = value
args[idx][1] = value if key == 'repo':
if key == 'repo': validate_repo(value)
validate_repo(value)
if value == None and item[1] != None:
add_fact(key, item[1])
return args return args
def agregate(grammar, slots): def agregate(grammar, slots):
@ -103,3 +101,4 @@ def agregate(grammar, slots):
elif item[1] == 'optional': elif item[1] == 'optional':
opt_args.append([item[0], value]) opt_args.append([item[0], value])
return req_args, opt_args return req_args, opt_args