qcanvas 0.0.3.4a0__py3-none-any.whl → 0.0.4.1a0__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.

Potentially problematic release.


This version of qcanvas might be problematic. Click here for more details.

Files changed (43) hide show
  1. qcanvas/QtVersionHelper/QtGui/__init__.py +1 -1
  2. qcanvas/QtVersionHelper/__init__.py +2 -1
  3. qcanvas/__main__.py +5 -9
  4. qcanvas/db/__init__.py +2 -1
  5. qcanvas/db/database.py +11 -4
  6. qcanvas/icons/__init__.py +1 -1
  7. qcanvas/icons/icons.qrc +5 -4
  8. qcanvas/icons/main_icon.svg +217 -204
  9. qcanvas/icons/rc_icons.py +3 -0
  10. qcanvas/net/canvas/__init__.py +1 -1
  11. qcanvas/net/canvas/canvas_client.py +4 -2
  12. qcanvas/net/canvas/legacy_canvas_types.py +2 -2
  13. qcanvas/net/custom_httpx_async_transport.py +2 -3
  14. qcanvas/net/self_authenticating.py +1 -0
  15. qcanvas/queries/all_courses.gql +3 -3
  16. qcanvas/queries/all_courses.py +2 -2
  17. qcanvas/queries/canvas_course_data.py +2 -2
  18. qcanvas/ui/container_item.py +0 -6
  19. qcanvas/ui/main_ui.py +34 -18
  20. qcanvas/ui/menu_bar/__init__.py +0 -0
  21. qcanvas/ui/menu_bar/grouping_preferences_menu.py +61 -0
  22. qcanvas/ui/menu_bar/theme_selection_menu.py +36 -0
  23. qcanvas/ui/setup_dialog.py +3 -3
  24. qcanvas/ui/viewer/course_list.py +1 -3
  25. qcanvas/ui/viewer/file_list.py +1 -3
  26. qcanvas/ui/viewer/file_view_tab.py +3 -64
  27. qcanvas/util/__init__.py +1 -1
  28. qcanvas/util/app_settings.py +28 -2
  29. qcanvas/util/constants.py +1 -1
  30. qcanvas/util/course_indexer/__init__.py +1 -1
  31. qcanvas/util/course_indexer/data_manager.py +8 -4
  32. qcanvas/util/course_indexer/resource_helpers.py +2 -1
  33. qcanvas/util/file_icon_helper.py +2 -1
  34. qcanvas/util/linkscanner/canvas_media_object_scanner.py +2 -2
  35. qcanvas/util/linkscanner/resource_scanner.py +1 -1
  36. qcanvas/util/self_updater.py +6 -6
  37. qcanvas/util/task_pool.py +1 -1
  38. qcanvas/util/tree_util/model_helpers.py +1 -1
  39. qcanvas/util/tree_util/tree_model.py +1 -0
  40. {qcanvas-0.0.3.4a0.dist-info → qcanvas-0.0.4.1a0.dist-info}/METADATA +1 -1
  41. qcanvas-0.0.4.1a0.dist-info/RECORD +60 -0
  42. qcanvas-0.0.3.4a0.dist-info/RECORD +0 -57
  43. {qcanvas-0.0.3.4a0.dist-info → qcanvas-0.0.4.1a0.dist-info}/WHEEL +0 -0
