Compare commits

..

10 Commits

Author SHA1 Message Date
22ff3d58d3 core: better annimations 2023-11-06 15:53:59 +01:00
617b67df24 split test 2023-11-06 14:36:28 +01:00
a17f09e04b create package and separate code 2023-11-06 14:26:40 +01:00
3c96defea3 add: test to profiles 2023-11-05 18:15:48 +01:00
1900a6f390 add: profiles class 2023-11-05 18:15:29 +01:00
dc8b64573e fix: profiles url 2023-11-05 18:15:11 +01:00
3a0c41e7f4 speak english 2023-11-03 22:26:25 +01:00
8441eb98e5 add: requirements.txt 2023-11-03 22:25:35 +01:00
519a405baf add: readme 2023-11-03 22:25:27 +01:00
e1d102a9c6 core: add include to linter 2023-11-03 22:22:50 +01:00
16 changed files with 172 additions and 79 deletions

23
README.md Normal file
View File

@ -0,0 +1,23 @@
# 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
```

5
requirements.txt Normal file
View File

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

3
setup.py Normal file
View File

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

View File

@ -1,14 +0,0 @@
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']

0
src/__init__.py Normal file
View File

View File

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

View File

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

27
src/profile.py Normal file
View File

@ -0,0 +1,27 @@
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)

18
src/profiles.py Normal file
View File

@ -0,0 +1,18 @@
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)

View File

@ -1,56 +0,0 @@
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_register: str = accounts + "register"
profiles: str = "profiles"
profiles: str = api + "profiles/"
profiles_page: str = profiles

0
tests/__init__.py Normal file
View File

35
tests/accounts.py Normal file
View File

@ -0,0 +1,35 @@
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)

19
tests/profiles.py Normal file
View File

@ -0,0 +1,19 @@
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)

22
tests/test.py Normal file
View File

@ -0,0 +1,22 @@
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()

9
tests/utils.py Normal file
View File

@ -0,0 +1,9 @@
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)