Git Product home page Git Product logo

clever-python's Introduction

Notice

This repo is no longer maintained by Clever. We provide the Swagger definitions at https://github.com/Clever/swagger-api.

Clever - the Python library for the Clever API

API Documentation

View more detailed documentation here

Requirements.

Python 2.7 and 3.4+

Installation

From PyPi:

    $ pip install clever

or

    $ easy_install clever

Or from source:

    $ python setup.py install

Then import the package:

import clever

Getting Started

Please follow the installation procedure and then run the following:

from __future__ import print_function
import time
import clever
from clever.rest import ApiException
from pprint import pprint

# Note: This is hard coded for demo purposes only. Keep your access tokens secret!
# https://dev.clever.com/docs/security#section-security-best-practices

# Configure OAuth2 access token for authorization: oauth
configuration = clever.Configuration()
configuration.access_token = 'YOUR_ACCESS_TOKEN'

# create an instance of the API class
api_instance = clever.DataApi(clever.ApiClient(configuration))

try:
    api_response = api_instance.get_students()
    for student in api_response.data:
        pprint(student.data.id)
except ApiException as e:
    print("Exception when calling DataApi->get_students: %s\n" % e)

Updating the Library

  1. Git clone swagger-codegen (https://github.com/swagger-api/swagger-codegen)

  2. Git clone Clever's swagger-api repo (https://github.com/Clever/swagger-api)

  3. Run this command in the swagger-codegen repo

java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i $PATH_TO_SWAGGER_API_REPO/v2.1-client.yml -l python -o $PATH_TO_THIS_REPO --additional-properties packageVersion=$VERSION
  1. Run make override to copy over the override files

  2. Update the CHANGELOG.md with the changes!

Development

Dependencies

make deps

Testing

make test

Publishing

Run make publish to publish a new version of the library.

In order to publish to PyPI you will need a .pypirc file in your $HOME directory with the following contents:

[distutils]
index-servers =
    pypi

[pypi]
username: ****
password: ****

The username and password are in 1Password for Teams under PyPI.

clever-python's People

Contributors

13rac1 avatar aashay avatar arsalansufi avatar bgveenstra avatar carlshan avatar christopher-bradshaw avatar cozmo avatar d-sparks avatar dc105297 avatar dccarroll avatar iamfive avatar incidentist avatar jonahkagan avatar mcab avatar meliaj avatar mohit avatar nathanleiby avatar notsoluckycharm avatar rgarcia avatar soopercorp avatar thierryba avatar youcandanch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

clever-python's Issues

Homepage README code sample results in 401 using OAuth tokens

Spent a bit of time going through the codebase to figure it out and I'm sharing this to potentially help others. I couldn't get it to work as advertised despite my tokens working in the API Explorer.

https://github.com/Clever/clever-python/blob/f2c31bd1b51cecb6930c961532fffebd75355faa/docs/DataApi.md

the configuration needs to be

# Configure OAuth2 access token for authorization: oauth
configuration = clever.Configuration()
configuration.access_token = 'YOUR_ACCESS_TOKEN'

# create an instance of the API class
api_instance = clever.DataApi(clever.ApiClient(configuration))

Grade 13 breaks high grade check

We have reports from users of the grade being "13" but this breaks here

Sets the high_grade of this School.

We see the following exception in our code using the Clever API:

ValueError
Invalid value for `high_grade` (13), must be one of ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', 'PreKindergarten', 'Kindergarten', 'PostGraduate', 'Other']

We are using version 3.0.2.

Where queries with arrays longer than 219 elements returns an API Error

len(USER_IDS)
#5611
 district_tokens = OAuthToken.all(where=json.dumps({"client": {"$in": USER_IDS}}))
# APIError: Invalid response body from API: <html><body><h1>400 Bad request</h1>
# Your browser sent an invalid request.
# </body></html>
 # (HTTP response code was 400)

However...

district_tokens = OAuthToken.all(where=json.dumps({"client": {"$in": USER_IDS[:10]}}))
# Works fine

After some investigation, the breaking point length is when the array is longer than 219 elements:

district_tokens = OAuthToken.all(where=json.dumps({"client": {"$in": USER_IDS[:219]}}))
# Works
district_tokens = OAuthToken.all(where=json.dumps({"client": {"$in": USER_IDS[:220]}}))
# Returns error

Failing module import in python 3.6

Importing clever into any script fails when running Python 3.6.4.

To reproduce:

  1. Create a file whose contents consist of import clever
  2. Run that file with python 3.6.4

Expected result: Script should exit cleanly

Result:
Traceback (most recent call last): File "test.py", line 1, in <module> import clever File "/usr/local/lib/python3.6/site-packages/clever/__init__.py", line 17, in <module> from .models.bad_request import BadRequest File "/usr/local/lib/python3.6/site-packages/clever/models/__init__.py", line 69, in <module> from .contacts_updated import ContactsUpdated File "/usr/local/lib/python3.6/site-packages/clever/models/contacts_updated.py", line 17, in <module> import event ModuleNotFoundError: No module named 'event'

I haven't tried this in other python versions.

Cannot paginate results

When a query has more results than can be returned in a single request (either because a limit parameter is set or because it's using the default limit of 100), the results include next links, as described here: https://dev.clever.com/reference#schema. These links are not included in the objects constructed by clever-python, so there is no way to paginate results.

We currently work around this by setting limit to its maximum of 10000. Fortunately, our current usage doesn't involve queries with more than 10k results, but this will be a huge problem as we scale. See #25 for the previous implementation.

APIError / Unicode error listing records

I am trying to enumerate through students and have run into a student with a unicode character in their name. This triggers a decode error on this line which is masked and an APIError is raised instead.

Stack trace with PII redacted:

>>> clever.Student.all(where=json.dumps({'sis_id': 'XXX'}))
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/altschool/clever-sync.src/src/clever/clever/__init__.py", line 711, in all
    return list(cls.iter(auth, **params))
  File "/usr/local/altschool/clever-sync.src/src/clever/clever/__init__.py", line 725, in iter
    response, auth = requestor.request('get', url, params)
  File "/usr/local/altschool/clever-sync.src/src/clever/clever/__init__.py", line 220, in request
    resp = self.interpret_response(res)
  File "/usr/local/altschool/clever-sync.src/src/clever/clever/__init__.py", line 298, in interpret_response
    (rbody, rcode), rbody, rcode)
APIError: Invalid response body from API: {"data":[{"data":{"dob":"","last_modified":"2017-08-16T12:58:15.051Z","grade":"1","district":"XXX","student_number":"XXX","created":"2017-07-07T18:16:34.802Z","credentials":{"district_username":"XXXôXXX"},"hispanic_ethnicity":"","location":{"zip":"","address":"","city":"","lat":"","lon":"","state":""},"name":{"first":"XXXôXXX","last":"XXX","middle":""},"sis_id":"XXX","email":"","race":"","school":"XXX","state_id":"","gender":"","id":"XXX"},"uri":"/v1.1/students/XXX"}],"paging":{"current":1,"total":1,"count":1},"links":[{"rel":"self","uri":"/v1.1/students?where=%7B%22sis_id%22%3A%20%22XXX%22%7D&limit=1000"}]} (HTTP response code was 200)

Note the value of name.first and credentials.district_username include the character "ô"

Events API missing attributes

When running on the latest version of clever-python, I attempt to get all events and filter through them based on the event type as specified in the docs (sections.updated, students.updated, etc.) and get information about what changed by querying the event.previous_attributes. However, these attributes don't seem to populate with this set of bindings. I instead just get the object itself with no information about what precisely changed, just the current version.

Is this a problem on my part, or is there some bug with the swagger API that prevents those attributes from being populated?

Bindings for /me

Is there a reason there's no bindings for getting current user data? I'd be happy to put some time in adding bindings for /me, but I wanted to make sure before I threw a PR in that there wasn't something that prevents this from being technically possible. Thanks!

PyPI packages for 3.0.0?

Hi there!

I'm trying to make sense of the API at the moment, and trying to see if this library makes it a bit easier to traverse a user's data.

The docs mention and use the "clever" PyPI package. The latest version released here as of May 14th, 2018 is 2.4.0. As of today, the instructions on the README, the latest tag, are all based around 3.0.0.

It seems the 3.0 package is at "clever-python" https://pypi.org/project/clever-python, which targets 2.0 of the clever API.

Is https://pypi.org/project/clever-python/ the official package now? Or was 3.0.0 pushed by mistake to clever-python instead of clever (I think you have the clever package name on PyPI, right?) I'm not 100% if I'm overlooking something obvious. I think the intention may have been to expect would 3.0.0 being in the clever package?

Is 3.0.0 ready to use via clever-python in the mean time? The authors on PyPI are different.

ValueError: Invalid value for relationship (Guardian), must be one of ['Parent', 'Grandparent', 'Self', 'Aunt/Uncle', 'Sibling', 'Other', '']

👋

We have observed this error when fetching Contacts from district partners that AutoSync with PowerSchool

ValueError: Invalid value for relationship (Guardian), must be one of ['Parent', 'Grandparent', 'Self', 'Aunt/Uncle', 'Sibling', 'Other', '']

Our app is using Python 3.6, clever==3.0.1 in and v2.0 of the Clever API.

This is being raised when using get_contacts().to_dict() to fetch Clever Contacts

configuration = clever.Configuration()
configuration.access_token = settings.CLEVER_OAUTH_SYNC_TOKEN
data_api = clever.DataApi(clever.ApiClient(configuration))
contacts = data_api.get_contacts().to_dict()['data']
#Raises Error

The error is comes from the relationship setter

@relationship.setter
def relationship(self, relationship):
    """
    Sets the relationship of this Contact.
    :param relationship: The relationship of this Contact.
    :type: str
    """
    allowed_values = ["Parent", "Grandparent", "Self", "Aunt/Uncle", "Sibling", "Other", ""]
    if relationship not in allowed_values:
        raise ValueError(
            "Invalid value for `relationship` ({0}), must be one of {1}"
            .format(relationship, allowed_values)
        )

This seems to be affecting our district partners that use the PowerSchool AutoSync.

From what I can see in Clever documentation, Guardian is not an expected value for the v2.0 Contact model, but it looks like partners are able to set this value as Guardian using PowerSchool AutoSync.

Here is a relative traceback

Traceback (most recent call last):
  File "/my_app/sync.py", line 66, in sync
    contacts = data_api.get_contacts().to_dict()['data']
  File "/lib/python3.6/site-packages/clever/apis/data_api.py", line 150, in get_contacts
    (data) = self.get_contacts_with_http_info(**kwargs)
  File "/lib/python3.6/site-packages/clever/apis/data_api.py", line 225, in get_contacts_with_http_info
    collection_formats=collection_formats)
  File "/lib/python3.6/site-packages/clever/api_client.py", line 325, in call_api
    _return_http_data_only, collection_formats, _preload_content, _request_timeout)
  File "/lib/python3.6/site-packages/clever/api_client.py", line 163, in __call_api
    return_data = self.deserialize(response_data, response_type)
  File "/lib/python3.6/site-packages/clever/api_client.py", line 236, in deserialize
    return self.__deserialize(data, response_type)
  File "/lib/python3.6/site-packages/clever/api_client.py", line 280, in __deserialize
    return self.__deserialize_model(data, klass)
  File "/lib/python3.6/site-packages/clever/api_client.py", line 624, in __deserialize_model
    kwargs[attr] = self.__deserialize(value, attr_type)
  File "/lib/python3.6/site-packages/clever/api_client.py", line 254, in __deserialize
    for sub_data in data]
  File "/lib/python3.6/site-packages/clever/api_client.py", line 254, in <listcomp>
    for sub_data in data]
  File "/lib/python3.6/site-packages/clever/api_client.py", line 280, in __deserialize
    return self.__deserialize_model(data, klass)
  File "/lib/python3.6/site-packages/clever/api_client.py", line 624, in __deserialize_model
    kwargs[attr] = self.__deserialize(value, attr_type)
  File "/lib/python3.6/site-packages/clever/api_client.py", line 280, in __deserialize
    return self.__deserialize_model(data, klass)
  File "/lib/python3.6/site-packages/clever/api_client.py", line 626, in __deserialize_model
    instance = klass(**kwargs)
  File "/lib/python3.6/site-packages/clever/models/contact.py", line 89, in __init__
    self.relationship = relationship
  File "/lib/python3.6/site-packages/clever/models/contact.py", line 251, in relationship
    .format(relationship, allowed_values)
