Source code for sparsify.models.projects_model

# Copyright (c) 2021 - present / Neuralmagic, Inc. All Rights Reserved.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an "AS IS" BASIS,
# See the License for the specific language governing permissions and
# limitations under the License.

DB model classes for a project's model file

import datetime
import logging
import os
import uuid

from peewee import CharField, DateTimeField, ForeignKeyField, TextField
from playhouse.sqlite_ext import JSONField

from sparseml.utils import create_dirs
from import Job
from sparsify.models.projects import PROJECTS_DIR_NAME, BaseProjectModel, Project

__all__ = ["ProjectModel", "PROJECTS_MODEL_DIR_NAME"]

_LOGGER = logging.getLogger(__name__)

[docs]class ProjectModel(BaseProjectModel): """ DB model for a project's model file. A project must have only one model file stored in the DB. """ model_id = CharField(primary_key=True, default=lambda: uuid.uuid4().hex) project = ForeignKeyField( Project, unique=True, backref="models", on_delete="CASCADE" ) created = DateTimeField( source = TextField(null=True, default=None) job = ForeignKeyField(Job, null=True, default=None) file = TextField(null=True, default=None) analysis = JSONField(null=True, default=None) @property def dir_path(self) -> str: """ :return: the local directory path for where the model file is stored """ project_id = self.project_id # type: str return os.path.join(, PROJECTS_DIR_NAME, project_id, PROJECTS_MODEL_DIR_NAME, ) @property def file_path(self) -> str: """ :return: the local file path to the data file """ file_name = self.file # type: str return os.path.join(self.dir_path, file_name)
[docs] def setup_filesystem(self): """ Setup the local file system so that it can be used with the data """ create_dirs(self.dir_path)
[docs] def validate_filesystem(self): """ Validate that the local file system and expected files are correct and exist """ if not os.path.exists(self.dir_path): raise FileNotFoundError( "project model directory at {} does not exist anymore".format( self.dir_path ) ) if self.file and not os.path.exists(self.file_path): raise FileNotFoundError( "project model file at {} does not exist anymore".format(self.file_path) )
[docs] def delete_filesystem(self): """ Delete the model file from the local file system """ if self.file: os.remove(self.file_path)