diff --git a/.codecov.yml b/.codecov.yml index c4f0384a0..11e7ca961 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -3,9 +3,6 @@ coverage: round: down range: "70...100" -fixes: - - "aimmo-game-creator/::" - ignore: - ".travis.yml" - "aimmo_setup.py" diff --git a/aimmo-game-creator/Pipfile b/aimmo-game-creator/Pipfile index 0ef8309c4..07bba8a11 100644 --- a/aimmo-game-creator/Pipfile +++ b/aimmo-game-creator/Pipfile @@ -10,7 +10,7 @@ docker = "*" google-cloud-logging = "*" [requires] -python_version = "3.7.7" +python_version = "3.7" [dev-packages] black = "==20.8b1" diff --git a/aimmo-game-creator/Pipfile.lock b/aimmo-game-creator/Pipfile.lock index e3f8de731..fcded2320 100644 --- a/aimmo-game-creator/Pipfile.lock +++ b/aimmo-game-creator/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "46e2f081f672567a1d3bcf05a98ba4dc1fb09d66d8132baf4e8cbce4b8865c50" + "sha256": "a1063b5975e1eda4a5fc388326ccc8e44fb62a8398e4fcb6d8cabc6cec61fd85" }, "pipfile-spec": 6, "requires": { - "python_version": "3.7.7" + "python_version": "3.7" }, "sources": [ { @@ -22,11 +22,11 @@ }, "cachetools": { "hashes": [ - "sha256:3796e1de094f0eaca982441c92ce96c68c89cced4cd97721ab297ea4b16db90e", - "sha256:c6b07a6ded8c78bf36730b3dc452dfff7d95f2a12a2fed856b1a0cb13ca78c61" + "sha256:1d9d5f567be80f7c07d765e21b814326d78c61eb0c3a637dffc0e5d1796cb2e2", + "sha256:f469e29e7aa4cff64d8de4aad95ce76de8ea1125a16c68e0d93f65c3c3dc92e9" ], "markers": "python_version ~= '3.5'", - "version": "==4.2.0" + "version": "==4.2.1" }, "certifi": { "hashes": [ @@ -53,53 +53,53 @@ }, "docker": { "hashes": [ - "sha256:0604a74719d5d2de438753934b755bfcda6f62f49b8e4b30969a4b0a2a8a1220", - "sha256:e455fa49aabd4f22da9f4e1c1f9d16308286adc60abaf64bf3e1feafaed81d06" + "sha256:d4625e70e3d5a12d7cbf1fd68cef2e081ac86b83889e00e5466d975f90e50dad", + "sha256:de5753b7f6486dd541a98393e423e387579b8974a5068748b83f852cc76a89d6" ], "index": "pypi", - "version": "==4.4.1" + "version": "==4.4.3" }, "eventlet": { "hashes": [ - "sha256:19d6f3aa9525221ba60d0ec31b570508021af7ad5497fb77f77501fe9a7c34d3", - "sha256:b33f31ae8d87eb2838dcb8467449211852374ee6dea97113c158fc84d9acff9b" + "sha256:a58caa60ea936c967d16983f3fe7831583b1dc57ed58778cb9b329d1484b918e", + "sha256:d00649a7e17de0bcddff1a96311ed3baf1b295b3223d4b71aceafe7b45e6d6f8" ], - "version": "==0.30.0" + "version": "==0.30.1" }, "google-api-core": { "extras": [ "grpc" ], "hashes": [ - "sha256:0f1dee446db2685863c3c493a90fefa5fc7f4defaf8e1a320b50ccaddfb5d469", - "sha256:a7f5794446a22ff7d36764959ba5f319f37628faf4da04fdc0dedf1598b556c1" + "sha256:002e44c533299aecd9dd265d200f9eacd9957cddd2c72e2cd1cb5cea127e972d", + "sha256:4230ec764d48ca934fe69b85cc217e31e844e176f68df93e252acd55350e730b" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.24.1" + "version": "==1.26.0" }, "google-auth": { "hashes": [ - "sha256:0b0e026b412a0ad096e753907559e4bdb180d9ba9f68dd9036164db4fdc4ad2e", - "sha256:ce752cc51c31f479dbf9928435ef4b07514b20261b021c7383bee4bda646acb8" + "sha256:d3640ea61ee025d5af00e3ffd82ba0a06dd99724adaf50bdd52f49daf29f3f65", + "sha256:da5218cbf33b8461d7661d6b4ad91c12c0107e2767904d5e3ae6408031d5463e" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.24.0" + "version": "==1.27.0" }, "google-cloud-core": { "hashes": [ - "sha256:1277a015f8eeb014c48f2ec094ed5368358318f1146cf49e8de389962dc19106", - "sha256:99a8a15f406f53f2b11bda1f45f952a9cdfbdbba8abf40c75651019d800879f5" + "sha256:40d9c2da2d03549b5ac3dcccf289d4f15e6d1210044c6381ce45c92913e62904", + "sha256:c6abb18527545379fc82efc4de75ce9a3772ccad2fc645adace593ba097cbb02" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.5.0" + "version": "==1.6.0" }, "google-cloud-logging": { "hashes": [ - "sha256:2f68b731314f0cf1e0e903d9b497e6132f18e8f23b7eeffea59a74c06888aa7b", - "sha256:b16ef07248b2d16f6758849c9a2f96f648e2c6ceeff08fe41986609b89de0968" + "sha256:1b2edeefab27e478316678ca7296be8806a368c1016cec9a6c4ddd8b7ba147fd", + "sha256:8932ac382eee6af85cd08400a77586dd3139fbf40b61db757c4c492490899741" ], "index": "pypi", - "version": "==2.0.2" + "version": "==2.2.0" }, "googleapis-common-protos": { "hashes": [ @@ -111,77 +111,103 @@ }, "greenlet": { "hashes": [ - "sha256:1023d7b43ca11264ab7052cb09f5635d4afdb43df55e0854498fc63070a0b206", - "sha256:124a3ae41215f71dc91d1a3d45cbf2f84e46b543e5d60b99ecc20e24b4c8f272", - "sha256:13037e2d7ab2145300676852fa069235512fdeba4ed1e3bb4b0677a04223c525", - "sha256:3af587e9813f9bd8be9212722321a5e7be23b2bc37e6323a90e592ab0c2ef117", - "sha256:41d8835c69a78de718e466dd0e6bfd4b46125f21a67c3ff6d76d8d8059868d6b", - "sha256:4481002118b2f1588fa3d821936ffdc03db80ef21186b62b90c18db4ba5e743b", - "sha256:47825c3a109f0331b1e54c1173d4e57fa000aa6c96756b62852bfa1af91cd652", - "sha256:5494e3baeacc371d988345fbf8aa4bd15555b3077c40afcf1994776bb6d77eaf", - "sha256:75e4c27188f28149b74e7685809f9227410fd15432a4438fc48627f518577fa5", - "sha256:97f2b01ab622a4aa4b3724a3e1fba66f47f054c434fbaa551833fa2b41e3db51", - "sha256:a34023b9eabb3525ee059f3bf33a417d2e437f7f17e341d334987d4091ae6072", - "sha256:ac85db59aa43d78547f95fc7b6fd2913e02b9e9b09e2490dfb7bbdf47b2a4914", - "sha256:be7a79988b8fdc5bbbeaed69e79cfb373da9759242f1565668be4fb7f3f37552", - "sha256:bee111161420f341a346731279dd976be161b465c1286f82cc0779baf7b729e8", - "sha256:ccd62f09f90b2730150d82f2f2ffc34d73c6ce7eac234aed04d15dc8a3023994", - "sha256:d3436110ca66fe3981031cc6aff8cc7a40d8411d173dde73ddaa5b8445385e2d", - "sha256:e495096e3e2e8f7192afb6aaeba19babc4fb2bdf543d7b7fed59e00c1df7f170", - "sha256:e66a824f44892bc4ec66c58601a413419cafa9cec895e63d8da889c8a1a4fa4a" - ], - "version": "==0.4.17" + "sha256:0a77691f0080c9da8dfc81e23f4e3cffa5accf0f5b56478951016d7cfead9196", + "sha256:0ddd77586553e3daf439aa88b6642c5f252f7ef79a39271c25b1d4bf1b7cbb85", + "sha256:111cfd92d78f2af0bc7317452bd93a477128af6327332ebf3c2be7df99566683", + "sha256:122c63ba795fdba4fc19c744df6277d9cfd913ed53d1a286f12189a0265316dd", + "sha256:181300f826625b7fd1182205b830642926f52bd8cdb08b34574c9d5b2b1813f7", + "sha256:1a1ada42a1fd2607d232ae11a7b3195735edaa49ea787a6d9e6a53afaf6f3476", + "sha256:1bb80c71de788b36cefb0c3bb6bfab306ba75073dbde2829c858dc3ad70f867c", + "sha256:1d1d4473ecb1c1d31ce8fd8d91e4da1b1f64d425c1dc965edc4ed2a63cfa67b2", + "sha256:292e801fcb3a0b3a12d8c603c7cf340659ea27fd73c98683e75800d9fd8f704c", + "sha256:2c65320774a8cd5fdb6e117c13afa91c4707548282464a18cf80243cf976b3e6", + "sha256:4365eccd68e72564c776418c53ce3c5af402bc526fe0653722bc89efd85bf12d", + "sha256:5352c15c1d91d22902582e891f27728d8dac3bd5e0ee565b6a9f575355e6d92f", + "sha256:58ca0f078d1c135ecf1879d50711f925ee238fe773dfe44e206d7d126f5bc664", + "sha256:5d4030b04061fdf4cbc446008e238e44936d77a04b2b32f804688ad64197953c", + "sha256:5d69bbd9547d3bc49f8a545db7a0bd69f407badd2ff0f6e1a163680b5841d2b0", + "sha256:5f297cb343114b33a13755032ecf7109b07b9a0020e841d1c3cedff6602cc139", + "sha256:62afad6e5fd70f34d773ffcbb7c22657e1d46d7fd7c95a43361de979f0a45aef", + "sha256:647ba1df86d025f5a34043451d7c4a9f05f240bee06277a524daad11f997d1e7", + "sha256:719e169c79255816cdcf6dccd9ed2d089a72a9f6c42273aae12d55e8d35bdcf8", + "sha256:7cd5a237f241f2764324396e06298b5dee0df580cf06ef4ada0ff9bff851286c", + "sha256:875d4c60a6299f55df1c3bb870ebe6dcb7db28c165ab9ea6cdc5d5af36bb33ce", + "sha256:90b6a25841488cf2cb1c8623a53e6879573010a669455046df5f029d93db51b7", + "sha256:94620ed996a7632723a424bccb84b07e7b861ab7bb06a5aeb041c111dd723d36", + "sha256:b5f1b333015d53d4b381745f5de842f19fe59728b65f0fbb662dafbe2018c3a5", + "sha256:c5b22b31c947ad8b6964d4ed66776bcae986f73669ba50620162ba7c832a6b6a", + "sha256:c93d1a71c3fe222308939b2e516c07f35a849c5047f0197442a4d6fbcb4128ee", + "sha256:cdb90267650c1edb54459cdb51dab865f6c6594c3a47ebd441bc493360c7af70", + "sha256:cfd06e0f0cc8db2a854137bd79154b61ecd940dce96fad0cba23fe31de0b793c", + "sha256:d3789c1c394944084b5e57c192889985a9f23bd985f6d15728c745d380318128", + "sha256:da7d09ad0f24270b20f77d56934e196e982af0d0a2446120cb772be4e060e1a2", + "sha256:df3e83323268594fa9755480a442cabfe8d82b21aba815a71acf1bb6c1776218", + "sha256:df8053867c831b2643b2c489fe1d62049a98566b1646b194cc815f13e27b90df", + "sha256:e1128e022d8dce375362e063754e129750323b67454cac5600008aad9f54139e", + "sha256:e6e9fdaf6c90d02b95e6b0709aeb1aba5affbbb9ccaea5502f8638e4323206be", + "sha256:eac8803c9ad1817ce3d8d15d1bb82c2da3feda6bee1153eec5c58fa6e5d3f770", + "sha256:eb333b90036358a0e2c57373f72e7648d7207b76ef0bd00a4f7daad1f79f5203", + "sha256:ed1d1351f05e795a527abc04a0d82e9aecd3bdf9f46662c36ff47b0b00ecaf06", + "sha256:f3dc68272990849132d6698f7dc6df2ab62a88b0d36e54702a8fd16c0490e44f", + "sha256:f59eded163d9752fd49978e0bab7a1ff21b1b8d25c05f0995d140cc08ac83379", + "sha256:f5e2d36c86c7b03c94b8459c3bd2c9fe2c7dab4b258b8885617d44a22e453fb7", + "sha256:f6f65bf54215e4ebf6b01e4bb94c49180a589573df643735107056f7a910275b", + "sha256:f8450d5ef759dbe59f84f2c9f77491bb3d3c44bc1a573746daf086e70b14c243", + "sha256:f97d83049715fd9dec7911860ecf0e17b48d8725de01e45de07d8ac0bd5bc378" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.0.0" }, "grpcio": { "hashes": [ - "sha256:205eda06d8aeffc87a1e29ff1f090546adf0b6e766378cc4c13686534397fdb4", - "sha256:20606ec7c265f81c5a0226f69842dc8dde66d921968ab9448e59d440cf98bebf", - "sha256:25958bd7c6773e6de79781cc0d6f19d0c82332984dd07ef238889e93485d5afc", - "sha256:2ea864ae3d3abc99d3988d1d27dee3f6350b60149ccf810a89cd9a9d02a675d6", - "sha256:2f54046ca2a81ff45ec8f6d3d7447ad562adb067c3640c35354e440fd771b625", - "sha256:2fd4a80f267aa258f5a74df5fe243eff80299a4f5b356c1da53f6f5793bbbf4b", - "sha256:32ad56f6d3d7e699f9a0d62719f2de9092e79f444d875d70f58cf7f8bb19684c", - "sha256:32fbc78d558d9468a4b16f79f4130daec8e431bc7a3b1775b0e98f09a7ab45a2", - "sha256:43fafebcc2e81d012f7147a0ddf9be69864c40fc4edd9844937eba0020508297", - "sha256:49da07ae43c552280b8b4c70617f9b589588404c2545d6eba2c55179b3d836af", - "sha256:4a2c85cd4a67c36fe12535fe32eb336635843d1eb31d3fa301444e60a8df9c90", - "sha256:50c4f10e7deff96d197bc6d1988c2a5a0bc6252bbd31d7fb374ce8923f937e7a", - "sha256:57a30f9df0f5342e4dad384e7023b9f88742c325838da977828c37f49eb8940a", - "sha256:5b105adb44486fb594b8d8142b5d4fbe50cb125c77ac7d270f5d0277ce5c554a", - "sha256:5d8108b240fd5b8a0483f95ab2651fe2d633311faae93a12938ea06cf61a5efd", - "sha256:5e8e6035d4f9ab856ab437e381e652b31dfd42443d2243d45bdf4b90adaf3559", - "sha256:69127393fc3513da228bc3908914df2284923e0eacf8d73f21ad387317450317", - "sha256:6fafdba42c26bbdf78948c09a93a8b3a8a509c66c6b4324bc1fb360bf4e82b9d", - "sha256:72b6a89aabf937d706946230f5aa13bdf7d2a42874810fa54436c647577b543e", - "sha256:843436e69c37eb45b0285fa42f7acc06d147f2e9c1d515b0f901e94d40107e79", - "sha256:8d92e884f6d67b9a2a4514631d3c9836281044caedb5fd34d4ce2bbec138c87d", - "sha256:923a3b18badc3749c4d715216934f62f46a818790e325ece6184d07e7d6c7f73", - "sha256:924d5e8b18942ebea1260e60be7e2bde2a3587ea386190b442790f84180bf372", - "sha256:9550b7c9d2f11579b484accc6183e02ebe33ce80a0ff15f5c28895df6b3d3108", - "sha256:9579f22222ac89ceee64c1101cced6434d9f6b12078b43ece0f9d8ebdb657f73", - "sha256:95de4ad9ae39590668e3330d414253f672aedd46cc107d7f71b4a2268f3d6066", - "sha256:98b0b6e44c451093354a38b620e6e0df958b0710abd6a0ddd84da84424bce003", - "sha256:a1024006fe61ee7e43e7099faf08f4508ea0c944a1558e8d715a5b4556937ace", - "sha256:a403ed4d8fcc441a2c2ec9ede838b0ae5f9da996d950cf2ff9f82242b496e0a7", - "sha256:bbd3522f821fb5d01049db214fb9f949a8b2d92761c2780a20ff73818efd5360", - "sha256:bd7634f8c49c8467fec5fd9e0d1abb205b0aa61670ff0113ef835ca6548aad3d", - "sha256:bda0f52eb1279a7119526df2ef33ea2808691120daf9effaf60ca0c07f76058a", - "sha256:beef6be49ada569edf3b73fd4eb57d6c2af7e10c0c82a210dbe51de7c4a1ed53", - "sha256:c88ce184973fe2035ffa176eb08cd492db090505e6b1ddc68b5cc1e0b01a07a0", - "sha256:c89b6a3eca8eae10eea78896ccfdc9d04aa2f7b2ee96de20246e5c96494c68f5", - "sha256:d16f7f5a10bf24640fa639974d409c220e587b3e2fa2620af00d43ba36dafc2c", - "sha256:dc45f5750ce50f34f20a0607efae5c797d01681a44465b8287bebef1e9847d5b", - "sha256:dea35dcf09aee91552cb4b3e250efdbcb79564b5b5517246bcbead8d5871e291", - "sha256:dfa098a6ff8d1b68ed7bd655150ee91f57c29042c093ff51113176aded3f0071", - "sha256:e238a554f29d90b0e7fca15e8119b9a7c5f88faacbf9b982751ad54d639b57f8", - "sha256:e2ffa46db9103706640c74886ac23ed18d1487a8523cc128da239e1d5a4e3301", - "sha256:e69ac6fc9096bbb43f5276655661db746233cd320808e0d302198eb43dc7bd04", - "sha256:e95bda60c584b3deb5c37babb44d4300cf4bf3a6c43198a244ddcaddca3fde3a", - "sha256:f2e4d64675351a058f9cb35fe390ca0956bd2926171bfb7c87596a1ee10ff6ba", - "sha256:f98f746cacbaa681de0bcd90d7aa77b440e3e1327a9988f6a2b580d54e27d4c3", - "sha256:fa834f4c70b9df83d5af610097747c224513d59af1f03e8c06bca9a7d81fd1a3" - ], - "version": "==1.34.0" + "sha256:0072ec4563ab4268c4c32e936955085c2d41ea175b662363496daedd2273372c", + "sha256:048c01d1eb5c2ae7cba2254b98938d2fc81f6dc10d172d9261d65266adb0fdb3", + "sha256:088c8bea0f6b596937fefacf2c8df97712e7a3dd49496975049cc95dbf02af1a", + "sha256:0f714e261e1d63615476cda4ee808a79cca62f8f09e2943c136c2f87ec5347b1", + "sha256:16fd33030944672e49e0530dec2c60cd4089659ccdf327e99569b3b29246a0b6", + "sha256:1757e81c09132851e85495b802fe4d4fbef3547e77fa422a62fb4f7d51785be0", + "sha256:17940a7dc461066f28816df48be44f24d3b9f150db344308ee2aeae033e1af0b", + "sha256:18ad7644e23757420ea839ac476ef861e4f4841c8566269b7c91c100ca1943b3", + "sha256:1aa53f82362c7f2791fe0cdd9a3b3aec325c11d8f0dfde600f91907dfaa8546b", + "sha256:22edfc278070d54f3ab7f741904e09155a272fe934e842babbf84476868a50de", + "sha256:2f8e8d35d4799aa1627a212dbe8546594abf4064056415c31bd1b3b8f2a62027", + "sha256:35b72884e09cbc46c564091f4545a39fa66d132c5676d1a6e827517fff47f2c1", + "sha256:399ee377b312ac652b07ef4365bbbba009da361fa7708c4d3d4ce383a1534ea7", + "sha256:3e7d4428ed752fdfe2dddf2a404c93d3a2f62bf4b9109c0c10a850c698948891", + "sha256:44aaa6148d18a8e836f99dadcdec17b27bc7ec0995b2cc12c94e61826040ec90", + "sha256:6ba3d7acf70acde9ce27e22921db921b84a71be578b32739536c32377b65041a", + "sha256:75ea903edc42a8c6ec61dbc5f453febd79d8bdec0e1bad6df7088c34282e8c42", + "sha256:764b50ba1a15a2074cdd1a841238f2dead0a06529c495a46821fae84cb9c7342", + "sha256:7ae408780b79c9b9b91a2592abd1d7abecd05675d988ea75038580f420966b59", + "sha256:7bd0ebbb14dde78bf66a1162efd29d3393e4e943952e2f339757aa48a184645c", + "sha256:7ee7d54da9d176d3c9a0f47c04d7ff6fdc6ee1c17643caff8c33d6c8a70678a4", + "sha256:859a0ceb23d7189362cc06fe7e906e9ed5c7a8f3ac960cc04ce13fe5847d0b62", + "sha256:87147b1b306c88fe7dca7e3dff8aefd1e63d6aed86e224f9374ddf283f17d7f1", + "sha256:8a29a26b9f39701ce15aa1d5aa5e96e0b5f7028efe94f95341a4ed8dbe4bed78", + "sha256:8d08f90d72a8e8d9af087476337da76d26749617b0a092caff4e684ce267af21", + "sha256:94c3b81089a86d3c5877d22b07ebc66b5ed1d84771e24b001844e29a5b6178dd", + "sha256:95cc4d2067deced18dc807442cf8062a93389a86abf8d40741120054389d3f29", + "sha256:9e503eaf853199804a954dc628c5207e67d6c7848dcba42a997fbe718618a2b1", + "sha256:9f0da13b215068e7434b161a35d0b4e92140ffcfa33ddda9c458199ea1d7ce45", + "sha256:a36151c335280b09afd5123f3b25085027ae2b10682087a4342fb6f635b928fb", + "sha256:aca45d2ccb693c9227fbf21144891422a42dc4b76b52af8dd1d4e43afebe321d", + "sha256:acb489b7aafdcf960f1a0000a1f22b45e5b6ccdf8dba48f97617d627f4133195", + "sha256:aea3d592a7ece84739b92d212cd16037c51d84a259414f64b51c14e946611f3d", + "sha256:b180a3ec4a5d6f96d3840c83e5f8ab49afac9fa942921e361b451d7a024efb00", + "sha256:b2985f73611b637271b00d9c4f177e65cc3193269bc9760f16262b1a12757265", + "sha256:c8d0a6a58a42275c6cb616e7cb9f9fcf5eba1e809996546e561cd818b8f7cff7", + "sha256:d186a0ce291f4386e28a7042ec31c85250b0c2e25d2794b87fa3c15ff473c46c", + "sha256:da44bf613eed5d9e8df0785463e502a416de1be6e4ac31edbe99c9111abaed5f", + "sha256:dc2589370ef84eb1cc53530070d658a7011d2ee65f18806581809c11cd016136", + "sha256:dfecb2acd3acb8bb50e9aa31472c6e57171d97c1098ee67cd283a6fe7d56a926", + "sha256:e163c27d2062cd3eb07057f23f8d1330925beaba16802312b51b4bad33d74098", + "sha256:e87e55fba98ebd7b4c614dcef9940dc2a7e057ad8bba5f91554934d47319a35b", + "sha256:efb3d67405eb8030db6f27920b4be023fabfb5d4e09c34deab094a7c473a5472", + "sha256:efd896e8ca7adb2654cf014479a5e1f74e4f776b6b2c0fbf95a6c92787a6631a", + "sha256:f0c27fd16582a303e5baf6cffd9345c9ac5f855d69a51232664a0b888a77ba80", + "sha256:f3654a52f72ba28953dbe2e93208099f4903f4b3c07dc7ff4db671c92968111d" + ], + "version": "==1.35.0" }, "idna": { "hashes": [ @@ -207,6 +233,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==3.1.0" }, + "packaging": { + "hashes": [ + "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5", + "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==20.9" + }, "proto-plus": { "hashes": [ "sha256:61b57c5257ca583af2ea1ad40e2b8f251988806eea9f01d119088976b995b2c4" @@ -216,26 +250,28 @@ }, "protobuf": { "hashes": [ - "sha256:0e247612fadda953047f53301a7b0407cb0c3cb4ae25a6fde661597a04039b3c", - "sha256:0fc96785262042e4863b3f3b5c429d4636f10d90061e1840fce1baaf59b1a836", - "sha256:1c51fda1bbc9634246e7be6016d860be01747354ed7015ebe38acf4452f470d2", - "sha256:1d63eb389347293d8915fb47bee0951c7b5dab522a4a60118b9a18f33e21f8ce", - "sha256:22bcd2e284b3b1d969c12e84dc9b9a71701ec82d8ce975fdda19712e1cfd4e00", - "sha256:2a7e2fe101a7ace75e9327b9c946d247749e564a267b0515cf41dfe450b69bac", - "sha256:43b554b9e73a07ba84ed6cf25db0ff88b1e06be610b37656e292e3cbb5437472", - "sha256:4b74301b30513b1a7494d3055d95c714b560fbb630d8fb9956b6f27992c9f980", - "sha256:4e75105c9dfe13719b7293f75bd53033108f4ba03d44e71db0ec2a0e8401eafd", - "sha256:5b7a637212cc9b2bcf85dd828b1178d19efdf74dbfe1ddf8cd1b8e01fdaaa7f5", - "sha256:5e9806a43232a1fa0c9cf5da8dc06f6910d53e4390be1fa06f06454d888a9142", - "sha256:629b03fd3caae7f815b0c66b41273f6b1900a579e2ccb41ef4493a4f5fb84f3a", - "sha256:72230ed56f026dd664c21d73c5db73ebba50d924d7ba6b7c0d81a121e390406e", - "sha256:86a75477addde4918e9a1904e5c6af8d7b691f2a3f65587d73b16100fbe4c3b2", - "sha256:8971c421dbd7aad930c9bd2694122f332350b6ccb5202a8b7b06f3f1a5c41ed5", - "sha256:9616f0b65a30851e62f1713336c931fcd32c057202b7ff2cfbfca0fc7d5e3043", - "sha256:b0d5d35faeb07e22a1ddf8dce620860c8fe145426c02d1a0ae2688c6e8ede36d", - "sha256:ecc33531a213eee22ad60e0e2aaea6c8ba0021f0cce35dbf0ab03dee6e2a23a1" - ], - "version": "==3.14.0" + "sha256:03f6ee325710eb164bd85741721fbd4326c399b0ecf49dddba9172df9149c124", + "sha256:0644b70bc9d36329438de0da619e3337ab4eade784a9acc6ba8e5ed22f2e9e50", + "sha256:0938b13c2a5ad0ce2b75c19dc0c2082f721a61b97d3f11d73ee4412dfb6e06eb", + "sha256:165071fdfaf4d7ff7a70d2197bba048fb301c7b957095eedf4bf8379d904adb1", + "sha256:17a26d5a7757211ce60032f0111dd426d4e5f44145ac6e86fa241e0cffe9df17", + "sha256:28daf1c44cf11c70f3852bd13f8fc6f7f1f211abbf068ffbeb25f8e4e2f6c98b", + "sha256:3188af446c544df79525d66e2d987490053262b81226fc6fa3f00556135f7e8a", + "sha256:509fba6d57f0c1dc483f91754a33a5d8632da1bf75d87b6c127bcf0e3966fa44", + "sha256:5810e9e3851ab8aa28624bdc947f9236ce7ec2be2f63b88b373fdc92791fbf86", + "sha256:60fd96bc77293d9770d133cdbf3af9ff2373ce11d2055d2ca581db2330fe6805", + "sha256:763a9444bafd2204cdeb29be54147ce7cfae04df805161507426c215a461ae6e", + "sha256:824dbae3390fcc3ea1bf96748e6da951a601802894cf7e1465e72b4732538cab", + "sha256:a8cccf2d2df2675f10a47f963f8010516f6aff09db7d134b0b0e57422ce07f78", + "sha256:c70647b71385302efb615d25c643f1b92784201f7b4ed2d9ff472e4c869ccad5", + "sha256:d3797255e8fbf234477332864f0304222b2492dfd91e95e6314326dbf0e235e2", + "sha256:d52494780f89d1277f982c209197ce1da91d416c27ba9f4495d339ac6a3bac02", + "sha256:d7576c8b59288c5feea161d9ed74925d26759963b51f850d8eadd7a88b4e0ddf", + "sha256:de2e543ffb1701ea8fe7077ba571dbaa1980876d1817f6a70b984064dcb20e6f", + "sha256:edae67da507393f377555531cb7afa1714c75a84404f3541ef5df36ce3637768", + "sha256:f49a1721f2a3d72466aa19f095cc3fe2883b5e1868f4a1e9f51043df8ecb0140" + ], + "version": "==3.15.1" }, "pyasn1": { "hashes": [ @@ -273,38 +309,55 @@ ], "version": "==0.2.8" }, + "pyparsing": { + "hashes": [ + "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", + "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" + ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.4.7" + }, "python-dateutil": { "hashes": [ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.8.1" }, "pytz": { "hashes": [ - "sha256:16962c5fb8db4a8f63a26646d8886e9d769b6c511543557bc84e9569fb9a9cb4", - "sha256:180befebb1927b16f6b57101720075a984c019ac16b1b7575673bea42c6c3da5" + "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da", + "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798" ], - "version": "==2020.5" + "version": "==2021.1" }, "pyyaml": { "hashes": [ - "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97", - "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76", - "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2", - "sha256:6034f55dab5fea9e53f436aa68fa3ace2634918e8b5994d82f3621c04ff5ed2e", - "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648", - "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf", - "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f", - "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2", - "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee", - "sha256:ad9c67312c84def58f3c04504727ca879cb0013b2517c85a9a253f0cb6380c0a", - "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", - "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c", - "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a" - ], - "version": "==5.3.1" + "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf", + "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696", + "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393", + "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77", + "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922", + "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5", + "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8", + "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10", + "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc", + "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", + "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", + "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", + "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", + "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", + "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", + "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", + "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", + "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", + "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", + "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", + "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==5.4.1" }, "requests": { "hashes": [ @@ -324,27 +377,27 @@ }, "rsa": { "hashes": [ - "sha256:109ea5a66744dd859bf16fe904b8d8b627adafb9408753161e766a92e7d681fa", - "sha256:6166864e23d6b5195a5cfed6cd9fed0fe774e226d8f854fcb23b7bbef0350233" + "sha256:74ba16e7ef58920b80b5c54c1c1066d391a2c1e812c466773f74c634eb12253b", + "sha256:9d74d1ff850745c9802cd6b53382bfeec7f6dbe4e26ee2759241ed1e7b0ecf5d" ], "markers": "python_version >= '3.6'", - "version": "==4.6" + "version": "==4.7.1" }, "six": { "hashes": [ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.15.0" }, "urllib3": { "hashes": [ - "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08", - "sha256:d8ff90d979214d7b4f8ce956e80f4028fc6860e4431f731ea4a8c08f23f99473" + "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", + "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.2" + "version": "==1.26.3" }, "websocket-client": { "hashes": [ @@ -418,11 +471,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:5c5a2720817414a6c41f0a49993908068243ae02c1635a228126519b509c8aed", - "sha256:bf792d480abbd5eda85794e4afb09dd538393f7d6e6ffef6e9f03d2014cf9450" + "sha256:ace61d5fc652dc280e7b6b4ff732a9c2d40db2c0f92bc6cb74e07b73d53a1771", + "sha256:fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d" ], - "markers": "python_version < '3.8' and python_version < '3.8'", - "version": "==3.3.0" + "markers": "python_version < '3.8'", + "version": "==3.4.0" }, "iniconfig": { "hashes": [ @@ -440,11 +493,11 @@ }, "packaging": { "hashes": [ - "sha256:24e0da08660a87484d1602c30bb4902d74816b6985b93de36926f5bc95741858", - "sha256:78598185a7008a470d64526a8059de9aaa449238f280fc9eb6b13ba6c4109093" + "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5", + "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.8" + "version": "==20.9" }, "pathspec": { "hashes": [ @@ -474,16 +527,16 @@ "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.4.7" }, "pytest": { "hashes": [ - "sha256:1969f797a1a0dbd8ccf0fecc80262312729afea9c17f1d70ebf85c5e76c6f7c8", - "sha256:66e419b1899bc27346cb2c993e12c5e5e8daba9073c1fbce33b9807abc95c306" + "sha256:9d1edf9e7d0b84d72ea3dbcdfd22b35fb543a5e8f2a60092dd578936bf63d7f9", + "sha256:b574b57423e818210672e07ca1fa90aaf194a4f63f3ab909a2c67ebb22913839" ], "index": "pypi", - "version": "==6.2.1" + "version": "==6.2.2" }, "regex": { "hashes": [ @@ -544,43 +597,43 @@ "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.10.2" }, "typed-ast": { "hashes": [ - "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355", - "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919", - "sha256:0d8110d78a5736e16e26213114a38ca35cb15b6515d535413b090bd50951556d", - "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa", - "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652", - "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75", - "sha256:3742b32cf1c6ef124d57f95be609c473d7ec4c14d0090e5a5e05a15269fb4d0c", - "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01", - "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d", - "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1", - "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907", - "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c", - "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3", - "sha256:7e4c9d7658aaa1fc80018593abdf8598bf91325af6af5cce4ce7c73bc45ea53d", - "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b", - "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614", - "sha256:92c325624e304ebf0e025d1224b77dd4e6393f18aab8d829b5b7e04afe9b7a2c", - "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb", - "sha256:b52ccf7cfe4ce2a1064b18594381bccf4179c2ecf7f513134ec2f993dd4ab395", - "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b", - "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41", - "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6", - "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34", - "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe", - "sha256:d648b8e3bf2fe648745c8ffcee3db3ff903d0817a01a12dd6a6ea7a8f4889072", - "sha256:f208eb7aff048f6bea9586e61af041ddf7f9ade7caed625742af423f6bae3298", - "sha256:fac11badff8313e23717f3dada86a15389d0708275bddf766cca67a84ead3e91", - "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4", - "sha256:fcf135e17cc74dbfbc05894ebca928ffeb23d9790b3167a674921db19082401f", - "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7" - ], - "version": "==1.4.1" + "sha256:07d49388d5bf7e863f7fa2f124b1b1d89d8aa0e2f7812faff0a5658c01c59aa1", + "sha256:14bf1522cdee369e8f5581238edac09150c765ec1cb33615855889cf33dcb92d", + "sha256:240296b27397e4e37874abb1df2a608a92df85cf3e2a04d0d4d61055c8305ba6", + "sha256:36d829b31ab67d6fcb30e185ec996e1f72b892255a745d3a82138c97d21ed1cd", + "sha256:37f48d46d733d57cc70fd5f30572d11ab8ed92da6e6b28e024e4a3edfb456e37", + "sha256:4c790331247081ea7c632a76d5b2a265e6d325ecd3179d06e9cf8d46d90dd151", + "sha256:5dcfc2e264bd8a1db8b11a892bd1647154ce03eeba94b461effe68790d8b8e07", + "sha256:7147e2a76c75f0f64c4319886e7639e490fee87c9d25cb1d4faef1d8cf83a440", + "sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70", + "sha256:8368f83e93c7156ccd40e49a783a6a6850ca25b556c0fa0240ed0f659d2fe496", + "sha256:84aa6223d71012c68d577c83f4e7db50d11d6b1399a9c779046d75e24bed74ea", + "sha256:85f95aa97a35bdb2f2f7d10ec5bbdac0aeb9dafdaf88e17492da0504de2e6400", + "sha256:8db0e856712f79c45956da0c9a40ca4246abc3485ae0d7ecc86a20f5e4c09abc", + "sha256:9044ef2df88d7f33692ae3f18d3be63dec69c4fb1b5a4a9ac950f9b4ba571606", + "sha256:963c80b583b0661918718b095e02303d8078950b26cc00b5e5ea9ababe0de1fc", + "sha256:987f15737aba2ab5f3928c617ccf1ce412e2e321c77ab16ca5a293e7bbffd581", + "sha256:9ec45db0c766f196ae629e509f059ff05fc3148f9ffd28f3cfe75d4afb485412", + "sha256:9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a", + "sha256:a2c927c49f2029291fbabd673d51a2180038f8cd5a5b2f290f78c4516be48be2", + "sha256:a38878a223bdd37c9709d07cd357bb79f4c760b29210e14ad0fb395294583787", + "sha256:b4fcdcfa302538f70929eb7b392f536a237cbe2ed9cba88e3bf5027b39f5f77f", + "sha256:c0c74e5579af4b977c8b932f40a5464764b2f86681327410aa028a22d2f54937", + "sha256:c1c876fd795b36126f773db9cbb393f19808edd2637e00fd6caba0e25f2c7b64", + "sha256:c9aadc4924d4b5799112837b226160428524a9a45f830e0d0f184b19e4090487", + "sha256:cc7b98bf58167b7f2db91a4327da24fb93368838eb84a44c472283778fc2446b", + "sha256:cf54cfa843f297991b7388c281cb3855d911137223c6b6d2dd82a47ae5125a41", + "sha256:d003156bb6a59cda9050e983441b7fa2487f7800d76bdc065566b7d728b4581a", + "sha256:d175297e9533d8d37437abc14e8a83cbc68af93cc9c1c59c2c292ec59a0697a3", + "sha256:d746a437cdbca200622385305aedd9aef68e8a645e385cc483bdc5e488f07166", + "sha256:e683e409e5c45d5c9082dc1daf13f6374300806240719f95dc783d1fc942af10" + ], + "version": "==1.4.2" }, "typing-extensions": { "hashes": [ @@ -593,11 +646,11 @@ }, "urllib3": { "hashes": [ - "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08", - "sha256:d8ff90d979214d7b4f8ce956e80f4028fc6860e4431f731ea4a8c08f23f99473" + "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", + "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.2" + "version": "==1.26.3" }, "zipp": { "hashes": [ diff --git a/aimmo-game-creator/game_manager.py b/aimmo-game-creator/game_manager.py index 7a1e07a5a..887fd035f 100644 --- a/aimmo-game-creator/game_manager.py +++ b/aimmo-game-creator/game_manager.py @@ -101,19 +101,19 @@ def delete_game(self, game_id): def recreate_game(self, game_to_add): """Deletes and recreates the given game""" game_id, game_data = game_to_add - LOGGER.info("Deleting game {}".format(game_data["name"])) + LOGGER.info("Deleting game {}".format(game_id)) try: self.delete_game(game_id) except Exception as ex: - LOGGER.error("Failed to delete game {}".format(game_data["name"])) + LOGGER.error("Failed to delete game {}".format(game_id)) LOGGER.exception(ex) - LOGGER.info("Recreating game {}".format(game_data["name"])) + LOGGER.info("Recreating game {}".format(game_id)) try: game_data["GAME_API_URL"] = "{}{}/".format(self.games_url, game_id) self.create_game(game_id, game_data) except Exception as ex: - LOGGER.error("Failed to create game {}".format(game_data["name"])) + LOGGER.error("Failed to create game {}".format(game_id)) LOGGER.exception(ex) def update(self): @@ -154,7 +154,7 @@ def run(self): while True: self.update() LOGGER.info("Sleeping") - time.sleep(10) + time.sleep(1) def _parallel_map(self, func, iterable_args): with futures.ThreadPoolExecutor() as executor: @@ -172,6 +172,12 @@ def __init__(self, *args, **kwargs): self.custom_objects_api: CustomObjectsApi = CustomObjectsApi(self.api_client) super(KubernetesGameManager, self).__init__(*args, **kwargs) + self._create_ingress_paths_for_existing_games() + + def _create_ingress_paths_for_existing_games(self): + games = self._data.get_games() + for game_id in games: + self._add_path_to_ingress(game_id) @staticmethod def _create_game_name(game_id): @@ -182,6 +188,88 @@ def _create_game_name(game_id): """ return "game-{}".format(game_id) + def _add_path_to_ingress(self, game_id): + game_name = KubernetesGameManager._create_game_name(game_id) + backend = kubernetes.client.NetworkingV1beta1IngressBackend(game_name, 80) + path = kubernetes.client.NetworkingV1beta1HTTPIngressPath( + backend, f"/{game_name}(/|$)(.*)" + ) + + patch = [{"op": "add", "path": "/spec/rules/0/http/paths/-", "value": path}] + + self.networking_api.patch_namespaced_ingress("aimmo-ingress", "default", patch) + + def _remove_path_from_ingress(self, game_id): + game_name = KubernetesGameManager._create_game_name(game_id) + backend = kubernetes.client.NetworkingV1beta1IngressBackend(game_name, 80) + path = kubernetes.client.NetworkingV1beta1HTTPIngressPath( + backend, f"/{game_name}(/|$)(.*)" + ) + ingress = self.networking_api.list_namespaced_ingress("default").items[0] + paths = ingress.spec.rules[0].http.paths + try: + index_to_delete = paths.index(path) + except ValueError: + return + + patch = [ + { + "op": "remove", + "path": "/spec/rules/0/http/paths/{}".format(index_to_delete), + } + ] + + self.networking_api.patch_namespaced_ingress("aimmo-ingress", "default", patch) + + def _create_game_service(self, game_id): + result = self.custom_objects_api.list_namespaced_custom_object( + group="agones.dev", + version="v1", + namespace="default", + plural="gameservers", + label_selector=f"game-id={game_id}", + ) + game_servers = result["items"] + + if len(game_servers) == 0: + raise Exception(f"No game server found for game ID {game_id}.") + elif len(game_servers) > 1: + raise Exception(f"More than one game server found for game ID {game_id}.") + + game_server = game_servers[0] + game_server_name = game_server["metadata"]["name"] + + service_manifest = kubernetes.client.V1ServiceSpec( + selector={"agones.dev/gameserver": game_server_name}, + ports=[ + kubernetes.client.V1ServicePort( + name="tcp", protocol="TCP", port=80, target_port=5000 + ) + ], + ) + + service_metadata = kubernetes.client.V1ObjectMeta( + name=KubernetesGameManager._create_game_name(game_id), + labels={"app": "aimmo-game", "game_id": game_id}, + ) + + service = kubernetes.client.V1Service( + metadata=service_metadata, spec=service_manifest + ) + self.api.create_namespaced_service(K8S_NAMESPACE, service) + + def _delete_game_service(self, game_id): + app_label = "app=aimmo-game" + game_label = "game_id={}".format(game_id) + + resources = self.api.list_namespaced_service( + namespace=K8S_NAMESPACE, label_selector=",".join([app_label, game_label]) + ) + + for resource in resources.items: + LOGGER.info("Removing service: {}".format(resource.metadata.name)) + self.api.delete_namespaced_service(resource.metadata.name, K8S_NAMESPACE) + def _create_game_secret(self, game_id): name = KubernetesGameManager._create_game_name(game_id) + "-token" try: @@ -199,7 +287,7 @@ def _delete_game_secret(self, game_id): ) for resource in resources.items: - LOGGER.info("Removing: {}".format(resource.metadata.name)) + LOGGER.info("Removing game secret: {}".format(resource.metadata.name)) self.api.delete_namespaced_secret(resource.metadata.name, K8S_NAMESPACE) def _create_game_server_allocation( @@ -257,9 +345,13 @@ def _delete_game_server(self, game_id): def create_game(self, game_id, game_data): self._create_game_secret(game_id) self._create_game_server_allocation(game_id, game_data["worksheet_id"]) + self._create_game_service(game_id) + self._add_path_to_ingress(game_id) LOGGER.info("Game started - {}".format(game_id)) def delete_game(self, game_id): + self._remove_path_from_ingress(game_id) + self._delete_game_service(game_id) self._delete_game_server(game_id) self._delete_game_secret(game_id) diff --git a/aimmo-game-creator/tests/test_game_manager.py b/aimmo-game-creator/tests/test_game_manager.py index 85eed50ea..4b4bd15b9 100644 --- a/aimmo-game-creator/tests/test_game_manager.py +++ b/aimmo-game-creator/tests/test_game_manager.py @@ -106,9 +106,13 @@ def test_token_generation(self): def test_adding_a_game_creates_game_allocation(self): game_manager = KubernetesGameManager("http://test/*") custom_objects_api = MagicMock() + custom_objects_api.list_namespaced_custom_object = MagicMock( + return_value={"items": [{"metadata": {"name": "test"}}]} + ) game_manager.custom_objects_api = custom_objects_api game_manager.secret_creator = MagicMock() game_manager.api = MagicMock() + game_manager.networking_api = MagicMock() game_manager.create_game(1, {"worksheet_id": 1}) custom_objects_api.create_namespaced_custom_object.assert_called_with( @@ -140,6 +144,7 @@ def test_delete_game(self): game_manager.custom_objects_api = custom_objects_api game_manager.secret_creator = MagicMock() game_manager.api = MagicMock() + game_manager.networking_api = MagicMock() game_manager.delete_game(100) diff --git a/aimmo/game_renderer.py b/aimmo/game_renderer.py index 50dcca394..78fe4fc38 100644 --- a/aimmo/game_renderer.py +++ b/aimmo/game_renderer.py @@ -3,10 +3,7 @@ """ from __future__ import absolute_import -from django.http import Http404 from django.shortcuts import get_object_or_404, render -from kubernetes.client.api.custom_objects_api import CustomObjectsApi -from kubernetes.client.api_client import ApiClient from aimmo import app_settings, exceptions @@ -36,30 +33,15 @@ def get_environment_connection_settings(game_id): :param game_id: Integer with the ID of the game. :return: A dict object with all relevant settings. """ + game_url_base_and_path = app_settings.GAME_SERVER_URL_FUNCTION(game_id) return { - "game_url_base": get_games_url_base(game_id), + "game_url_base": game_url_base_and_path[0], + "game_url_path": game_url_base_and_path[1], "game_ssl_flag": app_settings.GAME_SERVER_SSL_FLAG, "game_id": game_id, } -def get_games_url_base(game_id: int) -> str: - api_client = ApiClient() - api_instance = CustomObjectsApi(api_client) - result = api_instance.list_namespaced_custom_object( - group="agones.dev", - version="v1", - namespace="default", - plural="gameservers", - label_selector=f"game-id={game_id}", - ) - try: - game_server_status = result["items"][0]["status"] - return f"http://{game_server_status['address']}:{game_server_status['ports'][0]['port']}" - except (KeyError, IndexError): - raise Http404 - - def get_avatar_id_from_user(user, game_id): """ A helper function which will return an avatar ID that is assigned to a diff --git a/aimmo/tests/test_views.py b/aimmo/tests/test_views.py index db989a713..a7e237c15 100644 --- a/aimmo/tests/test_views.py +++ b/aimmo/tests/test_views.py @@ -254,15 +254,11 @@ def test_connection_parameters_api_call_returns_404_for_logged_out_user(self): assert first_response.status_code == 403 - @patch("aimmo.game_renderer.CustomObjectsApi") - def test_id_of_connection_parameters_same_as_games_url(self, custom_objects_api): + def test_id_of_connection_parameters_same_as_games_url(self): """ Ensures that the id's are consistent throughout the project. Check for ID's received by the current_avatar URL as well as the games URL api. """ - custom_objects_api.list_namespaced_custom_object.return_value = { - "items": [{"status": {"address": "base", "ports": [{"port": 4321}]}}] - } user = self.user models.Avatar(owner=user, code=self.CODE, game=self.game).save() client = self.login() diff --git a/example_project/example_project/settings.py b/example_project/example_project/settings.py index 4fccd376c..75e1153fe 100644 --- a/example_project/example_project/settings.py +++ b/example_project/example_project/settings.py @@ -36,9 +36,11 @@ # identified as the original program. """Django settings for example_project project.""" import os -import subprocess import mimetypes +from django.http import Http404 +from kubernetes.client.api.custom_objects_api import CustomObjectsApi +from kubernetes.client.api_client import ApiClient ALLOWED_HOSTS = ["*"] @@ -100,6 +102,28 @@ "django.contrib.messages.middleware.MessageMiddleware", ] + +def get_game_url_base_and_path(game_id: int) -> str: + api_client = ApiClient() + api_instance = CustomObjectsApi(api_client) + result = api_instance.list_namespaced_custom_object( + group="agones.dev", + version="v1", + namespace="default", + plural="gameservers", + label_selector=f"game-id={game_id}", + ) + try: + game_server_status = result["items"][0]["status"] + return ( + f"http://{game_server_status['address']}:{game_server_status['ports'][0]['port']}", + "/socket.io", + ) + except (KeyError, IndexError): + raise Http404 + + +AIMMO_GAME_SERVER_URL_FUNCTION = get_game_url_base_and_path AIMMO_GAME_SERVER_SSL_FLAG = False try: diff --git a/game_frontend/src/redux/api/socket.js b/game_frontend/src/redux/api/socket.js index d158e4281..cd98fe6ca 100644 --- a/game_frontend/src/redux/api/socket.js +++ b/game_frontend/src/redux/api/socket.js @@ -7,24 +7,29 @@ import { fromEvent, pipe, merge } from 'rxjs' var socketIO const connectToGame = () => - map(action => { - const { game_url_base: gameUrlBase, avatar_id: avatarId } = action.payload.parameters + map((action) => { + const { + game_url_base: gameUrlBase, + game_url_path: gameUrlPath, + avatar_id: avatarId, + } = action.payload.parameters socketIO = io(gameUrlBase, { + path: gameUrlPath, query: { - avatar_id: avatarId - } + avatar_id: avatarId, + }, }) return socketIO }) const listenFor = (eventName, socket, action) => - fromEvent(socket, eventName).pipe(map(event => action(event))) + fromEvent(socket, eventName).pipe(map((event) => action(event))) -const emitAction = nextAction => socketIO?.emit('action', nextAction) +const emitAction = (nextAction) => socketIO?.emit('action', nextAction) const startListeners = () => pipe( - mergeMap(socket => + mergeMap((socket) => merge( listenFor('game-state', socket, gameActions.socketGameStateReceived), listenFor('log', socket, consoleLogActions.socketConsoleLogReceived) diff --git a/rbac/game_creator_role.yaml b/rbac/game_creator_role.yaml index 5f7c78e75..b92fb7ae0 100644 --- a/rbac/game_creator_role.yaml +++ b/rbac/game_creator_role.yaml @@ -9,15 +9,18 @@ apiVersion: rbac.authorization.k8s.io/v1 metadata: name: game-creator rules: - - apiGroups: [''] # "" indicates the core API group - resources: ['secrets'] - verbs: ['get', 'list', 'create', 'update', 'patch', 'delete'] - - apiGroups: ['allocation.agones.dev'] - resources: ['gameserverallocations'] - verbs: ['create'] - - apiGroups: ['agones.dev'] - resources: ['gameservers'] - verbs: ['get', 'list', 'delete'] + - apiGroups: [""] # "" indicates the core API group + resources: ["secrets", "services"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] + - apiGroups: ["networking.k8s.io"] + resources: ["ingresses"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] + - apiGroups: ["allocation.agones.dev"] + resources: ["gameserverallocations"] + verbs: ["create"] + - apiGroups: ["agones.dev"] + resources: ["gameservers"] + verbs: ["get", "list", "delete"] --- kind: ClusterRoleBinding @@ -28,8 +31,8 @@ subjects: - kind: ServiceAccount name: game-creator # Name is case sensitive namespace: default - apiGroup: '' + apiGroup: "" roleRef: kind: ClusterRole #this must be Role or ClusterRole name: game-creator # this must match the name of the Role or ClusterRole you wish to bind to - apiGroup: '' + apiGroup: ""