1
- import sys
2
1
import json
2
+ import sys
3
+
3
4
from dateutil .parser import parse
4
5
5
6
7
+ def _update_attributes (obj , d , keys , default = None ):
8
+ """Updates the attributes of `obj` with keys from `d` in camelCase. """
9
+ for key in keys :
10
+ parts = key .split ('_' )
11
+ camel_case = parts [0 ] + '' .join (map (str .title , parts [1 :]))
12
+ setattr (obj , key , d .get (camel_case , default ))
13
+
14
+
6
15
class ACL :
16
+ __ATTRIBUTES = (
17
+ 'kind' , 'id' , 'self_link' , 'bucket' , 'object' , 'generation' , 'entity' ,
18
+ 'role' , 'email' , 'entity_id' , 'domain' , 'project_team' , 'etag'
19
+ )
20
+
7
21
def __init__ (self , raw_json ):
8
- self .kind = raw_json .get ('kind' , None )
9
- self .id = raw_json .get ('id' , None )
10
- self .self_link = raw_json .get ('selfLink' , None )
11
- self .bucket = raw_json .get ('bucket' , None )
12
- self .object = raw_json .get ('object' , None )
13
- self .generation = raw_json .get ('generation' , None )
14
- self .entity = raw_json .get ('entity' , None )
15
- self .role = raw_json .get ('role' , None )
16
- self .email = raw_json .get ('email' , None )
17
- self .entity_id = raw_json .get ('entityId' , None )
18
- self .domain = raw_json .get ('domain' , None )
19
- self .project_team = raw_json .get ('projectTeam' , None )
20
- self .etag = raw_json .get ('etag' , None )
22
+ _update_attributes (self , raw_json , self .__ATTRIBUTES )
21
23
22
24
23
25
class Object :
26
+ __ATTRIBUTES = (
27
+ 'kind' , 'id' , 'self_link' , 'bucket' , 'object' , 'generation' ,
28
+ 'metageneration' , 'content_type' , 'time_created' , 'updated' ,
29
+ 'time_deleted' , 'storage_class' , 'time_storage_class_updated' , 'size' ,
30
+ 'md5_hash' , 'media_link' , 'content_encoding' , 'content_disposition' ,
31
+ 'content_language' , 'cache_control' , 'metadata' , 'owner' , 'crc32c' ,
32
+ 'component_count' , 'customer_encryption'
33
+ )
34
+
24
35
def __init__ (self , raw_json ):
25
- self .kind = raw_json .get ('kind' , None )
26
- self .id = raw_json .get ('id' , None )
27
- self .self_link = raw_json .get ('selfLink' , None )
28
- self .bucket = raw_json .get ('bucket' , None )
29
- self .generation = raw_json .get ('generation' , None )
30
- self .metageneration = raw_json .get ('metageneration' , None )
31
- self .content_type = raw_json .get ('contentType' , None )
32
- self .time_created = raw_json .get ('timeCreated' , None )
33
- self .updated = raw_json .get ('updated' , None )
34
- self .time_deleted = raw_json .get ('timeDeleted' , None )
35
- self .storage_class = raw_json .get ('storageClass' , None )
36
- self .time_storage_class_updated = \
37
- raw_json .get ('timeStorageClassUpdated' , None )
38
- self .size = raw_json .get ('size' , None )
39
- self .md5_hash = raw_json .get ('md5_hash' , None )
40
- self .media_link = raw_json .get ('mediaLink' , None )
41
- self .content_encoding = raw_json .get ('contentEncoding' , None )
42
- self .content_disposition = raw_json .get ('contentDisposition' , None )
43
- self .content_language = raw_json .get ('contentLanguage' , None )
44
- self .cache_control = raw_json .get ('cacheControl' , None )
45
- self .metadata = raw_json .get ('metadata' , None )
46
- self .owner = raw_json .get ('owner' , None )
47
- self .crc32c = raw_json .get ('crc32c' , None )
48
- self .component_count = raw_json .get ('componentCount' , None )
49
- self .customer_encryption = raw_json .get ('customerEncryption' , None )
36
+ _update_attributes (self , raw_json , self .__ATTRIBUTES )
50
37
51
38
if self .time_created is not None :
52
39
self .time_created = parse (self .time_created )
@@ -58,12 +45,7 @@ def __init__(self, raw_json):
58
45
self .time_storage_class_updated = \
59
46
parse (self .time_storage_class_updated )
60
47
61
- self .acl = []
62
- acl = raw_json .get ('acl' , None )
63
-
64
- if acl is not None :
65
- for a in acl :
66
- self .acl .append (ACL (a ))
48
+ self .acl = list (map (ACL , raw_json .get ('acl' ) or []))
67
49
68
50
69
51
def handle_bucket_event (handle_fn ):
0 commit comments