Я занимаюсь созданием веб-приложения, которое использует инфраструктуру webapp2 и размещено на Google App Engine. Поэтому для запуска веб-приложения на LOCALHOST я использую следующую команду.
dev_appserver.py app.yaml
Сценарий python, который я пытаюсь запустить, находится в той же папке проекта, когда он выполняется, я получаю следующую ошибку.
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\remote_api\remote_api_stub.py", line 256, in _MakeRealSyncCall
raise pickle.loads(response_pb.exception())
RuntimeError: NotImplementedError()
Понятия не имею, почему он показывает эту ошибку. Я попытался посмотреть на документацию по Python.
исключение NotImplementedError:
Это исключение происходит от RuntimeError. В определяемых пользователем базовых классах абстрактные методы должны вызывать это исключение, когда им требуется, чтобы производные классы переопределяли метод, или когда класс разрабатывается, чтобы указать, что реальная реализация все еще должна быть добавлена.
https://docs.python.org/3/library/exceptions.html#NotImplementedError
Будучи новичком в программировании, к сожалению, для меня это не имеет смысла.
Возможно, я получаю эту ошибку из-за:
1.Приложение работает на другом сервере, и я пытаюсь запустить скрипт на моем ПК. Но у загруженной демонстрации также есть некоторые скрипты на python, которые выполняются нажатием кнопки на html-странице, и они работают нормально.
- Сценарий, который я пытаюсь выполнить, использует веб-драйвер селена, он может конфликтовать с каркасом webapp2.
Я не уверен, почему это происходит. Любые предложения, пожалуйста. Спасибо!
UPDATE
полный возврат
Traceback (most recent call last):
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\api_server.py", line 375, in _handle_POST
api_response = _execute_request(request).Encode()
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\api_server.py", line 231, in _execute_request
make_request()
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\api_server.py", line 226, in make_request
request_id)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub.py", line 151, in MakeSyncCall
method(request, response)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\remote_socket\_remote_socket_stub.py", line 234, in _Dynamic_Listen
raise NotImplementedError()
NotImplementedError
Views.py
from handlers.api_handler import APIHandler
from handlers.ndb_handler import InitUser
import webapp2
import os
from google.appengine.ext.webapp import template
class Google_Login(webapp2.RequestHandler):
def post(self):
template_values = {
'back_msg': 'View Campaigns'
}
try:
app_user = InitUser()
handler = APIHandler(app_user.client_id,
app_user.client_secret,
app_user.refresh_token,
app_user.adwords_manager_cid,
app_user.developer_token)
handler.google_log()
self.redirect('/showCampaigns?clientCustomerId=%s''{{ccid}}')
except Exception as e:
template_values['error'] = str(e)
# Use template to write output to the page.
path = os.path.join(os.path.dirname(__file__),
'../templates/base_template.html')
self.response.out.write(template.render(path, template_values))
Api_handler.py (где используется веб-драйвер селена)
def google_log(self):
browser=webdriver.Firefox(executable_path=r'C:\Users\JASPREET\geckodriver.exe')
browser.maximize_window()
browser.get("https://accounts.google.com/ServiceLogin/identifier?continue=https%3A%2F%2Fadwords.google.com%2Fum%2Fidentity%3Fhl%3Den%26sourceid%3Dawo%26subid%3Dca-en-ha-g-aw-c-dr_df_1-b_ex!o2~-1340701349-261603328952-kwd-1329939046%26utm_campaign%3Dca-ww-di-g-aw-a-awhp_1!o2&hl=en&service=adwords&skipvpage=true<mpl=signin&flowName=GlifWebSignIn&flowEntry=AddSession")
username=browser.find_element_by_css_selector('#identifierId')
username.send_keys('#EMAIL')
next=browser.find_element_by_css_selector('#identifierNext').click()
time.sleep(1)
password= browser.find_element_by_xpath("//input[@name='password']")
password.send_keys('#PASSWORD')
login=browser.find_element_by_xpath('//*[@id="passwordNext"]')
login.click()
time.sleep(3)
browser.get('path to scripts')
time.sleep(7)
run=browser.find_element_by_xpath('/html/body/div[2]/root/div/div[1]/div[3]/awsm-child-content/div[2]/div/bulk-root/base-root/div[2]/div[1]/view-loader/script-editor-view/script-editor/div/buttonbar/pending-panel/div/div/material-button[2]').click()
time.sleep(2)
run_two=browser.find_element_by_xpath('/html/body/div[4]/div[2]/material-dialog/focus-trap/div[2]/div/footer/div/material-button[2]').click()
ФАЙЛ HTML, где я вызываю скрипт python для выполнения"FB" - это имя представления, которое ссылается на обработчик API и вызывает скрипт.
<div class="">
<form action="/fb?clientCustomerId = {{ccid}}" method="post">
<input type="submit" name="" value="RUN">
</form>
</div>
ОБНОВЛЕНИЕ 2
app.yaml
runtime: python27
api_version: 1
threadsafe: false
handlers:
- url: /stylesheets
static_dir: stylesheets
- url: /js
static_dir: js
- url: /.*
script: demo.main.app
login: required
secure: always
libraries:
- name: ssl
version: latest
MAIN.PY
"""App Engine application module.
Configures the web application that will display the AdWords UI.
"""
from demo import DEBUG
from views import AddAdGroup
from views import AddCampaign
from views import InitView
from views import ShowAccounts
from views import ShowAdGroups
from views import ShowBudget
from views import ShowCampaigns
from views import ShowCredentials
from views import UpdateBudget
from views import UpdateCredentials
from views import ShowPage
from views import ShowKeywords
from views import NonServing
from views import Google_Login
import webapp2
app = webapp2.WSGIApplication([('/', InitView),
('/showCredentials', ShowCredentials),
('/updateCredentials', UpdateCredentials),
('/showAccounts', ShowAccounts),
('/showCampaigns', ShowCampaigns),
('/addCampaign', AddCampaign),
('/showAdGroups', ShowAdGroups),
('/addAdGroup', AddAdGroup),
('/showBudget', ShowBudget),
('/updateBudget', UpdateBudget),
('/nonservingpause', NonServing),
('/keywords', ShowKeywords),
('/fb', Google_Login),
],
debug=DEBUG)