4
4
from .json_typing import json_to_typing_basic
5
5
from .tasks import ActionTask
6
6
7
+
7
8
class Affordance :
8
- def __init__ (self , affordance_description : dict , base_url : str = "" ):
9
+ def __init__ (self , title , affordance_description : dict , base_url : str = "" ):
10
+ self .title = title
9
11
self .base_url = base_url .strip ("/" )
10
12
self .affordance_description = affordance_description
11
13
@@ -14,24 +16,23 @@ def __init__(self, affordance_description: dict, base_url: str = ""):
14
16
15
17
self .description = self .affordance_description .get ("description" )
16
18
17
-
18
19
def find_verbs (self ):
19
20
"""Verify available HTTP methods
20
21
21
22
Returns:
22
23
[list] -- List of HTTP verb strings
23
24
"""
24
- return requests .options (self .self_url ).headers [' allow' ].split (", " )
25
+ return requests .options (self .self_url ).headers [" allow" ].split (", " )
25
26
26
27
27
28
class Property (Affordance ):
28
- def __init__ (self , affordance_description : dict , base_url : str = "" ):
29
- Affordance .__init__ (self , affordance_description , base_url = base_url )
29
+ def __init__ (self , title , affordance_description : dict , base_url : str = "" ):
30
+ Affordance .__init__ (self , title , affordance_description , base_url = base_url )
30
31
31
32
self .read_only = self .affordance_description .get ("readOnly" )
32
33
self .write_only = self .affordance_description .get ("writeOnly" )
33
34
34
- def __call__ (self , * args , ** kwargs ):
35
+ def __call__ (self , * args , ** kwargs ):
35
36
return self .get (* args , ** kwargs )
36
37
37
38
def get (self ):
@@ -70,24 +71,49 @@ def delete(self):
70
71
raise AttributeError ("Can't delete attribute, is read-only" )
71
72
72
73
74
+ class MozillaProperty (Property ):
75
+ def _post_process (self , value ):
76
+ if isinstance (value , dict ) and self .title in value :
77
+ return value .get (self .title )
78
+
79
+ def _pre_process (self , value ):
80
+ return {self .title : value }
81
+
82
+ def get (self ):
83
+ return self ._post_process (Property .get (self ))
84
+
85
+ def put (self , value ):
86
+ return self ._post_process (Property .put (self , self ._pre_process (value )))
87
+
88
+ def post (self , value ):
89
+ return self ._post_process (Property .post (self , self ._pre_process (value )))
90
+
91
+ def delete (self ):
92
+ return self ._post_process (Property .delete (self ))
93
+
94
+
73
95
class Action (Affordance ):
74
- def __init__ (self , affordance_description : dict , base_url : str = "" ):
75
- Affordance .__init__ (self , affordance_description , base_url = base_url )
96
+ def __init__ (self , title , affordance_description : dict , base_url : str = "" ):
97
+ Affordance .__init__ (self , title , affordance_description , base_url = base_url )
76
98
77
99
self .args = json_to_typing_basic (self .affordance_description .get ("input" , {}))
78
100
79
- def __call__ (self , * args , ** kwargs ):
101
+ def __call__ (self , * args , ** kwargs ):
80
102
return self .post (* args , ** kwargs )
81
103
82
104
def post (self , * args , ** kwargs ):
83
105
84
106
# Only accept a single positional argument, at most
85
107
if len (args ) > 1 :
86
- raise ValueError ("If passing parameters as a positional argument, the only argument must be a single dictionary" )
108
+ raise ValueError (
109
+ "If passing parameters as a positional argument, the only argument must be a single dictionary"
110
+ )
87
111
88
112
# Single positional argument MUST be a dictionary
89
113
if args and not isinstance (args [0 ], dict ):
90
- raise TypeError ("If passing parameters as a positional argument, the argument must be a dictionary" )
114
+ raise TypeError (
115
+ "If passing parameters as a positional argument, the argument must be a dictionary"
116
+ )
91
117
92
118
# Use positional dictionary as parameters base
93
119
if args :
@@ -100,4 +126,4 @@ def post(self, *args, **kwargs):
100
126
r = requests .post (self .self_url , json = params or {})
101
127
r .raise_for_status ()
102
128
103
- return ActionTask (r .json ())
129
+ return ActionTask (r .json ())
0 commit comments