lfss 0.12.1__tar.gz → 0.12.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. {lfss-0.12.1 → lfss-0.12.2}/PKG-INFO +10 -11
  2. {lfss-0.12.1 → lfss-0.12.2}/Readme.md +1 -1
  3. {lfss-0.12.1 → lfss-0.12.2}/docs/Client.md +1 -2
  4. {lfss-0.12.1 → lfss-0.12.2}/docs/changelog.md +4 -0
  5. {lfss-0.12.1 → lfss-0.12.2}/lfss/cli/cli.py +13 -9
  6. {lfss-0.12.1 → lfss-0.12.2}/lfss/eng/utils.py +5 -1
  7. {lfss-0.12.1 → lfss-0.12.2}/pyproject.toml +11 -10
  8. {lfss-0.12.1 → lfss-0.12.2}/docs/Enviroment_variables.md +0 -0
  9. {lfss-0.12.1 → lfss-0.12.2}/docs/Known_issues.md +0 -0
  10. {lfss-0.12.1 → lfss-0.12.2}/docs/Permission.md +0 -0
  11. {lfss-0.12.1 → lfss-0.12.2}/docs/Webdav.md +0 -0
  12. {lfss-0.12.1 → lfss-0.12.2}/frontend/api.js +0 -0
  13. {lfss-0.12.1 → lfss-0.12.2}/frontend/index.html +0 -0
  14. {lfss-0.12.1 → lfss-0.12.2}/frontend/info.css +0 -0
  15. {lfss-0.12.1 → lfss-0.12.2}/frontend/info.js +0 -0
  16. {lfss-0.12.1 → lfss-0.12.2}/frontend/login.css +0 -0
  17. {lfss-0.12.1 → lfss-0.12.2}/frontend/login.js +0 -0
  18. {lfss-0.12.1 → lfss-0.12.2}/frontend/popup.css +0 -0
  19. {lfss-0.12.1 → lfss-0.12.2}/frontend/popup.js +0 -0
  20. {lfss-0.12.1 → lfss-0.12.2}/frontend/scripts.js +0 -0
  21. {lfss-0.12.1 → lfss-0.12.2}/frontend/state.js +0 -0
  22. {lfss-0.12.1 → lfss-0.12.2}/frontend/styles.css +0 -0
  23. {lfss-0.12.1 → lfss-0.12.2}/frontend/thumb.css +0 -0
  24. {lfss-0.12.1 → lfss-0.12.2}/frontend/thumb.js +0 -0
  25. {lfss-0.12.1 → lfss-0.12.2}/frontend/utils.js +0 -0
  26. {lfss-0.12.1 → lfss-0.12.2}/lfss/api/__init__.py +0 -0
  27. {lfss-0.12.1 → lfss-0.12.2}/lfss/api/connector.py +0 -0
  28. {lfss-0.12.1 → lfss-0.12.2}/lfss/cli/__init__.py +0 -0
  29. {lfss-0.12.1 → lfss-0.12.2}/lfss/cli/balance.py +0 -0
  30. {lfss-0.12.1 → lfss-0.12.2}/lfss/cli/cli_lib.py +0 -0
  31. {lfss-0.12.1 → lfss-0.12.2}/lfss/cli/log.py +0 -0
  32. {lfss-0.12.1 → lfss-0.12.2}/lfss/cli/panel.py +0 -0
  33. {lfss-0.12.1 → lfss-0.12.2}/lfss/cli/serve.py +0 -0
  34. {lfss-0.12.1 → lfss-0.12.2}/lfss/cli/user.py +0 -0
  35. {lfss-0.12.1 → lfss-0.12.2}/lfss/cli/vacuum.py +0 -0
  36. {lfss-0.12.1 → lfss-0.12.2}/lfss/eng/__init__.py +0 -0
  37. {lfss-0.12.1 → lfss-0.12.2}/lfss/eng/bounded_pool.py +0 -0
  38. {lfss-0.12.1 → lfss-0.12.2}/lfss/eng/config.py +0 -0
  39. {lfss-0.12.1 → lfss-0.12.2}/lfss/eng/connection_pool.py +0 -0
  40. {lfss-0.12.1 → lfss-0.12.2}/lfss/eng/database.py +0 -0
  41. {lfss-0.12.1 → lfss-0.12.2}/lfss/eng/datatype.py +0 -0
  42. {lfss-0.12.1 → lfss-0.12.2}/lfss/eng/error.py +0 -0
  43. {lfss-0.12.1 → lfss-0.12.2}/lfss/eng/log.py +0 -0
  44. {lfss-0.12.1 → lfss-0.12.2}/lfss/eng/thumb.py +0 -0
  45. {lfss-0.12.1 → lfss-0.12.2}/lfss/sql/init.sql +0 -0
  46. {lfss-0.12.1 → lfss-0.12.2}/lfss/sql/pragma.sql +0 -0
  47. {lfss-0.12.1 → lfss-0.12.2}/lfss/svc/app.py +0 -0
  48. {lfss-0.12.1 → lfss-0.12.2}/lfss/svc/app_base.py +0 -0
  49. {lfss-0.12.1 → lfss-0.12.2}/lfss/svc/app_dav.py +0 -0
  50. {lfss-0.12.1 → lfss-0.12.2}/lfss/svc/app_native.py +0 -0
  51. {lfss-0.12.1 → lfss-0.12.2}/lfss/svc/common_impl.py +0 -0
  52. {lfss-0.12.1 → lfss-0.12.2}/lfss/svc/request_log.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lfss
