{
  "generatedBy": "Bhylu",
  "versions": {
    "django": "5.2.18",
    "python": "3.12"
  },
  "files": [
    {
      "file": "requirements.txt",
      "sha256": "709d445ca1de53a80220e983a6e2e4848cb33dbd9c00f6c3bec3e721b582c12a",
      "bytes": 131
    },
    {
      "file": "manage.py",
      "sha256": "f74732bcc1fae1791333c308740f4123a0f1899dff8040e3bcbf7495cc5d7052",
      "bytes": 228
    },
    {
      "file": "workshop_site/__init__.py",
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "bytes": 0
    },
    {
      "file": "workshop_site/settings.py",
      "sha256": "06a9b84e90baceb772ee6198d72ff39f8aea4f5c2674643a9f2b3ad1424ff43f",
      "bytes": 3151
    },
    {
      "file": "workshop_site/production.py",
      "sha256": "f01ffab1874f4710bf5daec620a64341ff0909f379befd2eb1bd81c58c932b44",
      "bytes": 1013
    },
    {
      "file": "workshop_site/urls.py",
      "sha256": "0117a80bb04f7f1407460380a9f5507d389306861865ddca10c4475231daa927",
      "bytes": 414
    },
    {
      "file": "workshop_site/wsgi.py",
      "sha256": "a1ffb3200215ad19a0059597297fde3cb8a21d8ceb7bb5f942729f2486223791",
      "bytes": 171
    },
    {
      "file": "workshop_site/asgi.py",
      "sha256": "31a79832e193073da3752cc502792e079dcd7e6112b6f276e19235547636c291",
      "bytes": 171
    },
    {
      "file": "workshops/__init__.py",
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "bytes": 0
    },
    {
      "file": "workshops/apps.py",
      "sha256": "6b1564b50c739b61f6ed491f5daa99ac2ec598fa12c98571e4e8a71c2ad2de84",
      "bytes": 148
    },
    {
      "file": "workshops/models.py",
      "sha256": "8493b617aa634def90315c974fb9ce94b50e961109ffef5f6430b5f9be8d0653",
      "bytes": 1916
    },
    {
      "file": "workshops/migrations/__init__.py",
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "bytes": 0
    },
    {
      "file": "workshops/migrations/0001_initial.py",
      "sha256": "2295c0ef05e8409153c25abcaaddeca9cd5346633b67bc7c1548ae3b11c85d1f",
      "bytes": 2272
    },
    {
      "file": "workshops/migrations/0002_venue_access_note.py",
      "sha256": "67c2884bde2d185489cb8df957ef521d417702e5a1a9f290526e98106766b71f",
      "bytes": 282
    },
    {
      "file": "workshops/forms.py",
      "sha256": "3412e857d6e7987faec775d055eb2922da432e4ae9a8cc4527788eb44d8cc656",
      "bytes": 1216
    },
    {
      "file": "workshops/services.py",
      "sha256": "cacfd82b52036ae215ff8f1618ea327803a43da976d3fe5d85219b78be301923",
      "bytes": 1119
    },
    {
      "file": "workshops/views.py",
      "sha256": "32c06e01b6562bab57dedf83c14b5e4d21c001fdadfbe750b9b6e461227d46c1",
      "bytes": 2735
    },
    {
      "file": "workshops/urls.py",
      "sha256": "c0bdd1fb2d9716c2712b9f422fbb14bf4cf9e01bc869f3b2fbc5ad2d15dc141e",
      "bytes": 529
    },
    {
      "file": "workshops/admin.py",
      "sha256": "ea9265bf02e522fa597be6663498fa3ffe17110bc436e86100ab202cffeb3bf5",
      "bytes": 1218
    },
    {
      "file": "workshops/middleware.py",
      "sha256": "76a7162c943a700c827b33b806e6a2ea4c13c4146e179e3fad827c9e62ea76ca",
      "bytes": 254
    },
    {
      "file": "workshops/templatetags/__init__.py",
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "bytes": 0
    },
    {
      "file": "workshops/templatetags/workshop_tags.py",
      "sha256": "b9cb54e095de147158c322c4b213830d9785129f191122383baa977c498af9b5",
      "bytes": 265
    },
    {
      "file": "workshops/management/__init__.py",
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "bytes": 0
    },
    {
      "file": "workshops/management/commands/__init__.py",
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "bytes": 0
    },
    {
      "file": "workshops/management/commands/seed_lab.py",
      "sha256": "899b541510eaa90940d4b122e5964515b8c83ef5a19854857ef33f6ffc0f3b40",
      "bytes": 1335
    },
    {
      "file": "templates/base.html",
      "sha256": "1120af5e9c5b4913cc8ea5830920d25fee6912115264b359f9b1b67db5e9e6ca",
      "bytes": 694
    },
    {
      "file": "templates/workshops/list.html",
      "sha256": "eae4a61399c02f9994a086e0795bd474980ee0729e115793cd66880ac092564a",
      "bytes": 629
    },
    {
      "file": "templates/workshops/card.html",
      "sha256": "ac11a4aeb7fb090b3c99e1bcbcf4af4ac38f5ee7972aae79f9f66f2c21927371",
      "bytes": 171
    },
    {
      "file": "templates/workshops/detail.html",
      "sha256": "c90d4f9cc78c8daf4eeb3cdea60e7e74c979d448c55d679cb0c6956d9f40e0c3",
      "bytes": 539
    },
    {
      "file": "templates/registration/login.html",
      "sha256": "1ad6f403dfbbfd9e5504be94af102d2a739664104ae178d6e985049c6bf99673",
      "bytes": 239
    },
    {
      "file": "templates/workshops/upload.html",
      "sha256": "0c72704e074cb7fb190c7409f14483b034f789e0574cebda444b187358b9b602",
      "bytes": 225
    },
    {
      "file": "templates/404.html",
      "sha256": "be7a88d609dc84ccde2119cb999c9b20ad9b3ce55b64d926cc32753ea9595637",
      "bytes": 209
    },
    {
      "file": "static/workshops/site.css",
      "sha256": "f7963f8fdb8f7e728c938bead37e604378b342d4328a4d045ff6fc6db4a88bd9",
      "bytes": 680
    },
    {
      "file": "lab_support.py",
      "sha256": "94669a6f4f4aaf8a9f63ca4b93e76ff2cb961428a43c95b66d79ad53d04874fb",
      "bytes": 676
    },
    {
      "file": "workshops/tests.py",
      "sha256": "3b9ed10f8c630130c70717da6abe2cb61c128986e8d002088ab4d47b0bb9401a",
      "bytes": 8767
    },
    {
      "file": "lessons/introduction.py",
      "sha256": "f28056159406b8e03ba7e57eb37a4d4ab9cf41a129835902649537696c89743a",
      "bytes": 778
    },
    {
      "file": "lessons/setup.py",
      "sha256": "e2c8c5c01d35a8b28b60702c234c31600329ad8edfe30e37e731b631e776b099",
      "bytes": 726
    },
    {
      "file": "lessons/project-app.py",
      "sha256": "1d100da95fb394aba722708be1609d780491e24ccdeba200f24578621ec8eccf",
      "bytes": 773
    },
    {
      "file": "lessons/settings.py",
      "sha256": "cb3894dffc0736a925a7368c5a0a70a16680e498e2963d3ba441d209e0508544",
      "bytes": 771
    },
    {
      "file": "lessons/routes.py",
      "sha256": "5e0c4857c2320d6252984f5707e273fd4eaef8fb64dbb6333e713bd4687ce4d3",
      "bytes": 795
    },
    {
      "file": "lessons/views.py",
      "sha256": "430151357a15b6ebe2f786fc7e09124f96f8c7ab6aa6465146a5a0bb12e64c1e",
      "bytes": 857
    },
    {
      "file": "lessons/runserver.py",
      "sha256": "a56962fb2b2961347ee903c0939b26a85ee58c8dfc04bc768c9666dd47dc3bf7",
      "bytes": 782
    },
    {
      "file": "lessons/templates.py",
      "sha256": "aa16782f09e263d19c20b5b360d24296225942992daf79ed1451c8ec7fe8937e",
      "bytes": 792
    },
    {
      "file": "lessons/escaping.py",
      "sha256": "a95e48068195dd4e9349f643767afb5e63ceaf66886b453819bce1e8244a9f9b",
      "bytes": 808
    },
    {
      "file": "lessons/conditions-loops.py",
      "sha256": "f52d40170ca192505924a6f616d09a21f4ed5794f3fabb131482305ed133bf2f",
      "bytes": 896
    },
    {
      "file": "lessons/inheritance.py",
      "sha256": "a7f7d6303bb3356a1459255ddef65ed47b2590d3bd305b61828ffeb5de89d43c",
      "bytes": 801
    },
    {
      "file": "lessons/includes.py",
      "sha256": "764be04f36138da99a0b98434ff229d0bd416ff62711ce9ca905bc9b7dd87042",
      "bytes": 895
    },
    {
      "file": "lessons/filters-tags.py",
      "sha256": "33004e8d715684088c32c5f563ffda69401af9833a875d7deb6c4fd9d34ce836",
      "bytes": 900
    },
    {
      "file": "lessons/links-slugs.py",
      "sha256": "860c2a08c5117c9b880851ecb3380cf8f224cd12953b5c0aa8f918d5046c53c5",
      "bytes": 854
    },
    {
      "file": "lessons/not-found.py",
      "sha256": "134d72c16f8d3bd87d8aaaab74da394abc0f6a4d4f1e80c59c87946339dd9d06",
      "bytes": 857
    },
    {
      "file": "lessons/models.py",
      "sha256": "885e8060575fbb89fbba680d874807225c420a31b87ef47f357847016f4fe2c3",
      "bytes": 777
    },
    {
      "file": "lessons/migrations.py",
      "sha256": "3a09989af228db87be0105b069902f5f11da48e08e6deaf48856cf24b5bbac10",
      "bytes": 890
    },
    {
      "file": "lessons/schema-changes.py",
      "sha256": "606eb5c7444e4033192f1f419e0c177b165c231c8d43c4c83541eb38cadabe4c",
      "bytes": 1117
    },
    {
      "file": "lessons/create-records.py",
      "sha256": "eb65f000a2dac6afd2c56f50683426dfa393d2fd96c3a32756527e0cbee30706",
      "bytes": 876
    },
    {
      "file": "lessons/updates.py",
      "sha256": "29c61631297f0d8273af6547d3d23e4841e6bdff77611640431bc16d52d650be",
      "bytes": 891
    },
    {
      "file": "lessons/relationships.py",
      "sha256": "44e52e11c2afd82b2a56ec02e5f80a116d8d435673adac26a2949a1a06cf86f9",
      "bytes": 860
    },
    {
      "file": "lessons/delete-records.py",
      "sha256": "840fa455f66da008fc3ae354ed473ff13f4ba18f307034c698f0843760de8615",
      "bytes": 863
    },
    {
      "file": "lessons/querysets.py",
      "sha256": "a737eb6c46ace9d169bc3c7a0a039993af70a7587f46051fb15ec59146f589f2",
      "bytes": 910
    },
    {
      "file": "lessons/get-missing.py",
      "sha256": "9d6a039ff5b9e324510cabeef538053597480c3d355c896ef4fdb16d2d969454",
      "bytes": 830
    },
    {
      "file": "lessons/filters-lookups.py",
      "sha256": "49478fc23413edb05f84d8f6c74fa0421596748f97d30247e42fcd282645b6e8",
      "bytes": 805
    },
    {
      "file": "lessons/q-expressions.py",
      "sha256": "934e26ce781482b37f966f7cc8b77df1099ee1498da3ef4a0270ca9802d5775d",
      "bytes": 848
    },
    {
      "file": "lessons/ordering-values.py",
      "sha256": "b7515d0d7f2820205c2bc8c7be47e26d3491b1589e8730cef3d94f43e3ff6d4c",
      "bytes": 788
    },
    {
      "file": "lessons/aggregates.py",
      "sha256": "0db02086c1ef6c85e2df9ae2631229b2d754d599d3298155ba54ed8ed52f82e3",
      "bytes": 841
    },
    {
      "file": "lessons/related-loading.py",
      "sha256": "f770605ec18e8d32278d98cd69b60d688b1791838b4c6ee353983cee927c62fb",
      "bytes": 1044
    },
    {
      "file": "lessons/pagination.py",
      "sha256": "a696fb5eb6259688ace6e5fe1aaabff3617a31f98db61facdcb56870b8f2ff9d",
      "bytes": 879
    },
    {
      "file": "lessons/forms.py",
      "sha256": "2507d40b2c614bff5c6f946540e2ee694e6998a989bc9a4b7387595498c1e208",
      "bytes": 820
    },
    {
      "file": "lessons/validation.py",
      "sha256": "a05d750b41813d278bf4342a269dbc6adabf73ed34ba5a8e78d78dec5539fe79",
      "bytes": 870
    },
    {
      "file": "lessons/model-forms.py",
      "sha256": "91b5815d15102a91787ea68a7774aedbde40b154ea6f3d4c349f4dba947ca5e2",
      "bytes": 832
    },
    {
      "file": "lessons/post-redirect.py",
      "sha256": "895f2d01ac68a2ba0629eea32da2029b64c2baf8860f912b94252d726e2609a2",
      "bytes": 957
    },
    {
      "file": "lessons/csrf.py",
      "sha256": "7002c659731cbc6ca0549c9e400abfe5fcf11cc86ceca0ae3bc3eacfc09fd2c6",
      "bytes": 1077
    },
    {
      "file": "lessons/request-methods.py",
      "sha256": "538ed14352d120e20b26d9687dbe673dffc64197467594fc153d4961003b8459",
      "bytes": 884
    },
    {
      "file": "lessons/uploads.py",
      "sha256": "d2af8af2bb06cf2fb1460834600b8bd9adc22199f0f29522dea4a6dd9e601cb8",
      "bytes": 1077
    },
    {
      "file": "lessons/authentication.py",
      "sha256": "ffdc534e27808dc2292f0181f9b70fecb8b7ee9ee3591db29a9bb5d28112213b",
      "bytes": 970
    },
    {
      "file": "lessons/login-logout.py",
      "sha256": "f0366dd898d9bebdfb6ca0a52d2a27eb1303b8bb158fb97c09711dbf2d2b11df",
      "bytes": 880
    },
    {
      "file": "lessons/ownership.py",
      "sha256": "a4294eedf085eb13e6d73f470d033e6b446d13d25e701a45ea3b678b37b77e69",
      "bytes": 1148
    },
    {
      "file": "lessons/permissions.py",
      "sha256": "8bd6ba7ae15651089b63e78af82081e96c2d6f259105748ff68264859de1cccc",
      "bytes": 1066
    },
    {
      "file": "lessons/sessions.py",
      "sha256": "5885ca8ab54bd2da3fe47393acc6a708cf191a721540dc52e18d0ca00d9cc712",
      "bytes": 794
    },
    {
      "file": "lessons/messages.py",
      "sha256": "8a899170967ac4725073eb7e90116e8e72bdf4a1bc885918e83c1eae4335aadf",
      "bytes": 1028
    },
    {
      "file": "lessons/admin-registration.py",
      "sha256": "b54d6b922dc95daba43d267fb1cf5abb30410350ae2b91e737d7a2c884fc16ba",
      "bytes": 913
    },
    {
      "file": "lessons/admin-lists.py",
      "sha256": "24b738c8660e1da1da53f101c28453965dd0f3ca5e6917d8b80ef15b08f28d6d",
      "bytes": 849
    },
    {
      "file": "lessons/admin-actions.py",
      "sha256": "873fbe20dfc7857a7c6d235ab669459ea32cd34b4f51a11d69755308b158cb6d",
      "bytes": 924
    },
    {
      "file": "lessons/constraints.py",
      "sha256": "3b57ac8673f971497ee00dc04692b7394d27b9c1e7469a828f0df2d8fd6275e9",
      "bytes": 885
    },
    {
      "file": "lessons/transactions.py",
      "sha256": "6b43378662c36fa2d3279d93c9aa0be5550baa1b5617d99e0a054fb412820b46",
      "bytes": 1093
    },
    {
      "file": "lessons/conditional-updates.py",
      "sha256": "2c9c93922704312bab79741423ac67b0ca86698cbc0955e97ffe3c7a4d2fabfd",
      "bytes": 1073
    },
    {
      "file": "lessons/after-commit.py",
      "sha256": "4ef283a8a958ab65e13733730cfdfb4b0f5f7033e5912cfac1592f913b95f2e5",
      "bytes": 971
    },
    {
      "file": "lessons/signals.py",
      "sha256": "fe617363f8fa52bb029b38ed82457482f42b6086503698ed9dec708dcb024545",
      "bytes": 1020
    },
    {
      "file": "lessons/timezones.py",
      "sha256": "08a14a33e5f6fe58d51ceb1a0643b8795ba54ac57aeb7bd194ff8d03ad92ca26",
      "bytes": 880
    },
    {
      "file": "lessons/cache.py",
      "sha256": "74baa26fc153cfd50dd5ff30e8c0215aa5e121b685750a7e6ec035d87af4bfb9",
      "bytes": 908
    },
    {
      "file": "lessons/testing.py",
      "sha256": "a14ac92d7b9866ed1504f4361f5c2ca09a28cfa0f09fba368cf87aec86340ce6",
      "bytes": 984
    },
    {
      "file": "lessons/static-files.py",
      "sha256": "48c44e14298b3849532bf8c8021ec5f0c8c4b03540cab3a362c9c56e9002f010",
      "bytes": 859
    },
    {
      "file": "lessons/asset-templates.py",
      "sha256": "290bcd43963ae243fa8ed3bfc38717abcaf700734a7f6c4fccfaf452aaf48075",
      "bytes": 760
    },
    {
      "file": "lessons/collect-static.py",
      "sha256": "0612f0dec72e3b5b9cc31f965f47f618c429abd5fadeb71da038f9aa16256f0c",
      "bytes": 1014
    },
    {
      "file": "lessons/whitenoise.py",
      "sha256": "98001cf7a19049a7000255f07d3956a6b88660479dad54856d846064009b3a40",
      "bytes": 1392
    },
    {
      "file": "lessons/bootstrap.py",
      "sha256": "323fec662e91135abae3d1c1a82ad10b8b874db547a967c3768551cecca85b1e",
      "bytes": 796
    },
    {
      "file": "lessons/postgresql.py",
      "sha256": "faf00ec586ef5424e987721265a971f0395f78794b0e8f30ff206ce557ac0f76",
      "bytes": 1114
    },
    {
      "file": "lessons/managed-database.py",
      "sha256": "fead65d18e0ea49109edc7de2ae21c96f9d8ec5f3cedb32446190b85c33a6e15",
      "bytes": 835
    },
    {
      "file": "lessons/production-settings.py",
      "sha256": "00f5860d9dcc6f9f54349e6db1bd3527adfc418b2c99736ad0a884107c3cb205",
      "bytes": 961
    },
    {
      "file": "lessons/release-plan.py",
      "sha256": "bf3d8068bb60f779290687781d30f18d8fe15285d514631704aab80aec108942",
      "bytes": 856
    },
    {
      "file": "lessons/updates-logging.py",
      "sha256": "dde0047f56c6619869c40da01483ad94cf9bd2024bced47496f9291e53c8a7e2",
      "bytes": 960
    },
    {
      "file": "lessons/json-responses.py",
      "sha256": "0378047267dc9fbee440ecdc1cbb80326a1f4436430949b94b9cfba25cc1e243",
      "bytes": 803
    },
    {
      "file": "lessons/async-views.py",
      "sha256": "34f415a9df69caeb9093bf01503dbebcc13a14ad8afc89fb412cdefb2bb44cb2",
      "bytes": 830
    },
    {
      "file": "lessons/middleware.py",
      "sha256": "5249e7cd6214ad08da03c0ba7fdf219238fa09cdb2972cfdbd5c3ef534228a5e",
      "bytes": 783
    },
    {
      "file": "lessons/class-based-views.py",
      "sha256": "acebb1cf4e12cf54d42bb9a80780538d2d213703de9a5bfe66169b6fd813c90e",
      "bytes": 846
    },
    {
      "file": "lessons/email-boundary.py",
      "sha256": "9c9fa2e10311ac9f6918bba6ec77781b2a4880b0886cf62acd7b504b84403432",
      "bytes": 827
    },
    {
      "file": "lessons/booking-project.py",
      "sha256": "5ce72594c9d7662120dfae73e83ac6587840151a7c1941372842692584d19697",
      "bytes": 1005
    },
    {
      "file": "lessons/query-project.py",
      "sha256": "9212f373cf84095ef375c052fe990a3f45786cf1757fffc690f2c40a1a619c7b",
      "bytes": 824
    },
    {
      "file": "lessons/exercises.py",
      "sha256": "1b9042c769006c4a4817dedeeeab88af1cb0572b3b5f1a7769b5a35a0652a0e2",
      "bytes": 950
    },
    {
      "file": "lessons/quiz.py",
      "sha256": "fb6d0997b1c1b1eccd2f71a59e6d3dcf5dc9bbd542e56e0b0eb8fad87ea9afc3",
      "bytes": 821
    },
    {
      "file": "lessons/reference-guide.py",
      "sha256": "337636996b6bf5529c67f2817e9458889bfa92e90e21378bd2498d56dd6c2238",
      "bytes": 797
    },
    {
      "file": "lessons/study-plan.py",
      "sha256": "f6b8197d63ac61431ae9e29fb4eb1f7af46585bf46585676ce3f0dcb291d128b",
      "bytes": 911
    }
  ]
}
