Skip to content

Commit cf350cd

Browse files
committed
feat: created util functions for initial setup
0 parents  commit cf350cd

File tree

7 files changed

+290
-0
lines changed

7 files changed

+290
-0
lines changed

.gitignore

+160
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# Byte-compiled / optimized / DLL files
2+
__pycache__/
3+
*.py[cod]
4+
*$py.class
5+
6+
# C extensions
7+
*.so
8+
9+
# Distribution / packaging
10+
.Python
11+
build/
12+
develop-eggs/
13+
dist/
14+
downloads/
15+
eggs/
16+
.eggs/
17+
lib/
18+
lib64/
19+
parts/
20+
sdist/
21+
var/
22+
wheels/
23+
share/python-wheels/
24+
*.egg-info/
25+
.installed.cfg
26+
*.egg
27+
MANIFEST
28+
29+
# PyInstaller
30+
# Usually these files are written by a python script from a template
31+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
32+
*.manifest
33+
*.spec
34+
35+
# Installer logs
36+
pip-log.txt
37+
pip-delete-this-directory.txt
38+
39+
# Unit test / coverage reports
40+
htmlcov/
41+
.tox/
42+
.nox/
43+
.coverage
44+
.coverage.*
45+
.cache
46+
nosetests.xml
47+
coverage.xml
48+
*.cover
49+
*.py,cover
50+
.hypothesis/
51+
.pytest_cache/
52+
cover/
53+
54+
# Translations
55+
*.mo
56+
*.pot
57+
58+
# Django stuff:
59+
*.log
60+
local_settings.py
61+
db.sqlite3
62+
db.sqlite3-journal
63+
64+
# Flask stuff:
65+
instance/
66+
.webassets-cache
67+
68+
# Scrapy stuff:
69+
.scrapy
70+
71+
# Sphinx documentation
72+
docs/_build/
73+
74+
# PyBuilder
75+
.pybuilder/
76+
target/
77+
78+
# Jupyter Notebook
79+
.ipynb_checkpoints
80+
81+
# IPython
82+
profile_default/
83+
ipython_config.py
84+
85+
# pyenv
86+
# For a library or package, you might want to ignore these files since the code is
87+
# intended to run in multiple environments; otherwise, check them in:
88+
# .python-version
89+
90+
# pipenv
91+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
93+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
94+
# install all needed dependencies.
95+
#Pipfile.lock
96+
97+
# poetry
98+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99+
# This is especially recommended for binary packages to ensure reproducibility, and is more
100+
# commonly ignored for libraries.
101+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102+
#poetry.lock
103+
104+
# pdm
105+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106+
#pdm.lock
107+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108+
# in version control.
109+
# https://pdm.fming.dev/#use-with-ide
110+
.pdm.toml
111+
112+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113+
__pypackages__/
114+
115+
# Celery stuff
116+
celerybeat-schedule
117+
celerybeat.pid
118+
119+
# SageMath parsed files
120+
*.sage.py
121+
122+
# Environments
123+
.env
124+
.venv
125+
env/
126+
venv/
127+
ENV/
128+
env.bak/
129+
venv.bak/
130+
131+
# Spyder project settings
132+
.spyderproject
133+
.spyproject
134+
135+
# Rope project settings
136+
.ropeproject
137+
138+
# mkdocs documentation
139+
/site
140+
141+
# mypy
142+
.mypy_cache/
143+
.dmypy.json
144+
dmypy.json
145+
146+
# Pyre type checker
147+
.pyre/
148+
149+
# pytype static type analyzer
150+
.pytype/
151+
152+
# Cython debug symbols
153+
cython_debug/
154+
155+
# PyCharm
156+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158+
# and can be added to the global gitignore or merged into this file. For a more nuclear
159+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
160+
#.idea/

__init__.py

Whitespace-only changes.