3
- Version: 0.12.1
3
+ Version: 0.12.2
4
4
  Summary: Lite file storage service
5
5
  Home-page: https://github.com/MenxLi/lfss
6
6
  Author: Li, Mengxun
@@ -10,16 +10,15 @@ Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Programming Language :: Python :: 3.10
11
11
  Classifier: Programming Language :: Python :: 3.11
12
12
  Classifier: Programming Language :: Python :: 3.12
13
- Requires-Dist: aiofiles (==24.*)
14
- Requires-Dist: aiosqlite (==0.*)
15
- Requires-Dist: fastapi (==0.*)
16
- Requires-Dist: mimesniff (==1.*)
17
- Requires-Dist: pillow
18
- Requires-Dist: python-multipart
13
+ Provides-Extra: all
14
+ Requires-Dist: aiofiles (==24.*) ; extra == "all"
15
+ Requires-Dist: aiosqlite (==0.*) ; extra == "all"
16
+ Requires-Dist: fastapi[standard] (==0.*) ; extra == "all"
17
+ Requires-Dist: mimesniff (==1.*) ; extra == "all"
18
+ Requires-Dist: pillow ; extra == "all"
19
19
  Requires-Dist: requests (==2.*)
20
- Requires-Dist: rich
21
- Requires-Dist: stream-zip (==0.*)
22
- Requires-Dist: uvicorn (==0.*)
20
+ Requires-Dist: rich ; extra == "all"
21
+ Requires-Dist: stream-zip (==0.*) ; extra == "all"
23
22
  Project-URL: Repository, https://github.com/MenxLi/lfss
24
23
  Description-Content-Type: text/markdown
25
24
 
@@ -41,7 +40,7 @@ Tested on 2 million files, and it is still fast.
41
40
 
42
41
  Usage:
43
42
  ```sh
44
- pip install lfss
43
+ pip install "lfss[all]"
45
44
  lfss-user add <username> <password>
46
45
  lfss-serve
47
46
  ```
@@ -16,7 +16,7 @@ Tested on 2 million files, and it is still fast.
16
16
 
17
17
  Usage:
18
18
  ```sh
19
- pip install lfss
19
+ pip install "lfss[all]"
20
20
  lfss-user add <username> <password>
21
21
  lfss-serve
22
22
  ```
@@ -3,8 +3,7 @@
3
3
 
4
4
  To install python CLI tools without dependencies (to avoid conflicts with your existing packages):
5
5
  ```sh
6
- pip install requests
7
- pip install lfss --no-deps
6
+ pip install lfss
8
7
  ```
9
8
 
10
9
  Then set the `LFSS_ENDPOINT`, `LFSS_TOKEN` environment variables,
@@ -1,5 +1,9 @@
1
1
  ## 0.12
2
2
 
3
+ ### 0.12.2
4
+ - Setup optional dependencies
5
+ - Present only the name by default for CLI list command
6
+
3
7
  ### 0.12.1
4
8
  - Add `cat` command
5
9
  - Use unicode icons for CLI list command
