Я создаю веб-приложение на основе Flask со стандартной средой GAE Python 2.7. Когда я пытаюсь импортировать Animal Model из файла application / __ init__py и других файлов, App Engine SDK вызывает DuplicatePropertyError.
DuplicatePropertyError: Class AnimalKind already has property animal_set
.
├── README.md
├── requirements.txt
├── src
│ ├── app.yaml
│ ├── application
│ │ ├── __init__.py
│ │ ├── animal_bp
│ │ │ ├── __init__.py
│ │ │ └── views.py
│ │ ├── appengine_config.py
│ │ ├── main.py
│ │ ├── models
│ │ │ ├── __init__.py
│ │ │ ├── base_models.py
│ │ │ ├── common_models.py
│ │ │ └── kind_models.py
│ │ └── settings.py
│ ├── index.yaml
│ ├── lib
app.yaml
service: default
runtime: python27
api_version: 1
threadsafe: true
instance_class: F1
builtins:
- appstats: on
- remote_api: on
libraries:
- name: ssl
version: latest
inbound_services:
- warmup
# [START handlers]
handlers:
- url: /static
static_dir: static
- url: .*
script: run.application.app
# script: main.app
secure: always
# [END handlers]
run.py
# -*- coding: utf-8 -*-
import os
import sys
sys.path.insert(1, os.path.join(os.path.abspath('.'), 'lib'))
sys.path.insert(1, os.path.join(os.path.abspath('.'), 'application'))
import application
application / init .py
# -*- coding: utf-8 -*-
import os
from flask import Flask, g, request, session
from werkzeug.debug import DebuggedApplication
from animal_bp.views import animal_bp
from models.common_models import Animal
def create_app():
app = Flask(__name__)
app.config.from_object('application.settings.Local')
app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True)
app.register_blueprint(animal_bp)
return app
app = create_app()
application / models / common_models.py
from google.appengine.ext import db
from models.kind_models import AnimalKind
class Animal(db.Model):
"""
Animal Model
"""
animal_kind_name = db.ReferenceProperty(AnimalKind)
application / models / kind_models. py
from google.appengine.ext import db
class AnimalKind(db.Model):
"""
Kind Model
"""
name = db.StringProperty(required=True)
application / animal_bp / views.py
from flask import Blueprint
from models.common_models import Animal
animal_bp = Blueprint('animal_bp', __name__)
@animal_bp.route('/')
def hello():
return 'Hello world1'
Например, если я удаляю "из файла models.common_models import Animal" в animal_bp / views.py. ошибка не возникает. Конечно, когда я удаляю «из файла models.common_models import Animal» из файла приложения / init .py, ошибка не возникает.
У меня нет дублирующего свойства, но возможно инициализация Процесс запускается дважды из-за моей структуры каталогов. Извините за такой длинный вопрос, но любая помощь будет приветствоваться !!