Skip to content

Commit b98e217

Browse files
committed
feat: added tests for deploy directory function
1 parent 3945aff commit b98e217

File tree

6 files changed

+76
-24
lines changed

6 files changed

+76
-24
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ coverage.xml
5050
.hypothesis/
5151
.pytest_cache/
5252
cover/
53-
tests/*.txt
53+
tests/testdir
5454

5555
# Translations
5656
*.mo

lighthouse/axios.py

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
11
#!/usr/bin/env python3
22

33
from io import BufferedReader
4-
from typing import Dict, List
4+
from typing import Dict, List, Tuple
55
import requests as req
6+
from . import types as t
67

78

89
class Axios:
910
def __init__(self, url: str):
1011
self.url = url
1112

12-
def parse_url_params(self, params: Dict[str, str]):
13+
def parse_url_query(self, query: Dict[str, str]):
1314
try:
14-
if params is not None and isinstance(params, dict):
15-
for key, value in params.items():
15+
if query is not None and isinstance(query, dict):
16+
for key, value in query.items():
1617
self.url += f"&{key}={value}"
1718
except Exception as e:
1819
raise e
1920

2021
def get(self, headers: Dict[str, str] = None, **kwargs) -> dict | Exception:
2122
try:
22-
self.parse_url_params(kwargs.get("params", None))
23+
self.parse_url_query(kwargs.get("query", None))
2324
r = req.get(self.url, headers=headers)
2425
r.raise_for_status()
2526
return r.json()
@@ -30,27 +31,57 @@ def post(
3031
self, body=None, headers: Dict[str, str] = None, **kwargs
3132
) -> dict | Exception:
3233
try:
33-
self.parse_url_params(kwargs.get("params", None))
34+
self.parse_url_query(kwargs.get("query", None))
3435
r = req.post(self.url, data=body, headers=headers)
3536
r.raise_for_status()
3637
return r.json()
3738
except Exception as e:
3839
raise e
3940

40-
def read_files(self, files: List[str]) -> List[BufferedReader]:
41+
def extract_file_name(self, file: str) -> str:
42+
return file.split("/")[-1]
43+
44+
def extract_file_last_dir(self, file: str) -> str:
45+
return file.split("/")[-2]
46+
47+
def read_files(self, files: t.FileDict) -> List[Tuple[BufferedReader]]:
4148
file_list = []
42-
for file in files:
43-
file_list.append(open(file, "rb"))
49+
for file in files["files"]:
50+
if files["is_dir"]:
51+
file_list.append(
52+
(
53+
"file",
54+
(
55+
file,
56+
open(file, "rb"),
57+
"application/octet-stream",
58+
),
59+
)
60+
)
61+
else:
62+
file_list.append(
63+
(
64+
"file",
65+
(
66+
self.extract_file_name(file),
67+
open(file, "rb"),
68+
"application/octet-stream",
69+
),
70+
),
71+
)
4472
return file_list
4573

4674
def post_files(
47-
self, file: List[str], headers: Dict[str, str] = None, **kwargs
75+
self, file: t.FileDict, headers: Dict[str, str] = None, **kwargs
4876
) -> dict | Exception:
4977
try:
50-
self.parse_url_params(kwargs.get("params", None))
78+
self.parse_url_query(kwargs.get("query", None))
5179
files = self.read_files(file)
52-
r = req.post(self.url, files=files, headers=headers)
80+
r = req.post(self.url, headers=headers, files=files)
5381
r.raise_for_status()
54-
return r.json()
82+
try:
83+
return r.json()
84+
except Exception:
85+
return r.text
5586
except Exception as e:
5687
raise e

lighthouse/deploy.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22

3-
from typing import List
3+
from typing import Dict, List, Tuple
44
from .axios import Axios
55
from .utils import is_dir, walk_dir_tree
66
from .config import Config
@@ -17,23 +17,25 @@ def deploy(source: str, token: str) -> t.Deploy:
1717
# create http object
1818
axios = Axios(Config.lighthouse_node + "/api/v0/add")
1919
# create list of files to upload
20-
file_list: List[str] = []
20+
file_dict: t.FileDict = {}
2121
# check if source is a directory
2222
if is_dir(source):
2323
# walk directory tree and add files to list
24-
walk_dir_tree(source, file_list)
24+
file_dict["files"] = walk_dir_tree(source)
25+
file_dict["is_dir"] = True
2526
else:
2627
# add file to list
27-
file_list.append(source)
28+
file_dict["files"] = [source]
29+
file_dict["is_dir"] = False
2830

2931
# create headers
3032
headers = {
3133
"Authorization": f"Bearer {token}",
32-
"Content-Type": "multipart/form-data",
34+
# "Content-Type": "multipart/form-data",
3335
"Encryption": "false",
3436
"Mime-Type": "application/octet-stream",
3537
}
3638
# upload files
37-
return axios.post_files(file_list, headers)
39+
return {"data": axios.post_files(file_dict, headers)}
3840
except Exception as e:
3941
raise e

lighthouse/types.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,11 @@
88
class Deploy(TypedDict):
99
"""typings for deploy function"""
1010

11-
data: dict
11+
data: dict | str
12+
13+
14+
class FileDict(TypedDict):
15+
"""typings for file dict"""
16+
17+
files: List[str]
18+
is_dir: bool

tests/deploy.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,18 @@
44
from main import Lighthouse
55

66

7-
def test_deploy():
7+
def test_deploy_file():
88
"""test deploy function"""
99
l = Lighthouse(os.environ["LH_TOKEN"])
10-
assert l.deploy("tests/testfile.txt") == {"data": {}}
10+
res = l.deploy("tests/testdir/testfile.txt")
11+
assert res.get("data") != None
12+
assert res.get("data").get("Hash") != None
13+
14+
15+
def test_deploy_dir():
16+
"""test deploy function"""
17+
l = Lighthouse(os.environ["LH_TOKEN"])
18+
res = l.deploy("tests/testdir")
19+
assert res.get("data") != None
20+
assert isinstance(res.get("data"), str) == True
21+
assert "Hash" in res.get("data")

tests/setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ def parse_env():
1717
def run_test():
1818
"""setup test environment and run tests"""
1919
parse_env()
20-
dt.test_deploy()
20+
dt.test_deploy_file()
21+
dt.test_deploy_dir()
2122

2223

2324
if __name__ == "__main__":

0 commit comments

Comments
 (0)