Skip to content

Commit f17c1dd

Browse files
authored
Added FsNode.info.mimetype (#119)
Now devs can easy check mimetype of a file 👍 Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
1 parent 5368265 commit f17c1dd

File tree

6 files changed

+21
-3
lines changed

6 files changed

+21
-3
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
All notable changes to this project will be documented in this file.
44

5-
## [0.2.0 - 2023-09-11]
5+
## [0.2.0 - 2023-09-13]
6+
7+
### Added
8+
9+
- FilesAPI: `FsNode.info` added `mimetype` property.
610

711
### Changed
812

nc_py_api/ex_app/ui/files.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def to_fs_node(self) -> FsNode:
7171
file_id=file_id + self.instanceId if self.instanceId else file_id,
7272
fileid=self.fileId,
7373
last_modified=datetime.utcfromtimestamp(self.mtime).replace(tzinfo=timezone.utc),
74+
mimetype=self.mime,
7475
)
7576

7677

nc_py_api/files/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def __init__(self, **kwargs):
2525
"content_length": kwargs.get("content_length", 0),
2626
"size": kwargs.get("size", 0),
2727
"permissions": kwargs.get("permissions", ""),
28+
"mimetype": kwargs.get("mimetype", ""),
2829
}
2930
self.favorite = kwargs.get("favorite", False)
3031
self.is_version = False
@@ -48,6 +49,11 @@ def size(self) -> int:
4849
"""In the case of directories it is the size of all content, for files it is equal to ``content_length``."""
4950
return self._raw_data["size"]
5051

52+
@property
53+
def mimetype(self) -> str:
54+
"""Mimetype of a file. Empty for the directories."""
55+
return self._raw_data["mimetype"]
56+
5157
@property
5258
def permissions(self) -> str:
5359
"""Permissions for the object."""

nc_py_api/files/files.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"d:resourcetype",
2626
"d:getlastmodified",
2727
"d:getcontentlength",
28+
"d:getcontenttype",
2829
"d:getetag",
2930
"oc:size",
3031
"oc:id",
@@ -609,6 +610,8 @@ def _parse_record(full_path: str, prop_stats: list[dict]) -> FsNode:
609610
fs_node_args["etag"] = prop["d:getetag"]
610611
if "d:getlastmodified" in prop_keys:
611612
fs_node_args["last_modified"] = prop["d:getlastmodified"]
613+
if "d:getcontenttype" in prop_keys:
614+
fs_node_args["mimetype"] = prop["d:getcontenttype"]
612615
if "oc:permissions" in prop_keys:
613616
fs_node_args["permissions"] = prop["oc:permissions"]
614617
if "oc:favorite" in prop_keys:

tests/actual_tests/files_test.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ def test_fs_node_fields(nc_any):
381381
assert result.info.content_length == 0
382382
assert result.info.permissions == "RGDNVCK"
383383
assert result.info.favorite is False
384+
assert not result.info.mimetype
384385
elif result.name == "test_empty_child_dir":
385386
assert result.user_path == "test_dir/test_empty_child_dir/"
386387
assert result.is_dir
@@ -389,6 +390,7 @@ def test_fs_node_fields(nc_any):
389390
assert result.info.content_length == 0
390391
assert result.info.permissions == "RGDNVCK"
391392
assert result.info.favorite is False
393+
assert not result.info.mimetype
392394
elif result.name == "test_generated_image.png":
393395
assert result.user_path == "test_dir/test_generated_image.png"
394396
assert not result.is_dir
@@ -397,6 +399,7 @@ def test_fs_node_fields(nc_any):
397399
assert result.info.size == result.info.content_length
398400
assert result.info.permissions == "RGDNVW"
399401
assert result.info.favorite is True
402+
assert result.info.mimetype == "image/png"
400403
elif result.name == "test_empty_text.txt":
401404
assert result.user_path == "test_dir/test_empty_text.txt"
402405
assert not result.is_dir
@@ -405,6 +408,7 @@ def test_fs_node_fields(nc_any):
405408
assert not result.info.content_length
406409
assert result.info.permissions == "RGDNVW"
407410
assert result.info.favorite is False
411+
assert result.info.mimetype == "text/plain"
408412

409413
res_by_id = nc_any.files.by_id(result.file_id)
410414
assert res_by_id

tests/actual_tests/ui_files_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def ui_action_check(directory: str, fs_object: FsNode):
8686
name=fs_object.name,
8787
directory=directory,
8888
etag=fs_object.etag,
89-
mime="",
89+
mime=fs_object.info.mimetype,
9090
fileType="dir" if fs_object.is_dir else "file",
9191
mtime=int(fs_object.info.last_modified.timestamp()),
9292
size=fs_object.info.size,
@@ -105,7 +105,7 @@ def ui_action_check(directory: str, fs_object: FsNode):
105105
assert fs_node.full_path == fs_object.full_path
106106
assert fs_node.file_id == fs_object.file_id
107107
assert fs_node.is_dir == fs_object.is_dir
108-
# assert fs_node.mime == fs_object.mime
108+
assert fs_node.info.mimetype == fs_object.info.mimetype
109109
assert fs_node.info.permissions == fs_object.info.permissions
110110
assert fs_node.info.last_modified == fs_object.info.last_modified
111111
assert fs_node.info.favorite == fs_object.info.favorite

0 commit comments

Comments
 (0)