hub: implement atproto-commit task handler, other misc setup

pull/640/head
Ryan Barrett 2023-09-09 14:01:29 -07:00
rodzic efcd2d89b4
commit bd7cfa20f6
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 6BE31FDF4776E9D4
3 zmienionych plików z 30 dodań i 38 usunięć

2
app.py
Wyświetl plik

@ -6,7 +6,7 @@ registered.
from flask_app import app
# import all modules to register their Flask handlers
import activitypub, convert, follow, pages, redirect, superfeedr, ui, webfinger, web
import activitypub, atproto, convert, follow, pages, redirect, superfeedr, ui, webfinger, web
import models
models.reset_protocol_properties()

Wyświetl plik

@ -1,7 +1,9 @@
"""Flask config.
"""Flask config and env vars.
https://flask.palletsprojects.com/en/latest/config/
"""
import os
from oauth_dropins.webutil import appengine_info, util
# This is primarily for flashed messages, since we don't use session data
@ -21,3 +23,7 @@ else:
ENV = 'production'
CACHE_TYPE = 'SimpleCache'
SECRET_KEY = util.read('flask_secret_key')
os.environ.setdefault('APPVIEW_HOST', 'api.bsky-sandbox.dev')
os.environ.setdefault('BGS_HOST', 'bgs.bsky-sandbox.dev')
os.environ.setdefault('PLC_HOST', 'plc.bsky-sandbox.dev')

58
hub.py
Wyświetl plik

@ -6,9 +6,10 @@ import os
from pathlib import Path
import arroba.server
from arroba.datastore_storage import DatastoreStorage
from arroba.util import service_jwt
from arroba import xrpc_sync
from flask import Flask
from flask import Flask, request
import google.cloud.logging
import lexrpc.server
import lexrpc.flask_server
@ -27,23 +28,6 @@ util.set_user_agent(USER_AGENT)
logger = logging.getLogger(__name__)
# #
# # App Engine config
# #
# if appengine_info.LOCAL:
# logger.info('Running locally')
# # creds = os.environ.get('GOOGLE_APPLICATION_CREDENTIALS')
# # assert not creds or creds.endswith('fake_user_account.json')
# # os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = \
# # os.path.join(os.path.dirname(__file__), 'fake_user_account.json')
# # os.environ.setdefault('CLOUDSDK_CORE_PROJECT', 'app')
# # os.environ.setdefault('DATASTORE_DATASET', 'app')
# # os.environ.setdefault('GOOGLE_CLOUD_PROJECT', 'app')
# # os.environ.setdefault('DATASTORE_EMULATOR_HOST', 'localhost:8089')
# else:
# logger.info('Running against production GAE')
#
# Flask app
#
@ -64,11 +48,11 @@ app.wsgi_app = flask_util.ndb_context_middleware(
@app.get('/liveness_check')
@app.get('/readiness_check')
def health_check():
"""App Engine Flex health checks.
"""App Engine Flex health checks.
https://cloud.google.com/appengine/docs/flexible/reference/app-yaml?tab=python#updated_health_checks
"""
return 'OK'
https://cloud.google.com/appengine/docs/flexible/reference/app-yaml?tab=python#updated_health_checks
"""
return 'OK'
#
@ -77,17 +61,19 @@ def health_check():
lexrpc.flask_server.init_flask(arroba.server.server, app)
# # requestCrawl in prod
# # not working because the BGS immediately tries to connect and errors if it can't,
# # and evidently we're not quite serving subscribeRepos here yet. not sure why not.
# if is_prod:
# url = f'https://{os.environ["BGS_HOST"]}/xrpc/com.atproto.sync.requestCrawl'
# logger.info(f'Fetching {url}')
# jwt = service_jwt(os.environ['BGS_HOST'], TODO repo did, TODO repo key)
# resp = requests.get(url, params={'hostname': os.environ['PDS_HOST']},
# headers={'User-Agent': USER_AGENT,
# 'Authorization': f'Bearer {jwt}',
# })
# logger.info(resp.content)
# resp.raise_for_status()
# logger.info('OK')
@app.post('/_ah/queue/atproto-commit')
def atproto_commit():
"""Handler for atproto-commit tasks. Enqueues the commit for subscribeRepos.
"""
logger.info(f'Params: {request.values}')
seq = request.form['seq']
logger.info(f'Got atproto-commit task for seq {seq}')
if not util.is_int(seq):
flask_util.error(f'seq {seq} is not int')
for commit_data in DatastoreStorage().read_commits_by_seq(start=int(seq)):
logger.info(f'Enqueueing commit {commit_data.commit.cid}')
xrpc_sync.enqueue_commit(commit_data)
return 'OK'