def parse(cls, id, data): token = Token() token.setId(id) data = data["token"] issued_at = None expires_at = None try: issued_at = datetime.strptime(data["issued_at"], "%Y-%m-%dT%H:%M:%S.%fZ") except Exception: issued_at = datetime.strptime(data["issued_at"], "%Y-%m-%dT%H:%M:%S.%f") try: expires_at = datetime.strptime(data["expires_at"], "%Y-%m-%dT%H:%M:%S.%fZ") except Exception: expires_at = datetime.strptime(data["expires_at"], "%Y-%m-%dT%H:%M:%S.%f") token.setCreation(issued_at) token.setExpiration(expires_at) project = Project() project.setId(data["project"]["id"]) project.setName(data["project"]["name"]) token.setProject(project) user = User() user.setId(data["user"]["id"]) user.setName(data["user"]["name"]) user.setProjectId(data["project"]["id"]) token.setUser(user) if "extras" in data: token.getExtras().update(data["extras"]) for info in data["roles"]: role = Role() role.setId(info["id"]) role.setName(info["name"]) token.getRoles().append(role) for service_info in data["catalog"]: service = Service() service.setId(service_info["id"]) service.setType(service_info["type"]) service.setName(service_info["name"]) for endpoint_info in service_info["endpoints"]: endpoint = Endpoint() endpoint.setId(endpoint_info["id"]) endpoint.setInterface(endpoint_info["interface"]) endpoint.setRegion(endpoint_info["region"]) endpoint.setRegionId(endpoint_info["region_id"]) endpoint.setURL(endpoint_info["url"]) service.getEndpoints().append(endpoint) token.getServices().append(service) return token