def update(self, file_path=None, height=None, width=None, duration=None, **kwargs): if kwargs.pop('clear_fee', False): self.message.ClearField('fee') else: self.fee.update(kwargs.pop('fee_address', None), kwargs.pop('fee_currency', None), kwargs.pop('fee_amount', None)) self.none_check(kwargs) if 'sd_hash' in kwargs: self.source.sd_hash = kwargs.pop('sd_hash') elif 'bt_infohash' in kwargs: self.source.bt_infohash = kwargs.pop('bt_infohash') if 'file_name' in kwargs: self.source.name = kwargs.pop('file_name') if 'file_hash' in kwargs: self.source.file_hash = kwargs.pop('file_hash') stream_type = None if file_path is not None: stream_type = self.source.update(file_path=file_path) elif self.source.name: self.source.media_type, stream_type = guess_media_type( self.source.name) elif self.source.media_type: stream_type = guess_stream_type(self.source.media_type) if 'file_size' in kwargs: self.source.size = kwargs.pop('file_size') if self.stream_type is not None and self.stream_type != stream_type: self.message.ClearField(self.stream_type) if stream_type in ('image', 'video', 'audio'): media = getattr(self, stream_type) media_args = {'file_metadata': None} if file_path is not None and not all((duration, width, height)): try: media_args['file_metadata'] = binary_file_metadata( binary_file_parser(file_path)) except: log.exception('Could not read file metadata.') if isinstance(media, Playable): media_args['duration'] = duration if isinstance(media, Dimmensional): media_args['height'] = height media_args['width'] = width media.update(**media_args) super().update(**kwargs)
def test_spoofed_known(self): with tempfile.TemporaryDirectory() as temp_dir: file = os.path.join(temp_dir, 'spoofed_known.avi') with open(file, 'wb') as fd: bytes_zip = bytearray([0x50, 0x4b, 0x03, 0x06]) fd.write(bytes_zip) fd.close() kind = guess_media_type(file) self.assertEqual(kind, ('application/zip', 'binary'))
def test_spoofed_unknown(self): with tempfile.TemporaryDirectory() as temp_dir: file = os.path.join(temp_dir, 'spoofed_unknown.txt') with open(file, 'wb') as fd: bytes_lz4 = bytearray([0x04, 0x22, 0x4d, 0x18]) fd.write(bytes_lz4) fd.close() kind = guess_media_type(file) self.assertEqual(kind, ('application/x-ext-lz4', 'binary'))
def update(self, file_path=None): if file_path is not None: self.name = os.path.basename(file_path) self.media_type, stream_type = guess_media_type(file_path) if not os.path.isfile(file_path): raise Exception(f"File does not exist: {file_path}") self.size = os.path.getsize(file_path) if self.size == 0: raise Exception(f"Cannot publish empty file: {file_path}") self.file_hash_bytes = calculate_sha384_file_hash(file_path) return stream_type
def update(self, file_path=None): if file_path is not None: self.name = os.path.basename(file_path) self.media_type, stream_type = guess_media_type(file_path) if not os.path.isfile(file_path): raise MissingPublishedFileError(file_path) self.size = os.path.getsize(file_path) if self.size == 0: raise EmptyPublishedFileError(file_path) self.file_hash_bytes = calculate_sha384_file_hash(file_path) return stream_type
def mime_type(self): return guess_media_type( os.path.basename(self.descriptor.suggested_file_name))[0]
def test_guess_media_type_from_path_only(self): kind = guess_media_type('/tmp/test.mkv') self.assertEqual(kind, ('video/x-matroska', 'video'))
def test_defaults_for_unknown_extension(self): kind = guess_media_type('/tmp/test.unk') self.assertEqual(kind, ('application/x-ext-unk', 'binary'))
def test_defaults_for_no_extension(self): kind = guess_media_type('/tmp/test') self.assertEqual(kind, ('application/octet-stream', 'binary'))
def test_mp4_video(self): self.assertEqual("video/mp4", mime_types.guess_media_type("test.mp4")[0]) self.assertEqual("video/mp4", mime_types.guess_media_type("test.MP4")[0])
def test_octet_stream(self): self.assertEqual("application/octet-stream", mime_types.guess_media_type("test.")[0]) self.assertEqual("application/octet-stream", mime_types.guess_media_type("test")[0])
def test_x_ext_(self): self.assertEqual("application/x-ext-lbry", mime_types.guess_media_type("test.lbry")[0]) self.assertEqual("application/x-ext-lbry", mime_types.guess_media_type("test.LBRY")[0])