def get_or_create(cls, session, dns_environment=None, preclude=False, ignore_name_check=False, query_options=None, **kwargs): fqdn = cls.get_unique(session, dns_environment=dns_environment, query_options=query_options, **kwargs) if fqdn: if preclude: _raise_custom(preclude, ArgumentError, "{0} already exists.".format(fqdn)) return fqdn if not isinstance(dns_environment, DnsEnvironment): dns_environment = DnsEnvironment.get_unique_or_default( session, dns_environment) fqdn = cls(session=session, dns_environment=dns_environment, ignore_name_check=ignore_name_check, **kwargs) session.add(fqdn) return fqdn
def get_or_create(cls, session, dns_environment=None, preclude=False, ignore_name_check=False, query_options=None, **kwargs): fqdn = cls.get_unique(session, dns_environment=dns_environment, query_options=query_options, **kwargs) if fqdn: if preclude: _raise_custom(preclude, ArgumentError, "{0} already exists.".format(fqdn)) return fqdn if not isinstance(dns_environment, DnsEnvironment): dns_environment = DnsEnvironment.get_unique_or_default(session, dns_environment) fqdn = cls(session=session, dns_environment=dns_environment, ignore_name_check=ignore_name_check, **kwargs) session.add(fqdn) return fqdn
def get_unique(cls, session, feature=None, archetype=None, personality=None, model=None, interface_name=None, compel=False, preclude=False): if feature is None: # pragma: no cover raise ValueError("Feature must be specified.") q = session.query(cls) q = q.filter_by(feature=feature, archetype=archetype, personality=personality, model=model, interface_name=interface_name) try: result = q.one() if preclude: msg = "{0} is already bound to {1}.".format(feature, _error_msg(archetype, personality, model, interface_name)) _raise_custom(preclude, ArgumentError, msg) except NoResultFound: if not compel: return None msg = "{0} is not bound to {1}.".format(feature, _error_msg(archetype, personality, model, interface_name)) _raise_custom(compel, NotFoundException, msg) return result