axios.py

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from io import BufferedReader
2+
from typing import Dict, List
3+
import requests as req
4+
5+
6+
class Axios:
7+
def __init__(self, url: str):
8+
self.url = url
9+
10+
def parse_url_params(self, params: Dict[str, str]):
11+
try:
12+
if params is not None and isinstance(params, dict):
13+
for key, value in params.items():
14+
self.url += f"&{key}={value}"
15+
except Exception as e:
16+
print(e)
17+
return e
18+
19+
def get(self, headers: Dict[str, str] = None, **kwargs) -> dict | Exception:
20+
try:
21+
self.parse_url_params(kwargs.get("params", None))
22+
r = req.get(self.url, headers=headers)
23+
r.raise_for_status()
24+
return r.json()
25+
except Exception as e:
26+
print(e)
27+
return e
28+
29+
def post(
30+
self, body=None, headers: Dict[str, str] = None, **kwargs
31+
) -> dict | Exception:
32+
try:
33+
self.parse_url_params(kwargs.get("params", None))
34+
r = req.post(self.url, data=body, headers=headers)
35+
r.raise_for_status()
36+
return r.json()
37+
except Exception as e:
38+
print(e)
39+
return e
40+
41+
def read_files(self, files: List[str]) -> List[BufferedReader]:
42+
file_list = []
43+
for file in files:
44+
with open(file, "rb") as f:
45+
file_list.append(f)
46+
return file_list
47+
48+
def post_file(
49+
self, file: List[str], headers: Dict[str, str] = None, **kwargs
50+
) -> dict | Exception:
51+
try:
52+
self.parse_url_params(kwargs.get("params", None))
53+
files = self.read_files(file)
54+
r = req.post(self.url, files=files, headers=headers)
55+
r.raise_for_status()
56+
return r.json()
57+
except Exception as e:
58+
print(e)
59+
return e

config.py

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# configuration file for project
2+
class Config:
3+
lighthouse_api = "https://api.lighthouse.storage"
4+
lighthouse_node = "https://node.lighthouse.storage"
5+
lighthouse_bls_node = "https://encryption.lighthouse.storage"

deploy.py

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from axios import Axios
2+
from utils import is_dir, walk_dir_tree
3+
from config import Config
4+
5+
6+
def deploy(source: str, token: str):
7+
"""
8+
Deploy a file or directory to the lighthouse network
9+
@params {source}: str, path to file or directory
10+
@params {token}: str, lighthouse api token
11+
"""
12+
try:
13+
# create http object
14+
axios = Axios(Config.lighthouse_node)
15+
# create list of files to upload
16+
file_list = []
17+
# check if source is a directory
18+
if is_dir(source):
19+
# walk directory tree and add files to list
20+
walk_dir_tree(source, file_list)
21+
else:
22+
# add file to list
23+
file_list.append(source)
24+
25+
# create headers
26+
"""
27+
"Content-type": `multipart/form-data; boundary= ${data._boundary}`,
28+
"Encryption": false,
29+
"Mime-Type": mimeType,
30+
"""
31+
headers = {
32+
"Authorization": f"Bearer {token}",
33+
"Content-Type": "multipart/form-data",
34+
"Encryption": "false",
35+
"Mime-Type": "application/octet-stream",
36+
}
37+
# upload files
38+
axios.post_file(file_list, headers)
39+
except Exception as e:
40+
print(e)

readme.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Lighthouse.py
2+
3+
Lighthouse is a permanent decentralized file storage protocol that allows the ability to pay once and store forever. While traditionally, users need to repeatedly keep track and pay for their storage after every fixed amount of time, Lighthouse manages this for them and makes sure that user files are stored forever. The aim is to move users from a rent-based cost model where they are renting their own files on cloud storage to a permanent ownership model. It is built on top of IPFS, Filecoin, and Polygon. It uses the existing miner network and storage capacity of the filecoin network.
4+
5+
# Installation
6+
7+
```
8+
pip install lighthouse.py
9+
```

utils.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/usr/bin/env python3
2+
3+
import os
4+
from typing import List
5+
6+
# walk path and return list of file paths
7+
def walk_dir_tree(path: str) -> List[str]:
8+
file_list = []
9+
for root, dirs, files in os.walk(path):
10+
for file in files:
11+
file_list.append(os.path.join(root, file))
12+
return file_list
13+
14+
15+
# check if file is a directory
16+
def is_dir(path: str) -> bool:
17+
return os.path.isdir(path)

0 commit comments

Comments
 (0)