diff options
Diffstat (limited to 'pygithub3/requests/base.py')
-rw-r--r-- | pygithub3/requests/base.py | 52 |
1 files changed, 23 insertions, 29 deletions
diff --git a/pygithub3/requests/base.py b/pygithub3/requests/base.py index 13472b0..f49a7a9 100644 --- a/pygithub3/requests/base.py +++ b/pygithub3/requests/base.py @@ -12,12 +12,12 @@ ABS_IMPORT_PREFIX = 'pygithub3.requests' class Body(object): + """ Input's request handler """ - def __init__(self, content, valid_body, validate_body=None): + def __init__(self, content, schema, required): self.content = content - self.schema = valid_body['schema'] - self.required = valid_body['required'] - self.validate_body = validate_body or (lambda x: None) + self.schema = schema + self.required = required def dumps(self): if not self.schema: @@ -25,12 +25,12 @@ class Body(object): return json.dumps(self.parse()) def parse(self): + """ Parse body with schema-required rules """ if not hasattr(self.content, 'items'): raise ValidationError("'%s' needs a content dictionary" % self.__class__.__name__) parsed = dict([(key, self.content[key]) for key in self.schema if key in self.content]) - self.validate_body(parsed) for attr_required in self.required: if attr_required not in parsed: raise ValidationError("'%s' attribute is required" % @@ -42,22 +42,34 @@ class Body(object): class Request(object): - """ """ uri = '' resource = Raw body_schema = {} def __init__(self, **kwargs): - """ """ - self.body = kwargs.pop('body', None) + self.body = kwargs.pop('body', {}) self.args = kwargs self.clean() + def __getattr__(self, name): + return self.args.get(name) + + def __str__(self): + return self.populate_uri() + + def populate_uri(self): + try: + populated_uri = self.uri.format(**self.args) + except KeyError: + raise ValidationError( + "'%s' request wasn't be able to populate the uri '%s' with " + "'%s' args" % (self.__class__.__name__, self.uri, self.args)) + return str(populated_uri).strip('/') + def clean(self): self.uri = self.clean_uri() or self.uri - self.body = Body(self.clean_body(), self.clean_valid_body(), - self.validate_body) + self.body = Body(self.clean_body(), **self._clean_valid_body()) def clean_body(self): return self.body @@ -65,7 +77,7 @@ class Request(object): def clean_uri(self): return None - def clean_valid_body(self): + def _clean_valid_body(self): schema = set(self.body_schema.get('schema', ())) required = set(self.body_schema.get('required', ())) if not required.issubset(schema): @@ -75,27 +87,9 @@ class Request(object): self.__class__.__name__, required, schema)) return dict(schema=schema, required=required) - def __getattr__(self, name): - return self.args.get(name) - - def __str__(self): - return self.populate_uri() - - def populate_uri(self): - try: - populated_uri = self.uri.format(**self.args) - except KeyError: - raise ValidationError( - "'%s' request wasn't be able to populate the uri '%s' with " - "'%s' args" % (self.__class__.__name__, self.uri, self.args)) - return str(populated_uri).strip('/') - def get_body(self): return self.body.dumps() - def validate_body(self, *args): - pass - class Factory(object): """ Request builder """ |