First push
This commit is contained in:
commit
4792d91de5
|
@ -0,0 +1,2 @@
|
|||
venv/
|
||||
config.py
|
|
@ -0,0 +1,22 @@
|
|||
# Get all users registred at an event
|
||||
|
||||
## API Cred
|
||||
You must register a new API key on https://profile.intra.42.fr/oauth/applications/new and create a file
|
||||
`config.py` with :
|
||||
```python
|
||||
CLIENT_ID_API42 = "<client_uid>"
|
||||
CLIENT_SECRET_API42 = "<client_secret>"
|
||||
```
|
||||
|
||||
For dependencies :
|
||||
```
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
(Or just the last command if you don't care installing package everywhere on your system)
|
||||
|
||||
## Use
|
||||
```
|
||||
python event_user.py
|
||||
```
|
|
@ -0,0 +1,105 @@
|
|||
import requests
|
||||
import datetime
|
||||
from beaupy import *
|
||||
from beaupy.spinners import *
|
||||
from prettytable import PrettyTable
|
||||
from . import config
|
||||
|
||||
############
|
||||
## CONFIG ##
|
||||
############
|
||||
CLIENT_ID_API42 = config.CLIENT_ID_API42
|
||||
CLIENT_SECRET_API42 = config.CLIENT_SECRET_API42
|
||||
ENDPOINT_API42 = "https://api.intra.42.fr/"
|
||||
|
||||
###############
|
||||
## FUNCTIONS ##
|
||||
###############
|
||||
|
||||
class EVENT:
|
||||
infos = dict()
|
||||
users = dict()
|
||||
|
||||
|
||||
def get_api_cred() -> str:
|
||||
payload = {
|
||||
'grant_type' : 'client_credentials',
|
||||
'client_id' : CLIENT_ID_API42,
|
||||
'client_secret' : CLIENT_SECRET_API42
|
||||
}
|
||||
|
||||
r = requests.post(ENDPOINT_API42 + "/oauth/token", params=payload)
|
||||
if r.status_code != 200:
|
||||
print("Can't connect to 42API. Can't check if login are correct")
|
||||
exit(1)
|
||||
return (r.json()["access_token"])
|
||||
|
||||
|
||||
def get_event_info_by_id(api_cred: str, id: str) -> dict:
|
||||
headers = {
|
||||
'Authorization' : 'Bearer ' + api_cred
|
||||
}
|
||||
r = requests.get(ENDPOINT_API42 + "/v2/events/" + id, headers=headers)
|
||||
return (r.json())
|
||||
|
||||
|
||||
def get_event_info_by_begin_date(api_cred: str, user_date: str, user_hour: str) -> dict:
|
||||
day, month, year = map(int, user_date.split('/'))
|
||||
hour, minute = map(int, user_hour.split(':'))
|
||||
iso_time = datetime.datetime(year, month, day, hour, minute).isoformat()
|
||||
headers = {
|
||||
'Authorization' : 'Bearer ' + api_cred
|
||||
}
|
||||
r = requests.get(ENDPOINT_API42 + "/v2/events/?filter[begin_at]=" + iso_time, headers=headers)
|
||||
return (r.json())
|
||||
|
||||
|
||||
def get_event_user(api_cred: str, id: str, nb_user: int) -> dict:
|
||||
headers = {
|
||||
'Authorization' : 'Bearer ' + api_cred
|
||||
}
|
||||
page = 1
|
||||
while nb_user > 0:
|
||||
r = requests.get(ENDPOINT_API42 + "/v2/events/" + str(id) + "/events_users?page[number]=" + str(page), headers=headers)
|
||||
data = r.json()
|
||||
|
||||
for a in data:
|
||||
EVENT.users[a["user"]["usual_full_name"]] = a["user"]
|
||||
nb_user -= 30
|
||||
page += 1
|
||||
|
||||
def print_user() -> None:
|
||||
t = PrettyTable()
|
||||
t.align = "l"
|
||||
t.field_names = ["Full name", "Email", "Link intra"]
|
||||
for user in EVENT.users.values():
|
||||
t.add_row([user["displayname"], user["email"], f"https://profile.intra.42.fr/users/{user['login']}"])
|
||||
print(t)
|
||||
|
||||
|
||||
console.print("[blue]Retrieve stud who register to an event[/blue]")
|
||||
console.print("Do you want to search event by id or by date ?")
|
||||
search_choice = select(["By id", "By date"])
|
||||
if "By id" in search_choice:
|
||||
id = prompt("Enter event id")
|
||||
EVENT.infos = get_event_info_by_id(get_api_cred(), id)
|
||||
elif "By date" in search_choice:
|
||||
console.print("[red]Warning ![/red] Date and hour must be UTC")
|
||||
date_entry = prompt("Enter begin_date of the event in DD/MM/YYYY format")
|
||||
hour_entry = prompt("Enter begin hour in HH:MM format")
|
||||
EVENT.infos = get_event_info_by_begin_date(get_api_cred(), date_entry, hour_entry)[0]
|
||||
|
||||
console.clear()
|
||||
console.print("[blue]Event infos :[blue]")
|
||||
console.print(f"\t[green]Name:[/green] {EVENT.infos['name']}")
|
||||
console.print(f"\t[green]Participants:[/green] {EVENT.infos['nbr_subscribers']}/{EVENT.infos['max_people']}")
|
||||
console.print(f"\t[green]Begin at:[/green] {EVENT.infos['begin_at']}")
|
||||
console.print(f"\t[green]End at:[/green] {EVENT.infos['end_at']}")
|
||||
console.print("\n")
|
||||
if confirm("Is this the correct event ?"):
|
||||
spinner_animation = ['4️⃣ 2️⃣ 👌 ', '4️⃣ 2️⃣ 👌 ', '4️⃣ 2️⃣ 👌 ', '4️⃣ 2️⃣ 👌 ', '4️⃣ 2️⃣👌 ', '4️⃣ 2️⃣💩💩💩💩💩']
|
||||
spinner = Spinner(spinner_animation, "Fetching 42API...")
|
||||
spinner.start()
|
||||
get_event_user(get_api_cred(), EVENT.infos["id"], EVENT.infos["nbr_subscribers"])
|
||||
spinner.stop()
|
||||
print_user()
|
|
@ -0,0 +1,3 @@
|
|||
beaupy==1.5.0
|
||||
prettytable==3.4.1
|
||||
requests==2.27.1
|
Loading…
Reference in New Issue