1# -*- coding: utf-8 -*-
2
3"""
4***************************************************************************
5    edit.py
6    ---------------------
7    Date                 : May 2018
8    Copyright            : (C) 2018 by Denis Rouzaud
9    Email                : denis@opengis.ch
10***************************************************************************
11*                                                                         *
12*   This program is free software; you can redistribute it and/or modify  *
13*   it under the terms of the GNU General Public License as published by  *
14*   the Free Software Foundation; either version 2 of the License, or     *
15*   (at your option) any later version.                                   *
16*                                                                         *
17***************************************************************************
18"""
19
20from builtins import object
21
22
23class QgsEditError(Exception):
24
25    def __init__(self, value):
26        self.value = value
27
28    def __str__(self):
29        return repr(self.value)
30
31
32class edit(object):
33
34    def __init__(self, layer):
35        self.layer = layer
36
37    def __enter__(self):
38        assert self.layer.startEditing()
39        return self.layer
40
41    def __exit__(self, ex_type, ex_value, traceback):
42        if ex_type is None:
43            if not self.layer.commitChanges():
44                raise QgsEditError(self.layer.commitErrors())
45            return True
46        else:
47            self.layer.rollBack()
48            return False
49