From 22630b35a8bb9ee597afda26a4372c44d66f7248 Mon Sep 17 00:00:00 2001 From: judgeOstrich Date: Mon, 26 May 2025 12:34:13 +0300 Subject: [PATCH 1/4] First version of code --- Pipfile | 7 + Pipfile.lock | 367 ++++++++++++++++++ app.db | Bin 0 -> 16384 bytes lib/__pycache__/models.cpython-312.pyc | Bin 0 -> 4427 bytes lib/debug.py | 36 ++ .../__pycache__/env.cpython-312.pyc | Bin 0 -> 2652 bytes ...f48c_create_companies_devs.cpython-312.pyc | Bin 0 -> 1775 bytes .../7a71dbf71c64_create_db.cpython-312.pyc | Bin 0 -> 729 bytes ...ea36_create_freebies_table.cpython-312.pyc | Bin 0 -> 779 bytes .../a1252ce5ea36_create_freebies_table.py | 31 ++ lib/models.py | 53 +++ lib/seed.py | 38 ++ 12 files changed, 532 insertions(+) create mode 100644 app.db create mode 100644 lib/__pycache__/models.cpython-312.pyc create mode 100644 lib/migrations/__pycache__/env.cpython-312.pyc create mode 100644 lib/migrations/versions/__pycache__/5f72c58bf48c_create_companies_devs.cpython-312.pyc create mode 100644 lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-312.pyc create mode 100644 lib/migrations/versions/__pycache__/a1252ce5ea36_create_freebies_table.cpython-312.pyc create mode 100644 lib/migrations/versions/a1252ce5ea36_create_freebies_table.py diff --git a/Pipfile b/Pipfile index 63c79cd98..a77160b60 100644 --- a/Pipfile +++ b/Pipfile @@ -4,11 +4,18 @@ verify_ssl = true name = "pypi" [packages] +<<<<<<< HEAD alembic = "1.8.1" +======= +>>>>>>> 5c45024 (First version of code) importlib-metadata = "6.0.0" importlib-resources = "5.10.0" ipdb = "0.13.9" sqlalchemy = "1.4.42" +<<<<<<< HEAD +======= +alembic = "*" +>>>>>>> 5c45024 (First version of code) [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index 3923f4a97..56b4dd693 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,11 @@ { "_meta": { "hash": { +<<<<<<< HEAD "sha256": "fa62c636b7ae5acb4993fc7b007a651c55b562aa29962a9a8585ec314b352ae6" +======= + "sha256": "3b5ab62c28d0102cacab41db5f02229c99c4362f237c7600b5e4335d3589d4fb" +>>>>>>> 5c45024 (First version of code) }, "pipfile-spec": 6, "requires": { @@ -18,6 +22,7 @@ "default": { "alembic": { "hashes": [ +<<<<<<< HEAD "sha256:6880dec4f28dd7bd999d2ed13fbe7c9d4337700a44d11a524c0ce0c59aaf0dbd", "sha256:e8a6ff9f3b1887e1fed68bfb8fb9a000d8f61c21bdcc85b67bb9f87fcbc4fce3" ], @@ -60,6 +65,99 @@ "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107" ], "version": "==1.2.0" +======= + "sha256:0cdd48acada30d93aa1035767d67dff25702f8de74d7c3919f2e8492c8db2e67", + "sha256:43d37ba24b3d17bc1eb1024fe0f51cd1dc95aeb5464594a02c6bb9ca9864bfa4" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==1.16.1" + }, + "asttokens": { + "hashes": [ + "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", + "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2" + ], + "markers": "python_version >= '3.8'", + "version": "==3.0.0" + }, + "decorator": { + "hashes": [ + "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", + "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a" + ], + "markers": "python_version >= '3.8'", + "version": "==5.2.1" + }, + "executing": { + "hashes": [ + "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", + "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755" + ], + "markers": "python_version >= '3.8'", + "version": "==2.2.0" + }, + "greenlet": { + "hashes": [ + "sha256:00cd814b8959b95a546e47e8d589610534cfb71f19802ea8a2ad99d95d702057", + "sha256:02a98600899ca1ca5d3a2590974c9e3ec259503b2d6ba6527605fcd74e08e207", + "sha256:02f5972ff02c9cf615357c17ab713737cccfd0eaf69b951084a9fd43f39833d3", + "sha256:055916fafad3e3388d27dd68517478933a97edc2fc54ae79d3bec827de2c64c4", + "sha256:0a16fb934fcabfdfacf21d79e6fed81809d8cd97bc1be9d9c89f0e4567143d7b", + "sha256:1592a615b598643dbfd566bac8467f06c8c8ab6e56f069e573832ed1d5d528cc", + "sha256:1919cbdc1c53ef739c94cf2985056bcc0838c1f217b57647cbf4578576c63825", + "sha256:1e4747712c4365ef6765708f948acc9c10350719ca0545e362c24ab973017370", + "sha256:1e76106b6fc55fa3d6fe1c527f95ee65e324a13b62e243f77b48317346559708", + "sha256:1f72667cc341c95184f1c68f957cb2d4fc31eef81646e8e59358a10ce6689457", + "sha256:2593283bf81ca37d27d110956b79e8723f9aa50c4bcdc29d3c0543d4743d2763", + "sha256:2dc5c43bb65ec3669452af0ab10729e8fdc17f87a1f2ad7ec65d4aaaefabf6bf", + "sha256:3091bc45e6b0c73f225374fefa1536cd91b1e987377b12ef5b19129b07d93ebe", + "sha256:354f67445f5bed6604e493a06a9a49ad65675d3d03477d38a4db4a427e9aad0e", + "sha256:3885f85b61798f4192d544aac7b25a04ece5fe2704670b4ab73c2d2c14ab740d", + "sha256:3ab7194ee290302ca15449f601036007873028712e92ca15fc76597a0aeb4c59", + "sha256:3aeca9848d08ce5eb653cf16e15bb25beeab36e53eb71cc32569f5f3afb2a3aa", + "sha256:44671c29da26539a5f142257eaba5110f71887c24d40df3ac87f1117df589e0e", + "sha256:45f9f4853fb4cc46783085261c9ec4706628f3b57de3e68bae03e8f8b3c0de51", + "sha256:4bd139e4943547ce3a56ef4b8b1b9479f9e40bb47e72cc906f0f66b9d0d5cab3", + "sha256:4fefc7aa68b34b9224490dfda2e70ccf2131368493add64b4ef2d372955c207e", + "sha256:6629311595e3fe7304039c67f00d145cd1d38cf723bb5b99cc987b23c1433d61", + "sha256:6fadd183186db360b61cb34e81117a096bff91c072929cd1b529eb20dd46e6c5", + "sha256:71566302219b17ca354eb274dfd29b8da3c268e41b646f330e324e3967546a74", + "sha256:7409796591d879425997a518138889d8d17e63ada7c99edc0d7a1c22007d4907", + "sha256:752f0e79785e11180ebd2e726c8a88109ded3e2301d40abced2543aa5d164275", + "sha256:7791dcb496ec53d60c7f1c78eaa156c21f402dda38542a00afc3e20cae0f480f", + "sha256:782743700ab75716650b5238a4759f840bb2dcf7bff56917e9ffdf9f1f23ec59", + "sha256:7c9896249fbef2c615853b890ee854f22c671560226c9221cfd27c995db97e5c", + "sha256:85f3e248507125bf4af607a26fd6cb8578776197bd4b66e35229cdf5acf1dfbf", + "sha256:89c69e9a10670eb7a66b8cef6354c24671ba241f46152dd3eed447f79c29fb5b", + "sha256:8cb8553ee954536500d88a1a2f58fcb867e45125e600e80f586ade399b3f8819", + "sha256:9ae572c996ae4b5e122331e12bbb971ea49c08cc7c232d1bd43150800a2d6c65", + "sha256:9c7b15fb9b88d9ee07e076f5a683027bc3befd5bb5d25954bb633c385d8b737e", + "sha256:9ea5231428af34226c05f927e16fc7f6fa5e39e3ad3cd24ffa48ba53a47f4240", + "sha256:a31ead8411a027c2c4759113cf2bd473690517494f3d6e4bf67064589afcd3c5", + "sha256:a8fa80665b1a29faf76800173ff5325095f3e66a78e62999929809907aca5659", + "sha256:ad053d34421a2debba45aa3cc39acf454acbcd025b3fc1a9f8a0dee237abd485", + "sha256:b24c7844c0a0afc3ccbeb0b807adeefb7eff2b5599229ecedddcfeb0ef333bec", + "sha256:b50a8c5c162469c3209e5ec92ee4f95c8231b11db6a04db09bbe338176723bb8", + "sha256:ba30e88607fb6990544d84caf3c706c4b48f629e18853fc6a646f82db9629418", + "sha256:bf3fc9145141250907730886b031681dfcc0de1c158f3cc51c092223c0f381ce", + "sha256:c23ea227847c9dbe0b3910f5c0dd95658b607137614eb821e6cbaecd60d81cc6", + "sha256:c3cc1a3ed00ecfea8932477f729a9f616ad7347a5e55d50929efa50a86cb7be7", + "sha256:c49e9f7c6f625507ed83a7485366b46cbe325717c60837f7244fc99ba16ba9d6", + "sha256:d0cb7d47199001de7658c213419358aa8937df767936506db0db7ce1a71f4a2f", + "sha256:d8009ae46259e31bc73dc183e402f548e980c96f33a6ef58cc2e7865db012e13", + "sha256:da956d534a6d1b9841f95ad0f18ace637668f680b1339ca4dcfb2c1837880a0b", + "sha256:dcb9cebbf3f62cb1e5afacae90761ccce0effb3adaa32339a0670fe7805d8068", + "sha256:decb0658ec19e5c1f519faa9a160c0fc85a41a7e6654b3ce1b44b939f8bf1325", + "sha256:df4d1509efd4977e6a844ac96d8be0b9e5aa5d5c77aa27ca9f4d3f92d3fcf330", + "sha256:eeb27bece45c0c2a5842ac4c5a1b5c2ceaefe5711078eed4e8043159fa05c834", + "sha256:efcdfb9df109e8a3b475c016f60438fcd4be68cd13a365d42b35914cdab4bb2b", + "sha256:fd9fb7c941280e2c837b603850efc93c999ae58aae2b40765ed682a6907ebbc5", + "sha256:fe46d4f8e94e637634d54477b0cfabcf93c53f29eedcbdeecaf2af32029b4421" + ], + "markers": "python_version >= '3.9'", + "version": "==3.2.2" +>>>>>>> 5c45024 (First version of code) }, "importlib-metadata": { "hashes": [ @@ -67,10 +165,15 @@ "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d" ], "index": "pypi", +<<<<<<< HEAD +======= + "markers": "python_version >= '3.7'", +>>>>>>> 5c45024 (First version of code) "version": "==6.0.0" }, "importlib-resources": { "hashes": [ +<<<<<<< HEAD "sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6", "sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484" ], @@ -203,6 +306,153 @@ ], "markers": "python_full_version >= '3.6.2'", "version": "==3.0.36" +======= + "sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668", + "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==5.10.0" + }, + "ipdb": { + "hashes": [ + "sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5" + ], + "index": "pypi", + "markers": "python_version >= '2.7'", + "version": "==0.13.9" + }, + "ipython": { + "hashes": [ + "sha256:62a9373dbc12f28f9feaf4700d052195bf89806279fc8ca11f3f54017d04751b", + "sha256:fef5e33c4a1ae0759e0bba5917c9db4eb8c53fee917b6a526bd973e1ca5159f6" + ], + "markers": "python_version >= '3.11'", + "version": "==9.2.0" + }, + "ipython-pygments-lexers": { + "hashes": [ + "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", + "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c" + ], + "markers": "python_version >= '3.8'", + "version": "==1.1.1" + }, + "jedi": { + "hashes": [ + "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", + "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9" + ], + "markers": "python_version >= '3.6'", + "version": "==0.19.2" + }, + "mako": { + "hashes": [ + "sha256:99579a6f39583fa7e5630a28c3c1f440e4e97a414b80372649c0ce338da2ea28", + "sha256:baef24a52fc4fc514a0887ac600f9f1cff3d82c61d4d700a1fa84d597b88db59" + ], + "markers": "python_version >= '3.8'", + "version": "==1.3.10" + }, + "markupsafe": { + "hashes": [ + "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", + "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", + "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", + "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", + "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", + "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", + "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", + "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", + "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", + "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", + "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", + "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", + "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", + "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", + "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", + "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", + "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", + "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", + "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", + "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", + "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", + "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", + "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", + "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", + "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", + "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", + "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", + "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", + "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", + "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", + "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", + "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", + "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", + "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", + "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", + "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", + "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", + "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", + "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", + "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", + "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", + "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", + "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", + "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", + "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", + "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", + "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", + "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", + "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", + "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", + "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", + "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", + "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", + "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", + "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", + "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", + "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", + "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", + "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" + ], + "markers": "python_version >= '3.9'", + "version": "==3.0.2" + }, + "matplotlib-inline": { + "hashes": [ + "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", + "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca" + ], + "markers": "python_version >= '3.8'", + "version": "==0.1.7" + }, + "parso": { + "hashes": [ + "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", + "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d" + ], + "markers": "python_version >= '3.6'", + "version": "==0.8.4" + }, + "pexpect": { + "hashes": [ + "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", + "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f" + ], + "markers": "sys_platform != 'win32' and sys_platform != 'emscripten'", + "version": "==4.9.0" + }, + "prompt-toolkit": { + "hashes": [ + "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", + "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed" + ], + "markers": "python_version >= '3.8'", + "version": "==3.0.51" +>>>>>>> 5c45024 (First version of code) }, "ptyprocess": { "hashes": [ @@ -213,6 +463,7 @@ }, "pure-eval": { "hashes": [ +<<<<<<< HEAD "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" ], @@ -318,6 +569,122 @@ ], "markers": "python_version < '3.10'", "version": "==3.11.0" +======= + "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", + "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42" + ], + "version": "==0.2.3" + }, + "pygments": { + "hashes": [ + "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", + "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c" + ], + "markers": "python_version >= '3.8'", + "version": "==2.19.1" + }, + "setuptools": { + "hashes": [ + "sha256:49f7af965996f26d43c8ae34539c8d99c5042fbff34302ea151eaa9c207cd257", + "sha256:95a60484590d24103af13b686121328cc2736bee85de8936383111e421b9edc0" + ], + "markers": "python_version >= '3.9'", + "version": "==80.8.0" + }, + "sqlalchemy": { + "hashes": [ + "sha256:04f2598c70ea4a29b12d429a80fad3a5202d56dce19dd4916cc46a965a5ca2e9", + "sha256:0501f74dd2745ec38f44c3a3900fb38b9db1ce21586b691482a19134062bf049", + "sha256:0ee377eb5c878f7cefd633ab23c09e99d97c449dd999df639600f49b74725b80", + "sha256:11b2ec26c5d2eefbc3e6dca4ec3d3d95028be62320b96d687b6e740424f83b7d", + "sha256:15d878929c30e41fb3d757a5853b680a561974a0168cd33a750be4ab93181628", + "sha256:177e41914c476ed1e1b77fd05966ea88c094053e17a85303c4ce007f88eff363", + "sha256:1811a0b19a08af7750c0b69e38dec3d46e47c4ec1d74b6184d69f12e1c99a5e0", + "sha256:1d0c23ecf7b3bc81e29459c34a3f4c68ca538de01254e24718a7926810dc39a6", + "sha256:22459fc1718785d8a86171bbe7f01b5c9d7297301ac150f508d06e62a2b4e8d2", + "sha256:28e881266a172a4d3c5929182fde6bb6fba22ac93f137d5380cc78a11a9dd124", + "sha256:2e56dfed0cc3e57b2f5c35719d64f4682ef26836b81067ee6cfad062290fd9e2", + "sha256:2fd49af453e590884d9cdad3586415922a8e9bb669d874ee1dc55d2bc425aacd", + "sha256:3ab7c158f98de6cb4f1faab2d12973b330c2878d0c6b689a8ca424c02d66e1b3", + "sha256:4948b6c5f4e56693bbeff52f574279e4ff972ea3353f45967a14c30fb7ae2beb", + "sha256:4e1c5f8182b4f89628d782a183d44db51b5af84abd6ce17ebb9804355c88a7b5", + "sha256:5ce6929417d5dce5ad1d3f147db81735a4a0573b8fb36e3f95500a06eaddd93e", + "sha256:5ede1495174e69e273fad68ad45b6d25c135c1ce67723e40f6cf536cb515e20b", + "sha256:5f966b64c852592469a7eb759615bbd351571340b8b344f1d3fa2478b5a4c934", + "sha256:6045b3089195bc008aee5c273ec3ba9a93f6a55bc1b288841bd4cfac729b6516", + "sha256:6c9d004eb78c71dd4d3ce625b80c96a827d2e67af9c0d32b1c1e75992a7916cc", + "sha256:6e39e97102f8e26c6c8550cb368c724028c575ec8bc71afbbf8faaffe2b2092a", + "sha256:723e3b9374c1ce1b53564c863d1a6b2f1dc4e97b1c178d9b643b191d8b1be738", + "sha256:876eb185911c8b95342b50a8c4435e1c625944b698a5b4a978ad2ffe74502908", + "sha256:9256563506e040daddccaa948d055e006e971771768df3bb01feeb4386c242b0", + "sha256:934472bb7d8666727746a75670a1f8d91a9cae8c464bba79da30a0f6faccd9e1", + "sha256:97ff50cd85bb907c2a14afb50157d0d5486a4b4639976b4a3346f34b6d1b5272", + "sha256:9b01d9cd2f9096f688c71a3d0f33f3cd0af8549014e66a7a7dee6fc214a7277d", + "sha256:9e3a65ce9ed250b2f096f7b559fe3ee92e6605fab3099b661f0397a9ac7c8d95", + "sha256:a7dd5b7b34a8ba8d181402d824b87c5cee8963cb2e23aa03dbfe8b1f1e417cde", + "sha256:a85723c00a636eed863adb11f1e8aaa36ad1c10089537823b4540948a8429798", + "sha256:b42c59ffd2d625b28cdb2ae4cde8488543d428cba17ff672a543062f7caee525", + "sha256:bd448b262544b47a2766c34c0364de830f7fb0772d9959c1c42ad61d91ab6565", + "sha256:ca9389a00f639383c93ed00333ed763812f80b5ae9e772ea32f627043f8c9c88", + "sha256:df76e9c60879fdc785a34a82bf1e8691716ffac32e7790d31a98d7dec6e81545", + "sha256:e12c6949bae10f1012ab5c0ea52ab8db99adcb8c7b717938252137cdf694c775", + "sha256:e4ef8cb3c5b326f839bfeb6af5f406ba02ad69a78c7aac0fbeeba994ad9bb48a", + "sha256:e7e740453f0149437c101ea4fdc7eea2689938c5760d7dcc436c863a12f1f565", + "sha256:effc89e606165ca55f04f3f24b86d3e1c605e534bf1a96e4e077ce1b027d0b71", + "sha256:f0f574465b78f29f533976c06b913e54ab4980b9931b69aa9d306afff13a9471", + "sha256:fa5b7eb2051e857bf83bade0641628efe5a88de189390725d3e6033a1fff4257", + "sha256:fdb94a3d1ba77ff2ef11912192c066f01e68416f554c194d769391638c8ad09a" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.4.42" + }, + "stack-data": { + "hashes": [ + "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", + "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695" + ], + "version": "==0.6.3" + }, + "toml": { + "hashes": [ + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'", + "version": "==0.10.2" + }, + "traitlets": { + "hashes": [ + "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", + "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f" + ], + "markers": "python_version >= '3.8'", + "version": "==5.14.3" + }, + "typing-extensions": { + "hashes": [ + "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", + "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef" + ], + "markers": "python_version >= '3.8'", + "version": "==4.13.2" + }, + "wcwidth": { + "hashes": [ + "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", + "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5" + ], + "version": "==0.2.13" + }, + "zipp": { + "hashes": [ + "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", + "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931" + ], + "markers": "python_version >= '3.9'", + "version": "==3.21.0" +>>>>>>> 5c45024 (First version of code) } }, "develop": {} diff --git a/app.db b/app.db new file mode 100644 index 0000000000000000000000000000000000000000..ab99ec1cce37575b7558d86ef43e0af16eeb60d1 GIT binary patch literal 16384 zcmeI&O>f#T7zc3MVFajXCRG)O3E?A1+b;V8OCz^KqhSl#rXHp!fN3LM(uGi|yD@1W zXP;!3XNxO!+hNkWfmVb4~~; zsG3tXD~9Ua{!g=kJK6$y`td_qB^c!|#7eBPYEU2m0SG_<0uX=z1Rwwb2teRIflu!Z zvr?_n&*e1ij^rSbvKz^1*5({f*uLPtebf>>i}HG@81;G6^~H(sxZC!*`=-@;%vCs* z<6shwC4Xys&I{Yq!K-jIlUceB^y2YlIJpkiljvw)UTsBQdCgPXJL50K8LvnEhR$-@ zZpZg*wKyLPgKSH|ddk0Dbqapm_C)i<)z{b82@URvW8n$c5gon^>*RYDSne)R&E~wz z_{N-z96epB(PL)i@Q}_M3tl~-tFghlO#d(Gw&pfUsWIQ9W~El6bGcY$b);2?ZLGHn z-*F$e7ahd2Nk5vL2iG!8Zr{p(ccY)pne~HMztj&31Rwwb2tWV=5P$##AOHafKmY=} zC}6Q1sWB(+%Xe`yoSI+vX^vExFMAhGoLrjUme2n;#QJUB?BW5jX9z$50uX=z1Rwwb z2tWV=5P$##wgvLcAO}Zrw?GY2u}4u)F22pTzU%k@KUISQ0SG_<0uX=z1Rwwb2tWV= u5P-l=2v|m*JStM!Nu%CSCXDT|JUO7Wcse_O!1k#crNyHEWO@-LY3UDOyw$e= literal 0 HcmV?d00001 diff --git a/lib/__pycache__/models.cpython-312.pyc b/lib/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..445d33c54c0c0d7d17d0c60d53b1a580ba4078f4 GIT binary patch literal 4427 zcmcInO>7&-6`moN+$EQ!D2n<`WU;j@iH;>Xu?zo1mQq``VmlVnSV&s}&4%KRBue~| zXKC4F7=S=s#0G-Ig3wBa5mW(skYN?Idx?u4ntLx4sKC^sL16UK-W*GZw5Pte%cUq; zH43yHVBgNnd-HbY{e1KG&t9*aK>N+%qf;F&LjH;at4Wp4<{?VRB2kG-6C_C^G--?2 zlJ^-XM{H+6c6P1%MN-v^cB@Morcz z+Y)a5I}XAQ-F+_2S$r~ek!5w~nRMc6GNp^>QyDhNxbD21;qla@E?r`o=x{U>4cl}N zXNhPgo=#~~@mXCQkH%&=n+Q|gud-Mo%7Hh>l<}y>blb#C?)8Zop+I-X!kDw4eUUPrBib(g`b5Rc2T=RtYHMix@QcYzX@jwo+=YPs%zl}K?V~x@ zK;;`DoeqL-0WFDdjU^^DR37@L+CP;}vi`INE{jd|53@OzNY5t0X#KIY%KB%gz$Lv$ z`mZrI123HGjZH-p36`1!ZZ7C$=jmKGUhJ$Ar?@z?X`;#D?(E4Vxx}+$a z&2mM_`72xMvt}?1HH^3dDc83x9sTu*J13T2S^iP6uDd98Z{q1j!!l~X-7AXjRuoWt z6#_%iJ&JPWYBW*dcoj1a%pph5at9FI7FRhY3&&X2y%XuHDHX#b%c7jO!Q4H zk~)icprgG8;`3LYq2 z+7zgx$5e-!_71jD;QVib%?K%%5mI*Wo-U|tP8;Kh2>)&TI0isrhzCIxM-TC4AZFZ{ zmO|6zJRnr{=F2Eyd9&$uW-&XTy*;yBU##0-l=d4|84bHRit%oQM$z9V2ma0lXjP|h97hu)1QuCkM6 zAj4JUif35TKoi|DhpfHh+F#L8jqO+9TUrQ+g;axg28(S6R}MZH`y%o%^5Cs6X|e8f zQ95k|+1{ti!SY42H+27-Qz6g`uxwXDpa)K+2B>B3t;etpTnbVseJ!PhqM@8KG{Mu! zP*~9I;6Vc$`5{mQ&N8p2-FDHva5<$iiVF8=JfY1YwKg4tJwU56&S$K+-+}f~d0ZIaKjC&Ce}dFZn}- z^BbPP{IP`-B~N?d>_&a_9r3Q~^OGy7(*9GW`oY454R6Ez$in$Mxs`CK<7mnIgTlEd zzP6Q|fAGXh*Ye7`r$u%u9#{HlHN;sFspgdBc)~FU8)9H9h_g3eP zp)?m~*V3s(*05r%HWD%RjGRUM#his&8S3Z{1xjorFXU}`d!FPe6it;?Ms{*cUcdo7 zO;|7@&h%l`L6D2z%s26Nc*#Dd{zl-EW97i7r*55EYADI=kL9j4xocT_+#UY_Az*ByJCGF3eFUCOyeEE1FA{3t>Cd2y{E&jPV0L%AWt)Lm`4wHHlziMMkSzJF z{Tk({0KyOhDs0zneTQ{AVT?5VMkrJ;L&`NU$x`h4EFa8ua28__V5*W%vA%&sIu=c6 zgMC$jbFfasI`X@}k?#tm=o@<2zVgGHS3dpV)(1=Ruj;xVw*N!J`1*P4%M`r?$hh z!62gX+JN5fHb=OWr+J%F^;VW# zOR(%scnq^Zc!|E-op>Fri5=yp)|=wTa=EUdEc=aJkA|Cdw{|5FO~j^HGHZZ(O<9O= z!!e0;-?mU+nkTnGUT>@6uW=uG>SG2F(AGK|Tg6(Tdt1fjqTSO1~k)UyFIFNj$;j>2>+lg7ideUT#?z4;F+iL83i3)hzqZuTr>0y`phZN`llWe3>EC_#9#Ke7VN+98eaJqI?KHP literal 0 HcmV?d00001 diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..794257a4e 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -1,9 +1,45 @@ #!/usr/bin/env python3 from sqlalchemy import create_engine +<<<<<<< HEAD from models import Company, Dev if __name__ == '__main__': engine = create_engine('sqlite:///freebies.db') import ipdb; ipdb.set_trace() +======= +from sqlalchemy.orm import sessionmaker +from models import Company, Dev, Freebie + +engine = create_engine("sqlite:///app.db") +Session = sessionmaker(bind=engine) +session = Session() + +# Test Dev -> Freebies +alice = session.query(Dev).filter_by(name="Alice").first() +print(f"{alice.name}'s freebies:") +for freebie in alice.freebies: + print(f" - {freebie.item_name} from {freebie.company.name}") + +# Test Company -> Devs +codeworks = session.query(Company).filter_by(name="CodeWorks").first() +print(f"\nDevs who got freebies from {codeworks.name}:") +for dev in codeworks.devs: + print(f" - {dev.name}") + +# Test Freebie.print_details +print("\nFreebie details:") +for freebie in session.query(Freebie).all(): + freebie.print_details() + +# Test Dev.received_one +print(f"\nHas Alice received a Mug? {alice.received_one('Mug')}") + +# Test Dev.give_away +bob = session.query(Dev).filter_by(name="Bob").first() +mug = session.query(Freebie).filter_by(item_name="Mug").first() +alice.give_away(bob, mug) +session.commit() +print(f"\nAfter giveaway, Mug is now owned by {mug.dev.name}") +>>>>>>> 5c45024 (First version of code) diff --git a/lib/migrations/__pycache__/env.cpython-312.pyc b/lib/migrations/__pycache__/env.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..600ddb7bfd09fc07f572d7d931a2069d75408ba0 GIT binary patch literal 2652 zcmZuz&1)M+6ra_uq}{bX{1LhF2kyl6m(tjZn~y>%4RO+z&|*SxA<;#wcE{4nt6g<= zWLqHt7kX%Dq4bnX54jfS*nhye_F@qmIg4{BC57G$b_kdr`es*a*{)~N%$qlF-kW`I ze!tZp$)t*)-JiNzUXl^|i%-HPwuSwFL3oM`WC#|j3VA``a>R;M#k}atBFIu+@@2`2 zR%7{?fJm&83SD)^e4NB9-JN+Teb*a7L^ykGT?njv|1nFcs(BUstCjw6cW2Be48@3l zFXfXk$}pzDZ>%!Xu?VI0wm@aDNQN^3HKH(29iL~_f4FT{@YF@qBDWlS(JaBNm)IrK zCWS@nR112jm1>S-!D<{djI6SGkfk}zC3+Z{k8$|%1n>V1-BZM%4_YNmd#HfX5W*BZ zMl2dGRAQmj86P1AWel1TF+@W$h3C1*hOW#Xh2pM{oCk{Ey1 zBY_R1FZKbNMXsIwdYeK zE~9>UhwJ=^u1?Jw!%m&m>a6YbVaom1(k#79s*RaCwH7?JrctfxvW7*xsI66rk(E3V zmb^66Xo;{wl`zfFnC2xdlM$*}g`#O2u9q-O%_2H0I5pstV;d!|N#$fI)##&2}}N+j%Kkw+o#jX9d~?mM+IJKD2UWr%G}Te^I@hyA64? zoLZIGET=>LbG0&nW%^2Pg^(o}xNcf6LlOaQu-bsK+S9cw(~FdlqDiJ9u)aiS&N7R+ zPRty!muG4Xum9vx3hlc_GjJBp3T_^{HFR(ub@jAV+*I-Ah1r+tM{BosrLLBgX-b)$ zM0)r9>!2Io|ZD&R7SUzv0XXcl1G~I$d-)XiAWu9DPv7# z?9k;Y+E6k#C&i7)=*`P<9p*>vhy@-(YJdgWM28S-;|Zb45#En>9bY|z1J>JK457mX zl{3)(JhI;An#br7sw6x9Ln%c0HS}0u=}>zXeLoUdZ@6xV&!x~a@JMIhxzM6Bb|Rdx zJcHOnOJJNRe>#kFdftehW}u&X0|q*+Z$#V76npsOELyVv$4Yl>Kqb(Ks}ozJrUS$g zPymNFX9<9RNI*VzIW1|f>*%Jx#yP+Sr~ya<7CT03A+o!UAv+uKVl_$@%~em~-xb{g zXA4=;Q#+0V6s9S$4MGc=TPSKwFVANal+!-t`S-dwlHn8Nqq8>vaKW_AP)GSK^W^!u zW!;4^{>O`-(?>k*;ePl~wlSNjN@>gWLITz+XWro7Hx<}~j7WKs-k*Wu^> z2pzyKh5E*K2 z@4Ars{-!eWPKC*4a_TTt9J*t0o{iM(+^o29BQrN1eQ{0(`Nep2Zbo@=G0x@L=-el9 zUJ*)Io!ax+ZZBmyB_O}jOpsE_0p+Qk0tO}UlN$$)trkr^NU2|y?sg&gzls8(xw~oSb=Z&4ei4k3KB1W3aYwAKBFIkj&p%)LANIgg76xR zzd_m8Xy^?Z+LM95eja%;vK9kTQd{C+QyknBCtgXZAC_C`iDr6YOPYL}K*IT*pcHHA o{qBr#VgGWUFur#QNkeNN2fMb!;aAe&wlw^wG_WlV(Tfo9KiGwC`2YX_ literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/5f72c58bf48c_create_companies_devs.cpython-312.pyc b/lib/migrations/versions/__pycache__/5f72c58bf48c_create_companies_devs.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f732ffcf742734a99e21f41cda216c07b226b88e GIT binary patch literal 1775 zcmd5+&u`R56!wo<+w1Nkss<1s!M2sEuG+=f&2ExzQ4eH=6et0;J)pfAaMoKL;sJSs-`NMa%(T#s5V@BX=m(p;#LviSWENXn|YpZ-uvdg z`LSF!CH`IiusQf!m89RrB>R+!F+R_YEeT3p3Cd9M6u!+RjIey)3fcy^tn%(&DQ*^ zX}%EAS7oM6kj58y@>^0YXU-cL8QB8YP>u`P^oEvM`x+`a zzp=lbS=$o>s^5ccaVr0EI}SoD!gHB`1ItZh%& zkq_h1$i;9_*8eviU!OHdxsauiR4p#C;$F!!#e)}lMH+bM`%ceC3}7cfU$JtZ3^DZZ zvOPi$Wk7UBRi~mPSSf8BJ5Dwzk;AkF;tvDN^hF$_Wki|wWlZ^IHg%19fkQ`^(P)9- zD5j2w<0sNs#PiptH6Q`92w(Qxfz?5)$R}ZdaBR5*A}bs?5vt8tw-8$4O03n~f#drK zFLUoG9uQm$XKH_Cu`U7Zpu5Mhtd-*vx7B?2Zftwe$F5SCy|MSPK9Z=6!`ZjYu~Ls`1%L913u;d{t8b21Wte3`5C;sTPzf`-I7$$6a0%A(i`IE zkY4GapwTHF?!R6TacN?VuXAzu3zGH9p*^zKRY_f`OH>pg)w!rDX{DHuk}$0kDyU3i zqsO?#ijdsGDbXkS{Cz&6Q(UA(U)i{F_k$g9Qg9*ckA4AXlFe0xX%xjnikGTyG2ONy zac!IFj*o(#=T44|Zu*Yz4p1nG8nu5GEyAl9i}v(E2c!`8iKc!>`?&P6E z-yqMBXXy(B?AWPW3b#wAl9t;B9ZG=T-SLjc?<4uiwk;&a`HR!+Ek@{z41N#g;Ox$X zbAt#95y3>ExKKg`OJAjGs1Ysf5jE7sG{iKCL3$swurI7GthG^x=KJ%MLEM5v63co6 z>%7UU(s{j@JF|G^ljLINr_<9e1I^sAUUlUQv1jg#N8^b*nz(-8_`!S>%!A-0@Tb#> zZ&_a@$sy)SRWJGR!*1z;{vV?XZ>I^kK^t_7m$!%+a!D5a{ODy>0bbR#EKf6U0c)UD zT|n7-X+^-Rv$z3w;#~t=2_x6sG>a*P@=|0sZB~_TJ#jA>K$3&ovN*j0=FvRyiu{tr ztx()}YhY4(<2_^=b(a&7YWlD)1D;?xJP#&oASDxP<@! literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/a1252ce5ea36_create_freebies_table.cpython-312.pyc b/lib/migrations/versions/__pycache__/a1252ce5ea36_create_freebies_table.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8621fe2bafdcec04f6ccdc800e82cf880a4806c GIT binary patch literal 779 zcmaJ8nu5GEzXmK8fl(E=_y6k0tfie)P?jG#-ibji?Bi$IZ=NC@>)O19xn9{LCc z@(kJg7JY$$9XoYPk#^}+(so*-LkZ}+JKpir-A8`z^&F(ur=xMYzzBWS!Q(Qv&cm5< zZV*EeVwf2m=SE~;?VH?;EM`S}Y%gjtGis~PW;Sbmu%eE#ZDpOMIq1BvUJD=%xR(MT z$)I){l5lXGw=mD@tSsC&=TnyqgD{{F0vVlbGEh(5@bWaE;Uu{nPpGq{Iagd$H#iPL z?>O{=6L%O)kH^z6IGUUW!(iw*-*oc>ERC|dklkHo+1+KN+adoLQ+W@Tf*Z6%xA@`~ z30rUJf?pr~w9LUT>qcZW_0M4rysUC48lRR7{3<0icq4xSaIK8q^Jq#qhvG_QmrYt0 zUN!QzGI)(3^csZEv&7G{D?u8iMeWZ)Xi;i^x9^y)C5#^>jMow#RZH2PRq7}Mv9Ef3 zs+-+YutIm1Ejr5k|BRxoO4c)OK%Wr$Rmcu27sZD8K*fEX=xWd<14Fh1G&50L4EAL^ zj#)|LShfj=JjtlgI!dR0#|ft?lLUAz9R?K?td7fK zJ(SS@|F=E+EHBxN!z=MzW!39Nb)ewh#29}!TG;w|fN=i{>fhU_`(kC^9ll)k?hc None: + op.create_table( + 'freebies', + sa.Column('id', sa.Integer(), primary_key=True), + sa.Column('item_name', sa.String(), nullable=False), + sa.Column('value', sa.Integer(), nullable=False), + sa.Column('company_id', sa.Integer(), sa.ForeignKey('companies.id'), nullable=False), + sa.Column('dev_id', sa.Integer(), sa.ForeignKey('devs.id'), nullable=False) + ) + + +def downgrade() -> None: + op.drop_table('freebies') diff --git a/lib/models.py b/lib/models.py index 2681bee5a..64a317efb 100644 --- a/lib/models.py +++ b/lib/models.py @@ -27,3 +27,56 @@ class Dev(Base): def __repr__(self): return f'' +<<<<<<< HEAD +======= + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + item_name = Column(String()) + value = Column(Integer()) + company_id = Column(Integer(), ForeignKey('companies.id')) + dev_id = Column(Integer(), ForeignKey('devs.id')) + + company = relationship('Company', backref=backref('freebies', cascade='all, delete-orphan')) + dev = relationship('Dev', backref=backref('freebies', cascade='all, delete-orphan')) + + def __repr__(self): + return f'' + + def print_details(self): + return f"{self.dev.name} owns a {self.item_name} from {self.company.name}" + + +Company.devs = relationship( + 'Dev', + secondary='freebies', + primaryjoin='Company.id == Freebie.company_id', + secondaryjoin='Dev.id == Freebie.dev_id', + viewonly=True, + backref='companies' +) + +def give_freebie(self, dev, item_name, value): + from models import Freebie # to avoid circular import if ever split + return Freebie(item_name=item_name, value=value, company=self, dev=dev) + +def oldest_company(cls, session): + return session.query(cls).order_by(cls.founding_year.asc()).first() + +Company.give_freebie = give_freebie +Company.oldest_company = classmethod(oldest_company) + +def received_one(self, item_name): + return any(f.item_name == item_name for f in self.freebies) + +def give_away(self, dev, freebie): + if freebie in self.freebies: + freebie.dev = dev + return True + return False + +Dev.received_one = received_one +Dev.give_away = give_away +>>>>>>> 5c45024 (First version of code) diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..86e21701b 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,41 @@ #!/usr/bin/env python3 # Script goes here! +<<<<<<< HEAD +======= +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from models import Company, Dev, Freebie, Base + +# Connect to your database +engine = create_engine("sqlite:///app.db") +Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) +session = Session() + +# Optional: Clear old data +session.query(Freebie).delete() +session.query(Company).delete() +session.query(Dev).delete() +session.commit() + +# Seed companies +company1 = Company(name="TechCorp", founding_year=2000) +company2 = Company(name="CodeWorks", founding_year=1995) + +# Seed devs +dev1 = Dev(name="Alice") +dev2 = Dev(name="Bob") + +# Seed freebies +freebie1 = Freebie(item_name="T-shirt", value=10, company=company1, dev=dev1) +freebie2 = Freebie(item_name="Mug", value=5, company=company2, dev=dev1) +freebie3 = Freebie(item_name="Sticker", value=1, company=company2, dev=dev2) + +# Add everything to session and commit +session.add_all([company1, company2, dev1, dev2, freebie1, freebie2, freebie3]) +session.commit() + +print("✅ Seed data created.") +>>>>>>> 5c45024 (First version of code) From ffe48b4e0fc7331ddc4b8c1d7fda9147ae41c640 Mon Sep 17 00:00:00 2001 From: judgeOstrich Date: Mon, 26 May 2025 12:40:37 +0300 Subject: [PATCH 2/4] Add files --- lib/debug.py | 9 --------- lib/models.py | 3 --- lib/seed.py | 3 --- 3 files changed, 15 deletions(-) diff --git a/lib/debug.py b/lib/debug.py index 794257a4e..0ce911bd1 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -1,14 +1,6 @@ #!/usr/bin/env python3 from sqlalchemy import create_engine -<<<<<<< HEAD - -from models import Company, Dev - -if __name__ == '__main__': - engine = create_engine('sqlite:///freebies.db') - import ipdb; ipdb.set_trace() -======= from sqlalchemy.orm import sessionmaker from models import Company, Dev, Freebie @@ -42,4 +34,3 @@ alice.give_away(bob, mug) session.commit() print(f"\nAfter giveaway, Mug is now owned by {mug.dev.name}") ->>>>>>> 5c45024 (First version of code) diff --git a/lib/models.py b/lib/models.py index 64a317efb..60e91a34b 100644 --- a/lib/models.py +++ b/lib/models.py @@ -27,8 +27,6 @@ class Dev(Base): def __repr__(self): return f'' -<<<<<<< HEAD -======= class Freebie(Base): __tablename__ = 'freebies' @@ -79,4 +77,3 @@ def give_away(self, dev, freebie): Dev.received_one = received_one Dev.give_away = give_away ->>>>>>> 5c45024 (First version of code) diff --git a/lib/seed.py b/lib/seed.py index 86e21701b..0f8ca8086 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,8 +1,6 @@ #!/usr/bin/env python3 # Script goes here! -<<<<<<< HEAD -======= from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker @@ -38,4 +36,3 @@ session.commit() print("✅ Seed data created.") ->>>>>>> 5c45024 (First version of code) From ffc9c2d39a279c8099746cb386955f3e74e96fe4 Mon Sep 17 00:00:00 2001 From: judgeOstrich Date: Mon, 26 May 2025 13:05:58 +0300 Subject: [PATCH 3/4] Solved errors --- Pipfile | 7 ------ app.db | Bin 16384 -> 16384 bytes lib/__pycache__/models.cpython-312.pyc | Bin 4427 -> 4427 bytes lib/debug.py | 18 +++++++------- lib/seed.py | 33 ++++++++++++++----------- 5 files changed, 27 insertions(+), 31 deletions(-) diff --git a/Pipfile b/Pipfile index a77160b60..bb830d24e 100644 --- a/Pipfile +++ b/Pipfile @@ -4,18 +4,11 @@ verify_ssl = true name = "pypi" [packages] -<<<<<<< HEAD -alembic = "1.8.1" -======= ->>>>>>> 5c45024 (First version of code) importlib-metadata = "6.0.0" importlib-resources = "5.10.0" ipdb = "0.13.9" sqlalchemy = "1.4.42" -<<<<<<< HEAD -======= alembic = "*" ->>>>>>> 5c45024 (First version of code) [dev-packages] diff --git a/app.db b/app.db index ab99ec1cce37575b7558d86ef43e0af16eeb60d1..fdcef52c344cdb65ad4ec77930d55eed4a7f3980 100644 GIT binary patch delta 328 zcmXAkJxc>Y5Qb+z?$!&5bCN^}vA9OW!XIH$7!9#W#Mbq)Nfy1^aCfn=x+=Bymi8hk zC51mA2sX9~3WAm34{(F!Ji|QiJ9$p>oLtw5f3w*n{=?}V78uR}zwia;vo-%7kIRh1 zHa(GQ6zraoh delta 178 zcmZo@U~Fh$oFL7}F;T{ukz-@R5`GRQ{`(C4ANcQY78F>+KXHP(E QEF&jph;DI4W>E Freebies -alice = session.query(Dev).filter_by(name="Alice").first() -print(f"{alice.name}'s freebies:") -for freebie in alice.freebies: +anna = session.query(Dev).filter_by(name="Anna").first() +print(f"{anna.name}'s freebies:") +for freebie in anna.freebies: print(f" - {freebie.item_name} from {freebie.company.name}") # Test Company -> Devs -codeworks = session.query(Company).filter_by(name="CodeWorks").first() -print(f"\nDevs who got freebies from {codeworks.name}:") -for dev in codeworks.devs: +TechieNiBaddie = session.query(Company).filter_by(name="TechieNiBaddie").first() +print(f"\nDevs who got freebies from {TechieNiBaddie.name}:") +for dev in TechieNiBaddie.devs: print(f" - {dev.name}") # Test Freebie.print_details @@ -26,11 +26,11 @@ freebie.print_details() # Test Dev.received_one -print(f"\nHas Alice received a Mug? {alice.received_one('Mug')}") +print(f"\nHas Anna received a Mug? {anna.received_one('Mug')}") # Test Dev.give_away -bob = session.query(Dev).filter_by(name="Bob").first() +jamo = session.query(Dev).filter_by(name="Jamo").first() mug = session.query(Freebie).filter_by(item_name="Mug").first() -alice.give_away(bob, mug) +anna.give_away(jamo, mug) session.commit() print(f"\nAfter giveaway, Mug is now owned by {mug.dev.name}") diff --git a/lib/seed.py b/lib/seed.py index 0f8ca8086..811a572ff 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -6,30 +6,33 @@ from models import Company, Dev, Freebie, Base -# Connect to your database +# This is the connection to my database engine = create_engine("sqlite:///app.db") Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() -# Optional: Clear old data -session.query(Freebie).delete() -session.query(Company).delete() -session.query(Dev).delete() -session.commit() -# Seed companies -company1 = Company(name="TechCorp", founding_year=2000) -company2 = Company(name="CodeWorks", founding_year=1995) +# Tech companies +company1 = Company(name="Safaricom coders", founding_year=1920) +company2 = Company(name="Waters Snakes", founding_year=2021) +company3 = Company(name="TechieNiBaddie", founding_year=2020) -# Seed devs -dev1 = Dev(name="Alice") -dev2 = Dev(name="Bob") +# Competing devs +dev1 = Dev(name="Anna") +dev2 = Dev(name="Barbara") +dev3 = Dev(name="Jamo") +dev4 = Dev(name="Kevin") +dev5 = Dev(name="Kloppo") # Seed freebies -freebie1 = Freebie(item_name="T-shirt", value=10, company=company1, dev=dev1) -freebie2 = Freebie(item_name="Mug", value=5, company=company2, dev=dev1) -freebie3 = Freebie(item_name="Sticker", value=1, company=company2, dev=dev2) +freebie1 = Freebie(item_name="T-shirt", value=7, company=company3, dev=dev1) +freebie2 = Freebie(item_name="Mug", value=4, company=company2, dev=dev1) +freebie3 = Freebie(item_name="Sticker", value=1, company=company3, dev=dev2) +freebie4 = Freebie(item_name="Gaming Mouse", value=6, company=company3, dev=dev3) +freebie5 = Freebie(item_name="Hoodie", value=5, company=company1, dev=dev2) +freebie6 = Freebie(item_name="Coffee maker", value=9, company=company1, dev=dev4) +freebie6 = Freebie(item_name="Hat", value=9, company=company2, dev=dev5) # Add everything to session and commit session.add_all([company1, company2, dev1, dev2, freebie1, freebie2, freebie3]) From 6d134f67f29fb5214e6d01ce9e535367a54f6e0f Mon Sep 17 00:00:00 2001 From: judgeOstrich Date: Mon, 26 May 2025 13:13:25 +0300 Subject: [PATCH 4/4] Final code --- app.db | Bin 16384 -> 16384 bytes lib/debug.py | 4 ++-- lib/seed.py | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app.db b/app.db index fdcef52c344cdb65ad4ec77930d55eed4a7f3980..498e266a6b4344925331b7846baf0539f50c9ac9 100644 GIT binary patch delta 369 zcmXAlu}T9$5QcY?yWP7p=8u>}B|@$du?QA|mZA|9MGGU?x?VQPp}Cd2M9@O7(o!W| zu+-8*Y-}ui01<3#6%+(3!3S_9<$N>$H_XH_jbnOVp!ti@GR@y^T_MA8NbrRhJm4B< zIJ_Ik)KDH|1{qImik1u`w-SgQ8S&4oX^@G;hV&Y~T=VBewdza$kv9xdN>oHmgubVm zuBWOx#N*CGadFr|m*5xQc*856@Q8cd;0j&6Y4TZpb0K#AHU|EW{15rh^B?5j%s+>}4Jci}Ke^4m3IH0^AzuIh diff --git a/lib/debug.py b/lib/debug.py index d9446fbc4..6dc39f28c 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -8,13 +8,13 @@ Session = sessionmaker(bind=engine) session = Session() -# Test Dev -> Freebies +# Print user and their Freebies anna = session.query(Dev).filter_by(name="Anna").first() print(f"{anna.name}'s freebies:") for freebie in anna.freebies: print(f" - {freebie.item_name} from {freebie.company.name}") -# Test Company -> Devs +# Companies and their lucky winners TechieNiBaddie = session.query(Company).filter_by(name="TechieNiBaddie").first() print(f"\nDevs who got freebies from {TechieNiBaddie.name}:") for dev in TechieNiBaddie.devs: diff --git a/lib/seed.py b/lib/seed.py index 811a572ff..22c4ea467 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -12,7 +12,6 @@ Session = sessionmaker(bind=engine) session = Session() - # Tech companies company1 = Company(name="Safaricom coders", founding_year=1920) company2 = Company(name="Waters Snakes", founding_year=2021) @@ -35,7 +34,7 @@ freebie6 = Freebie(item_name="Hat", value=9, company=company2, dev=dev5) # Add everything to session and commit -session.add_all([company1, company2, dev1, dev2, freebie1, freebie2, freebie3]) +session.add_all([company1, company2, company3, dev1, dev2,dev3, dev4, dev5, freebie1, freebie2, freebie3,freebie4, freebie5, freebie6]) session.commit() print("✅ Seed data created.")