nc-py-api 0.12.0__py3-none-any.whl → 0.13.0__py3-none-any.whl

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.
nc_py_api/_version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """Version of nc_py_api."""
2
2
 
3
- __version__ = "0.12.0"
3
+ __version__ = "0.13.0"
@@ -0,0 +1,137 @@
1
+ """Nextcloud API for registering Events listeners for ExApps."""
2
+
3
+ import dataclasses
4
+
5
+ from .._exceptions import NextcloudExceptionNotFound
6
+ from .._misc import require_capabilities
7
+ from .._session import AsyncNcSessionApp, NcSessionApp
8
+
9
+ _EP_SUFFIX: str = "events_listener"
10
+
11
+
12
+ @dataclasses.dataclass
13
+ class EventsListener:
14
+ """EventsListener description."""
15
+
16
+ def __init__(self, raw_data: dict):
17
+ self._raw_data = raw_data
18
+
19
+ @property
20
+ def event_type(self) -> str:
21
+ """Main type of event, e.g. ``node_event``."""
22
+ return self._raw_data["event_type"]
23
+
24
+ @property
25
+ def event_subtypes(self) -> str:
26
+ """Subtypes for which fire event, e.g. ``NodeCreatedEvent``, ``NodeDeletedEvent``."""
27
+ return self._raw_data["event_subtypes"]
28
+
29
+ @property
30
+ def action_handler(self) -> str:
31
+ """Relative ExApp url which will be called by Nextcloud."""
32
+ return self._raw_data["action_handler"]
33
+
34
+ def __repr__(self):
35
+ return f"<{self.__class__.__name__} event_type={self.event_type}, handler={self.action_handler}>"
36
+
37
+
38
+ class EventsListenerAPI:
39
+ """API for registering Events listeners, avalaible as **nc.events_handler.<method>**."""
40
+
41
+ def __init__(self, session: NcSessionApp):
42
+ self._session = session
43
+
44
+ def register(
45
+ self,
46
+ event_type: str,
47
+ callback_url: str,
48
+ event_subtypes: list[str] | None = None,
49
+ ) -> None:
50
+ """Registers or edits the events listener."""
51
+ if event_subtypes is None:
52
+ event_subtypes = []
53
+ require_capabilities("app_api", self._session.capabilities)
54
+ params = {
55
+ "eventType": event_type,
56
+ "actionHandler": callback_url,
57
+ "eventSubtypes": event_subtypes,
58
+ }
59
+ self._session.ocs("POST", f"{self._session.ae_url}/{_EP_SUFFIX}", json=params)
60
+
61
+ def unregister(self, event_type: str, not_fail=True) -> None:
62
+ """Removes the events listener."""
63
+ require_capabilities("app_api", self._session.capabilities)
64
+ try:
65
+ self._session.ocs(
66
+ "DELETE",
67
+ f"{self._session.ae_url}/{_EP_SUFFIX}",
68
+ params={"eventType": event_type},
69
+ )
70
+ except NextcloudExceptionNotFound as e:
71
+ if not not_fail:
72
+ raise e from None
73
+
74
+ def get_entry(self, event_type: str) -> EventsListener | None:
75
+ """Get information about the event listener."""
76
+ require_capabilities("app_api", self._session.capabilities)
77
+ try:
78
+ return EventsListener(
79
+ self._session.ocs(
80
+ "GET",
81
+ f"{self._session.ae_url}/{_EP_SUFFIX}",
82
+ params={"eventType": event_type},
83
+ )
84
+ )
85
+ except NextcloudExceptionNotFound:
86
+ return None
87
+
88
+
89
+ class AsyncEventsListenerAPI:
90
+ """API for registering Events listeners, avalaible as **nc.events_handler.<method>**."""
91
+
92
+ def __init__(self, session: AsyncNcSessionApp):
93
+ self._session = session
94
+
95
+ async def register(
96
+ self,
97
+ event_type: str,
98
+ callback_url: str,
99
+ event_subtypes: list[str] | None = None,
100
+ ) -> None:
101
+ """Registers or edits the events listener."""
102
+ if event_subtypes is None:
103
+ event_subtypes = []
104
+ require_capabilities("app_api", await self._session.capabilities)
105
+ params = {
106
+ "eventType": event_type,
107
+ "actionHandler": callback_url,
108
+ "eventSubtypes": event_subtypes,
109
+ }
110
+ await self._session.ocs("POST", f"{self._session.ae_url}/{_EP_SUFFIX}", json=params)
111
+
112
+ async def unregister(self, event_type: str, not_fail=True) -> None:
113
+ """Removes the events listener."""
114
+ require_capabilities("app_api", await self._session.capabilities)
115
+ try:
116
+ await self._session.ocs(
117
+ "DELETE",
118
+ f"{self._session.ae_url}/{_EP_SUFFIX}",
119
+ params={"eventType": event_type},
120
+ )
121
+ except NextcloudExceptionNotFound as e:
122
+ if not not_fail:
123
+ raise e from None
124
+
125
+ async def get_entry(self, event_type: str) -> EventsListener | None:
126
+ """Get information about the event listener."""
127
+ require_capabilities("app_api", await self._session.capabilities)
128
+ try:
129
+ return EventsListener(
130
+ await self._session.ocs(
131
+ "GET",
132
+ f"{self._session.ae_url}/{_EP_SUFFIX}",
133
+ params={"eventType": event_type},
134
+ )
135
+ )
136
+ except NextcloudExceptionNotFound:
137
+ return None
@@ -0,0 +1,153 @@
1
+ """Nextcloud API for registering OCC commands for ExApps."""
2
+
3
+ import dataclasses
4
+
5
+ from .._exceptions import NextcloudExceptionNotFound
6
+ from .._misc import clear_from_params_empty, require_capabilities
7
+ from .._session import AsyncNcSessionApp, NcSessionApp
8
+
9
+ _EP_SUFFIX: str = "occ_command"
10
+
11
+
12
+ @dataclasses.dataclass
13
+ class OccCommand:
14
+ """OccCommand description."""
15
+
16
+ def __init__(self, raw_data: dict):
17
+ self._raw_data = raw_data
18
+
19
+ @property
20
+ def name(self) -> str:
21
+ """Unique ID for the command."""
22
+ return self._raw_data["name"]
23
+
24
+ @property
25
+ def description(self) -> str:
26
+ """Command description."""
27
+ return self._raw_data["description"]
28
+
29
+ @property
30
+ def hidden(self) -> bool:
31
+ """Flag determining ss command hidden or not."""
32
+ return bool(self._raw_data["hidden"])
33
+
34
+ @property
35
+ def arguments(self) -> dict:
36
+ """Look at PHP Symfony framework for details."""
37
+ return self._raw_data["arguments"]
38
+
39
+ @property
40
+ def options(self) -> str:
41
+ """Look at PHP Symfony framework for details."""
42
+ return self._raw_data["options"]
43
+
44
+ @property
45
+ def usages(self) -> str:
46
+ """Look at PHP Symfony framework for details."""
47
+ return self._raw_data["usages"]
48
+
49
+ @property
50
+ def action_handler(self) -> str:
51
+ """Relative ExApp url which will be called by Nextcloud."""
52
+ return self._raw_data["execute_handler"]
53
+
54
+ def __repr__(self):
55
+ return f"<{self.__class__.__name__} name={self.name}, handler={self.action_handler}>"
56
+
57
+
58
+ class OccCommandsAPI:
59
+ """API for registering OCC commands, avalaible as **nc.occ_command.<method>**."""
60
+
61
+ def __init__(self, session: NcSessionApp):
62
+ self._session = session
63
+
64
+ def register(
65
+ self,
66
+ name: str,
67
+ callback_url: str,
68
+ arguments: list | None = None,
69
+ options: list | None = None,
70
+ usages: list | None = None,
71
+ description: str = "",
72
+ hidden: bool = False,
73
+ ) -> None:
74
+ """Registers or edit the OCC command."""
75
+ require_capabilities("app_api", self._session.capabilities)
76
+ params = {
77
+ "name": name,
78
+ "description": description,
79
+ "arguments": arguments,
80
+ "hidden": int(hidden),
81
+ "options": options,
82
+ "usages": usages,
83
+ "execute_handler": callback_url,
84
+ }
85
+ clear_from_params_empty(["arguments", "options", "usages"], params)
86
+ self._session.ocs("POST", f"{self._session.ae_url}/{_EP_SUFFIX}", json=params)
87
+
88
+ def unregister(self, name: str, not_fail=True) -> None:
89
+ """Removes the OCC command."""
90
+ require_capabilities("app_api", self._session.capabilities)
91
+ try:
92
+ self._session.ocs("DELETE", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
93
+ except NextcloudExceptionNotFound as e:
94
+ if not not_fail:
95
+ raise e from None
96
+
97
+ def get_entry(self, name: str) -> OccCommand | None:
98
+ """Get information of the OCC command."""
99
+ require_capabilities("app_api", self._session.capabilities)
100
+ try:
101
+ return OccCommand(self._session.ocs("GET", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name}))
102
+ except NextcloudExceptionNotFound:
103
+ return None
104
+
105
+
106
+ class AsyncOccCommandsAPI:
107
+ """Async API for registering OCC commands, avalaible as **nc.occ_command.<method>**."""
108
+
109
+ def __init__(self, session: AsyncNcSessionApp):
110
+ self._session = session
111
+
112
+ async def register(
113
+ self,
114
+ name: str,
115
+ callback_url: str,
116
+ arguments: list | None = None,
117
+ options: list | None = None,
118
+ usages: list | None = None,
119
+ description: str = "",
120
+ hidden: bool = False,
121
+ ) -> None:
122
+ """Registers or edit the OCC command."""
123
+ require_capabilities("app_api", await self._session.capabilities)
124
+ params = {
125
+ "name": name,
126
+ "description": description,
127
+ "arguments": arguments,
128
+ "hidden": int(hidden),
129
+ "options": options,
130
+ "usages": usages,
131
+ "execute_handler": callback_url,
132
+ }
133
+ clear_from_params_empty(["arguments", "options", "usages"], params)
134
+ await self._session.ocs("POST", f"{self._session.ae_url}/{_EP_SUFFIX}", json=params)
135
+
136
+ async def unregister(self, name: str, not_fail=True) -> None:
137
+ """Removes the OCC command."""
138
+ require_capabilities("app_api", await self._session.capabilities)
139
+ try:
140
+ await self._session.ocs("DELETE", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
141
+ except NextcloudExceptionNotFound as e:
142
+ if not not_fail:
143
+ raise e from None
144
+
145
+ async def get_entry(self, name: str) -> OccCommand | None:
146
+ """Get information of the OCC command."""
147
+ require_capabilities("app_api", await self._session.capabilities)
148
+ try:
149
+ return OccCommand(
150
+ await self._session.ocs("GET", f"{self._session.ae_url}/{_EP_SUFFIX}", params={"name": name})
151
+ )
152
+ except NextcloudExceptionNotFound:
153
+ return None
@@ -282,12 +282,13 @@ class FilePermissions(enum.IntFlag):
282
282
  """Access to re-share object(s)"""
283
283
 
284
284
 
285
- def permissions_to_str(permissions: int, is_dir: bool = False) -> str:
285
+ def permissions_to_str(permissions: int | str, is_dir: bool = False) -> str:
286
286
  """Converts integer permissions to string permissions.
287
287
 
288
288
  :param permissions: concatenation of ``FilePermissions`` integer flags.
289
289
  :param is_dir: Flag indicating is permissions related to the directory object or not.
290
290
  """
291
+ permissions = int(permissions) if not isinstance(permissions, int) else permissions
291
292
  r = ""
292
293
  if permissions & FilePermissions.PERMISSION_SHARE:
293
294
  r += "R"
nc_py_api/nextcloud.py CHANGED
@@ -30,6 +30,8 @@ from .activity import _ActivityAPI, _AsyncActivityAPI
30
30
  from .apps import _AppsAPI, _AsyncAppsAPI
31
31
  from .calendar import _CalendarAPI
32
32
  from .ex_app.defs import LogLvl
33
+ from .ex_app.events_listener import AsyncEventsListenerAPI, EventsListenerAPI
34
+ from .ex_app.occ_commands import AsyncOccCommandsAPI, OccCommandsAPI
33
35
  from .ex_app.providers.providers import AsyncProvidersApi, ProvidersApi
34
36
  from .ex_app.ui.ui import AsyncUiApi, UiApi
35
37
  from .files.files import AsyncFilesAPI, FilesAPI
@@ -304,6 +306,10 @@ class NextcloudApp(_NextcloudBasic):
304
306
  """Nextcloud UI API for ExApps"""
305
307
  providers: ProvidersApi
306
308
  """API for registering providers for Nextcloud"""
309
+ events_listener: EventsListenerAPI
310
+ """API for registering Events listeners for ExApps"""
311
+ occ_commands: OccCommandsAPI
312
+ """API for registering OCC command for ExApps"""
307
313
 
308
314
  def __init__(self, **kwargs):
309
315
  """The parameters will be taken from the environment.
@@ -316,6 +322,8 @@ class NextcloudApp(_NextcloudBasic):
316
322
  self.preferences_ex = PreferencesExAPI(self._session)
317
323
  self.ui = UiApi(self._session)
318
324
  self.providers = ProvidersApi(self._session)
325
+ self.events_listener = EventsListenerAPI(self._session)
326
+ self.occ_commands = OccCommandsAPI(self._session)
319
327
 
320
328
  def log(self, log_lvl: LogLvl, content: str) -> None:
321
329
  """Writes log to the Nextcloud log file."""
@@ -421,6 +429,10 @@ class AsyncNextcloudApp(_AsyncNextcloudBasic):
421
429
  """Nextcloud UI API for ExApps"""
422
430
  providers: AsyncProvidersApi
423
431
  """API for registering providers for Nextcloud"""
432
+ events_listener: AsyncEventsListenerAPI
433
+ """API for registering Events listeners for ExApps"""
434
+ occ_commands: AsyncOccCommandsAPI
435
+ """API for registering OCC command for ExApps"""
424
436
 
425
437
  def __init__(self, **kwargs):
426
438
  """The parameters will be taken from the environment.
@@ -433,6 +445,8 @@ class AsyncNextcloudApp(_AsyncNextcloudBasic):
433
445
  self.preferences_ex = AsyncPreferencesExAPI(self._session)
434
446
  self.ui = AsyncUiApi(self._session)
435
447
  self.providers = AsyncProvidersApi(self._session)
448
+ self.events_listener = AsyncEventsListenerAPI(self._session)
449
+ self.occ_commands = AsyncOccCommandsAPI(self._session)
436
450
 
437
451
  async def log(self, log_lvl: LogLvl, content: str) -> None:
438
452
  """Writes log to the Nextcloud log file."""
nc_py_api/users.py CHANGED
@@ -378,5 +378,5 @@ def _create(user_id: str, display_name: str | None, **kwargs) -> dict[str, typin
378
378
  if k in kwargs:
379
379
  data[k] = kwargs[k]
380
380
  if display_name is not None:
381
- data["displayname"] = display_name
381
+ data["displayName"] = display_name
382
382
  return data
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: nc-py-api
3
- Version: 0.12.0
3
+ Version: 0.13.0
4
4
  Summary: Nextcloud Python Framework
5
5
  Project-URL: Changelog, https://github.com/cloud-py-api/nc_py_api/blob/main/CHANGELOG.md
6
6
  Project-URL: Documentation, https://cloud-py-api.github.io/nc_py_api/
@@ -38,13 +38,24 @@ Provides-Extra: app
38
38
  Requires-Dist: uvicorn[standard]>=0.23.2; extra == 'app'
39
39
  Provides-Extra: bench
40
40
  Requires-Dist: matplotlib; extra == 'bench'
41
- Requires-Dist: nc-py-api[app]; extra == 'bench'
42
41
  Requires-Dist: numpy; extra == 'bench'
43
42
  Requires-Dist: py-cpuinfo; extra == 'bench'
43
+ Requires-Dist: uvicorn[standard]>=0.23.2; extra == 'bench'
44
44
  Provides-Extra: calendar
45
45
  Requires-Dist: caldav==1.3.6; extra == 'calendar'
46
46
  Provides-Extra: dev
47
- Requires-Dist: nc-py-api[bench,calendar,dev-min]; extra == 'dev'
47
+ Requires-Dist: caldav==1.3.6; extra == 'dev'
48
+ Requires-Dist: coverage; extra == 'dev'
49
+ Requires-Dist: huggingface-hub; extra == 'dev'
50
+ Requires-Dist: matplotlib; extra == 'dev'
51
+ Requires-Dist: numpy; extra == 'dev'
52
+ Requires-Dist: pillow; extra == 'dev'
53
+ Requires-Dist: pre-commit; extra == 'dev'
54
+ Requires-Dist: py-cpuinfo; extra == 'dev'
55
+ Requires-Dist: pylint; extra == 'dev'
56
+ Requires-Dist: pytest; extra == 'dev'
57
+ Requires-Dist: pytest-asyncio; extra == 'dev'
58
+ Requires-Dist: uvicorn[standard]>=0.23.2; extra == 'dev'
48
59
  Provides-Extra: dev-min
49
60
  Requires-Dist: coverage; extra == 'dev-min'
50
61
  Requires-Dist: huggingface-hub; extra == 'dev-min'
@@ -55,12 +66,13 @@ Requires-Dist: pytest; extra == 'dev-min'
55
66
  Requires-Dist: pytest-asyncio; extra == 'dev-min'
56
67
  Provides-Extra: docs
57
68
  Requires-Dist: autodoc-pydantic>=2.0.1; extra == 'docs'
58
- Requires-Dist: nc-py-api[app,calendar]; extra == 'docs'
69
+ Requires-Dist: caldav==1.3.6; extra == 'docs'
59
70
  Requires-Dist: sphinx-copybutton; extra == 'docs'
60
71
  Requires-Dist: sphinx-inline-tabs; extra == 'docs'
61
72
  Requires-Dist: sphinx-issues>=3.0.1; extra == 'docs'
62
73
  Requires-Dist: sphinx-rtd-theme>=1; extra == 'docs'
63
74
  Requires-Dist: sphinx>=6.2; extra == 'docs'
75
+ Requires-Dist: uvicorn[standard]>=0.23.2; extra == 'docs'
64
76
  Description-Content-Type: text/markdown
65
77
 
66
78
  <p align="center">
@@ -7,24 +7,26 @@ nc_py_api/_preferences_ex.py,sha256=tThj6U0ZZMaBZ-jUkjrbaI0xDnafWsBowQKsC6gjOQs,
7
7
  nc_py_api/_session.py,sha256=pp_DMgIVaTo3PUmToh7OL760YBgg-Id_BlA7um4FhWc,19566
8
8
  nc_py_api/_talk_api.py,sha256=0Uo7OduYniuuX3UQPb468RyGJJ-PWBCgJ5HoPuz5Qa0,51068
9
9
  nc_py_api/_theming.py,sha256=hTr3nuOemSuRFZaPy9iXNmBM7rDgQHECH43tHMWGqEY,1870
10
- nc_py_api/_version.py,sha256=qqj1wAOMaCXyBsxPuKBq2xzDPc5IZfwNJnRLXV8dbcc,52
10
+ nc_py_api/_version.py,sha256=qEz6Co5vQmGTBmYXlpvZPCgMwwfvEmBAkK_JW9uM37I,52
11
11
  nc_py_api/activity.py,sha256=t9VDSnnaXRNOvALqOSGCeXSQZ-426pCOMSfQ96JHys4,9574
12
12
  nc_py_api/apps.py,sha256=6vOFFs6vNHCCvZ_SwXxPq5-X1xfgyLjW8uZSfJKduC8,9774
13
13
  nc_py_api/calendar.py,sha256=-T6CJ8cRbJZTLtxSEDWuuYpD29DMJGCTfLONmtxZV9w,1445
14
- nc_py_api/nextcloud.py,sha256=8KeUDKeAsdLAU20T8O_SSjewPnI8MYLLnVUkA0QMttg,20520
14
+ nc_py_api/nextcloud.py,sha256=AFb-49o_8SwxsAcbQbC0ZWqbPk1x6F5I2RrXw93Of-4,21297
15
15
  nc_py_api/notes.py,sha256=ljO3TOe-Qg0bJ0mlFQwjg--Pxmj-XFknoLbcbJmII0A,15106
16
16
  nc_py_api/notifications.py,sha256=WgzV21TuLOhLk-UEjhBSbMsIi2isa5MmAx6cbe0pc2Y,9187
17
17
  nc_py_api/options.py,sha256=K5co-fIfFVbwF6r3sqWsJF3cKgAbS2CjLAXdyTOkP9s,1717
18
18
  nc_py_api/talk.py,sha256=OZFemYkDOaM6o4xAK3EvQbjMFiK75E5qnsCDyihIElg,29368
19
19
  nc_py_api/talk_bot.py,sha256=73V2UXQChqiEzC8JxhWgtKWVQ2YD9lxLRjQ5JJWQRRw,16562
20
20
  nc_py_api/user_status.py,sha256=I101nwYS8X1WvC8AnLa2f3qJUCPDPHrbq-ke0h1VT4E,13282
21
- nc_py_api/users.py,sha256=B6By-H9oUNvJj2omaRCMPIsQ17xeeDV_udn0VioRO7A,15488
21
+ nc_py_api/users.py,sha256=ixMHBFJtrlvqmZqJ73VdbOZ6CbRnppdsRpjIJnMUtYY,15488
22
22
  nc_py_api/users_groups.py,sha256=IPxw-Ks5NjCm6r8_HC9xmf3IYptH00ulITbp5iazhAo,6289
23
23
  nc_py_api/weather_status.py,sha256=wAkjuJPjxc0Rxe4za0BzfwB0XeUmkCXoisJtTH3-qdQ,7582
24
24
  nc_py_api/ex_app/__init__.py,sha256=hELGo3yLzxUOyvEVcIDYK3wYA4FD984ExnckM9PC3CA,648
25
25
  nc_py_api/ex_app/defs.py,sha256=FaQInH3jLugKxDUqpwrXdkMT-lBxmoqWmXJXc11fa6A,727
26
+ nc_py_api/ex_app/events_listener.py,sha256=pgQ4hSQV39NuP9F9IDWxo0Qle6oG15-Ol2FlItnIBGY,4682
26
27
  nc_py_api/ex_app/integration_fastapi.py,sha256=2yt24zlfmNcbs-RCueyWhpWHmiD6vKVgXsobJ1iSY7I,10817
27
28
  nc_py_api/ex_app/misc.py,sha256=wA6KrcB05SQGwVAo7dgBxXAVm_2r9bgDf6SqioyOJPc,2286
29
+ nc_py_api/ex_app/occ_commands.py,sha256=hb2BJuvFKIigvLycSCyAe9v6hedq4Gfu2junQZTaK_M,5219
28
30
  nc_py_api/ex_app/persist_transformers_cache.py,sha256=ZoEBb1RnNaQrtxK_CjSZ8LZ36Oakz2Xciau_ZpNp8Ic,213
29
31
  nc_py_api/ex_app/uvicorn_fastapi.py,sha256=WLtNmWXMBKN6CMip2uhKcgy4mC2Ch9AmNfwRScBUsP0,752
30
32
  nc_py_api/ex_app/providers/__init__.py,sha256=jmUBdbAgzUCdYyHl8V5UCNYJI-FFpxPQQ4iEAoURKQs,43
@@ -38,12 +40,12 @@ nc_py_api/ex_app/ui/resources.py,sha256=Vwx69oZ93Ouh6HJtGUqaKFUr4Reo74H4vT1YCpb-
38
40
  nc_py_api/ex_app/ui/settings.py,sha256=f0R17lGhBfo2JQULVw_hFxhpfoPw_CW7vBu0Rb1ABJw,6623
39
41
  nc_py_api/ex_app/ui/top_menu.py,sha256=oCgGtIoMYbp-5iN5aXEbT7Q88HtccR7hg6IBFgbbyX4,5118
40
42
  nc_py_api/ex_app/ui/ui.py,sha256=OqFHKn6oIZli8T1wnv6YtQ4glNfeNb90WwGCvtWI1Z4,1632
41
- nc_py_api/files/__init__.py,sha256=AcHQT6cCyLMfuHDOWZCsDwRjNJ5hTh3YZKdWOMFILQQ,16695
43
+ nc_py_api/files/__init__.py,sha256=DTAT6C9WwOY-LXrqRBHMYZGRVyQznKmnUG1mCfSc_kY,16789
42
44
  nc_py_api/files/_files.py,sha256=XIAhjkDf92_FpPwsbA_X7_oh1_vZY2EZFefI5NjF-Wk,13180
43
45
  nc_py_api/files/files.py,sha256=GZDS0AD_wY1-PVNP_KcMWXaB6GyP7TGBlDCObmsoj5s,47819
44
46
  nc_py_api/files/sharing.py,sha256=VRZCl-TYK6dbu9rUHPs3_jcVozu1EO8bLGZwoRpiLsU,14439
45
- nc_py_api-0.12.0.dist-info/METADATA,sha256=eif47row0QfeHml3aI715IRfMAWkZiMexjOY_OfWzjQ,8943
46
- nc_py_api-0.12.0.dist-info/WHEEL,sha256=uNdcs2TADwSd5pVaP0Z_kcjcvvTUklh2S7bxZMF8Uj0,87
47
- nc_py_api-0.12.0.dist-info/licenses/AUTHORS,sha256=Y1omFHyI8ned9k4jJXs2ATgmgi1GmQ7EZ6S1gxqnX2k,572
48
- nc_py_api-0.12.0.dist-info/licenses/LICENSE.txt,sha256=OLEMh401fAumGHfRSna365MLIfnjdTcdOHZ6QOzMjkg,1551
49
- nc_py_api-0.12.0.dist-info/RECORD,,
47
+ nc_py_api-0.13.0.dist-info/METADATA,sha256=dmFiFUS4Mo2xyt7MKUmxN_QWeSFMkK40MrSf5zAN1E8,9449
48
+ nc_py_api-0.13.0.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
49
+ nc_py_api-0.13.0.dist-info/licenses/AUTHORS,sha256=Y1omFHyI8ned9k4jJXs2ATgmgi1GmQ7EZ6S1gxqnX2k,572
50
+ nc_py_api-0.13.0.dist-info/licenses/LICENSE.txt,sha256=OLEMh401fAumGHfRSna365MLIfnjdTcdOHZ6QOzMjkg,1551
51
+ nc_py_api-0.13.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.22.4
2
+ Generator: hatchling 1.24.2
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any