Exemplo n.º 1
0
def changeset(request, changesetId):
    include_discussion = request.GET.get('include_discussion',
                                         'false') == "true"

    if request.method == 'GET':
        t = p.GetTransaction("ACCESS SHARE")
    else:
        t = p.GetTransaction("EXCLUSIVE")

    changesetData = pgmap.PgChangeset()
    errStr = pgmap.PgMapError()
    ret = t.GetChangeset(int(changesetId), changesetData, errStr)
    if ret == -1:
        return HttpResponseNotFound("Changeset not found")
    if ret == 0:
        return HttpResponseServerError(errStr.errStr)

    if request.method == 'GET':
        t.Commit()

        return SerializeChangesets([changesetData], include_discussion)

    if request.method == 'PUT':

        if request.user.id != changesetData.uid:
            return HttpResponse("This changeset belongs to a different user",
                                status=409,
                                content_type="text/plain")

        if not changesetData.is_open:
            err = "The changeset {} was closed at {}.".format(
                changesetData.objId,
                datetime.datetime.fromtimestamp(
                    changesetData.close_timestamp).isoformat())
            response = HttpResponse(err, content_type="text/plain")
            response.status_code = 409
            return response

        unicodeTags = {}
        csIn = request.data.find("changeset")
        for tag in csIn.findall("tag"):
            unicodeTags[tag.attrib["k"]] = tag.attrib["v"]
        if not CheckTags(unicodeTags):
            return HttpResponseBadRequest("Invalid tags")

        changesetData.tags = pgmap.mapstringstring()
        for tag in unicodeTags:
            changesetData.tags[tag] = unicodeTags[tag]

        ok = t.UpdateChangeset(changesetData, errStr)
        if not ok:
            t.Abort()
            return HttpResponseServerError(errStr.errStr)

        t.Commit()

        return SerializeChangesets([changesetData])
Exemplo n.º 2
0
def list_changesets(request):
    bbox = request.GET.get('bbox', None)  #min_lon,min_lat,max_lon,max_lat
    user_uid = int(request.GET.get('user', 0))
    display_name = request.GET.get('display_name', None)
    timearg = request.GET.get('time', None)
    openarg = request.GET.get('open', None)
    close = request.GET.get('closed', None)
    changesetsToGet = request.GET.get('changesets', None)

    #Check display_name or uid actually exists
    if display_name is not None:
        try:
            user = User.objects.get(username=display_name)
            user_uid = user.id
        except ObjectDoesNotExist:
            try:
                user = LegacyAccount.objects.get(username=display_name)
                user_uid = user.uid
            except ObjectDoesNotExist:
                return HttpResponseNotFound("User not found")

    changesets = pgmap.vectorchangeset()
    errStr = pgmap.PgMapError()
    t = p.GetTransaction("ACCESS SHARE")
    ok = t.GetChangesets(changesets, int(user_uid), errStr)

    t.Commit()

    changesetLi = []
    for i in range(len(changesets)):
        changesetLi.append(changesets[i])
    return SerializeChangesets(changesetLi)
Exemplo n.º 3
0
def close(request, changesetId):
    t = p.GetTransaction("EXCLUSIVE")

    changesetData = pgmap.PgChangeset()
    errStr = pgmap.PgMapError()
    ret = t.GetChangeset(int(changesetId), changesetData, errStr)
    if ret == -1:
        return HttpResponseNotFound("Changeset not found")
    if ret == 0:
        return HttpResponseServerError(errStr.errStr)

    if not changesetData.is_open:
        err = "The changeset {} was closed at {}.".format(
            changesetData.objId,
            datetime.datetime.fromtimestamp(
                changesetData.close_timestamp).isoformat())
        response = HttpResponse(err, content_type="text/plain")
        response.status_code = 409
        return response

    if request.user.id != changesetData.uid:
        return HttpResponse("This changeset belongs to a different user",
                            status=409,
                            content_type="text/plain")

    t.CloseChangeset(int(changesetId), int(time.time()), errStr)
    t.Commit()

    return SerializeChangesets([changesetData])
