Ejemplo n.º 1
0
 def __init__(self,
              cid: Union[py_cid.CIDv0, py_cid.CIDv1],
              priority: int = 1):
     if not py_cid.is_cid(str(cid)):
         raise ValueError(f"{cid} is not a valid cid")
     self._ref_count: int = 1
     self.cid = cid
     self.priority = priority
Ejemplo n.º 2
0
 def __init__(self,
              cid: Union[py_cid.CIDv0, py_cid.CIDv1],
              cancel: bool,
              priority: int = 1):
     if not py_cid.is_cid(str(cid)):
         raise ValueError(f"{cid} is not a valid cid")
     self.entry = WantListEntry(cid, priority)
     self.cancel = bool(cancel)
Ejemplo n.º 3
0
 def add_entry(self,
               cid: Union[py_cid.CIDv0, py_cid.CIDv1],
               cancel: bool,
               priority: int = 1):
     cid_str = str(cid)
     if not py_cid.is_cid(cid_str):
         raise ValueError(f"{cid} is not a valid cid")
     entry = self.want_list.get(cid_str)
     if entry is not None:
         entry.priority = priority  # TODO: why
         entry.cancel = cancel  # TODO: why
     else:
         self.want_list[cid_str] = MessageEntry(cid, cancel, priority)
Ejemplo n.º 4
0
    def __init__(self, data, cid: Union[py_cid.CIDv0, py_cid.CIDv1]):
        """
        Represents an immutable block of data that is uniquely referenced with a cid.

        :param data: An object supporting the

        :param cid: A cid
        """
        try:
            memoryview(data)
        except TypeError:
            raise ValueError("Data must be an object supporting the buffer protocol.")
        if not py_cid.is_cid(str(cid)):
            raise ValueError(f"{cid} is not a valid cid")
        self._data = data
        self._cid = cid
Ejemplo n.º 5
0
def fetch_resources(resource, get_dir=lambda x: '', get_index=lambda x: 'index'):
    """
    Generic fetch process for resources
    :param resource:
    :param get_dir:
    :param get_index:
    :return:
    """

    if cid.is_cid(resource['route']):
        resource['abs'] = True
        return resource

    # If index defined keep using it else get index from param function
    resource['index'] = resource['index'] if 'index' in resource else get_index(resource)
    resource_dir = get_dir(resource)  # Process dir from param function
    download_file(resource['route'], resource_dir)
Ejemplo n.º 6
0
def fetch_movie_resources(mv, current_dir) -> dict:
    """
    Check if resources need to be downloaded and download it
    :param mv: MovieSchema dict
    :param current_dir: Storage dir
    :return: MovieSchema dict
    """
    for video in mv['resource']['videos']:
        if cid.is_cid(video['route']):
            video['abs'] = True
            continue

        video['index'] = video['index'] if 'index' in video else 'index'
        resource_dir = '%s/%s/%s' % (current_dir, video['quality'],
                                     video['index'])
        download_file(video['route'], resource_dir)
    return mv
Ejemplo n.º 7
0
def fetch_images_resources(mv, current_dir) -> dict:
    """
    Check if images need to be downloaded and download it
    :param mv: MovieSchema dict
    :param current_dir: Storage dir
    :return: MovieScheme dict
    """

    for _, image in mv['resource']['images'].items():
        # Check for valid cid
        if cid.is_cid(image['route']):
            image['abs'] = True
            continue

        image['index'] = image[
            'index'] if 'index' in image else os.path.basename(image['route'])
        download_file(image['route'], "%s/%s" % (current_dir, image['index']))
    return mv
Ejemplo n.º 8
0
    def is_valid_ipfs(self):
        """
        Returns true if the URI is a valid IPFS address.

        i.e. '/ipfs/{some valid multihash}'
        https://docs.ipfs.io/guides/concepts/cid/
        only string (ASCII/UTF-8) CIDs are supported
        https://github.com/ipld/py-cid is required library
        """
        # CIDv0 - multihash
        if not isinstance(self.value, str):
            return False
        if self.value.startswith('/ipfs/'):
            normalized_value = self.value[len('/ipfs/'):]
        else:
            normalized_value = self.value
        try:
            return is_cid(normalized_value)
        except Exception:
            return False
Ejemplo n.º 9
0
 def test_is_cid_valid(self, test_hash):
     assert is_cid(CIDv0(test_hash).encode())
Ejemplo n.º 10
0
 def test_is_cid_invalid(self, test_data):
     assert not is_cid(test_data)
Ejemplo n.º 11
0
 def test_is_cidv1_valid(self, test_cidv1):
     assert is_cid(test_cidv1)
     assert is_cid(make_cid(test_cidv1).encode())
Ejemplo n.º 12
0
 def test_make_cid(self, hash):
     is_cid(hash)
Ejemplo n.º 13
0
 def test_is_cidv0_valid(self, test_cidv0):
     assert is_cid(test_cidv0)
     assert is_cid(make_cid(test_cidv0).encode())
Ejemplo n.º 14
0
 def validate_route(self, value):
     if not cid.is_cid(value) and not validators.url(value):
         raise ValidationError('Route must be a CID or URI')
Ejemplo n.º 15
0
 def cancel(self, cid: Union[py_cid.CIDv0, py_cid.CIDv1]):
     cid_str = str(cid)
     if not py_cid.is_cid(cid_str):
         raise ValueError(f"{cid} is not a valid cid")
     del self.want_list[cid_str]
     self.add_entry(cid, cancel=True, priority=0)