예제 #1
0
파일: config.py 프로젝트: lkykor77/matorage
    def _check_bucket(self):
        """
        Check bucket name is exist. If not exist, create new bucket
        If bucket and metadata sub folder exist, get metadata(attributes, compressor) from there.

        Returns:
            :obj: `None`:
        """
        _client = (
            Minio(
                self.endpoint,
                access_key=self.access_key,
                secret_key=self.secret_key,
                secure=self.secure,
            )
            if not check_nas(self.endpoint)
            else NAS(self.endpoint)
        )
        if _client.bucket_exists(self.bucket_name):
            try:
                _metadata = _client.get_object(self.bucket_name, "metadata.json")
            except:
                _client.remove_bucket(self.bucket_name)
                raise FileNotFoundError(
                    "metadata.json is not in bucket name {}"
                    ", So this bucket will be removed".format(self.bucket_name)
                )

            metadata_dict = json.loads(_metadata.read().decode("utf-8"))
            if self.endpoint != metadata_dict["endpoint"]:
                raise ValueError(
                    "Already created endpoint({}) doesn't current endpoint str({})"
                    " It may occurs permission denied error".format(
                        metadata_dict["endpoint"], self.endpoint
                    )
                )

            self.compressor = metadata_dict["compressor"]
            self.metadata = metadata_dict
        else:
            logger.warn(
                "{} {} is not exist!".format(self.optimizer_name, str(self.additional))
            )
예제 #2
0
    def _check_bucket(self):
        """
        Check bucket name is exist. If not exist, create new bucket
        If bucket and metadata sub folder exist, get metadata(attributes, compressor) from there.

        Returns:
            :obj: `None`:
        """
        _client = (Minio(
            self.endpoint,
            access_key=self.access_key,
            secret_key=self.secret_key,
            secure=self.secure,
        ) if not check_nas(self.endpoint) else NAS(self.endpoint))
        if _client.bucket_exists(self.bucket_name):
            objects = _client.list_objects(self.bucket_name,
                                           prefix="metadata/")
            _metadata = None
            for obj in objects:
                _metadata = _client.get_object(self.bucket_name,
                                               obj.object_name)
                break
            if not _metadata:
                return

            metadata_dict = json.loads(_metadata.read().decode("utf-8"))
            if self.endpoint != metadata_dict["endpoint"]:
                raise ValueError(
                    "Already created endpoint({}) doesn't current endpoint str({})"
                    " It may occurs permission denied error".format(
                        metadata_dict["endpoint"], self.endpoint))

            self.compressor = metadata_dict["compressor"]
            self.attributes = [
                DataAttribute(**item) for item in metadata_dict["attributes"]
            ]
        else:
            logger.warn("{} {} is not exist!".format(self.dataset_name,
                                                     str(self.additional)))
예제 #3
0
    def save(self, model, **kwargs):
        if not self._client.bucket_exists(self.config.bucket_name):
            self._client.make_bucket(self.config.bucket_name)

        if not isinstance(kwargs, dict):
            metadata = 0
        else:
            metadata = kwargs

        model_folder = self._hashmap_transfer(metadata)

        if model_folder in self.config.metadata["model"]:
            logger.warn(
                "{} {} is already exist, so model will be overwrited.".format(
                    self.config.model_name, str(self.config.additional)
                )
            )
            self._save_with_clear(model_folder, model, overwrite=True)
        else:
            self.config.metadata["model"].update({model_folder: metadata})
            self._save_with_clear(model_folder, model)

        logger.info("model with {} is saved".format(str(metadata)))
예제 #4
0
    def save(self, optimizer):
        if not self._client.bucket_exists(self.config.bucket_name):
            self._client.make_bucket(self.config.bucket_name)

        step = self._get_step(optimizer)
        if not step:
            logger.error("{} {} step({})is not exist".format(
                self.config.optimizer_name, self.config.additional, str(step)))
            return

        if step in self.config.metadata["optimizer"]:
            logger.warn(
                "{} {} is already exist, so optimizer will be overwrited.".
                format(self.config.optimizer_name,
                       str(self.config.additional)))
            self._save_with_clear(step, optimizer, overwrite=True)
        else:
            self._set_metadata(metadata=self.config.metadata,
                               optimizer=optimizer,
                               step=step)
            self._save_with_clear(step, optimizer)

        logger.info("optimizer with {} is saved".format(str(step)))