@@ -55,14 +55,18 @@ def print_path_list(
55
55
  print("[F]", end=" ")
56
56
  case _:
57
57
  print("[?]", end=" ")
58
- print(decode_uri_components(r.url), end="")
59
- if detailed:
60
- if isinstance(r, FileRecord):
61
- print(f" | {fmt_storage_size(r.file_size)}, permission={r.permission.name}, created={r.create_time}, accessed={r.access_time}")
58
+ # if not detailed, only print name
59
+ if not detailed:
60
+ if isinstance(r, DirectoryRecord):
61
+ assert r.url.endswith("/")
62
+ print(decode_uri_components(r.url).rstrip("/").split("/")[-1], end="/")
62
63
  else:
63
- print()
64
+ print(decode_uri_components(r.url).split("/")[-1], end="")
64
65
  else:
65
- print()
66
+ print(decode_uri_components(r.url), end="")
67
+ if isinstance(r, FileRecord):
68
+ print(f" :: {fmt_storage_size(r.file_size)} {r.permission.name}", end="")
69
+ print()
66
70
 
67
71
  for d in line_sep(dirs, end=False):
68
72
  print_ln(d)
@@ -117,7 +121,7 @@ def parse_arguments():
117
121
  sp_list.add_argument("path", help="Path to list", type=str)
118
122
  sp_list.add_argument("--offset", type=int, default=0, help="Offset of the list")
119
123
  sp_list.add_argument("--limit", type=int, default=100, help="Limit of the list")
120
- sp_list.add_argument("-l", "--long", action="store_true", help="Detailed list, including all metadata")
124
+ sp_list.add_argument("-l", "--long", action="store_true", help="Detailed list")
121
125
  sp_list.add_argument("--order", "--order-by", type=str, help="Order of the list", default="", choices=typing.get_args(FileSortKey))
122
126
  sp_list.add_argument("--reverse", "--order-desc", action="store_true", help="Reverse the list order")
123
127
 
@@ -126,7 +130,7 @@ def parse_arguments():
126
130
  sp_list_d.add_argument("path", help="Path to list", type=str)
127
131
  sp_list_d.add_argument("--offset", type=int, default=0, help="Offset of the list")
128
132
  sp_list_d.add_argument("--limit", type=int, default=100, help="Limit of the list")
129
- sp_list_d.add_argument("-l", "--long", action="store_true", help="Detailed list, including all metadata")
133
+ sp_list_d.add_argument("-l", "--long", action="store_true", help="Detailed list")
130
134
  sp_list_d.add_argument("--order", "--order-by", type=str, help="Order of the list", default="", choices=typing.get_args(DirSortKey))
131
135
  sp_list_d.add_argument("--reverse", "--order-desc", action="store_true", help="Reverse the list order")
132
136
 
@@ -136,7 +140,7 @@ def parse_arguments():
136
140
  sp_list_f.add_argument("--offset", type=int, default=0, help="Offset of the list")
137
141
  sp_list_f.add_argument("--limit", type=int, default=100, help="Limit of the list")
138
142
  sp_list_f.add_argument("-r", "--recursive", "--flat", action="store_true", help="List files recursively")
139
- sp_list_f.add_argument("-l", "--long", action="store_true", help="Detailed list, including all metadata")
143
+ sp_list_f.add_argument("-l", "--long", action="store_true", help="Detailed list")
140
144
  sp_list_f.add_argument("--order", "--order-by", type=str, help="Order of the list", default="", choices=typing.get_args(FileSortKey))
141
145
  sp_list_f.add_argument("--reverse", "--order-desc", action="store_true", help="Reverse the list order")
142
146
 
@@ -3,7 +3,6 @@ import urllib.parse
3
3
  import pathlib
4
4
  import functools
5
5
  import hashlib
6
- import aiofiles
7
6
  import asyncio
8
7
  from asyncio import Lock
9
8
  from collections import OrderedDict
@@ -11,6 +10,11 @@ from concurrent.futures import ThreadPoolExecutor
11
10
  from typing import TypeVar, Callable, Awaitable
12
11
  from functools import wraps, partial
13
12
  from uuid import uuid4
13
+ try:
14
+ # optional dependency for client-side
15
+ import aiofiles
16
+ except ImportError:
17
+ pass
14
18
 
15
19
  async def copy_file(source: str|pathlib.Path, destination: str|pathlib.Path):
16
20
  async with aiofiles.open(source, mode='rb') as src:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "lfss"
3
- version = "0.12.1"
3
+ version = "0.12.2"
4
4
  description = "Lite file storage service"
5
5
  authors = ["Li, Mengxun <mengxunli@whu.edu.cn>"]
6
6
  readme = "Readme.md"
@@ -11,15 +11,16 @@ include = ["Readme.md", "docs/*", "frontend/*", "lfss/sql/*"]
11
11
  [tool.poetry.dependencies]
12
12
  python = ">=3.10" # PEP-622
13
13
  requests = "2.*"
14
- aiosqlite = "0.*"
15
- aiofiles = "24.*"
16
- mimesniff = "1.*"
17
- fastapi = "0.*"
18
- uvicorn = "0.*"
19
- stream-zip = "0.*"
20
- python-multipart = "*"
21
- pillow = "*"
22
- rich = "*"
14
+ aiosqlite = {"version" = "0.*", "optional" = true}
15
+ aiofiles = {"version" = "24.*", "optional" = true}
16
+ mimesniff = {"version" = "1.*", "optional" = true}
17
+ stream-zip = {"version" = "0.*", "optional" = true}
18
+ pillow = {"version" = "*", "optional" = true}
19
+ rich = {"version" = "*", "optional" = true}
20
+ fastapi = {"version" = "0.*", "optional" = true, "extras" = ["standard"]}
21
+
22
+ [tool.poetry.extras]
23
+ all = ["aiosqlite", "aiofiles", "mimesniff", "fastapi", "stream-zip", "pillow", "rich"]
23
24
 
24
25
  [tool.poetry.dev-dependencies]
25
26
  pytest = "*"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes