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