mirror of
				https://git.anonymousland.org/anonymousland/synapse.git
				synced 2025-10-31 16:28:57 -04:00 
			
		
		
		
	Update mypy and mypy-zope, attempt 3 (#13993)
Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									8e52cb0bce
								
							
						
					
					
						commit
						285d72556b
					
				
					 11 changed files with 61 additions and 68 deletions
				
			
		
							
								
								
									
										1
									
								
								changelog.d/13925.misc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								changelog.d/13925.misc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| Update mypy (0.950 -> 0.981) and mypy-zope (0.3.7 -> 0.3.11). | ||||
							
								
								
									
										1
									
								
								changelog.d/13993.misc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								changelog.d/13993.misc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| Update mypy (0.950 -> 0.981) and mypy-zope (0.3.7 -> 0.3.11). | ||||
							
								
								
									
										59
									
								
								poetry.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										59
									
								
								poetry.lock
									
										
									
										generated
									
									
									
								
							|  | @ -573,11 +573,11 @@ python-versions = "*" | |||
| 
 | ||||
| [[package]] | ||||
| name = "mypy" | ||||
| version = "0.950" | ||||
| version = "0.981" | ||||
| description = "Optional static typing for Python" | ||||
| category = "dev" | ||||
| optional = false | ||||
| python-versions = ">=3.6" | ||||
| python-versions = ">=3.7" | ||||
| 
 | ||||
| [package.dependencies] | ||||
| mypy-extensions = ">=0.4.3" | ||||
|  | @ -600,14 +600,14 @@ python-versions = "*" | |||
| 
 | ||||
| [[package]] | ||||
| name = "mypy-zope" | ||||
| version = "0.3.7" | ||||
| version = "0.3.11" | ||||
| description = "Plugin for mypy to support zope interfaces" | ||||
| category = "dev" | ||||
| optional = false | ||||
| python-versions = "*" | ||||
| 
 | ||||
| [package.dependencies] | ||||
| mypy = "0.950" | ||||
| mypy = "0.981" | ||||
| "zope.interface" = "*" | ||||
| "zope.schema" = "*" | ||||
| 
 | ||||
|  | @ -2162,37 +2162,38 @@ msgpack = [ | |||
|     {file = "msgpack-1.0.3.tar.gz", hash = "sha256:51fdc7fb93615286428ee7758cecc2f374d5ff363bdd884c7ea622a7a327a81e"}, | ||||
| ] | ||||
| mypy = [ | ||||
|     {file = "mypy-0.950-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cf9c261958a769a3bd38c3e133801ebcd284ffb734ea12d01457cb09eacf7d7b"}, | ||||
|     {file = "mypy-0.950-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5b5bd0ffb11b4aba2bb6d31b8643902c48f990cc92fda4e21afac658044f0c0"}, | ||||
|     {file = "mypy-0.950-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e7647df0f8fc947388e6251d728189cfadb3b1e558407f93254e35abc026e22"}, | ||||
|     {file = "mypy-0.950-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eaff8156016487c1af5ffa5304c3e3fd183edcb412f3e9c72db349faf3f6e0eb"}, | ||||
|     {file = "mypy-0.950-cp310-cp310-win_amd64.whl", hash = "sha256:563514c7dc504698fb66bb1cf897657a173a496406f1866afae73ab5b3cdb334"}, | ||||
|     {file = "mypy-0.950-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dd4d670eee9610bf61c25c940e9ade2d0ed05eb44227275cce88701fee014b1f"}, | ||||
|     {file = "mypy-0.950-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca75ecf2783395ca3016a5e455cb322ba26b6d33b4b413fcdedfc632e67941dc"}, | ||||
|     {file = "mypy-0.950-cp36-cp36m-win_amd64.whl", hash = "sha256:6003de687c13196e8a1243a5e4bcce617d79b88f83ee6625437e335d89dfebe2"}, | ||||
|     {file = "mypy-0.950-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c653e4846f287051599ed8f4b3c044b80e540e88feec76b11044ddc5612ffed"}, | ||||
|     {file = "mypy-0.950-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e19736af56947addedce4674c0971e5dceef1b5ec7d667fe86bcd2b07f8f9075"}, | ||||
|     {file = "mypy-0.950-cp37-cp37m-win_amd64.whl", hash = "sha256:ef7beb2a3582eb7a9f37beaf38a28acfd801988cde688760aea9e6cc4832b10b"}, | ||||
|     {file = "mypy-0.950-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0112752a6ff07230f9ec2f71b0d3d4e088a910fdce454fdb6553e83ed0eced7d"}, | ||||
|     {file = "mypy-0.950-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ee0a36edd332ed2c5208565ae6e3a7afc0eabb53f5327e281f2ef03a6bc7687a"}, | ||||
|     {file = "mypy-0.950-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77423570c04aca807508a492037abbd72b12a1fb25a385847d191cd50b2c9605"}, | ||||
|     {file = "mypy-0.950-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ce6a09042b6da16d773d2110e44f169683d8cc8687e79ec6d1181a72cb028d2"}, | ||||
|     {file = "mypy-0.950-cp38-cp38-win_amd64.whl", hash = "sha256:5b231afd6a6e951381b9ef09a1223b1feabe13625388db48a8690f8daa9b71ff"}, | ||||
|     {file = "mypy-0.950-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0384d9f3af49837baa92f559d3fa673e6d2652a16550a9ee07fc08c736f5e6f8"}, | ||||
|     {file = "mypy-0.950-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1fdeb0a0f64f2a874a4c1f5271f06e40e1e9779bf55f9567f149466fc7a55038"}, | ||||
|     {file = "mypy-0.950-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:61504b9a5ae166ba5ecfed9e93357fd51aa693d3d434b582a925338a2ff57fd2"}, | ||||
|     {file = "mypy-0.950-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a952b8bc0ae278fc6316e6384f67bb9a396eb30aced6ad034d3a76120ebcc519"}, | ||||
|     {file = "mypy-0.950-cp39-cp39-win_amd64.whl", hash = "sha256:eaea21d150fb26d7b4856766e7addcf929119dd19fc832b22e71d942835201ef"}, | ||||
|     {file = "mypy-0.950-py3-none-any.whl", hash = "sha256:a4d9898f46446bfb6405383b57b96737dcfd0a7f25b748e78ef3e8c576bba3cb"}, | ||||
|     {file = "mypy-0.950.tar.gz", hash = "sha256:1b333cfbca1762ff15808a0ef4f71b5d3eed8528b23ea1c3fb50543c867d68de"}, | ||||
|     {file = "mypy-0.981-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4bc460e43b7785f78862dab78674e62ec3cd523485baecfdf81a555ed29ecfa0"}, | ||||
|     {file = "mypy-0.981-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:756fad8b263b3ba39e4e204ee53042671b660c36c9017412b43af210ddee7b08"}, | ||||
|     {file = "mypy-0.981-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a16a0145d6d7d00fbede2da3a3096dcc9ecea091adfa8da48fa6a7b75d35562d"}, | ||||
|     {file = "mypy-0.981-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce65f70b14a21fdac84c294cde75e6dbdabbcff22975335e20827b3b94bdbf49"}, | ||||
|     {file = "mypy-0.981-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e35d764784b42c3e256848fb8ed1d4292c9fc0098413adb28d84974c095b279"}, | ||||
|     {file = "mypy-0.981-cp310-cp310-win_amd64.whl", hash = "sha256:e53773073c864d5f5cec7f3fc72fbbcef65410cde8cc18d4f7242dea60dac52e"}, | ||||
|     {file = "mypy-0.981-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6ee196b1d10b8b215e835f438e06965d7a480f6fe016eddbc285f13955cca659"}, | ||||
|     {file = "mypy-0.981-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ad21d4c9d3673726cf986ea1d0c9fb66905258709550ddf7944c8f885f208be"}, | ||||
|     {file = "mypy-0.981-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d1debb09043e1f5ee845fa1e96d180e89115b30e47c5d3ce53bc967bab53f62d"}, | ||||
|     {file = "mypy-0.981-cp37-cp37m-win_amd64.whl", hash = "sha256:9f362470a3480165c4c6151786b5379351b790d56952005be18bdbdd4c7ce0ae"}, | ||||
|     {file = "mypy-0.981-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c9e0efb95ed6ca1654951bd5ec2f3fa91b295d78bf6527e026529d4aaa1e0c30"}, | ||||
|     {file = "mypy-0.981-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e178eaffc3c5cd211a87965c8c0df6da91ed7d258b5fc72b8e047c3771317ddb"}, | ||||
|     {file = "mypy-0.981-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:06e1eac8d99bd404ed8dd34ca29673c4346e76dd8e612ea507763dccd7e13c7a"}, | ||||
|     {file = "mypy-0.981-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa38f82f53e1e7beb45557ff167c177802ba7b387ad017eab1663d567017c8ee"}, | ||||
|     {file = "mypy-0.981-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:64e1f6af81c003f85f0dfed52db632817dabb51b65c0318ffbf5ff51995bbb08"}, | ||||
|     {file = "mypy-0.981-cp38-cp38-win_amd64.whl", hash = "sha256:e1acf62a8c4f7c092462c738aa2c2489e275ed386320c10b2e9bff31f6f7e8d6"}, | ||||
|     {file = "mypy-0.981-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b6ede64e52257931315826fdbfc6ea878d89a965580d1a65638ef77cb551f56d"}, | ||||
|     {file = "mypy-0.981-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eb3978b191b9fa0488524bb4ffedf2c573340e8c2b4206fc191d44c7093abfb7"}, | ||||
|     {file = "mypy-0.981-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f8fcf7b4b3cc0c74fb33ae54a4cd00bb854d65645c48beccf65fa10b17882c"}, | ||||
|     {file = "mypy-0.981-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f64d2ce043a209a297df322eb4054dfbaa9de9e8738291706eaafda81ab2b362"}, | ||||
|     {file = "mypy-0.981-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2ee3dbc53d4df7e6e3b1c68ac6a971d3a4fb2852bf10a05fda228721dd44fae1"}, | ||||
|     {file = "mypy-0.981-cp39-cp39-win_amd64.whl", hash = "sha256:8e8e49aa9cc23aa4c926dc200ce32959d3501c4905147a66ce032f05cb5ecb92"}, | ||||
|     {file = "mypy-0.981-py3-none-any.whl", hash = "sha256:794f385653e2b749387a42afb1e14c2135e18daeb027e0d97162e4b7031210f8"}, | ||||
|     {file = "mypy-0.981.tar.gz", hash = "sha256:ad77c13037d3402fbeffda07d51e3f228ba078d1c7096a73759c9419ea031bf4"}, | ||||
| ] | ||||
| mypy-extensions = [ | ||||
|     {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, | ||||
|     {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, | ||||
| ] | ||||
| mypy-zope = [ | ||||
|     {file = "mypy-zope-0.3.7.tar.gz", hash = "sha256:9da171e78e8ef7ac8922c86af1a62f1b7f3244f121020bd94a2246bc3f33c605"}, | ||||
|     {file = "mypy_zope-0.3.7-py3-none-any.whl", hash = "sha256:9c7637d066e4d1bafa0651abc091c752009769098043b236446e6725be2bc9c2"}, | ||||
|     {file = "mypy-zope-0.3.11.tar.gz", hash = "sha256:d4255f9f04d48c79083bbd4e2fea06513a6ac7b8de06f8c4ce563fd85142ca05"}, | ||||
|     {file = "mypy_zope-0.3.11-py3-none-any.whl", hash = "sha256:ec080a6508d1f7805c8d2054f9fdd13c849742ce96803519e1fdfa3d3cab7140"}, | ||||
| ] | ||||
| netaddr = [ | ||||
|     {file = "netaddr-0.8.0-py2.py3-none-any.whl", hash = "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac"}, | ||||
|  |  | |||
|  | @ -88,10 +88,9 @@ def make_wrapper(factory: Callable[P, R]) -> Callable[P, R]: | |||
| 
 | ||||
|     @functools.wraps(factory) | ||||
|     def wrapper(*args: P.args, **kwargs: P.kwargs) -> R: | ||||
|         # type-ignore: should be redundant once we can use https://github.com/python/mypy/pull/12668 | ||||
|         if "strict" not in kwargs:  # type: ignore[attr-defined] | ||||
|         if "strict" not in kwargs: | ||||
|             raise MissingStrictInConstrainedTypeException(factory.__name__) | ||||
|         if not kwargs["strict"]:  # type: ignore[index] | ||||
|         if not kwargs["strict"]: | ||||
|             raise MissingStrictInConstrainedTypeException(factory.__name__) | ||||
|         return factory(*args, **kwargs) | ||||
| 
 | ||||
|  |  | |||
|  | @ -98,9 +98,7 @@ def register_sighup(func: Callable[P, None], *args: P.args, **kwargs: P.kwargs) | |||
|         func: Function to be called when sent a SIGHUP signal. | ||||
|         *args, **kwargs: args and kwargs to be passed to the target function. | ||||
|     """ | ||||
|     # This type-ignore should be redundant once we use a mypy release with | ||||
|     # https://github.com/python/mypy/pull/12668. | ||||
|     _sighup_callbacks.append((func, args, kwargs))  # type: ignore[arg-type] | ||||
|     _sighup_callbacks.append((func, args, kwargs)) | ||||
| 
 | ||||
| 
 | ||||
| def start_worker_reactor( | ||||
|  |  | |||
|  | @ -586,7 +586,7 @@ class LoggingContextFilter(logging.Filter): | |||
|             True to include the record in the log output. | ||||
|         """ | ||||
|         context = current_context() | ||||
|         record.request = self._default_request  # type: ignore | ||||
|         record.request = self._default_request | ||||
| 
 | ||||
|         # context should never be None, but if it somehow ends up being, then | ||||
|         # we end up in a death spiral of infinite loops, so let's check, for | ||||
|  | @ -594,21 +594,21 @@ class LoggingContextFilter(logging.Filter): | |||
|         if context is not None: | ||||
|             # Logging is interested in the request ID. Note that for backwards | ||||
|             # compatibility this is stored as the "request" on the record. | ||||
|             record.request = str(context)  # type: ignore | ||||
|             record.request = str(context) | ||||
| 
 | ||||
|             # Add some data from the HTTP request. | ||||
|             request = context.request | ||||
|             if request is None: | ||||
|                 return True | ||||
| 
 | ||||
|             record.ip_address = request.ip_address  # type: ignore | ||||
|             record.site_tag = request.site_tag  # type: ignore | ||||
|             record.requester = request.requester  # type: ignore | ||||
|             record.authenticated_entity = request.authenticated_entity  # type: ignore | ||||
|             record.method = request.method  # type: ignore | ||||
|             record.url = request.url  # type: ignore | ||||
|             record.protocol = request.protocol  # type: ignore | ||||
|             record.user_agent = request.user_agent  # type: ignore | ||||
|             record.ip_address = request.ip_address | ||||
|             record.site_tag = request.site_tag | ||||
|             record.requester = request.requester | ||||
|             record.authenticated_entity = request.authenticated_entity | ||||
|             record.method = request.method | ||||
|             record.url = request.url | ||||
|             record.protocol = request.protocol | ||||
|             record.user_agent = request.user_agent | ||||
| 
 | ||||
|         return True | ||||
| 
 | ||||
|  |  | |||
|  | @ -992,9 +992,9 @@ def tag_args(func: Callable[P, R]) -> Callable[P, R]: | |||
|         # FIXME: We could update this to handle any type of function by ignoring the | ||||
|         #   first argument only if it's named `self` or `cls`. This isn't fool-proof | ||||
|         #   but handles the idiomatic cases. | ||||
|         for i, arg in enumerate(args[1:], start=1):  # type: ignore[index] | ||||
|         for i, arg in enumerate(args[1:], start=1): | ||||
|             set_tag(SynapseTags.FUNC_ARG_PREFIX + argspec.args[i], str(arg)) | ||||
|         set_tag(SynapseTags.FUNC_ARGS, str(args[len(argspec.args) :]))  # type: ignore[index] | ||||
|         set_tag(SynapseTags.FUNC_ARGS, str(args[len(argspec.args) :])) | ||||
|         set_tag(SynapseTags.FUNC_KWARGS, str(kwargs)) | ||||
|         yield | ||||
| 
 | ||||
|  |  | |||
|  | @ -290,8 +290,7 @@ class LoggingTransaction: | |||
|         # LoggingTransaction isn't expecting there to be any callbacks; assert that | ||||
|         # is not the case. | ||||
|         assert self.after_callbacks is not None | ||||
|         # type-ignore: need mypy containing https://github.com/python/mypy/pull/12668 | ||||
|         self.after_callbacks.append((callback, args, kwargs))  # type: ignore[arg-type] | ||||
|         self.after_callbacks.append((callback, args, kwargs)) | ||||
| 
 | ||||
|     def async_call_after( | ||||
|         self, callback: Callable[P, Awaitable], *args: P.args, **kwargs: P.kwargs | ||||
|  | @ -312,8 +311,7 @@ class LoggingTransaction: | |||
|         # LoggingTransaction isn't expecting there to be any callbacks; assert that | ||||
|         # is not the case. | ||||
|         assert self.async_after_callbacks is not None | ||||
|         # type-ignore: need mypy containing https://github.com/python/mypy/pull/12668 | ||||
|         self.async_after_callbacks.append((callback, args, kwargs))  # type: ignore[arg-type] | ||||
|         self.async_after_callbacks.append((callback, args, kwargs)) | ||||
| 
 | ||||
|     def call_on_exception( | ||||
|         self, callback: Callable[P, object], *args: P.args, **kwargs: P.kwargs | ||||
|  | @ -331,8 +329,7 @@ class LoggingTransaction: | |||
|         # LoggingTransaction isn't expecting there to be any callbacks; assert that | ||||
|         # is not the case. | ||||
|         assert self.exception_callbacks is not None | ||||
|         # type-ignore: need mypy containing https://github.com/python/mypy/pull/12668 | ||||
|         self.exception_callbacks.append((callback, args, kwargs))  # type: ignore[arg-type] | ||||
|         self.exception_callbacks.append((callback, args, kwargs)) | ||||
| 
 | ||||
|     def fetchone(self) -> Optional[Tuple]: | ||||
|         return self.txn.fetchone() | ||||
|  | @ -421,10 +418,7 @@ class LoggingTransaction: | |||
|         sql = self.database_engine.convert_param_style(sql) | ||||
|         if args: | ||||
|             try: | ||||
|                 # The type-ignore should be redundant once mypy releases a version with | ||||
|                 # https://github.com/python/mypy/pull/12668. (`args` might be empty, | ||||
|                 # (but we'll catch the index error if so.) | ||||
|                 sql_logger.debug("[SQL values] {%s} %r", self.name, args[0])  # type: ignore[index] | ||||
|                 sql_logger.debug("[SQL values] {%s} %r", self.name, args[0]) | ||||
|             except Exception: | ||||
|                 # Don't let logging failures stop SQL from working | ||||
|                 pass | ||||
|  | @ -655,9 +649,7 @@ class DatabasePool: | |||
|         # For now, we just log an error, and hope that it works on the first attempt. | ||||
|         # TODO: raise an exception. | ||||
| 
 | ||||
|         # Type-ignore Mypy doesn't yet consider ParamSpec.args to be iterable; see | ||||
|         # https://github.com/python/mypy/pull/12668 | ||||
|         for i, arg in enumerate(args):  # type: ignore[arg-type, var-annotated] | ||||
|         for i, arg in enumerate(args): | ||||
|             if inspect.isgenerator(arg): | ||||
|                 logger.error( | ||||
|                     "Programming error: generator passed to new_transaction as " | ||||
|  | @ -665,9 +657,7 @@ class DatabasePool: | |||
|                     i, | ||||
|                     func, | ||||
|                 ) | ||||
|         # Type-ignore Mypy doesn't yet consider ParamSpec.args to be a mapping; see | ||||
|         # https://github.com/python/mypy/pull/12668 | ||||
|         for name, val in kwargs.items():  # type: ignore[attr-defined] | ||||
|         for name, val in kwargs.items(): | ||||
|             if inspect.isgenerator(val): | ||||
|                 logger.error( | ||||
|                     "Programming error: generator passed to new_transaction as " | ||||
|  |  | |||
|  | @ -641,7 +641,7 @@ class SearchStore(SearchBackgroundUpdateStore): | |||
|             raise Exception("Unrecognized database engine") | ||||
| 
 | ||||
|         # mypy expects to append only a `str`, not an `int` | ||||
|         args.append(limit)  # type: ignore[arg-type] | ||||
|         args.append(limit) | ||||
| 
 | ||||
|         results = await self.db_pool.execute( | ||||
|             "search_rooms", self.db_pool.cursor_to_dict, sql, *args | ||||
|  |  | |||
|  | @ -96,8 +96,12 @@ class MonthlyActiveUsersTestCase(unittest.HomeserverTestCase): | |||
| 
 | ||||
|         # Test each of the registered users is marked as active | ||||
|         timestamp = self.get_success(self.store.user_last_seen_monthly_active(user1)) | ||||
|         # Mypy notes that one shouldn't compare Optional[int] to 0 with assertGreater. | ||||
|         # Check that timestamp really is an int. | ||||
|         assert timestamp is not None | ||||
|         self.assertGreater(timestamp, 0) | ||||
|         timestamp = self.get_success(self.store.user_last_seen_monthly_active(user2)) | ||||
|         assert timestamp is not None | ||||
|         self.assertGreater(timestamp, 0) | ||||
| 
 | ||||
|         # Test that users with reserved 3pids are not removed from the MAU table | ||||
|  | @ -166,10 +170,11 @@ class MonthlyActiveUsersTestCase(unittest.HomeserverTestCase): | |||
|         self.get_success(self.store.upsert_monthly_active_user(user_id2)) | ||||
| 
 | ||||
|         result = self.get_success(self.store.user_last_seen_monthly_active(user_id1)) | ||||
|         assert result is not None | ||||
|         self.assertGreater(result, 0) | ||||
| 
 | ||||
|         result = self.get_success(self.store.user_last_seen_monthly_active(user_id3)) | ||||
|         self.assertNotEqual(result, 0) | ||||
|         self.assertIsNone(result) | ||||
| 
 | ||||
|     @override_config({"max_mau_value": 5}) | ||||
|     def test_reap_monthly_active_users(self): | ||||
|  |  | |||
|  | @ -270,9 +270,7 @@ class MockClock: | |||
|         *args: P.args, | ||||
|         **kwargs: P.kwargs, | ||||
|     ) -> None: | ||||
|         # This type-ignore should be redundant once we use a mypy release with | ||||
|         # https://github.com/python/mypy/pull/12668. | ||||
|         self.loopers.append(Looper(function, interval / 1000.0, self.now, args, kwargs))  # type: ignore[arg-type] | ||||
|         self.loopers.append(Looper(function, interval / 1000.0, self.now, args, kwargs)) | ||||
| 
 | ||||
|     def cancel_call_later(self, timer: Timer, ignore_errs: bool = False) -> None: | ||||
|         if timer.expired: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David Robertson
						David Robertson