@@ -152,7 +152,8 @@ async def _process_link(link_scanners: Sequence[ResourceScanner], resource_pool:
152
152
  return None
153
153
 
154
154
 
155
- async def _extract_file_info(link: Tag, scanner: ResourceScanner, resource_id : str, course_id: str) -> db.Resource | None:
155
+ async def _extract_file_info(link: Tag, scanner: ResourceScanner, resource_id: str,
156
+ course_id: str) -> db.Resource | None:
156
157
  """
157
158
  Extracts file info from `link` using `scanner` and assigns the course_id to the resulting resource.
158
159
 
@@ -5,7 +5,8 @@ from qcanvas.QtVersionHelper.QtWidgets import QApplication, QStyle
5
5
  _mime_database = QMimeDatabase()
6
6
  _default_icon = None
7
7
 
8
- def icon_for_filename(file_name : str) -> QIcon:
8
+
9
+ def icon_for_filename(file_name: str) -> QIcon:
9
10
  global _default_icon
10
11
 
11
12
  for mime_type in _mime_database.mimeTypesForFileName(file_name):
@@ -10,7 +10,7 @@ from qcanvas.util.linkscanner import ResourceScanner
10
10
 
11
11
  class CanvasMediaObjectScanner(ResourceScanner):
12
12
 
13
- def __init__(self, client : AsyncClient):
13
+ def __init__(self, client: AsyncClient):
14
14
  self.client = client
15
15
 
16
16
  @property
@@ -57,4 +57,4 @@ class CanvasMediaObjectScanner(ResourceScanner):
57
57
  )
58
58
 
59
59
  def extract_id(self, link: Tag) -> str:
60
- return link.attrs["data-media-id"]
60
+ return link.attrs["data-media-id"]
@@ -13,6 +13,7 @@ class ResourceScanner(ABC):
13
13
  The resource may be an embedded video, a file or anything that will be of use to the user.
14
14
  Each scanner should be responsible for only 1 type of resource.
15
15
  """
16
+
16
17
  @property
17
18
  @abstractmethod
18
19
  def name(self) -> str:
@@ -66,4 +67,3 @@ class ResourceScanner(ABC):
66
67
  async for chunk in resp.aiter_bytes():
67
68
  file.write(chunk)
68
69
  yield resp.num_bytes_downloaded
69
-
@@ -1,11 +1,11 @@
1
1
  import asyncio
2
-
3
- import httpx
4
2
  import json
5
3
  import os
6
- from packaging.version import Version
7
4
  from importlib.metadata import version
8
5
 
6
+ import httpx
7
+ from packaging.version import Version
8
+
9
9
  from qcanvas.util.constants import package_name
10
10
 
11
11
 
@@ -13,16 +13,16 @@ async def do_update():
13
13
  await asyncio.to_thread(os.system, f"pip install --upgrade {package_name}")
14
14
 
15
15
 
16
- async def get_newer_version() -> Version | None:
16
+ async def get_newer_version() -> tuple[Version | None, Version | None] | None:
17
17
  latest_version = await get_versions()
18
18
  installed_version = Version(version(package_name))
19
19
 
20
20
  print(f"latest = {latest_version}, installed = {installed_version}")
21
21
 
22
22
  if installed_version < latest_version:
23
- return latest_version
23
+ return latest_version, installed_version
24
24
  else:
25
- return None
25
+ return None, None
26
26
 
27
27
 
28
28
  async def get_versions() -> Version:
qcanvas/util/task_pool.py CHANGED
@@ -151,7 +151,7 @@ class TaskPool(Generic[T]):
151
151
 
152
152
  return await self._handle_task(func, task_id, event, func_args=kwargs)
153
153
 
154
- async def _handle_task(self, func: Callable, task_id: object, event: asyncio.Event, func_args : dict) -> T:
154
+ async def _handle_task(self, func: Callable, task_id: object, event: asyncio.Event, func_args: dict) -> T:
155
155
  """
156
156
  Handles the specified task
157
157
 
@@ -2,7 +2,7 @@ from typing import Sequence, Any
2
2
 
3
3
 
4
4
  class HasColumnData:
5
- def get_column_data(self, column: int, role : int) -> str | None:
5
+ def get_column_data(self, column: int, role: int) -> str | None:
6
6
  raise NotImplementedError()
7
7
 
8
8
 
@@ -6,6 +6,7 @@ from .model_helpers import HasColumnData, HasParent, HasChildren
6
6
 
7
7
  T = TypeVar("T")
8
8
 
9
+
9
10
  # todo comment this
10
11
  class TreeModel(QAbstractItemModel, Generic[T]):
11
12
  def __init__(self, parent: Optional[QWidget] = None):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qcanvas
3
- Version: 0.0.3.4a0
3
+ Version: 0.0.4.1a0
4
4
  Summary: A canvas client
5
5
  Author: QCanvas
6
6
  Classifier: Operating System :: OS Independent
@@ -0,0 +1,60 @@
1
+ qcanvas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ qcanvas/__main__.py,sha256=mZp5KlP-nCuQmpwIroXpmJ-U2PQX6Rc0qx8VAL2x9ys,3870
3
+ qcanvas/QtVersionHelper/__init__.py,sha256=XFdeffM9T2Ti3b_IjH2cWI2-9XFk5oox4ChYsiYQoiE,407
4
+ qcanvas/QtVersionHelper/QtCore/__init__.py,sha256=LYVV4s0gsUn1yi8NLB_H0RPFR4IaLH0WzVcBJ4TA-3g,240
5
+ qcanvas/QtVersionHelper/QtGui/__init__.py,sha256=XUhFclN-KnfQQC_xN_d4J63a-wSBeC9MMGNVGsUdRVY,1025
6
+ qcanvas/QtVersionHelper/QtWidgets/__init__.py,sha256=Kq-bgC2LJzwuTmH_A8i7Y6WrhsQYT4RO3xEVDU8szEc,246
7
+ qcanvas/db/__init__.py,sha256=j5ZiTiLuY0CYRUV2bktc8qE5x-jBNaSaSVNKAF8DKF0,420
8
+ qcanvas/db/database.py,sha256=pz3wZ2QwxalSruV-5vID3QDImbX9AD-rkGXRqiaIPmw,10515
9
+ qcanvas/db/db_converter_helper.py,sha256=msYcfzmGX1CpyZxIjvt0ObcrlM5Rshtn_fzw7xW83js,2167
10
+ qcanvas/icons/__init__.py,sha256=nknAcvd97UBIYO1dR4atTCY3PHudbPprPT7FPyhqugc,35
11
+ qcanvas/icons/icons.qrc,sha256=_wGNdTTOuygPLeFMJxA3Q2HleqJKKkzW38VEhWJ76Rg,110
12
+ qcanvas/icons/main_icon.svg,sha256=26moo6Ki_YSkazCgOZgs4pi2p4qWNLDIWugwLMfAWfs,16104
13
+ qcanvas/icons/rc_icons.py,sha256=eZX1ylKsEVMB6JtaHsJtllPRTRZ959089bUTPtguX5k,10912
14
+ qcanvas/net/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ qcanvas/net/custom_httpx_async_transport.py,sha256=1OyszJO8TrwDrq-no-angb-AIjgq_GiV67tQHuPxmm0,1227
16
+ qcanvas/net/self_authenticating.py,sha256=bF0lq9BgDQg5We4l0Z_JpJhI8ZGC7TTgggMWHUOYw3U,2515
17
+ qcanvas/net/canvas/__init__.py,sha256=EPLFN05Vx9yNHDLK-eUp97C6ymtMTnscwdn28OBlNJw,96
18
+ qcanvas/net/canvas/canvas_client.py,sha256=BI5JBf47r3RlCf3HGTzcz2zSBPBT2k32fbxllbMOJF8,8921
19
+ qcanvas/net/canvas/legacy_canvas_types.py,sha256=pKuTBh1m5oSq9e7jmbHzYfKeoPSw0uHAqLwddKZpsr4,3942
20
+ qcanvas/queries/__init__.py,sha256=tRUwMS1OvYIWRd4WpmAHrDrcelj_dLEaesxh9NngC6s,227
21
+ qcanvas/queries/all_courses.gql,sha256=8U0_3VOcD66SRCfvhZ9IOTmxVgDPJdMD_LuGPbM9vVU,124
22
+ qcanvas/queries/all_courses.py,sha256=-DpMy7eDFUeYp3ffZrwXp15qo_t6Lfx8K-rFi3OK1DM,2751
23
+ qcanvas/queries/canvas_course_data.gql,sha256=KJHjdu5sMKld4L6mPGfUrhqRLx_wdgGH8fwTnmRFGrI,1115
24
+ qcanvas/queries/canvas_course_data.py,sha256=_ZNv9stXAyap2eBbCqmajXVpWr0920ZUcCS6Gtyyo0g,4314
25
+ qcanvas/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ qcanvas/ui/container_item.py,sha256=EGNypuA-nDTzPK1Np8dlwT_SF_az6cAaECOY3a44LjU,431
27
+ qcanvas/ui/main_ui.py,sha256=tDg7LSDwtv2-O9LV_XTjU4RM-5dyKILSDCjpMDcZaZA,8498
28
+ qcanvas/ui/setup_dialog.py,sha256=c-Eda97IaMCdLh5kJuSAkoJ-7SMfU0xzG37L77Krd3s,5671
29
+ qcanvas/ui/menu_bar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ qcanvas/ui/menu_bar/grouping_preferences_menu.py,sha256=L4vaQCCBqM5MFH7NjSff8y_VlhOwDM9pppvublBuLLg,2433
31
+ qcanvas/ui/menu_bar/theme_selection_menu.py,sha256=KeYVudbqR7v0tLXGAee2FjTcFy7mfdjANAr6UZ3XJfc,1146
32
+ qcanvas/ui/viewer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ qcanvas/ui/viewer/course_list.py,sha256=zp4RhVAedIrltQqctCvN2qYjPWVIq5syMAdYNor2C8E,3418
34
+ qcanvas/ui/viewer/file_list.py,sha256=CyR6CUqDi_WKDfrChHCASzH3ZgjYJ8Lxi1L5wzaDNTQ,7892
35
+ qcanvas/ui/viewer/file_view_tab.py,sha256=ciJGwu2cetjRpcfpLp5Y9OaEmDTwK3VNm0XVSydD_2k,2220
36
+ qcanvas/ui/viewer/page_list_viewer.py,sha256=ejiRccgdVRxGI08ThRXlyZvGD8_XyAeoY2cHwrjvHyY,5542
37
+ qcanvas/util/__init__.py,sha256=SL1PYcQGUrwXfFusnsm-YymHq9Bd6bSc1rmK2x1g7fM,69
38
+ qcanvas/util/app_settings.py,sha256=RJQbE57Me0RUidSJpcPhOlsfcJ3npSwkEPYz7TM1GJM,2097
39
+ qcanvas/util/canvas_garbage_remover.py,sha256=c6r6cyJomQ1zn5wFK-LX-ZsZXQZ-A2awBFtCB_JqUtE,1184
40
+ qcanvas/util/constants.py,sha256=GIjH-ivnj4aoyWmrde3eqqXbBxuj9zOzaNzOmJPma0o,111
41
+ qcanvas/util/download_pool.py,sha256=0ptHzyZC4lVXFPyYHnnDSZGS2qZCFMjPpY_8L_z3l6w,2376
42
+ qcanvas/util/file_icon_helper.py,sha256=4vdqQbw_FT7APOWRIbg5Kt2OhCr6e2ejIArVRon3CwE,630
43
+ qcanvas/util/self_updater.py,sha256=KFIlU3ol1da8OacfYV9LFXOulZ7419yByz54rDatq2A,893
44
+ qcanvas/util/task_pool.py,sha256=PCUfBn8_JYoovVWdq5cLNgYd6E5uSm6MN-wjNIdBg9c,8952
45
+ qcanvas/util/course_indexer/__init__.py,sha256=IqwTfB8KVk7Go_yuBL8NOANgFiBCzjt0z38D4CEgq7w,38
46
+ qcanvas/util/course_indexer/conversion_helpers.py,sha256=WggJmf4to7hpBpDTOpdBbaDQQv6OdEuLiFnhazcsjcM,2660
47
+ qcanvas/util/course_indexer/data_manager.py,sha256=sJGf45V7MeYP7qxb9J55H4TkXSoqY5nAU2Wmw7VLuL0,15526
48
+ qcanvas/util/course_indexer/resource_helpers.py,sha256=wMIPsMqXkSiT4_icaA1jCDqeTnJql7V8dOWsWl7g77c,6493
49
+ qcanvas/util/linkscanner/__init__.py,sha256=VVZ4L0AwC-TQtX6JQNUcpWH8UhKaCaSS3_7X4i3mipE,97
50
+ qcanvas/util/linkscanner/canvas_link_scanner.py,sha256=mRvahbf_sClGTflc9nFKEbi5HltbIfWZu2qE-IhJO2o,1450
51
+ qcanvas/util/linkscanner/canvas_media_object_scanner.py,sha256=0PL0buW53YQaOlT-n-UazwHFQS91ivfJN5kiw6tcfa4,2218
52
+ qcanvas/util/linkscanner/dropbox_scanner.py,sha256=HB7FhZp3dQwvq1Ptkug7NEJu5yS4UEd4Xy19EZUIZ7k,2033
53
+ qcanvas/util/linkscanner/resource_scanner.py,sha256=EY5AzDXG6Ix18YpRkJcMjOPaygird6iD1akaG-yUyHc,1988
54
+ qcanvas/util/tree_util/__init__.py,sha256=yqjNHrD8SiyW_fGPfw7xdS-Rctjdu-RMWSkUxcGSn8k,154
55
+ qcanvas/util/tree_util/expanding_tree.py,sha256=DaSr0KS5owejQhehV4SS30GA3jhwD32M3Rx5-j5a4h8,6653
56
+ qcanvas/util/tree_util/model_helpers.py,sha256=io1bHOMNgVqkPvGH2Iohug1-wx2MwC_-qlWlpVA0fFE,743
57
+ qcanvas/util/tree_util/tree_model.py,sha256=2c_wLfbcS9RrmGGkTeX4rqMu4Fu5a-GwhtKLI_-QzE8,3012
58
+ qcanvas-0.0.4.1a0.dist-info/METADATA,sha256=S-IDG9j3dYMDpPi7nbLGqMX7gLPD5EVZjGMrVHp26UU,676
59
+ qcanvas-0.0.4.1a0.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
60
+ qcanvas-0.0.4.1a0.dist-info/RECORD,,
@@ -1,57 +0,0 @@
1
- qcanvas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- qcanvas/__main__.py,sha256=aJAx1DoTos6fRzeAZISntzeD6NAw73r6GpnxZqxKM4w,3955
3
- qcanvas/QtVersionHelper/__init__.py,sha256=AHg0tv2hhTpapl6pZQWDWqOSes0ceHx0wMLSsHJEG1s,405
4
- qcanvas/QtVersionHelper/QtCore/__init__.py,sha256=LYVV4s0gsUn1yi8NLB_H0RPFR4IaLH0WzVcBJ4TA-3g,240
5
- qcanvas/QtVersionHelper/QtGui/__init__.py,sha256=Ml3Evje04C7hr2WSBALEJy79Yz7C92ZkE2hmBHbULzQ,1026
6
- qcanvas/QtVersionHelper/QtWidgets/__init__.py,sha256=Kq-bgC2LJzwuTmH_A8i7Y6WrhsQYT4RO3xEVDU8szEc,246
7
- qcanvas/db/__init__.py,sha256=wK5HUSGOplql2RBTpw6dSCwRjHChtTWX2zkhbe6OaQw,414
8
- qcanvas/db/database.py,sha256=_KB9-MfcqMhvKnpQObUR3fU2pu-JAvSgq1mQXW0IO0w,10436
9
- qcanvas/db/db_converter_helper.py,sha256=msYcfzmGX1CpyZxIjvt0ObcrlM5Rshtn_fzw7xW83js,2167
10
- qcanvas/icons/__init__.py,sha256=If-w2-giA8YqKyPxPRbFaGzdlQlsBXaOAFxnrf8o3mE,34
11
- qcanvas/icons/icons.qrc,sha256=r9OhAoVvGGQLkjwLTsl_zdiQQW6t7fkwF0jpgqa9hwY,97
12
- qcanvas/icons/main_icon.svg,sha256=q3Hgy1sINs--AZAiy6rsFoNNlMlH-nRaBVlRThxUoZQ,15095
13
- qcanvas/icons/rc_icons.py,sha256=ogax-z0riQ_jHc3_5HkGvvHAJyR4WyW5ZXTkPkdk3go,10909
14
- qcanvas/net/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- qcanvas/net/custom_httpx_async_transport.py,sha256=kSkBD1v476CVPY2qWAarcyG8mbKyNDNuR32ByIhG94c,1212
16
- qcanvas/net/self_authenticating.py,sha256=Qyx8vYtSLDClx-WMcrVUeeqUI5jCftiuAqN2RU8goUE,2514
17
- qcanvas/net/canvas/__init__.py,sha256=NgLiTbeKoYKDVoEd1AoP8RB_tEFi6Jzwj9gGhSu5mw4,95
18
- qcanvas/net/canvas/canvas_client.py,sha256=Sb3ksOVmVX0QDDrrPXQqbJsfKxS1vRhyEk3t604Hefs,8841
19
- qcanvas/net/canvas/legacy_canvas_types.py,sha256=QN1BFaDF-W1ep0X2Ax2n92-I66IzxqLdRwHYrAom5Ck,3926
20
- qcanvas/queries/__init__.py,sha256=tRUwMS1OvYIWRd4WpmAHrDrcelj_dLEaesxh9NngC6s,227
21
- qcanvas/queries/all_courses.gql,sha256=LoGcuyYtA0tVC2L8BVOmfC10DfvhFAxxhqhovvBYOuU,116
22
- qcanvas/queries/all_courses.py,sha256=oLH_hBrdNu9a84SrP0EsblXV30fZCLt6P2AtB3aynM4,2747
23
- qcanvas/queries/canvas_course_data.gql,sha256=KJHjdu5sMKld4L6mPGfUrhqRLx_wdgGH8fwTnmRFGrI,1115
24
- qcanvas/queries/canvas_course_data.py,sha256=MmDUf4hc3IQxgfXj_bsm33kX13EYPTUqCiVqZXdCxYw,4310
25
- qcanvas/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- qcanvas/ui/container_item.py,sha256=rcoCp7xS4WGdbfH4pDOirTn3ioBQqCEsfgQzLKHiF7M,437
27
- qcanvas/ui/main_ui.py,sha256=on6xqKf0HQt_nOJ5UewTqJ6SQBxq-I9I5_tMVRHEBT4,7589
28
- qcanvas/ui/setup_dialog.py,sha256=H6_w9B5CV5j3Azt4cNxgvlgnLMySOxY7xthEhq2d1Ro,5635
29
- qcanvas/ui/viewer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- qcanvas/ui/viewer/course_list.py,sha256=gQj50NV-PWIe-ayqhED3oR0hB17dKMULRLjH855uIHA,3422
31
- qcanvas/ui/viewer/file_list.py,sha256=Ukzvef5njKaKIwvvW4JQEkKRzNPTsUxRsPOScPuemZI,7893
32
- qcanvas/ui/viewer/file_view_tab.py,sha256=bd3aUwDMrm04dU6UCCWlsMDZPeKE7Y7gHLA5yxYf0hE,4676
33
- qcanvas/ui/viewer/page_list_viewer.py,sha256=ejiRccgdVRxGI08ThRXlyZvGD8_XyAeoY2cHwrjvHyY,5542
34
- qcanvas/util/__init__.py,sha256=4nrMAMxWMpItgg2iaE1Z6ysoRVG3ljUTHrVNxOazGGQ,68
35
- qcanvas/util/app_settings.py,sha256=Zc_s8cQnJyOi3oyU7RVDONj_LqD6CdpeYcY4LCqp8qQ,1335
36
- qcanvas/util/canvas_garbage_remover.py,sha256=c6r6cyJomQ1zn5wFK-LX-ZsZXQZ-A2awBFtCB_JqUtE,1184
37
- qcanvas/util/constants.py,sha256=Cs_fzNy0fs6OcEY7I_PWlGNff3Qh8AG_u-Mzc0OAwrM,110
38
- qcanvas/util/download_pool.py,sha256=0ptHzyZC4lVXFPyYHnnDSZGS2qZCFMjPpY_8L_z3l6w,2376
39
- qcanvas/util/file_icon_helper.py,sha256=3xcvclI0QoKhE0_vPLWAqLgVpO-G_ra524DNYgg2YRM,630
40
- qcanvas/util/self_updater.py,sha256=TP6y2TaMJA4fbWuwHgj0z2QgpPeyOJ9OBSS0W5vv9UU,838
41
- qcanvas/util/task_pool.py,sha256=GrAgFfTpaQ0iEu3dLg61dG6EmJoTo4NYpP8MT8kmMk0,8953
42
- qcanvas/util/course_indexer/__init__.py,sha256=qDPevtjuQv72m23QLg6uXN3MDugJuKYF_12xlsWehNI,37
43
- qcanvas/util/course_indexer/conversion_helpers.py,sha256=WggJmf4to7hpBpDTOpdBbaDQQv6OdEuLiFnhazcsjcM,2660
44
- qcanvas/util/course_indexer/data_manager.py,sha256=XunFSwySXzLOxsreC3YDBiA8Cg0UfhRe37KOhHDIRtk,15487
45
- qcanvas/util/course_indexer/resource_helpers.py,sha256=IXwg0PNQN2fX9hn2dpNJl4HRI_45hh9Qi6R9GQEXsbg,6465
46
- qcanvas/util/linkscanner/__init__.py,sha256=VVZ4L0AwC-TQtX6JQNUcpWH8UhKaCaSS3_7X4i3mipE,97
47
- qcanvas/util/linkscanner/canvas_link_scanner.py,sha256=mRvahbf_sClGTflc9nFKEbi5HltbIfWZu2qE-IhJO2o,1450
48
- qcanvas/util/linkscanner/canvas_media_object_scanner.py,sha256=0__W4Vvg8-y_t4qTuw2qQfJH7Kss1Jn286bFKy8obac,2218
49
- qcanvas/util/linkscanner/dropbox_scanner.py,sha256=HB7FhZp3dQwvq1Ptkug7NEJu5yS4UEd4Xy19EZUIZ7k,2033
50
- qcanvas/util/linkscanner/resource_scanner.py,sha256=-itSq1GycQCBZNV1cGWzS4iM2OGukgMvzgORcfu0WLA,1988
51
- qcanvas/util/tree_util/__init__.py,sha256=yqjNHrD8SiyW_fGPfw7xdS-Rctjdu-RMWSkUxcGSn8k,154
52
- qcanvas/util/tree_util/expanding_tree.py,sha256=DaSr0KS5owejQhehV4SS30GA3jhwD32M3Rx5-j5a4h8,6653
53
- qcanvas/util/tree_util/model_helpers.py,sha256=z7Q-KXUeca0yf1SWJONM7AUfyALP4b_Rb5xlGQhglf0,744
54
- qcanvas/util/tree_util/tree_model.py,sha256=T7mPzXj1_aBUw3pgBUXuIvCcezrg5QLkSmtpswkKEjw,3011
55
- qcanvas-0.0.3.4a0.dist-info/METADATA,sha256=LHmioUEOIKMqi2SVAOdOGuaGmDH8bwUQowrjCMGlNs0,676
56
- qcanvas-0.0.3.4a0.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
57
- qcanvas-0.0.3.4a0.dist-info/RECORD,,