Skip to content

Commit 9f3b73e

Browse files
committed
add first prototype implementation of indexing Release to ES
1 parent 20d58e9 commit 9f3b73e

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

warehouse/packaging/elasticsearch.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from sqlalchemy import event
2+
from elasticsearch import Elasticsearch
3+
from pyramid.threadlocal import get_current_registry
4+
5+
from warehouse.db import _Session
6+
from warehouse.packaging.models import Release
7+
8+
9+
release_options = dict(index="warehouse",
10+
doc_type="release")
11+
12+
13+
def get_elasticsearch():
14+
"""Configures Elasticsearch and returns the object"""
15+
es_url = get_current_registry().settings["elasticsearch.url"]
16+
return Elasticsearch([es_url])
17+
18+
19+
@event.listens_for(Release, 'after_insert')
20+
@event.listens_for(Release, 'after_update')
21+
def release_insert_update(mapper, connection, target):
22+
"""Signal insert/update events for Release model"""
23+
es = get_elasticsearch()
24+
es.index(id=target.name,
25+
body={"name": target.name,
26+
"version": target.version,
27+
"description": target.description,
28+
"summary": target.summary,
29+
"license": target.license,
30+
"download_url": target.download_url},
31+
**release_options)
32+
33+
34+
@event.listens_for(Release, 'before_delete')
35+
def release_delete(mapper, connection, target):
36+
"""Signal idelete event for Release model"""
37+
es = get_elasticsearch()
38+
es.delete(id=target.id, **release_options)
39+
40+
41+
@event.listens_for(_Session, 'after_bulk_update')
42+
def release_after_bulk_update(update_context):
43+
pass # TODO: implement
44+
45+
46+
@event.listens_for(_Session, 'after_bulk_delete')
47+
def release_after_bulk_delete(update_context):
48+
pass # TODO: implement

0 commit comments

Comments
 (0)