**Versions Supported**

**Language Stats**


**Repo Stats**
[](https://github.com/thevickypedia/fileware/blob/main/LICENSE)
[](https://api.github.com/repos/thevickypedia/fileware)
[](https://api.github.com/repos/thevickypedia/fileware)
**Code Stats**


**Activity**
[](https://api.github.com/repos/thevickypedia/fileware)
[](https://api.github.com/repos/thevickypedia/fileware)
[](https://api.github.com/repos/thevickypedia/fileware)
**Build Status**
[](https://github.com/thevickypedia/gmail-connector/actions/workflows/python-publish.yml)
[](https://github.com/thevickypedia/gmail-connector/actions/workflows/pages/pages-build-deployment)
# FileWare
Set up a file server to access files in local machine from anywhere on the internet.
### Setup
**Environment Variables:**
- `username`: Username to confirm identity. Defaults to user profile name.
- `password`: Password for authentication.
- `port`: Port number to serve. Defaults to `4443`.
- `host_path`: Path which is to be hosted. Defaults to `home` page.
**To host on a public facing URL:**
- `ngrok_auth`: Ngrok token.
### Usage
```shell
python3 -m pip install fileware
```
**With Threading**
```python
from threading import Thread
import fileware
fileware.models.env.port = 4568
fileware.models.env.host_dir = "movies"
if __name__ == '__main__':
# Initiates the connection and creates a new process if ngrok auth token is valid.
response = fileware.initiate_connection()
print(response.url)
# Runs the server in a thread alongside starting the ngrok process created previously.
thread = Thread(target=fileware.serve,
kwargs={'http_server': response.server, 'process': response.process})
thread.start()
# Do your own task here
# Shutdown the server and join the thread which spun the server up.
fileware.shutdown(http_server=response.server, process=response.process)
thread.join(2e+1)
```
**Without Threading - File Server will terminate only when the main process is killed.**
```python
import fileware
if __name__ == '__main__':
response = fileware.initiate_connection()
print(response.url)
fileware.serve(http_server=response.server,process=response.process)
```
> Env vars can be loaded by placing a .env file in current working directory.
>
> The `serve` function can also take arguments which can be used to override env vars.
### Pypi Package
[](https://packaging.python.org/tutorials/packaging-projects/)
[https://pypi.org/project/fileware/](https://pypi.org/project/fileware/)
## Coding Standards
Docstring format: [`Google`](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings)
Styling conventions: [`PEP 8`](https://www.python.org/dev/peps/pep-0008/)
Clean code with pre-commit hooks: [`flake8`](https://flake8.pycqa.org/en/latest/) and
[`isort`](https://pycqa.github.io/isort/)
## Linting
`PreCommit` will ensure linting, and the doc creation are run on every commit.
**Requirement**
```shell
pip install --no-cache pre-commit recommonmark sphinx==5.1.1
```
**Usage**
```shell
pre-commit run --all-files
```
## Pypi Package
[](https://packaging.python.org/tutorials/packaging-projects/)
[https://pypi.org/project/fileware/](https://pypi.org/project/fileware/)
## Runbook
[](https://www.sphinx-doc.org/en/master/man/sphinx-autogen.html)
[https://thevickypedia.github.io/fileware/](https://thevickypedia.github.io/fileware/)
## License & copyright
© Vignesh Rao
Licensed under the [MIT License](https://github.com/thevickypedia/fileware/blob/main/LICENSE)