python3 как хранить список хранилища в GCP AppEngine через python? - PullRequest
0 голосов
/ 14 апреля 2020

Я новичок в python и даже новичок в GCP Google Cloud App Engine. Я тестировал этот сценарий для перечисления моего хранилища, однако сценарий отвечает без вывода, даже без ошибки, также, когда я изменил имя сегмента на имя, которое не существует, я получил те же результаты, что странно. Я использую локальную ОС linux.

~/pit$ python main.py 
(env) ~/pit$ 

Вот скрипт> скопированный из google https://cloud.google.com/storage/docs/listing-objects#storage -list-objects- python

main .py>

from google.cloud import storage


def list_blobs(bucket_name):
    """Lists all the blobs in the bucket."""
    bucket_name = "pyton_test_bucket"

    storage_client = storage.Client()

    # Note: Client.list_blobs requires at least package version 1.17.0.
    blobs = storage_client.list_blobs(bucket_name)

    for blob in blobs:
        print(blob.name)

Другой вопрос, как реализовать эту команду списка в моем тестовом flask шаблоне индекса рендеринга? Моя цель состоит в том, чтобы отобразить объект списка в следующей строке после этого h1>My Fav show is {{ show }}</ В flask примере, показывающего только то, как отобразить 1 значение, поэтому я не знаю, как действовать здесь с Flask.

main.py

app = Flask(__name__)


@app.route('/')

def hello():
    tv_show="Test"
    return render_template("index.html", show=tv_show)


if __name__ == '__main__':
    # This is used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)
# [END gae_python37_app]

index. html>

<!doctype html>
<html>
<head>
  <title>Test</title>
</head>
<body>

        <h1>My Fav show is {{ show }}</h1>


</body>
</html>

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

ОК, допустим, я хочу немного упростить. Я пытался изменить приложение Hello, чтобы сделать список, без рендеринга шаблона, вот сценарий, что я делаю неправильно, пожалуйста?

from flask import Flask
from flask import render_template
from google.cloud import storage
import os


app = Flask(__name__)


def get_blobs(pyton_test_bucket):


    storage_client = storage.Client()

    blobs = storage_client.list_blobs(pyton_test_bucket)
    b = list()
    for blob in blobs:
      b.append(blob.name)

    return b

@app.route('/blobs/pyton_test_bucket')
def hello():
   return get_blobs(pyton_test_bucket))

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)
0 голосов
/ 14 апреля 2020

Я воспроизвел ваш вариант использования и развернул его в Google App Engine Standard

app.yaml

runtime: python37

handlers:

  - url: /static
    static_dir: template

  - url: /.*
    secure: always
    redirect_http_response_code: 301
    script: auto

requirements.txt

Flask==1.1.1
google-cloud-storage

main.py


from flask import Flask
from flask import render_template
from google.cloud import storage
import os

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = Flask(__name__)



def get_blobs(bucket_name):
    """Lists all the blobs in the bucket."""

    storage_client = storage.Client()
    # Note: Client.list_blobs requires at least package version 1.17.0.
    blobs = storage_client.list_blobs(bucket_name)
    b = list()
    for blob in blobs:
      b.append(blob.name)

    return b


@app.route('/blobs/<bucket_name>')
def hello(bucket_name):
    """Return a friendly HTTP greeting."""

    print ("Test {}".format(bucket_name))
    return render_template('index.html', blobs=get_blobs(bucket_name))


if __name__ == '__main__':
    # This is used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)
# [END gae_python37_app]

templates/index.html

<!doctype html>

<html>
<head>
<title>Test</title>
</head>

<body>
<h1>All the blobs </h1>
{% for blob in blobs %}
<p>{{ blob }}</p>
{% endfor %}
</body>
</html>

Для развертывания в App Engine:

  gcloud app deploy
  gcloud app browse
  #go to https://your_project.nw.r.appspot.com/blobs/your_bucket

enter image description here

To Для локального запуска этого приложения вам необходимо:

1. Создать учетную запись службы с ролью администратора хранилища

2. Установить учетные данные по умолчанию

...