Source code for aiida.orm.implementation.sqlalchemy.comment
# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved. #
# This file is part of the AiiDA code. #
# #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file #
# For further information please visit http://www.aiida.net #
###########################################################################
from aiida.backends.sqlalchemy.models.comment import DbComment
from aiida.orm.implementation.general.comment import AbstractComment
from aiida.common.exceptions import NotExistent, MultipleObjectsError
[docs]class Comment(AbstractComment):
[docs] def __init__(self, **kwargs):
# If no arguments are passed, then create a new DbComment
if not kwargs:
self.dbcomment = DbComment()
# If a DbComment is passed as argument. Just use it and
# wrap it with a Comment object
elif 'dbcomment' in kwargs:
# When a dbcomment is passed as argument, then no other arguments
# should be passed.
if len(kwargs) > 1:
raise ValueError("When a DbComment is passed as argument, no"
"further arguments are accepted.")
dbcomment = kwargs.pop('dbcomment')
if not isinstance(dbcomment, DbComment):
raise ValueError("Expected a DbComment. Object of a different"
"class was given as argument.")
self.dbcomment = dbcomment
else:
id = kwargs.pop('id', None)
if id is None:
id = kwargs.pop('pk', None)
user = kwargs.pop('user', None)
dbnode = kwargs.pop('dbnode', None)
# Constructing the default query
dbcomment_query = DbComment.query
# If an id is specified then we add it to the query
if id is not None:
dbcomment_query = dbcomment_query.filter_by(id=id)
# If a user is specified then we add it to the query
if user is not None:
dbcomment_query = dbcomment_query.filter_by(user=user)
# If a dbnode is specified then we add it to the query
if dbnode is not None:
dbcomment_query = dbcomment_query.filter_by(dbnode=dbnode)
ccount = dbcomment_query.count()
if ccount > 1:
raise MultipleObjectsError(
"The arguments that you specified were too vague. More "
"than one comments with this data were found in the "
"database")
elif ccount == 0:
raise NotExistent("No comments were found with the given "
"arguments")
self.dbcomment = dbcomment_query.first()
@property
def pk(self):
return self.dbcomment.id
@property
def id(self):
return self.dbcomment.id
@property
def to_be_stored(self):
return self.dbcomment.id is None
@property
def uuid(self):
return unicode(self.dbcomment.uuid)
[docs] def set_ctime(self, val):
self.dbcomment.ctime = val
if not self.to_be_stored:
self.dbcomment.save()
[docs] def set_mtime(self, val):
self.dbcomment.mtime = val
if not self.to_be_stored:
self.dbcomment.save()
[docs] def set_user(self, val):
self.dbcomment.user = val
if not self.to_be_stored:
self.dbcomment.save()
[docs] def set_content(self, val):
self.dbcomment.content = val
if not self.to_be_stored:
self.dbcomment.save()