Compare commits

..

No commits in common. "22ff3d58d3208ab8493a63425b401f2ed6c0ca40" and "4938e05c4aec77e0701fc3d060b9027428cb0cde" have entirely different histories.

16 changed files with 79 additions and 172 deletions

View File

@ -1,23 +0,0 @@
# Python lib
A python lib to interract with the api more easier
## Installation
- Clone the project:
``` bash
git clone https://git.chauvet.pro/michel/ft_transcendence
cd ft_transcendence
git switch python-api
```
- Create python virtual environnement.
``` bash
python3 -m venv .env
```
- Source the environnement.
``` bash
source .env/bin/activate
```
- Install the requirements
``` bash
pip install -r requirements.txt
```

View File

@ -1,5 +0,0 @@
certifi==2023.7.22
charset-normalizer==3.3.2
idna==3.4
requests==2.31.0
urllib3==2.0.7

View File

@ -1,3 +0,0 @@
from setuptools import setup, find_packages
setup(name='transcendence_api', version='1.0', packages=find_packages())

View File

@ -1,9 +1,6 @@
from src import urls import urls
from requests import Response class Account:
class Accounts:
def __init__(self, client): def __init__(self, client):
self._client = client self._client = client

View File

@ -1,17 +1,18 @@
import requests import requests
from requests import Response, Request, Session from requests import Response, Request, Session
from src.profiles import Profiles import Profile
from src.accounts import Accounts import Accounts
from src import urls
import urls
class Client: class Client:
def __init__(self, url: str): def __init__(self, url: str):
self.url: str = url self.url: str = url
self.token: str = None self.token: str = None
self.session: Session = Session() self.session: Session = Session()
self.accounts: Accounts = Accounts(self) self.accounts: Account = Accounts.Account(self)
self.profiles: Profiles = Profiles(self) self.profile = Profile.Profile
def is_authentificate(self): def is_authentificate(self):
return (not self.token is None) return (not self.token is None)

14
src/Profile.py Normal file
View File

@ -0,0 +1,14 @@
import urls
import Client
from requests import Response
class Profile:
def __init__(self, client, user_id: int):
response: Response = client._get(urls.profiles_page + str(user_id))
if (response.content == b'Profile Not Found'):
return None
content: dict = eval(response.content)
self.username = content['username']
self.password = content['password']

View File

View File

@ -1,27 +0,0 @@
class Profile:
def __init__(self, data: dict = None, username: str = None, title: str = None):
if (data is None):
self._from_value(username, title)
else:
self._from_dict(data)
def _from_value(self, username: str, title: str):
self.username = username
self.title = title
return self
def _from_dict(self, data: dict):
self._from_value(data.get('username'), data.get('title'))
return self
def __eq__(self, other):
if isinstance(other, Profile):
return self.username == other.username and self.title == other.title
return False
def __ne__(self, other):
return not self.__eq__(other)

View File

@ -1,18 +0,0 @@
from src import urls
from src.profile import Profile
from requests import Response
class Profiles:
def __init__(self, client):
self.client = client
def get(self, user_id: int):
response: Response = self.client._get(urls.profiles_page + str(user_id))
if response.status_code == 404:
return None
content: dict = eval(response.content)
return Profile(data = content)

56
src/tests.py Normal file
View File

@ -0,0 +1,56 @@
import Client
from urls import *
from uuid import uuid4
def test(value, expected_value, title, description = None):
if (value == expected_value):
print(title, "[OK]")
return
print (title, "[ERROR]")
print ("expected", expected_value, ", got", value)
if not description is None:
print (description)
def test_accounts_register(client, username, password):
print ("REGISTER")
test(client.accounts.create(username, password), b'ok: user added', 'normal', None)
print()
def test_accounts_login(client, username, password):
print ("LOGIN")
test(client.login(username, password), b'ok: account valid', "normal", None)
print()
def test_accounts_delete(client):
print ("DELETE")
test(client.accounts.delete(), b'ok: account has been deleted', 'normal')
print()
def test_profile_get(client):
pass
def tests():
username = uuid4()
password = uuid4()
client = Client.Client("http://0.0.0.0:8000/")
test_accounts_register(client, username, password)
test_accounts_login(client, username, password)
test_accounts_delete(client)
test_profile_get(client)
if __name__ == "__main__":
tests()

View File

@ -5,5 +5,5 @@ accounts_login: str = accounts + "login"
accounts_delete: str = accounts + "delete" accounts_delete: str = accounts + "delete"
accounts_register: str = accounts + "register" accounts_register: str = accounts + "register"
profiles: str = api + "profiles/" profiles: str = "profiles"
profiles_page: str = profiles profiles_page: str = profiles

View File

View File

@ -1,35 +0,0 @@
from uuid import uuid4
from tests.utils import test
def test_accounts_register(client, username, password):
print ("REGISTER")
test(client.accounts.create, (username, password), b'ok: user added', 'normal', None)
print()
def test_accounts_login(client, username, password):
print ("LOGIN")
test(client.login, (username, password), b'ok: account valid', "normal", None)
print()
def test_accounts_delete(client):
print ("DELETE")
test(client.accounts.delete, (), b'ok: account has been deleted', 'normal')
print()
def test_accounts(client):
username = uuid4()
password = uuid4()
test_accounts_register(client, username, password)
test_accounts_login(client, username, password)
test_accounts_delete(client)

View File

@ -1,19 +0,0 @@
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..')) # Add parent directory to system path
from tests.utils import test
from src.profile import Profile
def test_profiles_get(client):
print ("GET")
test(client.profiles.get, (1, ), Profile(username="997e13f5-474d-4fea-b55a-ad8a27b9534b", title=""), "normal")
print()
def test_profiles(client):
test_profiles_get(client)

View File

@ -1,22 +0,0 @@
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..')) # Add parent directory to system path
from src.client import Client
from src import urls
from tests.accounts import test_accounts
from tests.profiles import test_profiles
def tests():
client = Client("http://0.0.0.0:8000/")
print("ACCOUNTS".center(os.get_terminal_size()[0], '-'))
test_accounts(client)
print("PROFILES".center(os.get_terminal_size()[0], '-'))
test_profiles(client)
if __name__ == "__main__":
tests()

View File

@ -1,9 +0,0 @@
def test(func: callable, params, expected_value, title: str, description = None):
print(title, end=" ")
if (func(*params) == expected_value):
print("[OK]")
return
print ("[ERROR]")
print ("expected", expected_value, ", got", value)
if not description is None:
print (description)