# -*- coding: utf-8 -*-

# 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.

# This is a template with common files to be igonored, after clone make a copy to .gitignore
# cp .gitignore-common .gitignore

*.pyc
*.pyo

#auto-ignore
.gitignore

#logs
logs 

#pycharm
.idea

#eclipse
.project     
.pydevproject
.settings

#local stuff files that end in ".local" or folders called "local"
*.local
osm_common/local
osm_common/test/local

#local stuff files that end in ".temp" or folders called "temp"
*.temp
osm_common/temp
osm_common/test/temp

#distribution and package generation
build
dist
*.egg-info
*.egg-info
.eggs

