from schrodinger.application.livedesign import login
from schrodinger.application.livedesign.live_report_widget import LiveReportType
PROJ_IDS = [login.GLOBAL_PROJECT_ID, '1', '2']
DEFAULT_PROJ_ID = PROJ_IDS[1]
[docs]class MockNameAndID:
[docs]    def __init__(self, name=None, id_=None):
        super().__init__()
        self._name = name
        self.id = id_ 
    @property
    def name(self):
        return self._name 
[docs]class MockLDProject(MockNameAndID):
[docs]    def __init__(self, name=None, id_=DEFAULT_PROJ_ID):
        super().__init__(name, id_)  
[docs]class MockFolder(MockNameAndID):
[docs]    def __init__(self, name=None, id_=None, project_id=DEFAULT_PROJ_ID):
        super().__init__(name, id_)
        self.project_id = project_id  
[docs]class MockLiveReport:
[docs]    def __init__(self,
                 title=None,
                 template=None,
                 owner=None,
                 tags=None,
                 id_=None,
                 project_id=DEFAULT_PROJ_ID,
                 lr_type=LiveReportType.COMPOUND):
        super().__init__()
        self.title = title
        self.template = template
        self.owner = owner
        if tags is None:
            tags = []
        self.tags = tags
        self.id = id_
        self.project_id = project_id
        self.type = lr_type  
[docs]class MockLDModels:
    """
    Mock the `ld_models` module; treat classes as methods that return new mock
    instances of the corresponding class.
    """
[docs]    def LiveReport(self,
                   title=None,
                   owner=None,
                   tags=None,
                   id_=None,
                   project_id=DEFAULT_PROJ_ID):
        return MockLiveReport(title=title,
                              owner=owner,
                              tags=tags,
                              id_=id_,
                              project_id=project_id)  
[docs]class Column:
    """
    A class meant to mock the relevant attributes of
    `ldclient.models.Column`.
    """
[docs]    def __init__(self,
                 id=None,
                 name=None,
                 column_type=None,
                 value_type=None,
                 log_scale=None,
                 project_ids=None,
                 folder_name=None):
        self.id = id
        self.name = name
        self.column_type = column_type
        self.value_type = value_type
        self.log_scale = log_scale
        self.project_ids = project_ids
        self.folder_name = folder_name  
[docs]class Model(BaseModel):
    """
    A class to mock the relevant attributes of `models.Model`.
    """
[docs]    def __init__(self,
                 name,
                 archived,
                 published,
                 user,
                 folder,
                 returns,
                 project_ids,
                 template_vars,
                 description,
                 parent=None,
                 commands=None,
                 batch_size=None,
                 command_type=None,
                 command_queue=None,
                 created_at=None,
                 updated_at=None,
                 id=None):
        self.id = id
        self.parent = parent
        self.name = name
        self.archived = archived
        self.published = published
        self.user = user
        self.created_at = created_at
        self.updated_at = updated_at
        self.folder = folder
        self.returns = returns
        self.template_vars = template_vars
        self.batch_size = batch_size
        self.description = description
        self.command_type = command_type
        self.command_queue = command_queue
        self.commands = [] if not commands else commands
        self.project_ids = project_ids or [login.GLOBAL_PROJECT_ID]  
[docs]class ModelRecursive(BaseModel):
    """
    A class to mock the relevant attributes of `models.ModelRecursive`.
    """
[docs]    def __init__(self, tag, value=None):
        self.tag = tag
        self.value = value  
[docs]class ModelTemplateVar:
    """
    Mock of `models.ModelTemplateVar`, "a binding of a variable in a command".
    """
[docs]    def __init__(self, tag, type, name, data=None, id=None):
        self.id = id
        self.tag = tag
        self.type = type
        self.name = name
        self.data = data  
[docs]class AsyncServiceTaskFailedError(Exception):
    pass