def factory(cls, docstring, name, schema, requests_kwargs, dl, client): class_name = utils.to_camel_case(name) resource = type(str(class_name), (cls, ), {}) #resource.__doc__ = docstring resource._schema = schema resource.client = client resource._instance_links = {} resource._attributes = {} routes = {} for link_desc in schema[LINKS]: if link_desc[HREF] in routes: route = routes[link_desc[HREF]] else: route = Route(link_desc[HREF]) routes[link_desc[HREF]] = route link = Link(route, method=link_desc[METHOD], schema=link_desc.get(SCHEMA, {}), target_schema=link_desc.get(TARGET_SCHEMA, {}), requests_kwargs=requests_kwargs, docstring=link_desc.get(DOC, None)) rel = utils.to_snake_case(link_desc[REL]) if route.is_instance: resource._instance_links[rel] = link else: setattr(resource, rel, LinkProxy(link)) for name, prop in schema[PROPERTIES].items(): attr = Attribute(prop) resource._attributes[name] = attr property_name = name if name.startswith("$"): property_name = name.replace("$", "") if attr.read_only: setattr(resource, property_name, property(fget=partial(resource._get_property, name), doc=attr.__doc__)) else: setattr(resource, property_name, property(fget=partial(resource._get_property, name), fset=partial(resource._set_property, name), fdel=partial(resource._del_property, name), doc=attr.__doc__)) if class_name == "Sample": resource.download_file = dl return resource
def test_snake_case(self): self.assertEqual("snake_case", utils.to_snake_case("SnakeCase")) self.assertEqual("d_n_a", utils.to_snake_case("DNA")) self.assertEqual("dna", utils.to_snake_case("Dna"))
def _parse_schema(self): if PROPERTIES in self._link.schema: properties = self._link.schema[PROPERTIES] for prop in properties.keys(): self._attributes[prop] = Attribute(properties[prop]) setattr(self, utils.to_snake_case(prop), self._proxy(prop))