#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you 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.

application: sca-relay
version: 1
runtime: python
api_version: 1
skip_files:
- ^(.*/)?app\.yaml
- ^(.*/)?app\.yml
- ^(.*/)?index\.yaml
- ^(.*/)?index\.yml
- ^(.*/)?#.*#
- ^(.*/)?.*~
- ^(.*/)?.*\.py[co]
- ^(.*/)?.*/RCS/.*
- ^(.*/)?\..*
- ^(.*/)?.*-test$
- ^(.*/)?.*\.cpp$
- ^(.*/)?.*\.o$
- ^(.*/)?core$
- ^(.*/)?.*\.out$
- ^(.*/)?.*\.log$
- ^(.*/)?Makefile.*
- ^(.*/)?tmp/.*
- ^(.*/)?wsgi-start
- ^(.*/)?wsgi-stop

handlers:
- url: /(.*\.(html|png))
  static_files: htdocs/\1
  upload: htdocs/(.*\.(html|png))

- url: /.*
  script: composite.py

