imposm.parser / imposm / parser / xml / util.py

# Copyright 2011 Omniscale GmbH & Co. KG
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import with_statement
from xml.etree import cElementTree as ET
from contextlib import contextmanager

def iterparse(fileobj):
    """
    Return root object and iterparser for given ``fileobj``. 
    """
    context = ET.iterparse(fileobj, events=("start", "end"))
    context = iter(context)
    _event, root = context.next()
    return root, context

@contextmanager
def log_file_on_exception(xml):
    try:
        yield
    except SyntaxError, ex:
        import tempfile
        fd_, filename = tempfile.mkstemp('.osm')
        xml.seek(0)
        with open(filename, 'w') as f:
            f.write(xml.read())
        print 'SyntaxError in xml: %s, (stored dump %s)' % (ex, filename)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.