Exemplo n.º 4
0
def getoscdiff(timebase, cat1, cat2, cat3):

    timenow = int(time.time())
    epochts = int(time.mktime(settings.REPLICATE_EPOCH.timetuple()))

    if timebase == "minute":
        pageStep = 60000000
    if timebase == "hour":
        pageStep = 60000000 * 60
    if timebase == "day":
        pageStep = 60000000 * 60 * 24

    pageStep2 = pageStep // 1000
    pageStep3 = pageStep2 // 1000

    pageStartTimestamp = (
        int(cat1) - settings.REPLICATE_OFFSET
    ) * pageStep + int(cat2) * pageStep2 + int(cat3) * pageStep3 + epochts
    elapsedInPage = timenow - pageStartTimestamp
    if elapsedInPage < 0:
        return HttpResponseNotFound("Page does not exist")

    t = p.GetTransaction("EXCLUSIVE")
    osmc = pgmap.OsmChange()
    t.GetReplicateDiff(pageStartTimestamp - pageStep3, pageStartTimestamp,
                       osmc)

    sio = io.BytesIO()
    pgmap.SaveToOsmChangeXml(osmc, False, pgmap.CPyOutbuf(sio))
    return sio.getvalue()
Exemplo n.º 5
0
    def test_expand_bbox(self):
        cs = CreateTestChangeset(self.user)

        response = self.client.post(reverse('changeset:expand_bbox',
                                            args=(cs.objId, )),
                                    self.expandBboxXml,
                                    content_type='text/xml')
        self.assertEqual(response.status_code, 200)

        t = p.GetTransaction("ACCESS SHARE")
        cs2 = pgmap.PgChangeset()
        errStr = pgmap.PgMapError()
        t.GetChangeset(cs.objId, cs2, errStr)

        self.assertEqual(cs2.bbox_set, True)
        self.assertEqual(abs(cs2.y1 - 50.2964626834) < 1e-5, True)
        self.assertEqual(abs(cs2.y2 - 51.7985258134) < 1e-5, True)
        self.assertEqual(abs(cs2.x1 + 5.24880409375) < 1e-5, True)
        self.assertEqual(abs(cs2.x2 + 3.08999061719) < 1e-5, True)

        xml = fromstring(response.content)
        self.assertEqual(xml.tag, "osm")
        csout = xml.find("changeset")
        self.assertEqual(int(csout.attrib["id"]) == cs.objId, True)
        self.assertEqual(
            abs(float(csout.attrib["min_lat"]) - 50.2964626834) < 1e-5, True)
        self.assertEqual(
            abs(float(csout.attrib["max_lat"]) - 51.7985258134) < 1e-5, True)
        self.assertEqual(
            abs(float(csout.attrib["min_lon"]) + 5.24880409375) < 1e-5, True)
        self.assertEqual(
            abs(float(csout.attrib["max_lon"]) + 3.08999061719) < 1e-5, True)

        t.Commit()
Exemplo n.º 6
0
    def test_close_changeset_double_close(self):
        cs = CreateTestChangeset(self.user)

        response = self.client.put(
            reverse('changeset:close', args=(cs.objId, )))
        self.assertEqual(response.status_code, 200)

        t = p.GetTransaction("ACCESS SHARE")
        cs2 = pgmap.PgChangeset()
        errStr = pgmap.PgMapError()
        ret = t.GetChangeset(cs.objId, cs2, errStr)
        t.Commit()

        self.assertEqual(cs2.is_open, False)

        response = self.client.put(
            reverse('changeset:close', args=(cs.objId, )))
        self.assertEqual(response.status_code, 409)

        self.assertEqual(
            response.content.decode("UTF-8"),
            "The changeset {} was closed at {}.".format(
                cs2.objId,
                datetime.datetime.fromtimestamp(
                    cs2.close_timestamp).isoformat()))
