bytegrader 0.0.1__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 (492) hide show
  1. bytegrader-0.0.1/.devcontainer.json +1 -0
  2. bytegrader-0.0.1/.dockerignore +78 -0
  3. bytegrader-0.0.1/.gitignore +108 -0
  4. bytegrader-0.0.1/.npmrc +3 -0
  5. bytegrader-0.0.1/.python-version +1 -0
  6. bytegrader-0.0.1/.yarnrc +1 -0
  7. bytegrader-0.0.1/.yarnrc.yml +1 -0
  8. bytegrader-0.0.1/LICENSE +28 -0
  9. bytegrader-0.0.1/PKG-INFO +54 -0
  10. bytegrader-0.0.1/README.de.md +0 -0
  11. bytegrader-0.0.1/README.md +175 -0
  12. bytegrader-0.0.1/bytegrader/__init__.py +38 -0
  13. bytegrader-0.0.1/bytegrader/__main__.py +7 -0
  14. bytegrader-0.0.1/bytegrader/autograde/__init__.py +0 -0
  15. bytegrader-0.0.1/bytegrader/autograde/executors/__init__.py +16 -0
  16. bytegrader-0.0.1/bytegrader/autograde/executors/base.py +15 -0
  17. bytegrader-0.0.1/bytegrader/autograde/executors/simple.py +54 -0
  18. bytegrader-0.0.1/bytegrader/autograde/executors/systemd.py +3 -0
  19. bytegrader-0.0.1/bytegrader/autograde/executors/wasm.py +180 -0
  20. bytegrader-0.0.1/bytegrader/autograde/queue.py +28 -0
  21. bytegrader-0.0.1/bytegrader/autograde/service.py +265 -0
  22. bytegrader-0.0.1/bytegrader/autograde/worker.py +198 -0
  23. bytegrader-0.0.1/bytegrader/cli/__init__.py +3 -0
  24. bytegrader-0.0.1/bytegrader/cli/commands/__init__.py +0 -0
  25. bytegrader-0.0.1/bytegrader/cli/commands/serve.py +135 -0
  26. bytegrader-0.0.1/bytegrader/cli/main.py +58 -0
  27. bytegrader-0.0.1/bytegrader/config/__init__.py +0 -0
  28. bytegrader-0.0.1/bytegrader/config/config.py +113 -0
  29. bytegrader-0.0.1/bytegrader/core/__init__.py +0 -0
  30. bytegrader-0.0.1/bytegrader/core/auth/__init__.py +7 -0
  31. bytegrader-0.0.1/bytegrader/core/auth/decorators.py +53 -0
  32. bytegrader-0.0.1/bytegrader/core/auth/permissions.py +98 -0
  33. bytegrader-0.0.1/bytegrader/core/auth/policies.py +179 -0
  34. bytegrader-0.0.1/bytegrader/core/database/__init__.py +0 -0
  35. bytegrader-0.0.1/bytegrader/core/database/alembic/TODO +0 -0
  36. bytegrader-0.0.1/bytegrader/core/database/alembic/__init__.py +0 -0
  37. bytegrader-0.0.1/bytegrader/core/database/connection.py +94 -0
  38. bytegrader-0.0.1/bytegrader/core/database/migrations.py +1 -0
  39. bytegrader-0.0.1/bytegrader/core/exceptions/__init__.py +5 -0
  40. bytegrader-0.0.1/bytegrader/core/exceptions/config.py +2 -0
  41. bytegrader-0.0.1/bytegrader/core/exceptions/database.py +2 -0
  42. bytegrader-0.0.1/bytegrader/core/exceptions/hub.py +29 -0
  43. bytegrader-0.0.1/bytegrader/core/models/__init__.py +13 -0
  44. bytegrader-0.0.1/bytegrader/core/models/asset.py +29 -0
  45. bytegrader-0.0.1/bytegrader/core/models/base.py +9 -0
  46. bytegrader-0.0.1/bytegrader/core/models/course.py +82 -0
  47. bytegrader-0.0.1/bytegrader/core/models/enum.py +25 -0
  48. bytegrader-0.0.1/bytegrader/core/models/grade.py +73 -0
  49. bytegrader-0.0.1/bytegrader/core/models/notebook.py +97 -0
  50. bytegrader-0.0.1/bytegrader/core/models/submission.py +310 -0
  51. bytegrader-0.0.1/bytegrader/core/models/user.py +49 -0
  52. bytegrader-0.0.1/bytegrader/core/observability/__init__.py +102 -0
  53. bytegrader-0.0.1/bytegrader/core/observability/opentelemetry.py +218 -0
  54. bytegrader-0.0.1/bytegrader/core/observability/sentry.py +115 -0
  55. bytegrader-0.0.1/bytegrader/core/utils/__init__.py +3 -0
  56. bytegrader-0.0.1/bytegrader/core/utils/datetime.py +11 -0
  57. bytegrader-0.0.1/bytegrader/core/utils/hub.py +224 -0
  58. bytegrader-0.0.1/bytegrader/core/utils/lti/__init__.py +18 -0
  59. bytegrader-0.0.1/bytegrader/core/utils/lti/client.py +524 -0
  60. bytegrader-0.0.1/bytegrader/core/utils/lti/config.py +74 -0
  61. bytegrader-0.0.1/bytegrader/core/utils/lti/exceptions.py +14 -0
  62. bytegrader-0.0.1/bytegrader/core/utils/lti/models.py +107 -0
  63. bytegrader-0.0.1/bytegrader/core/utils/notebook.py +30 -0
  64. bytegrader-0.0.1/bytegrader/extensions/__init__.py +0 -0
  65. bytegrader-0.0.1/bytegrader/extensions/lab/__init__.py +5 -0
  66. bytegrader-0.0.1/bytegrader/extensions/lab/handlers/__init__.py +0 -0
  67. bytegrader-0.0.1/bytegrader/extensions/lab/handlers/assignment.py +112 -0
  68. bytegrader-0.0.1/bytegrader/extensions/lab/handlers/auth.py +25 -0
  69. bytegrader-0.0.1/bytegrader/extensions/lab/handlers/base.py +56 -0
  70. bytegrader-0.0.1/bytegrader/extensions/lab/handlers/course.py +94 -0
  71. bytegrader-0.0.1/bytegrader/extensions/lab/handlers/submission.py +29 -0
  72. bytegrader-0.0.1/bytegrader/extensions/lab/labextension.py +42 -0
  73. bytegrader-0.0.1/bytegrader/extensions/lab/schemas/__init__.py +1 -0
  74. bytegrader-0.0.1/bytegrader/extensions/lab/schemas/assignment.py +71 -0
  75. bytegrader-0.0.1/bytegrader/extensions/lab/schemas/base.py +19 -0
  76. bytegrader-0.0.1/bytegrader/extensions/lab/schemas/course.py +0 -0
  77. bytegrader-0.0.1/bytegrader/extensions/lab/services/__init__.py +0 -0
  78. bytegrader-0.0.1/bytegrader/extensions/lab/services/assignment.py +282 -0
  79. bytegrader-0.0.1/bytegrader/extensions/lab/services/course.py +55 -0
  80. bytegrader-0.0.1/bytegrader/extensions/lab/services/submission.py +49 -0
  81. bytegrader-0.0.1/bytegrader/extensions/labextension/package.json +109 -0
  82. bytegrader-0.0.1/bytegrader/extensions/labextension/static/1085.dc408e20ed2d9ee54892.js +1 -0
  83. bytegrader-0.0.1/bytegrader/extensions/labextension/static/1771.6e5b0dbc3185aee48a98.js +1 -0
  84. bytegrader-0.0.1/bytegrader/extensions/labextension/static/1823.3d59abf2896ee4fb04e0.js +1 -0
  85. bytegrader-0.0.1/bytegrader/extensions/labextension/static/2441.30be75ff1225a7950f2f.js +1 -0
  86. bytegrader-0.0.1/bytegrader/extensions/labextension/static/272.60e4a6c8e09cd5fd49c3.js +1 -0
  87. bytegrader-0.0.1/bytegrader/extensions/labextension/static/3101.6d720003514448f0e979.js +2 -0
  88. bytegrader-0.0.1/bytegrader/extensions/labextension/static/3101.6d720003514448f0e979.js.LICENSE.txt +9 -0
  89. bytegrader-0.0.1/bytegrader/extensions/labextension/static/3129.60e4a6c8e09cd5fd49c3.js +1 -0
  90. bytegrader-0.0.1/bytegrader/extensions/labextension/static/4503.7738a06ba93515200fbb.js +1 -0
  91. bytegrader-0.0.1/bytegrader/extensions/labextension/static/4647.b2bd10008ba24c4df62f.js +1 -0
  92. bytegrader-0.0.1/bytegrader/extensions/labextension/static/4822.30be75ff1225a7950f2f.js +1 -0
  93. bytegrader-0.0.1/bytegrader/extensions/labextension/static/7501.97321ae6ff1ccbe26561.js +1 -0
  94. bytegrader-0.0.1/bytegrader/extensions/labextension/static/8665.a11cd4fecd79704e5e2b.js +1 -0
  95. bytegrader-0.0.1/bytegrader/extensions/labextension/static/9302.e53051a75dedfc1e9fc0.js +2 -0
  96. bytegrader-0.0.1/bytegrader/extensions/labextension/static/9302.e53051a75dedfc1e9fc0.js.LICENSE.txt +31 -0
  97. bytegrader-0.0.1/bytegrader/extensions/labextension/static/b59f626d291d9ab058ef.png +0 -0
  98. bytegrader-0.0.1/bytegrader/extensions/labextension/static/remoteEntry.6cdfe86ba207c2e4ba69.js +1 -0
  99. bytegrader-0.0.1/bytegrader/extensions/labextension/static/style.js +4 -0
  100. bytegrader-0.0.1/bytegrader/extensions/labextension/static/third-party-licenses.json +130 -0
  101. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-ar.9befbee1a30b9800ccb1.js +1 -0
  102. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-ar_EG.6fc79d7646abdac64457.js +1 -0
  103. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-ar_SA.ae95f9770d346c4556da.js +1 -0
  104. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-bg.f777c725093de5982133.js +1 -0
  105. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-ca.de0b61b882b40a2dde89.js +1 -0
  106. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-cnr.37ded5746082c0e5445c.js +1 -0
  107. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-cs.30aa2e3656128d550434.js +1 -0
  108. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-da.d8030fa546f431d7e7f0.js +1 -0
  109. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-de.68aeacb3c6a1abc95926.js +1 -0
  110. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-de_AT.694562ca6779449618ff.js +1 -0
  111. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-de_CH.9f4eec6522e07f7e7dd2.js +1 -0
  112. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-el.d03e4a02c788c9475dbf.js +1 -0
  113. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-el_CY.790542740c5c52c4221d.js +1 -0
  114. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-en.6fef2fad741f780de3dd.js +1 -0
  115. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-en_AU.5fc4d774640357a0aeaf.js +1 -0
  116. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-en_GB.702f6cb2ec5c0245027f.js +1 -0
  117. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-en_HK.06c9b40f0644c6036f11.js +1 -0
  118. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-en_IE.e5f1ff8bfe1f344a7ac6.js +1 -0
  119. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-en_IN.d387e684f6849760df74.js +1 -0
  120. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-en_NZ.f84de83cdf3cc69376af.js +1 -0
  121. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-en_PG.ca3b83bce0a28515268c.js +1 -0
  122. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-en_SG.9310bdccf1d3edf9195d.js +1 -0
  123. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-en_ZA.ac57b8a30fe57a946de2.js +1 -0
  124. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-es.aa176b8245718c90be27.js +1 -0
  125. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-es_AR.00652b7345290c2c2295.js +1 -0
  126. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-es_BO.38ec793be6a72e96bf43.js +1 -0
  127. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-es_CL.ab611b3d9749f30e0bba.js +1 -0
  128. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-es_CO.aa56bfd1df654e48fde0.js +1 -0
  129. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-es_MX.b8e176c41f8badd93833.js +1 -0
  130. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-es_PE.e27c594266c499fefec9.js +1 -0
  131. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-es_UY.d7494ca9d2f25165e14d.js +1 -0
  132. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-es_VE.ec877cb30ae6213551da.js +1 -0
  133. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-et.d5c8d117f1eb93bb42d6.js +1 -0
  134. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-fa.d5bb2ff0c146811b0bbb.js +1 -0
  135. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-fi.a41f03a0b8d492cf8c2b.js +1 -0
  136. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-fr.2bad4804c43135b4c56f.js +1 -0
  137. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-fr_BE.19f7e05a092828a5e7d9.js +1 -0
  138. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-fr_CA.eb8ca732fbd0df06b8fe.js +1 -0
  139. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-fr_CH.af392165a220e0d2dcd8.js +1 -0
  140. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-fr_LU.3e5c2e8e11e02eb2285a.js +1 -0
  141. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-he.2c75729cc185cb1dbe3e.js +1 -0
  142. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-hi.1918fccfb218bc8d81aa.js +1 -0
  143. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-hr.bc8a1189630fa130b903.js +1 -0
  144. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-hu.75cc464cc95c6fcb5b01.js +1 -0
  145. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-id.cdd314d2391b7795ddbf.js +1 -0
  146. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-it.c9f87954383699401ea4.js +1 -0
  147. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-it_CH.c8be744ce1da4b38cd95.js +1 -0
  148. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-ja.e4dd6d08d309978b0e01.js +1 -0
  149. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-kk.071139f5668b699cc9ab.js +1 -0
  150. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-ko.08db4a8ed9f70802c533.js +1 -0
  151. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-lt.84fd718554d23618318d.js +1 -0
  152. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-lv.5554e5dc1409c66225b9.js +1 -0
  153. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-mk.45ebaa60228c9aad578d.js +1 -0
  154. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-ms.793981efa442577bc9eb.js +1 -0
  155. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-nb.d61997ecccb96ee24a8b.js +1 -0
  156. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-nl.1ea671fc9162f043488b.js +1 -0
  157. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-nl_BE.e53372f328766bba4504.js +1 -0
  158. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-pl.9126923bd22358ba5b0a.js +1 -0
  159. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-pt.cc0d31f9ac7ff0d47127.js +1 -0
  160. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-pt_PT.e63ef3bffd2a61bc50f1.js +1 -0
  161. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-ro.322c3e65ffac34f24002.js +1 -0
  162. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-ru.2b57343e1255e67b9de1.js +1 -0
  163. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-ru_UA.16f3e059aa2247adb392.js +1 -0
  164. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-sk.9f770ed8538a8fa22c39.js +1 -0
  165. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-sl.eea95b8dcc5afb5a86e3.js +1 -0
  166. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-sr.71085a5bc2643db67e26.js +1 -0
  167. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-sr_Latn.65fb4e2ecaf05b3240fb.js +1 -0
  168. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-sv.852ccd91466c2d60a344.js +1 -0
  169. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-th.c180311e6bdb2b3fe233.js +1 -0
  170. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-tr.fd31e344cfecb41bfb65.js +1 -0
  171. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-uk.e7a9e03c60056efe934b.js +1 -0
  172. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-vi.aa41bba5b03133cf5554.js +1 -0
  173. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-zh_CN.ad969267700a7a667784.js +1 -0
  174. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-zh_HK.aeaa1288277c65922055.js +1 -0
  175. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-zh_SG.51a48b2d961bea43eec6.js +1 -0
  176. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-cldr-zh_TW.b4b60e68c5a5e1f6fd77.js +1 -0
  177. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-ar.357455ff5aac56b0dd58.js +1 -0
  178. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-bg.aff32eb19c382cabab70.js +1 -0
  179. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-ca.9ef0f8b24e237fa2dd36.js +1 -0
  180. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-cnr.84f8040441344906f05e.js +1 -0
  181. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-cs.ddae052856a456963ef6.js +1 -0
  182. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-cy.68c76deed4fe746b136e.js +1 -0
  183. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-da.5565ec60b72e442bcd2d.js +1 -0
  184. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-de.f150190c0e8cb500392b.js +1 -0
  185. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-el.0cdc81d67b906007b72e.js +1 -0
  186. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-en.9b3490585a78bee0042f.js +1 -0
  187. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-en_GB.1b1a26fe9a38d9ab3481.js +1 -0
  188. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-en_US_sappsd.fe13fb3a09adcdf0a5a4.js +1 -0
  189. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-en_US_saprigi.f99d1a854c60ea8fcf58.js +1 -0
  190. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-en_US_saptrc.32b55c34ae32203fbac2.js +1 -0
  191. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-es.3ef82b441b2c4defeb5c.js +1 -0
  192. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-es_MX.11e4a84ec97b8a9078f9.js +1 -0
  193. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-et.ca62adf0bb547aa69188.js +1 -0
  194. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-fi.93d3028b54a0ec0d782f.js +1 -0
  195. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-fr.fca72bf2da703efb277c.js +1 -0
  196. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-fr_CA.6d7a44795d6b7a3359b3.js +1 -0
  197. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-hi.1f680cb6b7783cb54194.js +1 -0
  198. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-hr.5c1fd471461cc0d51e40.js +1 -0
  199. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-hu.4203f41f4f5b5e94d21b.js +1 -0
  200. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-id.74d01a59af1b0013db86.js +1 -0
  201. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-it.4120e64093ce2fbe2b44.js +1 -0
  202. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-iw.cc64831a14c6cf8c275e.js +1 -0
  203. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-ja.ebd784d49c51faf506e8.js +1 -0
  204. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-kk.c441b67530102a269dbd.js +1 -0
  205. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-ko.f1ca659f6fac640104d5.js +1 -0
  206. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-lt.8396ded359866fd13fe2.js +1 -0
  207. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-lv.2fbc815768b9e804d34a.js +1 -0
  208. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-mk.91c34e14ae7aa8b6feaa.js +1 -0
  209. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-ms.3a411ede82665d08b3db.js +1 -0
  210. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-nl.3ad3f3b413e6f2a81355.js +1 -0
  211. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-no.ac0f2ccd4fdbf363aa6a.js +1 -0
  212. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-pl.cc5949d9e75580d17ff5.js +1 -0
  213. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-pt.f3f758f61774db934475.js +1 -0
  214. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-pt_PT.2153649e80b433bd812f.js +1 -0
  215. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-ro.d8c9fb0a790d1e36de70.js +1 -0
  216. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-ru.4ed4fd0d809c405ef611.js +1 -0
  217. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-sh.22b638460c0c4f08d855.js +1 -0
  218. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-sk.1514f034f6729b07f4dd.js +1 -0
  219. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-sl.90b1a374fa1b561e91e6.js +1 -0
  220. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-sr.d52096f5983ef996575e.js +1 -0
  221. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-sv.8a51ce1fc144bb489768.js +1 -0
  222. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-th.20a629329cb610a18d3c.js +1 -0
  223. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-tr.399b34b46028a97623ff.js +1 -0
  224. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-uk.e6b4015062d2cfb53874.js +1 -0
  225. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-vi.8be8132898bd075738bb.js +1 -0
  226. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-zh_CN.d6e104a57fa44fe85696.js +1 -0
  227. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-messagebundle-zh_TW.0b0e369ac4f2779f302c.js +1 -0
  228. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-sap-fiori_3-parameters-bundle.adf840de658ee9a9c8bf.js +1 -0
  229. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-sap-fiori_3_dark-parameters-bundle.59594fa90ccff9c1dec8.js +1 -0
  230. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-sap-fiori_3_hcb-parameters-bundle.100b5c9a68a6526d659e.js +1 -0
  231. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-sap-fiori_3_hcw-parameters-bundle.53f581c8f7889130eda0.js +1 -0
  232. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-sap-horizon-parameters-bundle.1754dba466c75692808f.js +1 -0
  233. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-sap-horizon_dark-parameters-bundle.66de2310d34754e5e77d.js +1 -0
  234. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-sap-horizon_hcb-parameters-bundle.a15717fa6e5dea27d167.js +1 -0
  235. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-fiori-sap-horizon_hcw-parameters-bundle.73270417a10081b71271.js +1 -0
  236. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-ar.1a15554f382aebc172fb.js +1 -0
  237. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-bg.37a534842be88b0e3f9c.js +1 -0
  238. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-ca.2315c9626c75fcc95baf.js +1 -0
  239. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-cnr.4a69d82fad437ab7f154.js +1 -0
  240. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-cs.2d454106c57de50887cd.js +1 -0
  241. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-cy.119bf8134c42303c1d58.js +1 -0
  242. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-da.9f936f8934bffc8603b3.js +1 -0
  243. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-de.509206257d4bac977747.js +1 -0
  244. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-el.d85525a9f4c958b6d36c.js +1 -0
  245. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-en.1040492ccb4e6685a158.js +1 -0
  246. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-en_GB.6600819640f7327f8ea7.js +1 -0
  247. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-en_US_sappsd.eef6a834bd7dc15f2063.js +1 -0
  248. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-en_US_saprigi.4901cb6a4ef3eed141b2.js +1 -0
  249. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-en_US_saptrc.f6d624eaded75892ecd5.js +1 -0
  250. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-es.d1e274d334902fb75276.js +1 -0
  251. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-es_MX.db283461202212a4eb38.js +1 -0
  252. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-et.87b23ae19c674daa7480.js +1 -0
  253. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-fi.47d4c95ac9a2387dd389.js +1 -0
  254. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-fr.e3899a21d1e29c5f5c22.js +1 -0
  255. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-fr_CA.0eeb8d9a259f388a6cd3.js +1 -0
  256. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-hi.b610afdd07016edec6a5.js +1 -0
  257. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-hr.4a137507a879e64f1ea6.js +1 -0
  258. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-hu.24491a7cc029d4aaf57c.js +1 -0
  259. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-id.a30d661abec52cbb0f30.js +1 -0
  260. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-it.860be474cdc1fd14bec3.js +1 -0
  261. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-iw.97439b47e4681461e1e8.js +1 -0
  262. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-ja.6feed16a28098576d9c2.js +1 -0
  263. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-kk.be4beaad88f2cdccc38d.js +1 -0
  264. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-ko.b8a39a28be739492017a.js +1 -0
  265. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-lt.de4e418184f1b51a4bc4.js +1 -0
  266. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-lv.cf87032707d05b3052f2.js +1 -0
  267. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-mk.bd23676970628cbc6be1.js +1 -0
  268. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-ms.f7966aee9cf19b22bb92.js +1 -0
  269. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-nl.7efdc96d57be3e90599a.js +1 -0
  270. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-no.847d82952b7a5a17d7f6.js +1 -0
  271. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-pl.61ebab20728c8505a7d9.js +1 -0
  272. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-pt.0ede1f92fdc96034756b.js +1 -0
  273. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-pt_PT.575712e240be2ae51f48.js +1 -0
  274. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-ro.b403a0eb0cba0ef874ff.js +1 -0
  275. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-ru.10d719f93960f2fd5852.js +1 -0
  276. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-sh.69a59f7c1502bdfda10f.js +1 -0
  277. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-sk.c633882a763f8a657fe2.js +1 -0
  278. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-sl.57625f117f14560fd61a.js +1 -0
  279. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-sr.ff3e42e35a2329952010.js +1 -0
  280. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-sv.1c2005c32decfafd0284.js +1 -0
  281. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-th.0d0034ee4e3becd5e8c2.js +1 -0
  282. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-tr.331572c13d5848224ecb.js +1 -0
  283. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-uk.d9fda8db63ac154ba60d.js +1 -0
  284. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-vi.93ebff200cbad28591ea.js +1 -0
  285. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-zh_CN.2723b9fdf1f54f07fd10.js +1 -0
  286. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-icons-messagebundle-zh_TW.3b5aaa9b0a95b1ae2f96.js +1 -0
  287. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-ar.f4562fac44162da35d8d.js +1 -0
  288. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-bg.4530ef67e5ae14e5ae76.js +1 -0
  289. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-ca.523a07dcde4ea4e73aed.js +1 -0
  290. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-cnr.0282ab671851f605700a.js +1 -0
  291. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-cs.5eabfbacb62cfe85a70e.js +1 -0
  292. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-cy.2cd86dcfce6b89785d41.js +1 -0
  293. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-da.b1c7da9d287f32142a29.js +1 -0
  294. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-de.fcc577ad779c45971376.js +1 -0
  295. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-el.7ea007b917265a0c76cc.js +1 -0
  296. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-en.ef8e12fc01e3fedf0798.js +1 -0
  297. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-en_GB.917233806f2bd6b1c45b.js +1 -0
  298. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-en_US_sappsd.ed683c7c592185326dc8.js +1 -0
  299. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-en_US_saprigi.69820f8808d1daeec3da.js +1 -0
  300. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-en_US_saptrc.397b4f3475068adb952a.js +1 -0
  301. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-es.951108d12a7a5fa90476.js +1 -0
  302. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-es_MX.8efae291c930b2f0ddd1.js +1 -0
  303. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-et.2c8d9b088f2f9392bf3d.js +1 -0
  304. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-fi.f0cbd6d9346fcbbba7cb.js +1 -0
  305. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-fr.4408bd4773b4876e5722.js +1 -0
  306. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-fr_CA.ca968af088e1aa81b1af.js +1 -0
  307. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-hi.4183c05b6118947ff953.js +1 -0
  308. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-hr.1ed52826cac98f3ff5c3.js +1 -0
  309. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-hu.2f6df0c09ada554bcadb.js +1 -0
  310. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-id.fc4fd542a2eca7572232.js +1 -0
  311. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-it.06df6846fd6eb525ce6e.js +1 -0
  312. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-iw.dfa816d61c08e84652bf.js +1 -0
  313. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-ja.e527c3bfcd22a1a7ad16.js +1 -0
  314. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-kk.177c6cd81cefab9bf5c3.js +1 -0
  315. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-ko.a8f6e1fd978c8fc691c3.js +1 -0
  316. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-lt.59dd3e42f1745188a4d1.js +1 -0
  317. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-lv.0ccfaaef7c6851cbce58.js +1 -0
  318. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-mk.dd3ff580eda49f5345d3.js +1 -0
  319. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-ms.89680c721352ad2fe9cf.js +1 -0
  320. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-nl.7f050485016902ace16a.js +1 -0
  321. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-no.940e82acb3eb6ab9e869.js +1 -0
  322. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-pl.a7900292b470d9c6de3b.js +1 -0
  323. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-pt.c0caa8b0cb42a710ffdd.js +1 -0
  324. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-pt_PT.6427b86e404aed0ffbf1.js +1 -0
  325. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-ro.ef878fb667fc38d1a38b.js +1 -0
  326. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-ru.b94146989bc3e44cabcb.js +1 -0
  327. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-sh.f5752a076411d5544bdf.js +1 -0
  328. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-sk.26fdc0e11cee8e8232ec.js +1 -0
  329. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-sl.ff95669381b0cd7fec27.js +1 -0
  330. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-sr.132292190513af6fbcfd.js +1 -0
  331. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-sv.b0f5b9b414141df2a2c6.js +1 -0
  332. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-th.354ae41c19b4b0944aea.js +1 -0
  333. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-tr.08c5f9a5e435547c8c7b.js +1 -0
  334. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-uk.84058ca559d7cf0dc5ca.js +1 -0
  335. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-vi.baa4e49543c2ac43dc0f.js +1 -0
  336. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-zh_CN.b357897853c52e38ebd9.js +1 -0
  337. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-messagebundle-zh_TW.34ccd79f944bad950b26.js +1 -0
  338. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-ar.e38d563d90a758b45fab.js +1 -0
  339. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-bg.cdc9797fb7092348ce51.js +1 -0
  340. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-ca.8836407f8ff00446fb45.js +1 -0
  341. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-cnr.91b38c40260ad7adead6.js +1 -0
  342. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-cs.d508e1c66958ea3789f9.js +1 -0
  343. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-cy.30ac76f58b95aa2ee0d9.js +1 -0
  344. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-da.b0c2ed1a1ca8fb705fbb.js +1 -0
  345. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-de.78243ddc941afe4d3832.js +1 -0
  346. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-el.a5a85777de59c08547ea.js +1 -0
  347. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-en.a3e6be3babf819124d3b.js +1 -0
  348. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-en_GB.5f3c8a4f93b4231e0710.js +1 -0
  349. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-en_US_sappsd.d446a41642c8afbd70c8.js +1 -0
  350. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-en_US_saprigi.75de99f4c3c07901f306.js +1 -0
  351. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-en_US_saptrc.b7318629248773efa913.js +1 -0
  352. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-es.bf1e6faceea5c4f0e55e.js +1 -0
  353. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-es_MX.fe393ba94a77cdf89f57.js +1 -0
  354. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-et.2638e6a2266895b18de6.js +1 -0
  355. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-fi.e4525cf711f7488431a8.js +1 -0
  356. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-fr.88e45929e9617f947470.js +1 -0
  357. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-fr_CA.8dd1787e24087daed9e2.js +1 -0
  358. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-hi.9ad2a174fb91ffebd800.js +1 -0
  359. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-hr.6874358de932eb8d91bf.js +1 -0
  360. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-hu.68a989de994a9d3033b6.js +1 -0
  361. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-id.58a4456e90bfe0a2887c.js +1 -0
  362. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-it.9ae0c94f42a0a667b26e.js +1 -0
  363. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-iw.5d920829d145d7e4b414.js +1 -0
  364. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-ja.33ab9b41bb1d36cfba54.js +1 -0
  365. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-kk.3bb299bfe29ff7982f57.js +1 -0
  366. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-ko.b038311ab6195606ddd0.js +1 -0
  367. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-lt.289448dc578b56ddad98.js +1 -0
  368. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-lv.8920c42448d0ac1136e4.js +1 -0
  369. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-mk.2da0bf14c36f84247541.js +1 -0
  370. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-ms.01efa0043cd052c998fb.js +1 -0
  371. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-nl.75b644bc207438a59c25.js +1 -0
  372. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-no.48d24797e9a6989f72c1.js +1 -0
  373. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-pl.915a2b47404ccf2f7760.js +1 -0
  374. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-pt.0e8ff42f4804a66dba82.js +1 -0
  375. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-pt_PT.6ea9945b12fda9bb8bfc.js +1 -0
  376. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-ro.18e81eb69f4b6627c922.js +1 -0
  377. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-ru.f4e7daeb32deac764f85.js +1 -0
  378. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-sh.bbbd3f3c428b40dc0fa3.js +1 -0
  379. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-sk.29f8b3868369da831ab9.js +1 -0
  380. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-sl.ff961061c1ec0e03bb61.js +1 -0
  381. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-sr.9505f8a48efadd4b6d53.js +1 -0
  382. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-sv.e5bbdef4d4ea030690f1.js +1 -0
  383. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-th.32ef958e0cc289287462.js +1 -0
  384. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-tr.46468cd816ee1763d2f8.js +1 -0
  385. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-uk.6be975093a4d2cf57827.js +1 -0
  386. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-vi.ab9154ca9554db1a1d4d.js +1 -0
  387. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-zh_CN.670ebd5ba4ef6922c0e9.js +1 -0
  388. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-react-messagebundle-zh_TW.066d49c5cf4bd5bd9432.js +1 -0
  389. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-sap-fiori_3-parameters-bundle.251210baf2410d206456.js +1 -0
  390. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-sap-fiori_3_dark-parameters-bundle.8cd7aa3b709a48fdfdc6.js +1 -0
  391. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-sap-fiori_3_hcb-parameters-bundle.ff0b98433dd2a1097692.js +1 -0
  392. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-sap-fiori_3_hcw-parameters-bundle.95bb6768ccae003bb0f3.js +1 -0
  393. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-sap-horizon-parameters-bundle.98020dab350f22c517ab.js +1 -0
  394. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-sap-horizon_dark-parameters-bundle.24f746693597e30d4333.js +1 -0
  395. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-sap-horizon_hcb-parameters-bundle.c9da60e1ed7a95221652.js +1 -0
  396. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-sap-horizon_hcw-parameters-bundle.5f57a6411399526872a8.js +1 -0
  397. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-theming-sap-fiori_3-parameters-bundle.e10239aeeedd50ab4991.js +1 -0
  398. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-theming-sap-fiori_3_dark-parameters-bundle.82055f8ae72d247dd004.js +1 -0
  399. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-theming-sap-fiori_3_hcb-parameters-bundle.910e84291bb9eff48aa7.js +1 -0
  400. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-theming-sap-fiori_3_hcw-parameters-bundle.ef67aec16223787a0f24.js +1 -0
  401. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-theming-sap-horizon-parameters-bundle.35eee23640b71ddb0b83.js +1 -0
  402. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-theming-sap-horizon_dark-parameters-bundle.50832da11252eef60733.js +1 -0
  403. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-theming-sap-horizon_hcb-parameters-bundle.d14a90f059d5ccc8c256.js +1 -0
  404. bytegrader-0.0.1/bytegrader/extensions/labextension/static/ui5-webcomponents-theming-sap-horizon_hcw-parameters-bundle.663a3455a8423e723780.js +1 -0
  405. bytegrader-0.0.1/bytegrader/handlers/__init__.py +0 -0
  406. bytegrader-0.0.1/bytegrader/handlers/assignment.py +196 -0
  407. bytegrader-0.0.1/bytegrader/handlers/auth.py +27 -0
  408. bytegrader-0.0.1/bytegrader/handlers/base.py +269 -0
  409. bytegrader-0.0.1/bytegrader/handlers/course.py +140 -0
  410. bytegrader-0.0.1/bytegrader/handlers/submission.py +45 -0
  411. bytegrader-0.0.1/bytegrader/hub.py +134 -0
  412. bytegrader-0.0.1/bytegrader/preprocessors/__init__.py +0 -0
  413. bytegrader-0.0.1/bytegrader/preprocessors/base.py +38 -0
  414. bytegrader-0.0.1/bytegrader/preprocessors/factory.py +60 -0
  415. bytegrader-0.0.1/bytegrader/preprocessors/transform/__init__.py +9 -0
  416. bytegrader-0.0.1/bytegrader/preprocessors/transform/clear_markingscheme.py +73 -0
  417. bytegrader-0.0.1/bytegrader/preprocessors/transform/clear_solutions.py +99 -0
  418. bytegrader-0.0.1/bytegrader/preprocessors/transform/clear_tests.py +66 -0
  419. bytegrader-0.0.1/bytegrader/preprocessors/transform/lockcells.py +45 -0
  420. bytegrader-0.0.1/bytegrader/preprocessors/validate/__init__.py +0 -0
  421. bytegrader-0.0.1/bytegrader/repositories/__init__.py +16 -0
  422. bytegrader-0.0.1/bytegrader/repositories/asset.py +13 -0
  423. bytegrader-0.0.1/bytegrader/repositories/assignment.py +37 -0
  424. bytegrader-0.0.1/bytegrader/repositories/base.py +77 -0
  425. bytegrader-0.0.1/bytegrader/repositories/course.py +45 -0
  426. bytegrader-0.0.1/bytegrader/repositories/submission.py +33 -0
  427. bytegrader-0.0.1/bytegrader/repositories/user.py +95 -0
  428. bytegrader-0.0.1/bytegrader/schemas/__init__.py +0 -0
  429. bytegrader-0.0.1/bytegrader/schemas/assignment.py +74 -0
  430. bytegrader-0.0.1/bytegrader/schemas/base.py +25 -0
  431. bytegrader-0.0.1/bytegrader/schemas/course.py +60 -0
  432. bytegrader-0.0.1/bytegrader/services/__init__.py +0 -0
  433. bytegrader-0.0.1/bytegrader/services/assignment.py +337 -0
  434. bytegrader-0.0.1/bytegrader/services/course.py +83 -0
  435. bytegrader-0.0.1/bytegrader/services/submission.py +175 -0
  436. bytegrader-0.0.1/bytegrader/tasks/__init__.py +0 -0
  437. bytegrader-0.0.1/bytegrader/tasks/lti_sync.py +425 -0
  438. bytegrader-0.0.1/bytegrader/tasks/scheduler.py +126 -0
  439. bytegrader-0.0.1/docker-compose.yml +225 -0
  440. bytegrader-0.0.1/etc/jupyter/jupyter_server_config.d/bytegrader.json +7 -0
  441. bytegrader-0.0.1/install.json +5 -0
  442. bytegrader-0.0.1/mypy.ini +2 -0
  443. bytegrader-0.0.1/package.json +104 -0
  444. bytegrader-0.0.1/pyproject.toml +212 -0
  445. bytegrader-0.0.1/requirements.txt +1 -0
  446. bytegrader-0.0.1/setup.py +2 -0
  447. bytegrader-0.0.1/src/assignment-creation/cell-strip.ts +227 -0
  448. bytegrader-0.0.1/src/assignment-creation/index.ts +16 -0
  449. bytegrader-0.0.1/src/assignment-creation/mode-manager.ts +98 -0
  450. bytegrader-0.0.1/src/assignment-creation/model.ts +165 -0
  451. bytegrader-0.0.1/src/assignment-creation/overlay.ts +121 -0
  452. bytegrader-0.0.1/src/components/AssignmentsList.tsx +575 -0
  453. bytegrader-0.0.1/src/components/CoursesListPage.tsx +521 -0
  454. bytegrader-0.0.1/src/components/ErrorBoundary.tsx +38 -0
  455. bytegrader-0.0.1/src/components/TopBar.tsx +151 -0
  456. bytegrader-0.0.1/src/components/dialogs/ConfirmationDialog.tsx +116 -0
  457. bytegrader-0.0.1/src/components/dialogs/CreateCourseDialog.tsx +170 -0
  458. bytegrader-0.0.1/src/components/dialogs/EditCourseDialog.tsx +161 -0
  459. bytegrader-0.0.1/src/components/dialogs/EnrollmentsDialog.tsx +390 -0
  460. bytegrader-0.0.1/src/components/dialogs/ErrorDialog.tsx +116 -0
  461. bytegrader-0.0.1/src/components/dialogs/FilePickerDialog.tsx +535 -0
  462. bytegrader-0.0.1/src/components/dialogs/WidgetModal.tsx +153 -0
  463. bytegrader-0.0.1/src/components/shared/AssignmentActionButtons.tsx +150 -0
  464. bytegrader-0.0.1/src/components/shared/Badges.tsx +168 -0
  465. bytegrader-0.0.1/src/components/shared/DueDateDisplay.tsx +24 -0
  466. bytegrader-0.0.1/src/components/shared/LoadingStates.tsx +57 -0
  467. bytegrader-0.0.1/src/components/shared/NotebookList.tsx +48 -0
  468. bytegrader-0.0.1/src/components/wizards/CreateAssignmentWizard.tsx +1224 -0
  469. bytegrader-0.0.1/src/constants/index.ts +98 -0
  470. bytegrader-0.0.1/src/hooks/useAssignmentPermissions.ts +19 -0
  471. bytegrader-0.0.1/src/hooks/useErrorHandler.ts +49 -0
  472. bytegrader-0.0.1/src/hooks/usePermissions.ts +29 -0
  473. bytegrader-0.0.1/src/hooks/useScrollDetection.ts +21 -0
  474. bytegrader-0.0.1/src/i18n/de.json +3 -0
  475. bytegrader-0.0.1/src/i18n/en.json +3 -0
  476. bytegrader-0.0.1/src/index.ts +215 -0
  477. bytegrader-0.0.1/src/services/api.ts +83 -0
  478. bytegrader-0.0.1/src/stores/assignmentsStore.ts +151 -0
  479. bytegrader-0.0.1/src/stores/coursesStore.ts +74 -0
  480. bytegrader-0.0.1/src/stores/userStore.ts +41 -0
  481. bytegrader-0.0.1/src/types/api.ts +118 -0
  482. bytegrader-0.0.1/src/types/assets.d.ts +34 -0
  483. bytegrader-0.0.1/src/utils/themeSync.tsx +117 -0
  484. bytegrader-0.0.1/src/utils.ts +50 -0
  485. bytegrader-0.0.1/src/widgets/AssignmentsListWidget.tsx +342 -0
  486. bytegrader-0.0.1/src/widgets/CoursesListWidget.tsx +68 -0
  487. bytegrader-0.0.1/style/assignment-creation.css +97 -0
  488. bytegrader-0.0.1/style/index.css +1 -0
  489. bytegrader-0.0.1/style/logo.png +0 -0
  490. bytegrader-0.0.1/tsconfig.json +33 -0
  491. bytegrader-0.0.1/uv.lock +3374 -0
  492. bytegrader-0.0.1/yarn.lock +8614 -0
