old_contents: # ex: set expandtab softtabstop=4 shiftwidth=4: -*- cpy-indent-level: 4; indent-tabs-mode: nil -*-
  #
  # Copyright (C) 2008,2009,2010,2011  Contributor
  #
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the EU DataGrid Software License.  You should
  # have received a copy of the license with this program, and the
  # license is published at
  # http://eu-datagrid.web.cern.ch/eu-datagrid/license.html.
  #
  # THE FOLLOWING DISCLAIMER APPLIES TO ALL SOFTWARE CODE AND OTHER
  # MATERIALS CONTRIBUTED IN CONNECTION WITH THIS PROGRAM.
  #
  # THIS SOFTWARE IS LICENSED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  # FOR A PARTICULAR PURPOSE AND ANY WARRANTY OF NON-INFRINGEMENT, ARE
  # DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
  # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
  # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THIS
  # SOFTWARE MAY BE REDISTRIBUTED TO OTHERS ONLY BY EFFECTIVELY USING
  # THIS OR ANOTHER EQUIVALENT DISCLAIMER AS WELL AS ANY OTHER LICENSE
  # TERMS THAT MAY APPLY.
  """ Helpers for managing DNS-related objects """
  
  from sqlalchemy.orm import object_session
  
  from aquilon.aqdb.model import Fqdn, DnsRecord
  
  
  def delete_dns_record(dbdns_rec):
      """
      Delete a DNS record 
  
      Deleting a DNS record is a bit tricky because we do not want to keep
      orphaned FQDN entries.
      """
  
      session = object_session(dbdns_rec)
  
      # Lock the FQDN
      q = session.query(Fqdn)
      q = q.filter_by(id=dbdns_rec.fqdn_id)
      q = q.with_lockmode('update')
      dbfqdn = q.one()
  
      # Delete the DNS record
      session.delete(dbdns_rec)
      session.flush()
  
      # Delete the FQDN if it is orphaned
      q = session.query(DnsRecord)
      q = q.filter_by(fqdn_id=dbfqdn.id)
      if q.count() == 0:
          session.delete(dbfqdn)
      else:
          session.expire(dbfqdn, 'dns_records')
  
new_contents: # ex: set expandtab softtabstop=4 shiftwidth=4: -*- cpy-indent-level: 4; indent-tabs-mode: nil -*-
  #
  # Copyright (C) 2008,2009,2010,2011  Contributor
  #
  # This program is free software; you can redistribute it and/or modify
  # it under the terms of the EU DataGrid Software License.  You should
  # have received a copy of the license with this program, and the
  # license is published at
  # http://eu-datagrid.web.cern.ch/eu-datagrid/license.html.
  #
  # THE FOLLOWING DISCLAIMER APPLIES TO ALL SOFTWARE CODE AND OTHER
  # MATERIALS CONTRIBUTED IN CONNECTION WITH THIS PROGRAM.
  #
  # THIS SOFTWARE IS LICENSED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  # FOR A PARTICULAR PURPOSE AND ANY WARRANTY OF NON-INFRINGEMENT, ARE
  # DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
  # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
  # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THIS
  # SOFTWARE MAY BE REDISTRIBUTED TO OTHERS ONLY BY EFFECTIVELY USING
  # THIS OR ANOTHER EQUIVALENT DISCLAIMER AS WELL AS ANY OTHER LICENSE
  # TERMS THAT MAY APPLY.
  """ Helpers for managing DNS-related objects """
  
  from sqlalchemy.orm import object_session
  
  from aquilon.aqdb.model import Fqdn, DnsRecord
  
  
  def delete_dns_record(dbdns_rec):
      """
      Delete a DNS record 
  
      Deleting a DNS record is a bit tricky because we do not want to keep
      orphaned FQDN entries.
      """
  
      session = object_session(dbdns_rec)
  
      # Lock the FQDN
      q = session.query(Fqdn)
      q = q.filter_by(id=dbdns_rec.fqdn_id)
      q = q.with_lockmode('update')
      dbfqdn = q.one()
  
      # Delete the DNS record
      session.delete(dbdns_rec)
      session.flush()
  
      # Delete the FQDN if it is orphaned
      q = session.query(DnsRecord)
      q = q.filter_by(fqdn_id=dbfqdn.id)
      if q.count() == 0:
          session.delete(dbfqdn)
      else:
          session.expire(dbfqdn, ['dns_records'])
  
subject: Fix DNS information expiration