Exemplo n.º 7
0
def create_relation(uid, username, refs, changeset=1000):

    relation = pgmap.OsmRelation()
    relation.objId = -1
    relation.metaData.version = 1
    relation.metaData.timestamp = 0
    relation.metaData.changeset = changeset
    relation.metaData.uid = uid
    relation.metaData.username = username
    relation.metaData.visible = True
    relation.tags["test"] = "moon"
    for refTypeStr, refId, refRole in refs:
        relation.refTypeStrs.append(refTypeStr)
        relation.refIds.append(refId)
        relation.refRoles.append(refRole)

    data = pgmap.OsmData()
    data.relations.append(relation)

    createdNodeIds = pgmap.mapi64i64()
    createdWayIds = pgmap.mapi64i64()
    createdRelationIds = pgmap.mapi64i64()
    errStr = pgmap.PgMapError()

    t = p.GetTransaction("EXCLUSIVE")
    ok = t.StoreObjects(data, createdNodeIds, createdWayIds,
                        createdRelationIds, False, errStr)
    if not ok:
        t.Abort()
        print(errStr.errStr)
        return None
    else:
        t.Commit()
    relation.objId = createdRelationIds[-1]
    return relation
Exemplo n.º 8
0
def modify_way(wayIn, refsIn, tagsIn, user, timestamp = None):
	way = pgmap.OsmWay()
	way.objId = wayIn.objId
	way.metaData.version = wayIn.metaData.version + 1
	if timestamp is None:
		way.metaData.timestamp = int(time.time())
	else:
		way.metaData.timestamp = int(timestamp)
	way.metaData.changeset = 1000
	way.metaData.uid = user.id
	way.metaData.username = user.username
	way.metaData.visible = True
	for k in tagsIn:
		way.tags[k] = tagsIn[k]
	for ref in refsIn:
		way.refs.append(ref)

	data = pgmap.OsmData()
	data.ways.append(way)

	createdNodeIds = pgmap.mapi64i64()
	createdWayIds = pgmap.mapi64i64()
	createdRelationIds = pgmap.mapi64i64()
	errStr = pgmap.PgMapError()

	t = p.GetTransaction("EXCLUSIVE")
	ok = t.StoreObjects(data, createdNodeIds, createdWayIds, createdRelationIds, False, errStr)
	if not ok:
		t.Abort()
		print (errStr.errStr)
	else:
		t.Commit()
	return ok, way
