1
0
favro-sync/setup.py
2025-01-23 13:46:01 +01:00

169 lines
4.4 KiB
Python

# WARNING
#
# THIS IS AN AUTOGENERATED FILE.
#
# MANUAL CHANGES CAN AND WILL BE OVERWRITTEN.
import re
from setuptools import setup
PACKAGE_NAME = 'favro_sync'
PACKAGE_DESCRIPTION = """
# Favro Sync.
Filesystem in User Space for Favro.
Synchronize your local notes and your Favro.
Uses the [Favro API](https://favro.com/developer/). Rate limiting depends upon
your organization's payment plan.
Uses [`python-fuse`](https://github.com/libfuse/python-fuse) library.
## Features
The feature set is mainly aimed towards giving a better writing experience in
Favro. Management and organization features have been left out.
Features:
- Access collections and cards in a file hierarchy.
- Read card features:
- Title
- Description
- Tags
- Assignees
- Dependencies
- Custom fields
- Change card features:
- Title
- Description
- [Obsidian](https://obsidian.md/) compatibility:
- Mountable within your vault.
- Link to cards by either card number or card title.
- Tags and dependencies are integrated.
Limitations:
- Tasks (checklists on cards) cannot be updated or changed.
- Images cannot be updated or changed.
- You cannot create new cards, nor any other files.
- Collection order is not presented.
## Usage
1. Install dependencies `pip install -r requirements.txt`
2. Setup [secrets](https://gitfub.space/Jmaa/secret_loader]): `FAVRO_ORGANIZATION_ID`, `FAVRO_USERNAME`, `FAVRO_PASSWORD`.
3. Run `python -m favro_sync <MOUNT_DIR>`. Use the `--help` argument to get an
overview of all supported flags (there is a lot, because
[`python-fuse`](https://github.com/libfuse/python-fuse) implements a whole
bunch automatically.)
Use `umount` to unmount the mounted directory again.
### Directory structure and latency
Directory structure is something like:
```
mount
-> Collection A
-> CARD-101
-> CARD-111
-> ...
-> Collection B
-> CARD-201
-> CARD-221
-> ...
-> ...
```
Some programs like Obsidian eagerly load and cache unneeded files in memory,
which can reduce performance when those files are fetched over a network. You
can limit this by configuring favro-sync to only expose individual collections
by adding a `FAVRO_COLLECTION_FILTER` secret containing allowed collection
names, like so:
```
Collection A
Collection B
```
## Architecture
- `FavroFuse`
- Markdown Parser/Renderer
- `FavroClient`
- `CardCache`
## Work in Progress
Following features are work in progress:
- [ ] Frontmatter: Writable Tags
- [ ] Frontmatter: Writable assigned members
- [ ] Frontmatter: Writable Tasks.
1. Save updated TaskList along with card (using `PUT cards`)
2. Get the Card's TaskList.
3. Remove all TaskList's except for the latest (how to determine latest?)
4. That's three requests just to save a freaking list of tasks!
- [ ] Frontmatter: Writable Dependencies.
- [ ] Usability: Allow users to toggle Obsidian mode, instead of being default.
- [ ] Precision: Get the correct last-modified date.
- [ ] Performance: Improve cache behaviour. User and tags can have much longer cache times.
- [ ] Performance: Parallelize requests.
* Paginated pages can be easily parallelize.
- [X] Usability: Richer directory structure
- [X] Frontmatter: Arbitrary structured data (Custom Fields)? Read-only.
- [X] Frontmatter: Readable Dependencies. As vault links in Obsidian mode.
""".strip()
PACKAGE_DESCRIPTION_SHORT = """
Filesystem in User Space for Favro.""".strip()
def parse_version_file(text: str) -> str:
match = re.match(r'^__version__\s*=\s*(["\'])([\d\.]+)\1$', text)
if match is None:
msg = 'Malformed _version.py file!'
raise Exception(msg)
return match.group(2)
with open(PACKAGE_NAME + '/_version.py') as f:
version = parse_version_file(f.read())
REQUIREMENTS_MAIN = [
'requests',
'requests-cache',
'fuse-python',
'secret_loader @ git+https://gitfub.space/Jmaa/secret_loader',
'requests_util @ git+https://gitfub.space/Jmaa/requests_util',
'marko',
'python-frontmatter',
]
REQUIREMENTS_TEST = [
'pytest',
]
setup(
name=PACKAGE_NAME,
version=version,
description=PACKAGE_DESCRIPTION_SHORT,
long_description=PACKAGE_DESCRIPTION,
long_description_content_type='text/markdown',
author='Jon Michael Aanes',
author_email='jonjmaa@gmail.com',
url='https://gitfub.space/Jmaa/' + PACKAGE_NAME,
packages=[PACKAGE_NAME],
install_requires=REQUIREMENTS_MAIN,
extras_require={
'test': REQUIREMENTS_TEST,
},
python_requires='>=3.9',
)