@@ -0,0 +1 @@
1
+ {"image":"mcr.microsoft.com/devcontainers/base:ubuntu"}
@@ -0,0 +1,78 @@
1
+ # Git
2
+ .git
3
+ .gitignore
4
+ .github
5
+
6
+ # Documentation
7
+ *.md
8
+ !README.md
9
+ docs/
10
+
11
+ # Tests
12
+ tests/
13
+ *.test.ts
14
+ *.test.py
15
+ *.spec.ts
16
+ pytest.ini
17
+ .pytest_cache/
18
+ htmlcov/
19
+ .coverage
20
+
21
+ # Development files
22
+ .env
23
+ .env.local
24
+ .env.*.local
25
+ *.log
26
+
27
+ # IDE
28
+ .idea/
29
+ .vscode/
30
+ *.swp
31
+ *.swo
32
+ *~
33
+
34
+ # Python
35
+ __pycache__/
36
+ *.py[cod]
37
+ *$py.class
38
+ *.so
39
+ .Python
40
+ build/
41
+ develop-eggs/
42
+ dist/
43
+ downloads/
44
+ eggs/
45
+ .eggs/
46
+ lib64/
47
+ parts/
48
+ sdist/
49
+ var/
50
+ wheels/
51
+ *.egg-info/
52
+ .installed.cfg
53
+ *.egg
54
+ .mypy_cache/
55
+ .dmypy.json
56
+ dmypy.json
57
+
58
+ # Node
59
+ node_modules/
60
+ npm-debug.log*
61
+ yarn-debug.log*
62
+ yarn-error.log*
63
+ .npm
64
+
65
+ # JupyterHub
66
+ jupyterhub.sqlite
67
+ jupyterhub_cookie_secret
68
+ jupyterhub-proxy.pid
69
+
70
+ # Docker
71
+ docker/keys/
72
+ docker/scripts/*.log
73
+
74
+ # Temporary files
75
+ *.tmp
76
+ *.temp
77
+ .DS_Store
78
+ Thumbs.db
@@ -0,0 +1,108 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+
5
+ # C extensions
6
+ *.so
7
+
8
+ # Distribution / packaging
9
+ .Python
10
+ env/
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ lib/
17
+ lib64/
18
+ parts/
19
+ sdist/
20
+ var/
21
+ *.egg-info/
22
+ .installed.cfg
23
+ *.egg
24
+
25
+ # built labextension
26
+ tsconfig.tsbuildinfo
27
+ bytegrader/extensions/labextension/
28
+ # Yarn cache
29
+ .yarn/
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Unit test / coverage reports
42
+ htmlcov/
43
+ .tox/
44
+ .coverage
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+
49
+ # Translations
50
+ *.mo
51
+ *.pot
52
+
53
+ # Django stuff:
54
+ *.log
55
+
56
+ # Sphinx documentation
57
+ nbgrader/docs/_build/
58
+
59
+ # PyBuilder
60
+ target/
61
+
62
+ # Jupyter notebook checkpoints
63
+ .ipynb_checkpoints/
64
+
65
+ # Coverage files
66
+ .coverage.*
67
+
68
+ # components stuff
69
+ node_modules
70
+ bytegrader/server_extensions/formgrader/static/components/
71
+
72
+ conda-bld
73
+ gh_api.sqlite
74
+ MANIFEST
75
+ README
76
+ .pytest_cache
77
+ venv/
78
+ gradebook.db
79
+ .buildconfig
80
+ *~
81
+ .vscode/
82
+ package-lock.json
83
+ .goutputstream*
84
+ .idea
85
+ .mypy_cache
86
+
87
+
88
+ # playwright output tests directory
89
+ playwright-tests/
90
+ playwright-report
91
+ test-results
92
+ /test-results/
93
+ /playwright-report/
94
+ /dist-pw/
95
+
96
+ .pnpm-store/
97
+
98
+ # Tests
99
+ test/
100
+ test_env/
101
+ testenv/
102
+
103
+ .venv/
104
+
105
+ # Docker secrets
106
+ .env
107
+ docker/keys/*.pem
108
+ docker/lti-config/
@@ -0,0 +1,3 @@
1
+ save-exact=true
2
+ engine-strict=false
3
+ legacy-peer-deps=true
@@ -0,0 +1 @@
1
+ 3.10
@@ -0,0 +1 @@
1
+ network-timeout 300000
@@ -0,0 +1 @@
1
+ nodeLinker: node-modules
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2026, Kamuyin
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,54 @@
1
+ Metadata-Version: 2.4
2
+ Name: bytegrader
3
+ Version: 0.0.1
4
+ Summary: BYTEGrader - JupyterHub assignment grading service
5
+ License-File: LICENSE
6
+ Keywords: Grading,Homework,Jupyter,JupyterLab,Notebooks
7
+ Classifier: Framework :: Jupyter
8
+ Classifier: Framework :: Jupyter :: JupyterLab
9
+ Classifier: Framework :: Jupyter :: JupyterLab :: 4
10
+ Classifier: Framework :: Jupyter :: JupyterLab :: Extensions
11
+ Classifier: Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt
12
+ Classifier: License :: OSI Approved :: BSD License
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Programming Language :: Python :: 3
15
+ Requires-Python: >=3.10
16
+ Requires-Dist: aiohttp>=3.8.0
17
+ Requires-Dist: apscheduler>=3.11.0
18
+ Requires-Dist: cachetools>=5.0.0
19
+ Requires-Dist: colorama>=0.4.6
20
+ Requires-Dist: cryptography>=3.4.8
21
+ Requires-Dist: ipython>=8.10.0
22
+ Requires-Dist: ipywidgets>=7.6
23
+ Requires-Dist: jinja2>=3
24
+ Requires-Dist: jupyter-client<9
25
+ Requires-Dist: jupyter-server>=2
26
+ Requires-Dist: jupyterhub-systemdspawner>=1.0.2
27
+ Requires-Dist: jupyterlab-server
28
+ Requires-Dist: jupyterlab<5,>=4.2.0
29
+ Requires-Dist: nbclient>=0.6.1
30
+ Requires-Dist: nbconvert>=6
31
+ Requires-Dist: notebook<8,>=7.2.0
32
+ Requires-Dist: pydantic>=2.11.2
33
+ Requires-Dist: pyjwt
34
+ Requires-Dist: python-dateutil>=2.8
35
+ Requires-Dist: pyyaml>=6.0
36
+ Requires-Dist: rapidfuzz>=1.8
37
+ Requires-Dist: requests>=2.26
38
+ Requires-Dist: rich>=14.0.0
39
+ Requires-Dist: setuptools
40
+ Requires-Dist: sqlalchemy<3,>=1.4
41
+ Requires-Dist: tomli>=2.2.1
42
+ Requires-Dist: traitlets>=5.14.3
43
+ Provides-Extra: opentelemetry
44
+ Requires-Dist: opentelemetry-exporter-otlp>=1.26.0; extra == 'opentelemetry'
45
+ Requires-Dist: opentelemetry-instrumentation-requests>=0.49b0; extra == 'opentelemetry'
46
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.49b0; extra == 'opentelemetry'
47
+ Requires-Dist: opentelemetry-instrumentation-tornado>=0.49b0; extra == 'opentelemetry'
48
+ Requires-Dist: opentelemetry-sdk>=1.26.0; extra == 'opentelemetry'
49
+ Provides-Extra: sentry
50
+ Requires-Dist: sentry-sdk>=2.0.0; extra == 'sentry'
51
+ Provides-Extra: systemd
52
+ Requires-Dist: bytegrader-executor-systemd; extra == 'systemd'
53
+ Provides-Extra: wasm-executor
54
+ Requires-Dist: wasmtime>=35.0.0; extra == 'wasm-executor'
File without changes
@@ -0,0 +1,175 @@
1
+ # BYTEGrader
2
+
3
+ BYTE Grader is an autograding service designed for educational environments. It integrates with JupyterHub and Learning Management Systems through LTI 1.3, providing automated grading capabilities for Jupyter notebooks with support for custom test cases and modular execution environments. It's inspired of [nbgrader](https://github.com/jupyter/nbgrader) which is great but lacks support of LMS synchronization and isolated execution environments for the autograding.
4
+
5
+ ## Overview
6
+
7
+ BYTEGrader consists of two main components:
8
+
9
+ - **Backend Service**: A Tornado application that provides RESTful APIs for managing courses, assignments, and submissions with automated grading capabilities
10
+ - **JupyterLab Extension**: A TypeScript/React frontend that extends JupyterLab with an interface for instructors and students
11
+
12
+ The system supports LTI 1.3 integration with platforms like Moodle, allowing grade synchronization and user provisioning through LTI Advantage services (Assignment and Grade Services, Names and Role Provisioning Service).
13
+
14
+ ## Showcase
15
+
16
+ ### Courses
17
+
18
+ ![Courses](docs/public/showcase_courses.png)
19
+
20
+ ### Assignments
21
+
22
+ ![Assignments](docs/public/showcase_assignments.png)
23
+
24
+ ### Create Assignment (Step 1)
25
+
26
+ ![Create assignment step 1](docs/public/showcase_create_1.png)
27
+
28
+ ### Create Assignment (Step 2)
29
+
30
+ ![Create assignment step 2](docs/public/showcase_create_2.png)
31
+
32
+ ### Create Assignment (Step 3)
33
+
34
+ ![Create assignment step 3](docs/public/showcase_create_3.png)
35
+
36
+ ### Graded Submission
37
+
38
+ ![Graded submission](docs/public/showcase_graded.png)
39
+
40
+ ## Key Features
41
+
42
+ ### Assignment Management
43
+
44
+ - Create and manage programming assignments with multiple notebook files
45
+ - Configure automated tests and grading criteria
46
+ - Set due dates, late submission policies, and point allocations
47
+ - Allow students to fetch solutions for an assignment with conditions.
48
+
49
+ ### Automated Grading
50
+
51
+ - Execute student submissions in isolated environments
52
+ - Run automated test suites with timeout and resource limits
53
+ - Aggregate scores across multiple notebooks and test cases
54
+
55
+ ### LTI 1.3 Integration
56
+
57
+ - Secure authentication via LTI launch from LMS platforms
58
+ - Automatic course and user synchronization through NRPS
59
+ - Grade passback to LMS via Assignment and Grade Service (AGS)
60
+ - Support for deep linking and resource selection
61
+
62
+ ## Installation
63
+
64
+ ### Prerequisites
65
+
66
+ - Python 3.11 or higher
67
+ - Node.js 18 or higher
68
+ - Database (SQLite, PostgreSQL, etc.)
69
+ - JupyterHub
70
+
71
+ ### Setup
72
+
73
+ 1. Install the package
74
+
75
+ ```bash
76
+ uv sync
77
+ uv pip install -e .
78
+ ```
79
+
80
+ 2. Set up BYTEGrader configuration
81
+ Please see [example/bytegrader_config.py](example/bytegrader_config.py) for an example configuration.
82
+
83
+ 3. Add the service to JupyterHub (managed or external)
84
+
85
+ ```python
86
+ c.JupyterHub.services = [
87
+ {
88
+ "name": "bytegrader",
89
+ "api_token": "1442555d6d82d96fc8a69776f19978e442873859c6a003f7be15e61d669e2e1c", # generate via `openssl rand -hex 32`
90
+ "url": "http://127.0.0.1:10101",
91
+ }
92
+ ]
93
+ ```
94
+
95
+ 4. Start the service
96
+
97
+ ```bash
98
+ export JUPYTERHUB_SERVICE_PREFIX="/services/bytegrader/"
99
+ export JUPYTERHUB_API_TOKEN="1442555d6d82d96fc8a69776f19978e442873859c6a003f7be15e61d669e2e1c"
100
+ export JUPYTERHUB_API_URL="http://127.0.0.1:8000/hub/api"
101
+ export JUPYTERHUB_SERVICE_NAME="bytegrader"
102
+ export JUPYTERHUB_SERVICE_URL="http://0.0.0.0:10101"
103
+ export BYTEGRADER_LOG_LEVEL="DEBUG"
104
+ bytegrader serve --config bytegrader_config.py
105
+ ```
106
+
107
+ ### Docker Deployment
108
+
109
+ WIP, currently broken.
110
+
111
+ ## Usage
112
+
113
+ ### For Instructors
114
+
115
+ 1. **Create a Course**: Navigate to the Courses panel in JupyterLab
116
+ 2. **Create Assignment Notebooks:**: Notebooks must be created via the `nbgrader` extension. BYTE Grader is compatible with nbgrader's notebooks format.
117
+ 3. **Create an Assignment**: Use the assignment wizard to configure:
118
+ - Notebook and asset files to include
119
+ - Due dates and late policies
120
+ - Solution policies
121
+ 4. **Distribute to Students**: Assignment notebooks are automatically preprocessed and distributed
122
+ 5. **Review Submissions**: View automated grades and provide manual feedback
123
+
124
+ ### For Students
125
+
126
+ 1. **Access Assignments**: Launch JupyterLab via LTI from your LMS
127
+ 2. **Fetch Assignment**: Open the assignment and get the starter notebook
128
+ 3. **Complete Work**: Write code in designated solution cells
129
+ 4. **Submit**: Click submit to send for automated grading
130
+ 5. **View Results**: See test results after autograding
131
+
132
+ ## Development
133
+
134
+ ### Building the Extension
135
+
136
+ ```bash
137
+ jlpm build
138
+ ```
139
+
140
+ ## Project Structure
141
+
142
+ ```
143
+ bytegrader/
144
+ ├── bytegrader/ # Python backend
145
+ │ ├── autograde/ # Grading queue and workers
146
+ │ ├── cli/ # Command-line interface
147
+ │ ├── config/ # Configuration system
148
+ │ ├── core/ # Core models, auth, database
149
+ │ ├── extensions/ # JupyterLab server extension
150
+ │ ├── handlers/ # Tornado request handlers
151
+ │ ├── preprocessors/ # Notebook preprocessors
152
+ │ ├── repositories/ # Data access layer
153
+ │ ├── schemas/ # Pydantic request/response schemas
154
+ │ ├── services/ # Business logic
155
+ │ └── tasks/ # Background tasks
156
+ ├── src/ # TypeScript frontend
157
+ │ ├── components/ # React components
158
+ │ ├── hooks/ # Custom React hooks
159
+ │ ├── services/ # API client
160
+ │ ├── stores/ # State management
161
+ │ └── widgets/ # JupyterLab widgets
162
+ ├── docker/ # Docker configurations
163
+ ├── tests/ # Test suite (TBD)
164
+ └── docs/ # Documentation (TBD)
165
+ ```
166
+
167
+ ## License
168
+
169
+ This project is licensed under the BSD 3-Clause License. See the LICENSE file for details.
170
+
171
+ ## Acknowledgments
172
+
173
+ Developed as part of the BYTE Challenge initiative to enhance computer science education for students.
174
+
175
+ BYTE Grader builds upon the work of the [nbgrader](https://github.com/jupyter/nbgrader) project. The core project architecture, notebook format, preprocessor patterns, and notebook manipulation strategies were inspired by nbgrader's approach. I am grateful to the nbgrader team for providing their software as open source. Without them this project would have never existed.
@@ -0,0 +1,38 @@
1
+ import json
2
+ from pathlib import Path
3
+ from typing import List, Dict
4
+
5
+ from .extensions.lab import load_jupyter_server_extension as load_lab_extension
6
+
7
+ __version__ = '0.0.1'
8
+
9
+ HERE = Path(__file__).parent.resolve()
10
+
11
+ if not (HERE / "extensions" / "labextension").exists():
12
+ with (HERE / "extensions" / "labextension" / "package.json").open() as fid:
13
+ data = json.load(fid)
14
+
15
+
16
+ def _jupyter_labextension_paths():
17
+ return [{
18
+ "src": "labextension",
19
+ "dest": data["name"]
20
+ }]
21
+
22
+
23
+ def _jupyter_server_extension_points() -> List[Dict[str, str]]:
24
+ return [{
25
+ "module": "bytegrader",
26
+ }]
27
+
28
+
29
+ def _load_jupyter_server_extension(app):
30
+ load_lab_extension(app)
31
+
32
+
33
+ __all__ = [
34
+ '__version__',
35
+ '_jupyter_labextension_paths',
36
+ '_jupyter_server_extension_points',
37
+ '_load_jupyter_server_extension',
38
+ ]
@@ -0,0 +1,7 @@
1
+ import sys
2
+
3
+ from .cli.main import main
4
+
5
+
6
+ if __name__ == "__main__":
7
+ sys.exit(main())
File without changes
@@ -0,0 +1,16 @@
1
+ from .simple import SimpleExecutor
2
+
3
+ __all__ = ["SimpleExecutor"]
4
+ # _all__ = []
5
+
6
+ try:
7
+ from .systemd import SystemdExecutor, SystemdExecutorConfig
8
+ __all__.extend(["SystemdExecutor", "SystemdExecutorConfig"])
9
+ except ImportError:
10
+ pass
11
+
12
+ try:
13
+ from .wasm import WasmExecutor
14
+ __all__.append("WasmExecutor")
15
+ except ImportError:
16
+ pass
@@ -0,0 +1,15 @@
1
+ from abc import abstractmethod
2
+
3
+ from nbformat import NotebookNode
4
+ from traitlets.config import LoggingConfigurable
5
+
6
+
7
+ class BaseExecutor(LoggingConfigurable):
8
+
9
+ @abstractmethod
10
+ async def execute_cell(self, cell_source, globals_dict=None):
11
+ pass
12
+
13
+ @abstractmethod
14
+ async def execute_notebook(self, notebook: NotebookNode, cell_ids=None):
15
+ pass
@@ -0,0 +1,54 @@
1
+ import logging
2
+ import traceback
3
+ from io import StringIO
4
+ from contextlib import redirect_stdout, redirect_stderr
5
+ import nbformat
6
+ from traitlets.config import Configurable
7
+
8
+ from bytegrader.autograde.executors.base import BaseExecutor
9
+
10
+ # ! Only for demonstration purposes; must not be used in production due to security risks.
11
+ class SimpleExecutor(BaseExecutor, Configurable):
12
+
13
+ def __init__(self, **kwargs):
14
+ super().__init__(**kwargs)
15
+ self.log = logging.getLogger("SimpleExecutor")
16
+ self.log.info("SimpleExecutor initialized")
17
+
18
+ async def execute_cell(self, cell_source, globals_dict=None):
19
+ buf = StringIO()
20
+ env = globals_dict if globals_dict is not None else {}
21
+
22
+ try:
23
+ self.log.info(f"Executing cell: {cell_source[:30]}...")
24
+ with redirect_stdout(buf), redirect_stderr(buf):
25
+ exec(cell_source, env)
26
+ return {
27
+ "success": True,
28
+ "output": buf.getvalue(),
29
+ "error": None
30
+ }
31
+ except Exception:
32
+ return {
33
+ "success": False,
34
+ "output": buf.getvalue(),
35
+ "error": {"traceback": traceback.format_exc()}
36
+ }
37
+
38
+ async def execute_notebook(self, notebook: nbformat.NotebookNode, cell_ids=None):
39
+ nb_id = getattr(notebook, "metadata", {}).get("name", None)
40
+ total = len(notebook.cells)
41
+ self.log.info(f"Executing NotebookNode name={nb_id} with {total} cells")
42
+ results = {}
43
+ env = {}
44
+
45
+ for cell in notebook.cells:
46
+ cid = getattr(cell, "id", None)
47
+ if cell.cell_type != "code":
48
+ continue
49
+ if cell_ids and cid not in cell_ids:
50
+ continue
51
+ res = await self.execute_cell(cell.source, globals_dict=env)
52
+ results[cid] = res
53
+
54
+ return results
@@ -0,0 +1,3 @@
1
+ from bytegrader_systemd import SystemdExecutor, SystemdExecutorConfig
2
+
3
+ __all__ = ["SystemdExecutor", "SystemdExecutorConfig"]