Exemplo n.º 9
0
def getoscdiff(timebase, cat1, cat2, cat3):

    timenow = int(time.time())
    epochts = int(time.mktime(settings.REPLICATE_EPOCH.timetuple()))

    if timebase == "minute":
        pageStep = 60000000
    if timebase == "hour":
        pageStep = 60000000 * 60
    if timebase == "day":
        pageStep = 60000000 * 60 * 24

    pageStep2 = pageStep / 1000
    pageStep3 = pageStep2 / 1000

    pageStartTimestamp = int(cat1) * pageStep + int(cat2) * pageStep2 + int(
        cat3) * pageStep3 + epochts
    elapsedInPage = timenow - pageStartTimestamp
    if elapsedInPage < 0:
        return HttpResponseNotFound("Page does not exist")

    t = p.GetTransaction("ACCESS SHARE")
    osmData = pgmap.OsmData()
    t.GetReplicateDiff(pageStartTimestamp - pageStep3, pageStartTimestamp,
                       osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return sio.getvalue()
Exemplo n.º 10
0
def create_way(uid, username, refs, changeset = 1000, timestamp = None):

	way = pgmap.OsmWay()
	way.objId = -1
	way.metaData.version = 1
	if timestamp is None:
		way.metaData.timestamp = int(time.time())
	else:
		way.metaData.timestamp = int(timestamp)
	way.metaData.changeset = changeset
	way.metaData.uid = uid
	way.metaData.username = username
	way.metaData.visible = True
	way.tags["test"] = "spring"
	for ref in refs:
		way.refs.append(ref)

	data = pgmap.OsmData()
	data.ways.append(way)

	createdNodeIds = pgmap.mapi64i64()
	createdWayIds = pgmap.mapi64i64()
	createdRelationIds = pgmap.mapi64i64()
	errStr = pgmap.PgMapError()

	t = p.GetTransaction("EXCLUSIVE")
	ok = t.StoreObjects(data, createdNodeIds, createdWayIds, createdRelationIds, False, errStr)
	if not ok:
		t.Abort()
		print (errStr.errStr)
		return None
	else:
		t.Commit()
	way.objId = createdWayIds[-1]
	return way
Exemplo n.º 11
0
def modify_relation(uid, username, relationIn, refsIn, tagsIn):
	relation = pgmap.OsmRelation()
	relation.objId = relationIn.objId
	relation.metaData.version = relationIn.metaData.version + 1
	relation.metaData.timestamp = int(time.time())
	relation.metaData.changeset = 1000
	relation.metaData.uid = uid
	relation.metaData.username = username
	relation.metaData.visible = True
	for k in tagsIn:
		relation.tags[k] = tagsIn[k]
	for refTypeStr, refId, refRole in refsIn:
		relation.refTypeStrs.append(refTypeStr)
		relation.refIds.append(refId)
		relation.refRoles.append(refRole)

	data = pgmap.OsmData()
	data.relations.append(relation)

	createdNodeIds = pgmap.mapi64i64()
	createdWayIds = pgmap.mapi64i64()
	createdRelationIds = pgmap.mapi64i64()
	errStr = pgmap.PgMapError()

	t = p.GetTransaction("EXCLUSIVE")
	ok = t.StoreObjects(data, createdNodeIds, createdWayIds, createdRelationIds, False, errStr)
	if not ok:
		t.Abort()
		print (errStr.errStr)
		return None
	else:
		t.Commit()
	return relation
Exemplo n.º 12
0
def modify_node(nodeIn, nodeCurrentVer, user, timestamp = None):
	node = pgmap.OsmNode()
	node.objId = nodeIn.objId
	node.metaData.version = nodeCurrentVer + 1
	if timestamp is None:
		node.metaData.timestamp = int(time.time())
	else:
		node.metaData.timestamp = int(timestamp)
	node.metaData.changeset = 1000
	node.metaData.uid = user.id
	node.metaData.username = user.username
	node.metaData.visible = True
	node.tags["test"] = "winter"
	node.lat = nodeIn.lat + 0.1
	node.lon = nodeIn.lon + 0.2

	data = pgmap.OsmData()
	data.nodes.append(node)

	createdNodeIds = pgmap.mapi64i64()
	createdWayIds = pgmap.mapi64i64()
	createdRelationIds = pgmap.mapi64i64()
	errStr = pgmap.PgMapError()

	t = p.GetTransaction("EXCLUSIVE")
	ok = t.StoreObjects(data, createdNodeIds, createdWayIds, createdRelationIds, False, errStr)
	if not ok:
		t.Abort()
		print (errStr.errStr)
	else:
		t.Commit()
	return ok, node
Exemplo n.º 13
0
def CreateTestChangeset(user, tags=None, is_open=True, bbox=None):
    if tags is None:
        tags = {'foo': 'bar'}
    t = p.GetTransaction("EXCLUSIVE")
    cs = pgmap.PgChangeset()
    errStr = pgmap.PgMapError()
    for k in tags:
        cs.tags[k] = tags[k]
    cs.username = user.username
    cs.uid = user.id
    cs.is_open = is_open
    cs.open_timestamp = int(time.time())
    if not is_open:
        cs.close_timestamp = int(time.time())
    if bbox is not None:
        cs.bbox_set = True
        cs.x1 = bbox[0]
        cs.y1 = bbox[1]
        cs.x2 = bbox[2]
        cs.y2 = bbox[3]
    cid = t.CreateChangeset(cs, errStr)
    cs.objId = cid
    t.Commit()
    del t
    return cs
Exemplo n.º 14
0
def create(request):

    userRecord = request.user

    changeset = pgmap.PgChangeset()
    errStr = pgmap.PgMapError()

    unicodeTags = {}
    csIn = request.data.find("changeset")
    for tag in csIn.findall("tag"):
        unicodeTags[tag.attrib["k"]] = tag.attrib["v"]
    if not CheckTags(unicodeTags):
        return HttpResponseBadRequest("Invalid tags")

    for tag in unicodeTags:
        changeset.tags[tag] = unicodeTags[tag]
    changeset.uid = request.user.id
    changeset.username = request.user.username

    t = p.GetTransaction("EXCLUSIVE")

    changeset.open_timestamp = int(time.time())

    cid = t.CreateChangeset(changeset, errStr)
    if cid == 0:
        t.Abort()
        return HttpResponseServerError(errStr.errStr)

    t.Commit()
    return HttpResponse(cid, content_type='text/plain')
Exemplo n.º 15
0
    def handle(self, *args, **options):
        t = p.GetTransaction("ACCESS SHARE")
        errStr = pgmap.PgMapError()

        value = t.GetMetaValue(options['key'][0].encode('utf-8'), errStr)

        t.Commit()

        self.stdout.write(self.style.SUCCESS('All done! ' + value))
Exemplo n.º 16
0
def upload(request, changesetId):

    #Check changeset is open and for this user
    t = p.GetTransaction("EXCLUSIVE")

    changesetData = pgmap.PgChangeset()
    errStr = pgmap.PgMapError()
    ret = t.GetChangeset(int(changesetId), changesetData, errStr)
    if ret == -1:
        return HttpResponseNotFound("Changeset not found")
    if ret == 0:
        return HttpResponseServerError(errStr.errStr)

    if not changesetData.is_open:
        err = "The changeset {} was closed at {}.".format(
            changesetData.id, changesetData.close_datetime.isoformat())
        response = HttpResponse(err, content_type="text/plain")
        response.status_code = 409
        return response

    if request.user.id != changesetData.uid:
        return HttpResponse("This changeset belongs to a different user",
                            status=409,
                            content_type="text/plain")

    #Prepare diff result xml
    responseRoot = ET.Element('diffResult')
    doc = ET.ElementTree(responseRoot)
    responseRoot.attrib["version"] = str(settings.API_VERSION)
    responseRoot.attrib["generator"] = settings.GENERATOR

    createdNodeIds = pgmap.mapi64i64()
    createdWayIds = pgmap.mapi64i64()
    createdRelationIds = pgmap.mapi64i64()

    for i in range(request.data.blocks.size()):
        action = request.data.actions[i]
        block = request.data.blocks[i]
        ifunused = request.data.ifunused[i]
        timestamp = time.time()

        ret = upload_block(action, block, changesetId, t, responseRoot,
                           request.user.id, request.user.username, timestamp,
                           createdNodeIds, createdWayIds, createdRelationIds,
                           ifunused)
        if ret != True:
            print(ret)
            return ret

    t.Commit()

    sio = io.BytesIO()
    doc.write(
        sio,
        str("UTF-8"))  # str work around https://bugs.python.org/issue15811
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 17
0
def changeset(request, changesetId):
	t = p.GetTransaction("ACCESS SHARE")

	changeset = pgmap.PgChangeset()
	errStr = pgmap.PgMapError()
	ok = t.GetChangeset(int(changesetId), changeset, errStr)

	t.Commit()

	return render(request, 'objectinfo/changeset.html', {'changeset': changeset})
Exemplo n.º 18
0
    def tearDown(self):
        u = User.objects.get(username=self.username)
        u.delete()

        errStr = pgmap.PgMapError()
        t = p.GetTransaction("EXCLUSIVE")
        ok = t.ResetActiveTables(errStr)
        if not ok:
            print(errStr.errStr)
        t.Commit()
Exemplo n.º 19
0
def object_history(request, objType, objId):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    t.GetObjectsHistoryById(objType, [int(objId)], osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 20
0
def relations_for_obj(request, objType, objId):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    t.GetRelationsForObjs(objType.encode("UTF-8"), [int(objId)], osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 21
0
def ways_for_node(request, objType, objId):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    t.GetWaysForNodes([int(objId)], osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 22
0
def object_version(request, objType, objId, objVer):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    idVerPair = pgmap.pairi64i64(int(objId), int(objVer))
    t.GetObjectsByIdVer(objType, [idVerPair], osmData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 23
0
def get_affected_from_upload(request):

    t = p.GetTransaction("ACCESS SHARE")

    affectedData = pgmap.OsmData()
    t.GetAffectedObjects(request.data, affectedData)

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio)
    affectedData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 24
0
 def get_test_changeset(self, cid):
     t = p.GetTransaction("ACCESS SHARE")
     cs2 = pgmap.PgChangeset()
     errStr = pgmap.PgMapError()
     ret = t.GetChangeset(cid, cs2, errStr)
     t.Commit()
     if ret == 0:
         print(errStr)
     self.assertEqual(ret != 0, True)
     if ret == -1:
         raise KeyError("Changeset not found")
     return cs2
Exemplo n.º 25
0
    def handle(self, *args, **options):
        t = p.GetTransaction("EXCLUSIVE")
        errStr = pgmap.PgMapError()

        ok = t.SetMetaValue(options['key'][0].encode('utf-8'),
                            options['value'][0].encode('utf-8'), errStr)
        if not ok:
            t.Abort()
            raise CommandError(errStr.errStr)

        t.Commit()
        self.stdout.write(self.style.SUCCESS('All done!'))
Exemplo n.º 26
0
def index(request):
	t = p.GetTransaction("ACCESS SHARE")

	errStr = pgmap.PgMapError()
	value = int(t.GetMetaValue("readonly", errStr))
	dbStatus = "OK"
	if value != 0:
		dbStatus = "Read only"

	t.Commit()

	return render(request, 'frontpage/index.html', {'db_status': dbStatus})
Exemplo n.º 27
0
def create(request, objType):
    t = p.GetTransaction("EXCLUSIVE")

    obj = None
    if objType == "node": obj = request.data.nodes[0]
    if objType == "way": obj = request.data.ways[0]
    if objType == "relation": obj = request.data.relations[0]

    ret = upload_single_object("created", request, obj, objType, t)
    if ret != True:
        return ret

    return HttpResponse("", content_type='text/plain')
Exemplo n.º 28
0
def object_history(request, objType, objId):
    t = p.GetTransaction("ACCESS SHARE")

    osmData = pgmap.OsmData()
    t.GetObjectsHistoryById(objType, [int(objId)], osmData)

    if len(osmData.nodes) + len(osmData.ways) + len(osmData.relations) == 0:
        return HttpResponseNotFound("{} {} not found".format(objType, objId))

    sio = io.BytesIO()
    enc = pgmap.PyOsmXmlEncode(sio, common.xmlAttribs)
    osmData.StreamTo(enc)
    return HttpResponse(sio.getvalue(), content_type='text/xml')
Exemplo n.º 29
0
	def test_close_changeset(self):
		cs = CreateTestChangeset(self.user)

		response = self.client.put(reverse('changeset:close', args=(cs.objId,)))
		self.assertEqual(response.status_code, 200)

		t = p.GetTransaction("ACCESS SHARE")
		cs2 = pgmap.PgChangeset()
		errStr = pgmap.PgMapError()
		ret = t.GetChangeset(cs.objId, cs2, errStr)
		t.Commit()
		self.assertEqual(ret != 0, True)
		self.assertEqual(cs2.is_open, False)
Exemplo n.º 30
0
    def handle(self, *args, **options):
        t = p.GetTransaction("EXCLUSIVE")
        errStr = pgmap.PgMapError()

        whereBeforeTimestamp = int(time.time()) - (24 * 60 * 60)
        closedTimestamp = int(time.time())

        value = t.CloseChangesetsOlderThan(whereBeforeTimestamp,
                                           closedTimestamp, errStr)

        t.Commit()

        self.stdout.write(self.style.SUCCESS('All done!'))