def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None: media_resource = hs.get_media_repository_resource() self.download_resource = media_resource.children[b"download"] self.thumbnail_resource = media_resource.children[b"thumbnail"] self.store = hs.get_datastores().main self.media_repo = hs.get_media_repository() self.media_id = "example.com/12345"
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None: self.remote_server_name = "remote.homeserver" self.store = hs.get_datastores().main # Create a user to upload media with test_user_id = self.register_user("alice", "password") # Inject media (recently accessed, old access, never accessed, old access # quarantined media) into both the local store and the remote cache, plus # one additional local media that is marked as protected from quarantine. media_repository = hs.get_media_repository() test_media_content = b"example string" def _create_media_and_set_attributes( last_accessed_ms: Optional[int], is_quarantined: Optional[bool] = False, is_protected: Optional[bool] = False, ) -> str: # "Upload" some media to the local media store mxc_uri = self.get_success( media_repository.create_content( media_type="text/plain", upload_name=None, content=io.BytesIO(test_media_content), content_length=len(test_media_content), auth_user=UserID.from_string(test_user_id), ) ) media_id = mxc_uri.split("/")[-1] # Set the last recently accessed time for this media if last_accessed_ms is not None: self.get_success( self.store.update_cached_last_access_time( local_media=(media_id,), remote_media=(), time_ms=last_accessed_ms, ) ) if is_quarantined: # Mark this media as quarantined self.get_success( self.store.quarantine_media_by_id( server_name=self.hs.config.server.server_name, media_id=media_id, quarantined_by="@theadmin:test", ) ) if is_protected: # Mark this media as protected from quarantine self.get_success( self.store.mark_local_media_as_safe( media_id=media_id, safe=True, ) ) return media_id def _cache_remote_media_and_set_attributes( media_id: str, last_accessed_ms: Optional[int], is_quarantined: Optional[bool] = False, ) -> str: # Pretend to cache some remote media self.get_success( self.store.store_cached_remote_media( origin=self.remote_server_name, media_id=media_id, media_type="text/plain", media_length=1, time_now_ms=clock.time_msec(), upload_name="testfile.txt", filesystem_id="abcdefg12345", ) ) # Set the last recently accessed time for this media if last_accessed_ms is not None: self.get_success( hs.get_datastores().main.update_cached_last_access_time( local_media=(), remote_media=((self.remote_server_name, media_id),), time_ms=last_accessed_ms, ) ) if is_quarantined: # Mark this media as quarantined self.get_success( self.store.quarantine_media_by_id( server_name=self.remote_server_name, media_id=media_id, quarantined_by="@theadmin:test", ) ) return media_id # Start with the local media store self.local_recently_accessed_media = _create_media_and_set_attributes( last_accessed_ms=self.THIRTY_DAYS_IN_MS, ) self.local_not_recently_accessed_media = _create_media_and_set_attributes( last_accessed_ms=self.ONE_DAY_IN_MS, ) self.local_not_recently_accessed_quarantined_media = ( _create_media_and_set_attributes( last_accessed_ms=self.ONE_DAY_IN_MS, is_quarantined=True, ) ) self.local_not_recently_accessed_protected_media = ( _create_media_and_set_attributes( last_accessed_ms=self.ONE_DAY_IN_MS, is_protected=True, ) ) self.local_never_accessed_media = _create_media_and_set_attributes( last_accessed_ms=None, ) # And now the remote media store self.remote_recently_accessed_media = _cache_remote_media_and_set_attributes( media_id="a", last_accessed_ms=self.THIRTY_DAYS_IN_MS, ) self.remote_not_recently_accessed_media = ( _cache_remote_media_and_set_attributes( media_id="b", last_accessed_ms=self.ONE_DAY_IN_MS, ) ) self.remote_not_recently_accessed_quarantined_media = ( _cache_remote_media_and_set_attributes( media_id="c", last_accessed_ms=self.ONE_DAY_IN_MS, is_quarantined=True, ) )