import traceback

from flask import flash
from sqlalchemy.exc import InternalError

from pycroft.helpers import AutoNumber
from pycroft.model import session

from pycroft.lib.net import MacExistsException, SubnetFullException
from pycroft.model.host import MulticastFlagException
from pycroft.model.types import InvalidMACAddressException


def web_execute(function, success_message, *args, **kwargs):
    try:
        result = function(*args, **kwargs)

        if success_message:
            flash(success_message, 'success')

        return result, True
    except MacExistsException:
        flash("Die MAC-Adresse ist bereits in Verwendung.", 'error')

        session.session.rollback()
    except SubnetFullException:
        flash("Das IP-Subnetz ist voll.", 'error')

        session.session.rollback()
    except MulticastFlagException:
        flash("Die MAC-Adresse enthält ein aktives Multicast-Bit.", 'error')

        session.session.rollback()
    except InvalidMACAddressException:
        flash("Die MAC-Adresse ist ungültig.", 'error')

        session.session.rollback()
    except InternalError as e:
        # Special case: Username already taken in Abe
        # Should be removed after migration
        if "Username already taken in Abe!" in str(e):
            flash("Dieser Benutzername wird bereits in Abe verwendet.", 'error')

            session.session.rollback()
        else:
            raise e
    except Exception as e:
        traceback.print_exc()
        flash("Es ist ein unerwarteter Fehler aufgetreten: {}".format(e), "error")

    session.session.rollback()

    return None, False

import traceback

from flask import flash

from pycroft.lib.net import MacExistsException, SubnetFullException
from pycroft.model import session
from pycroft.model.host import MulticastFlagException
from pycroft.model.types import InvalidMACAddressException


def web_execute(function, success_message, *args, **kwargs):
    try:
        result = function(*args, **kwargs)

        if success_message:
            flash(success_message, 'success')

        return result, True
    except MacExistsException:
        flash("Die MAC-Adresse ist bereits in Verwendung.", 'error')

        session.session.rollback()
    except SubnetFullException:
        flash("Das IP-Subnetz ist voll.", 'error')

        session.session.rollback()
    except MulticastFlagException:
        flash("Die MAC-Adresse enthält ein aktives Multicast-Bit.", 'error')

        session.session.rollback()
    except InvalidMACAddressException:
        flash("Die MAC-Adresse ist ungültig.", 'error')

        session.session.rollback()
    except Exception as e:
        traceback.print_exc()
        flash("Es ist ein unerwarteter Fehler aufgetreten: {}".format(e), "error")

    session.session.rollback()

    return None, False

Remove “username taken in abe” handling
Remove “username taken in abe” handling

  import traceback
  
  from flask import flash
- from sqlalchemy.exc import InternalError
- 
- from pycroft.helpers import AutoNumber
- from pycroft.model import session
  
  from pycroft.lib.net import MacExistsException, SubnetFullException
+ from pycroft.model import session
  from pycroft.model.host import MulticastFlagException
  from pycroft.model.types import InvalidMACAddressException
  
  
  def web_execute(function, success_message, *args, **kwargs):
      try:
          result = function(*args, **kwargs)
  
          if success_message:
              flash(success_message, 'success')
  
          return result, True
      except MacExistsException:
          flash("Die MAC-Adresse ist bereits in Verwendung.", 'error')
  
          session.session.rollback()
      except SubnetFullException:
          flash("Das IP-Subnetz ist voll.", 'error')
  
          session.session.rollback()
      except MulticastFlagException:
          flash("Die MAC-Adresse enthält ein aktives Multicast-Bit.", 'error')
  
          session.session.rollback()
      except InvalidMACAddressException:
          flash("Die MAC-Adresse ist ungültig.", 'error')
  
          session.session.rollback()
-     except InternalError as e:
-         # Special case: Username already taken in Abe
-         # Should be removed after migration
-         if "Username already taken in Abe!" in str(e):
-             flash("Dieser Benutzername wird bereits in Abe verwendet.", 'error')
- 
-             session.session.rollback()
-         else:
-             raise e
      except Exception as e:
          traceback.print_exc()
          flash("Es ist ein unerwarteter Fehler aufgetreten: {}".format(e), "error")
  
      session.session.rollback()
  
      return None, False
  
Remove “username taken in abe” handling
## Code Before:
import traceback

from flask import flash
from sqlalchemy.exc import InternalError

from pycroft.helpers import AutoNumber
from pycroft.model import session

from pycroft.lib.net import MacExistsException, SubnetFullException
from pycroft.model.host import MulticastFlagException
from pycroft.model.types import InvalidMACAddressException


def web_execute(function, success_message, *args, **kwargs):
    try:
        result = function(*args, **kwargs)

        if success_message:
            flash(success_message, 'success')

        return result, True
    except MacExistsException:
        flash("Die MAC-Adresse ist bereits in Verwendung.", 'error')

        session.session.rollback()
    except SubnetFullException:
        flash("Das IP-Subnetz ist voll.", 'error')

        session.session.rollback()
    except MulticastFlagException:
        flash("Die MAC-Adresse enthält ein aktives Multicast-Bit.", 'error')

        session.session.rollback()
    except InvalidMACAddressException:
        flash("Die MAC-Adresse ist ungültig.", 'error')

        session.session.rollback()
    except InternalError as e:
        # Special case: Username already taken in Abe
        # Should be removed after migration
        if "Username already taken in Abe!" in str(e):
            flash("Dieser Benutzername wird bereits in Abe verwendet.", 'error')

            session.session.rollback()
        else:
            raise e
    except Exception as e:
        traceback.print_exc()
        flash("Es ist ein unerwarteter Fehler aufgetreten: {}".format(e), "error")

    session.session.rollback()

    return None, False

## Instruction:
Remove “username taken in abe” handling
## Code After:
import traceback

from flask import flash

from pycroft.lib.net import MacExistsException, SubnetFullException
from pycroft.model import session
from pycroft.model.host import MulticastFlagException
from pycroft.model.types import InvalidMACAddressException


def web_execute(function, success_message, *args, **kwargs):
    try:
        result = function(*args, **kwargs)

        if success_message:
            flash(success_message, 'success')

        return result, True
    except MacExistsException:
        flash("Die MAC-Adresse ist bereits in Verwendung.", 'error')

        session.session.rollback()
    except SubnetFullException:
        flash("Das IP-Subnetz ist voll.", 'error')

        session.session.rollback()
    except MulticastFlagException:
        flash("Die MAC-Adresse enthält ein aktives Multicast-Bit.", 'error')

        session.session.rollback()
    except InvalidMACAddressException:
        flash("Die MAC-Adresse ist ungültig.", 'error')

        session.session.rollback()
    except Exception as e:
        traceback.print_exc()
        flash("Es ist ein unerwarteter Fehler aufgetreten: {}".format(e), "error")

    session.session.rollback()

    return None, False
