# SecureData
A library that allows for easy reading/writing of settings across repositories, as well as mail and logging.
## Author
- Tyler Woodfin
- [GitHub](https://www.github.com/tylerjwoodfin)
- [Website](http://tyler.cloud)
## Features
- Get/Set data within a JSON file in the location of your choice
- Sync with cloud providers using custom commands
- Log to a file/directory of your choice without having to configure `logger` each time
- Send/receive mail
## Structure
- Data is stored in `settings.json`
- Logs are written to `/path/to/securedata/log` by default
## Installation and Setup
```bash
python3 -m pip install securedata
securedata config
```
## Configuration
- To choose where `settings.json` is stored, use `securedata config`
- To choose where logs will be stored, edit `settings.json` and set `path -> log` to the full path to the log folder. (in other words, `{"path": "log": "/path/to/folder"}`)
### cloud syncing
- Set `settings.json -> path -> securedata -> {sync-pull/sync-push}`, like this example:
```
# example only; these commands will be unique to your cloud syncing setup
# if set, pull commands will be used before loading `settings.json` if `sync` is True; pull and push commands will be used before and after `setItem` if `sync` is True
{
"path": {
"securedata": {
"sync-pull": "rclone sync Dropbox:SecureData /home/{username}/securedata",
"sync-push": "rclone copy /home/{username}/securedata Dropbox:SecureData"
}
}
}
setItem("test", "123") # will not sync, because `sync` is not true
setItem("test", "123", sync=True) # will sync if the properties above are set
getItem("test") # will not pull from cloud before returning, because `sync` is not true
getItem("test", sync=True) # will pull from cloud before returning
```
### editFile
- see example below to enable something like `securedata edit shopping` from the terminal
- or `securedata.editFile("shopping")`, rather than `securedata.editFile("/home/{username}/path/to/shopping.md")`
- if sync-push and set-pull are set, pull commands will be used before loading the file; push commands will be used after saving
- each shortcut should have a `value` (full path to the file)
- to enable syncing, each shortcut should also have `sync` set to `true`
```
# example only; these commands will be unique to your cloud syncing setup
{
"path": {
"edit": {
"shopping": {
"value": "/home/{username}/path/to/shopping.md",
"sync": true
},
"todo": {
"value": "/home/{username}/path/to/todo.md",
"sync": false
}
"sync-pull": "rclone sync Dropbox:SecureData /home/{username}/securedata",
"sync-push": "rclone copy /home/{username}/securedata Dropbox:SecureData"
}
}
}
```
### mail
- It is NEVER a good idea to store your password in plaintext; for this reason, I strongly recommend a "throwaway" account that is only used for sending emails
- Gmail (as of May 2022) and most other mainstream email providers won't work with this; for support, search for sending mail from your email provider with `smtplib`.
- In `settings.json`, add the `email` object to make your settings file look like this example:
```
{
"email": {
"from": "throwaway@example.com",
"from_pw": "example",
"from_name": "Raspberry Pi",
"to": "destination@protonmail.com",
"smtp_server": "example.com",
"imap_server": "example.com",
"port": 123
}
}
```
## Examples
### `setItem`
```
from securedata import securedata
securedata.setItem("employee", "Tyler", "salary", 7.25)
```
results in this structure in settings.json:
```
{
"employee": {
"Tyler": {
"salary": 7.25
}
}
}
```
### `getItem`
```
from securedata import securedata
print(securedata.getItem("employee", "Tyler", "salary")) # given example settings.json above
```
```
> python3 test.py
> 7.25
```
### `editFile`
```
from securedata import securedata
# if setItem("path", "edit", "shopping", "/path/to/shopping.md") has been called, this will edit the file
# assigned to that shortcut.
# opens file in Vim, saves upon exit
securedata.editFile("shopping")
# or you can edit a file directly...
securedata.editFile("/path/to/shopping.md")
# set path -> edit -> sync-pull and path -> edit -> sync-push to specify commands that should be run for cloud integration.
```
### `mail`
```
from securedata import mail
mail.send('Test Subject', 'Test Body')
```
### `log`
```
from securedata import securedata
# writes to a file named LOG_DAILY YYYY-MM-DD in the default log folder (or securedata.getItem('path', 'log')) inside a YYYY-MM-DD folder
securedata.log("Dear Diary...")
securedata.log("This function hit a breakpoint", level="debug")
securedata.log("Looks like the server is on fire", level="critical")
securedata.log("This is fine", level="info")
# writes to a file named LOG_TEMPERATURE
securedata.log("30", logName="LOG_TEMPERATURE")
# writes to a file named LOG_TEMPERATURE in /home/{username}/weather
securedata.log("30", logName="LOG_TEMPERATURE", filePath="/home/{username}/weather")
# format
# 2021-12-29 19:29:27,896 — INFO — 30
```
## Dependencies
- Python >= 3.6
- smtplib
## Disclaimers
- Although I've done quite a bit of testing, I can't guarantee everything that works on my machine will work on yours. Always back up your data to multiple places to avoid data loss.
- If you find any issues, please contact me... or get your hands dirty and raise a PR!
```
```
Raw data
{
"_id": null,
"home_page": "https://github.com/tylerjwoodfin/securedata",
"name": "securedata",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "",
"author": "Tyler Woodfin",
"author_email": "feedback@tyler.cloud",
"download_url": "https://files.pythonhosted.org/packages/b0/93/0a91c0da437c461117306cd14b59487c2ff04c4d8da807a35063d867ac6f/securedata-2023.1.30.1.tar.gz",
"platform": null,
"description": "# SecureData\n\nA library that allows for easy reading/writing of settings across repositories, as well as mail and logging.\n\n## Author\n\n- Tyler Woodfin\n - [GitHub](https://www.github.com/tylerjwoodfin)\n - [Website](http://tyler.cloud)\n\n## Features\n\n- Get/Set data within a JSON file in the location of your choice\n- Sync with cloud providers using custom commands\n- Log to a file/directory of your choice without having to configure `logger` each time\n- Send/receive mail\n\n## Structure\n\n- Data is stored in `settings.json`\n- Logs are written to `/path/to/securedata/log` by default\n\n## Installation and Setup\n\n```bash\n python3 -m pip install securedata\n\n securedata config\n```\n\n## Configuration\n\n- To choose where `settings.json` is stored, use `securedata config`\n\n- To choose where logs will be stored, edit `settings.json` and set `path -> log` to the full path to the log folder. (in other words, `{\"path\": \"log\": \"/path/to/folder\"}`)\n\n### cloud syncing\n\n- Set `settings.json -> path -> securedata -> {sync-pull/sync-push}`, like this example:\n\n```\n# example only; these commands will be unique to your cloud syncing setup\n\n# if set, pull commands will be used before loading `settings.json` if `sync` is True; pull and push commands will be used before and after `setItem` if `sync` is True\n\n{\n \"path\": {\n \"securedata\": {\n \"sync-pull\": \"rclone sync Dropbox:SecureData /home/{username}/securedata\",\n \"sync-push\": \"rclone copy /home/{username}/securedata Dropbox:SecureData\"\n }\n }\n}\n\nsetItem(\"test\", \"123\") # will not sync, because `sync` is not true\nsetItem(\"test\", \"123\", sync=True) # will sync if the properties above are set\ngetItem(\"test\") # will not pull from cloud before returning, because `sync` is not true\ngetItem(\"test\", sync=True) # will pull from cloud before returning\n```\n\n### editFile\n\n- see example below to enable something like `securedata edit shopping` from the terminal\n - or `securedata.editFile(\"shopping\")`, rather than `securedata.editFile(\"/home/{username}/path/to/shopping.md\")`\n- if sync-push and set-pull are set, pull commands will be used before loading the file; push commands will be used after saving\n- each shortcut should have a `value` (full path to the file)\n - to enable syncing, each shortcut should also have `sync` set to `true`\n\n```\n# example only; these commands will be unique to your cloud syncing setup\n\n{\n \"path\": {\n \"edit\": {\n \"shopping\": {\n \"value\": \"/home/{username}/path/to/shopping.md\",\n \"sync\": true\n },\n \"todo\": {\n \"value\": \"/home/{username}/path/to/todo.md\",\n \"sync\": false\n }\n \"sync-pull\": \"rclone sync Dropbox:SecureData /home/{username}/securedata\",\n \"sync-push\": \"rclone copy /home/{username}/securedata Dropbox:SecureData\"\n }\n }\n}\n```\n\n### mail\n\n- It is NEVER a good idea to store your password in plaintext; for this reason, I strongly recommend a \"throwaway\" account that is only used for sending emails\n- Gmail (as of May 2022) and most other mainstream email providers won't work with this; for support, search for sending mail from your email provider with `smtplib`.\n- In `settings.json`, add the `email` object to make your settings file look like this example:\n\n```\n{\n \"email\": {\n \"from\": \"throwaway@example.com\",\n \"from_pw\": \"example\",\n \"from_name\": \"Raspberry Pi\",\n \"to\": \"destination@protonmail.com\",\n \"smtp_server\": \"example.com\",\n \"imap_server\": \"example.com\",\n \"port\": 123\n }\n}\n```\n\n## Examples\n\n### `setItem`\n\n```\nfrom securedata import securedata\n\nsecuredata.setItem(\"employee\", \"Tyler\", \"salary\", 7.25)\n```\n\nresults in this structure in settings.json:\n\n```\n{\n \"employee\": {\n \"Tyler\": {\n \"salary\": 7.25\n }\n }\n}\n```\n\n### `getItem`\n\n```\nfrom securedata import securedata\n\nprint(securedata.getItem(\"employee\", \"Tyler\", \"salary\")) # given example settings.json above\n```\n\n```\n> python3 test.py\n> 7.25\n```\n\n### `editFile`\n\n```\nfrom securedata import securedata\n\n# if setItem(\"path\", \"edit\", \"shopping\", \"/path/to/shopping.md\") has been called, this will edit the file\n# assigned to that shortcut.\n\n# opens file in Vim, saves upon exit\nsecuredata.editFile(\"shopping\")\n\n# or you can edit a file directly...\nsecuredata.editFile(\"/path/to/shopping.md\")\n\n# set path -> edit -> sync-pull and path -> edit -> sync-push to specify commands that should be run for cloud integration.\n```\n\n### `mail`\n\n```\n\nfrom securedata import mail\n\nmail.send('Test Subject', 'Test Body')\n\n```\n\n### `log`\n\n```\n\nfrom securedata import securedata\n\n# writes to a file named LOG_DAILY YYYY-MM-DD in the default log folder (or securedata.getItem('path', 'log')) inside a YYYY-MM-DD folder\n\nsecuredata.log(\"Dear Diary...\")\nsecuredata.log(\"This function hit a breakpoint\", level=\"debug\")\nsecuredata.log(\"Looks like the server is on fire\", level=\"critical\")\nsecuredata.log(\"This is fine\", level=\"info\")\n\n# writes to a file named LOG_TEMPERATURE\n\nsecuredata.log(\"30\", logName=\"LOG_TEMPERATURE\")\n\n# writes to a file named LOG_TEMPERATURE in /home/{username}/weather\n\nsecuredata.log(\"30\", logName=\"LOG_TEMPERATURE\", filePath=\"/home/{username}/weather\")\n\n # format\n # 2021-12-29 19:29:27,896 \u2014 INFO \u2014 30\n\n```\n\n## Dependencies\n\n- Python >= 3.6\n- smtplib\n\n## Disclaimers\n\n- Although I've done quite a bit of testing, I can't guarantee everything that works on my machine will work on yours. Always back up your data to multiple places to avoid data loss.\n- If you find any issues, please contact me... or get your hands dirty and raise a PR!\n\n```\n\n```\n",
"bugtrack_url": null,
"license": ": OSI Approved :: MIT License",
"summary": "Easily manage data storage and logging across repos",
"version": "2023.1.30.1",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f71c189cc6db1030d9169dea16244a618e05fcf6f66923fe3af5f5edc6876499",
"md5": "776e1a706774c5a053c2cc777b146160",
"sha256": "76c12f7d4c7151f1ff1c9f4e77fc1445255f7a36014d5229d388e8bcd4d09ad1"
},
"downloads": -1,
"filename": "securedata-2023.1.30.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "776e1a706774c5a053c2cc777b146160",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 10246,
"upload_time": "2023-01-31T05:14:13",
"upload_time_iso_8601": "2023-01-31T05:14:13.858039Z",
"url": "https://files.pythonhosted.org/packages/f7/1c/189cc6db1030d9169dea16244a618e05fcf6f66923fe3af5f5edc6876499/securedata-2023.1.30.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b0930a91c0da437c461117306cd14b59487c2ff04c4d8da807a35063d867ac6f",
"md5": "155827ea956a4a3b0e74d18eb6f2b7c4",
"sha256": "babd9bc53520387e8bb1d6c264a10c30eeeabd97e9ba533a62f6fa72941b40ef"
},
"downloads": -1,
"filename": "securedata-2023.1.30.1.tar.gz",
"has_sig": false,
"md5_digest": "155827ea956a4a3b0e74d18eb6f2b7c4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 11148,
"upload_time": "2023-01-31T05:14:15",
"upload_time_iso_8601": "2023-01-31T05:14:15.576189Z",
"url": "https://files.pythonhosted.org/packages/b0/93/0a91c0da437c461117306cd14b59487c2ff04c4d8da807a35063d867ac6f/securedata-2023.1.30.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-01-31 05:14:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "tylerjwoodfin",
"github_project": "securedata",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "securedata"
}