Exemple #1
0
    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)
Exemple #2
0
    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'))
Exemple #3
0
    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'))
Exemple #4
0
 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
Exemple #5
0
 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
Exemple #6
0
 def mime_type(self):
     return guess_media_type(
         os.path.basename(self.descriptor.suggested_file_name))[0]
Exemple #7
0
 def test_guess_media_type_from_path_only(self):
     kind = guess_media_type('/tmp/test.mkv')
     self.assertEqual(kind, ('video/x-matroska', 'video'))
Exemple #8
0
 def test_defaults_for_unknown_extension(self):
     kind = guess_media_type('/tmp/test.unk')
     self.assertEqual(kind, ('application/x-ext-unk', 'binary'))
Exemple #9
0
 def test_defaults_for_no_extension(self):
     kind = guess_media_type('/tmp/test')
     self.assertEqual(kind, ('application/octet-stream', 'binary'))
Exemple #10
0
 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])
Exemple #11
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])
Exemple #12
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])