ValueError: Invalid value for `relationship` (Guardian), must be one of ['Parent', 'Grandparent', 'Sel

Error running `pip install clever`

$ pip install clever
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Defaulting to user installation because normal site-packages is not writeable
Collecting clever
Downloading clever-3.0.2.tar.gz (43 kB)
|████████████████████████████████| 43 kB 2.1 MB/s
ERROR: More than one .egg-info directory found in /tmp/pip-pip-egg-info-5qwoGa
$

Support for API v2.1

Currently it seems that this library is applicable to 2.0, which is now replaced by 2.1. Updating the configuration host works, but it also seems that there are some schema changes which are affected. For example, I now notice the code will produce the following error on a basic get students call.

configuration = clever.Configuration()
configuration.host = 'https://api.clever.com/v2.1'
configuration.access_token = self.access_token
self.clever_api = clever.DataApi(clever.ApiClient(configuration))
self.clever_api.get_students()
self = {'created': '2017-03-28T16:16:35.046Z',
 'credentials': {'district_username': 'evalynb40'},
 'district': '58da8a43cc70...ls': None,
 'sis_id': None,
 'state_id': None,
 'student_number': None,
 'unweighted_gpa': None,
 'weighted_gpa': None}
gender = 'X'

    @gender.setter
    def gender(self, gender):
        """
        Sets the gender of this Student.
    
        :param gender: The gender of this Student.
        :type: str
        """
        allowed_values = ["M", "F", ""]
        if gender not in allowed_values:
            raise ValueError(
                "Invalid value for `gender` ({0}), must be one of {1}"
>               .format(gender, allowed_values)
            )
E           ValueError: Invalid value for `gender` (X), must be one of ['M', 'F', '']

Unable to use "distinct" parameter

The command: clever.Section.all(distinct="period") leads to the error: InvalidRequestError: Can only use "distinct" in conjuction with "where" and "limit".

But the command: periods = clever.Section.all(distinct="period",limit=100) also leads to an error: CleverError: ListableAPIResource does not support 'limit' parameter

The limit parameter should be supported in conjunction with the "distinct" parameter.

Invalid Version (pip, setuptools, PyPi)

I am attempting to install the module with setuptools and I get the following error. From what I read online, it is a developer issue opposed to user issue.

/usr/lib/python3.4/site-packages/setuptools/dist.py:291: UserWarning: The version specified (b'2.1.1') is an invalid version, this may not work as expected with newer versions of setuptools, pip, and PyPI. Please see PEP 440 for more details.
"details." % self.metadata.version
Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 152, in save_modules
yield saved
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 193, in setup_context
yield
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 237, in run_setup
DirectorySandbox(setup_dir).run(runner)
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 267, in run
return func()
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 236, in runner
_execfile(setup_script, ns)
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 46, in execfile
exec(code, globals, locals)
File "/tmp/easy_install-br833_x
/clever-2.1.1/setup.py", line 39, in
File "/usr/lib/python3.4/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.4/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.4/distutils/dist.py", line 973, in run_command
cmd_obj.ensure_finalized()
File "/usr/lib/python3.4/distutils/cmd.py", line 107, in ensure_finalized
self.finalize_options()
File "/usr/lib/python3.4/site-packages/setuptools/command/bdist_egg.py", line 88, in finalize_options
ei_cmd = self.ei_cmd = self.get_finalized_command("egg_info")
File "/usr/lib/python3.4/distutils/cmd.py", line 299, in get_finalized_command
cmd_obj.ensure_finalized()
File "/usr/lib/python3.4/distutils/cmd.py", line 107, in ensure_finalized
self.finalize_options()
File "/usr/lib/python3.4/site-packages/setuptools/command/egg_info.py", line 75, in finalize_options
self.egg_version = self.tagged_version()
File "/usr/lib/python3.4/site-packages/setuptools/command/egg_info.py", line 165, in tagged_version
return safe_version(version + self.vtags)
TypeError: can't concat bytes to str

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/bin/easy_install", line 9, in
load_entry_point('setuptools==14.3.1', 'console_scripts', 'easy_install')()
File "/usr/lib/python3.4/site-packages/setuptools/command/easy_install.py", line 2245, in main
distclass=DistributionWithoutHelpCommands, **kw
File "/usr/lib/python3.4/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.4/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.4/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/lib/python3.4/site-packages/setuptools/command/easy_install.py", line 380, in run
self.easy_install(spec, not self.no_deps)
File "/usr/lib/python3.4/site-packages/setuptools/command/easy_install.py", line 629, in easy_install
return self.install_item(spec, dist.location, tmpdir, deps)
File "/usr/lib/python3.4/site-packages/setuptools/command/easy_install.py", line 659, in install_item
dists = self.install_eggs(spec, download, tmpdir)
File "/usr/lib/python3.4/site-packages/setuptools/command/easy_install.py", line 844, in install_eggs
return self.build_and_install(setup_script, setup_base)
File "/usr/lib/python3.4/site-packages/setuptools/command/easy_install.py", line 1072, in build_and_install
self.run_setup(setup_script, setup_base, args)
File "/usr/lib/python3.4/site-packages/setuptools/command/easy_install.py", line 1058, in run_setup
run_setup(setup_script, args)
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 240, in run_setup
raise
File "/usr/lib/python3.4/contextlib.py", line 77, in exit
self.gen.throw(type, value, traceback)
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 193, in setup_context
yield
File "/usr/lib/python3.4/contextlib.py", line 77, in exit
self.gen.throw(type, value, traceback)
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 164, in save_modules
saved_exc.resume()
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 139, in resume
compat.reraise(type, exc, self._tb)
File "/usr/lib/python3.4/site-packages/setuptools/compat.py", line 65, in reraise
raise value.with_traceback(tb)
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 152, in save_modules
yield saved
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 193, in setup_context
yield
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 237, in run_setup
DirectorySandbox(setup_dir).run(runner)
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 267, in run
return func()
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 236, in runner
_execfile(setup_script, ns)
File "/usr/lib/python3.4/site-packages/setuptools/sandbox.py", line 46, in execfile
exec(code, globals, locals)
File "/tmp/easy_install-br833_x
/clever-2.1.1/setup.py", line 39, in
File "/usr/lib/python3.4/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.4/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.4/distutils/dist.py", line 973, in run_command
cmd_obj.ensure_finalized()
File "/usr/lib/python3.4/distutils/cmd.py", line 107, in ensure_finalized
self.finalize_options()
File "/usr/lib/python3.4/site-packages/setuptools/command/bdist_egg.py", line 88, in finalize_options
ei_cmd = self.ei_cmd = self.get_finalized_command("egg_info")
File "/usr/lib/python3.4/distutils/cmd.py", line 299, in get_finalized_command
cmd_obj.ensure_finalized()
File "/usr/lib/python3.4/distutils/cmd.py", line 107, in ensure_finalized
self.finalize_options()
File "/usr/lib/python3.4/site-packages/setuptools/command/egg_info.py", line 75, in finalize_options
self.egg_version = self.tagged_version()
File "/usr/lib/python3.4/site-packages/setuptools/command/egg_info.py", line 165, in tagged_version
return safe_version(version + self.vtags)
TypeError: can't concat bytes to str

Even when I try to install the module manually, I get:

/usr/lib/python3.4/site-packages/setuptools/dist.py:291: UserWarning: The version specified (b'2.1.1') is an invalid version, this may not work as expected with newer versions of setuptools, pip, and PyPI. Please see PEP 440 for more details.
"details." % self.metadata.version
running install
running bdist_egg
Traceback (most recent call last):
File "setup.py", line 39, in
test_suite='test',
File "/usr/lib/python3.4/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.4/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.4/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/lib/python3.4/site-packages/setuptools/command/install.py", line 67, in run
self.do_egg_install()
File "/usr/lib/python3.4/site-packages/setuptools/command/install.py", line 109, in do_egg_install
self.run_command('bdist_egg')
File "/usr/lib/python3.4/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.4/distutils/dist.py", line 973, in run_command
cmd_obj.ensure_finalized()
File "/usr/lib/python3.4/distutils/cmd.py", line 107, in ensure_finalized
self.finalize_options()
File "/usr/lib/python3.4/site-packages/setuptools/command/bdist_egg.py", line 88, in finalize_options
ei_cmd = self.ei_cmd = self.get_finalized_command("egg_info")
File "/usr/lib/python3.4/distutils/cmd.py", line 299, in get_finalized_command
cmd_obj.ensure_finalized()
File "/usr/lib/python3.4/distutils/cmd.py", line 107, in ensure_finalized
self.finalize_options()
File "/usr/lib/python3.4/site-packages/setuptools/command/egg_info.py", line 75, in finalize_options
self.egg_version = self.tagged_version()
File "/usr/lib/python3.4/site-packages/setuptools/command/egg_info.py", line 165, in tagged_version
return safe_version(version + self.vtags)
TypeError: can't concat bytes to str

Not sure what to do.

python 3(.7) support

I had complained in the past that python 3 is not supported but with v2, I provided a patch and now with v3 it is broken again
among other things you can't do "import event" but "from . import event"
and then async is a keyword

File "..../python/lib/python3.7/site-packages/clever/apis/data_api.py", line 124
async=params.get('async'),
^
SyntaxError: invalid syntax

Everybody else is moving to python3. Are there any plans for clever?
At this point I need to go back to clever 2.4

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.