Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Roadmap for future releases #249

Open
64 of 75 tasks
mesozoic opened this issue May 3, 2023 · 10 comments
Open
64 of 75 tasks

Roadmap for future releases #249

mesozoic opened this issue May 3, 2023 · 10 comments
Assignees

Comments

@mesozoic
Copy link
Collaborator

mesozoic commented May 3, 2023

The following is a rough proposal for which features we plan to add to pyAirtable, loosely grouped into releases. Priorities can shift over time, and anyone who wants to see a particular feature implemented faster is welcome to submit pull requests for review. I'm comfortable with the scope of the 1.5.0 and 2.0.0 releases; everything past there is a bit more speculative, but I have proofs of concept for at least some of it.

This document assumes we are using semantic versioning, and that existing APIs can only be broken if there is a major version number change. As such, we may be more cautious about implementing new endpoints (or accepting PRs for new endpoints) if the design of that API merits discussion, because we'll commit to supporting new APIs for at least one major version.

Tagging other recent code contributors for input. @BAPCon @goksan @larsakerson @NicoHood

1.5 (released May '23)

This release will focus on bug fixes, quick wins, and reducing the open issue count.

2.0 (July '23)

This release will be our chance to make any breaking API changes, such as changes to default behavior or return types. We will also implement stricter typing across the library, which might break CI for downstream code that does its own type checking, and support every field type in the ORM.

2.1

Just a plain ol' feature release.

2.2

Build a sustainable pattern for retrieving with Airtable metadata, which involves a lot of deeply nested object structures.

2.3

3.0

Next major version bump after 2.0 can be for bigger ideas.

  • Revisit the DSL for building Airtable formulas.
  • Testing utilities for library users to safely mock the pyAirtable API in their own tests.
  • Command-line interface for retrieving (or modifying?) Airtable data and metadata.
  • Auto-generate ORM models from Airtable base metadata.

4.0

Won't do

The following wound up being a lot more work than we'd anticipated.

  • Run doctests in pyairtable and docs/source on build.

The following seem like uncommon use cases and we'll wait for another contributor to need them.

SCIM is a standard API specification that is already implemented by any vendors which need to support it, so implementing it in pyAirtable doesn't seem like a priority.

@gtalarico
Copy link
Owner

Thanks for putting this together @mesozoic; this looks like a great plan.

Would 2.x be a good time to also move ORM package out of experimental and make it officially supported?

Auto-generate ORM models from Airtable base metadata
😍

@mesozoic
Copy link
Collaborator Author

mesozoic commented May 3, 2023

Would 2.x be a good time to also move ORM package out of experimental and make it officially supported?

Totally! Though guessing from the comments, it seems like plenty of folks are using it already, supported or otherwise 😁 so I'm still inclined to do a major version bump before changing the semantics, return types, etc.

@mesozoic mesozoic pinned this issue May 5, 2023
@walkingpendulum
Copy link

I am so hyped for test-related features in 3.0.0 😍

@mesozoic
Copy link
Collaborator Author

mesozoic commented May 8, 2023

I am so hyped for test-related features in 3.0.0 😍

Great! Can you share a bit more about your use case (or existing solutions) to help inform what direction we take it?

@mesozoic mesozoic mentioned this issue May 10, 2023
@walkingpendulum
Copy link

walkingpendulum commented May 12, 2023

we have dozen of tables, couple of them having up to 200 fields, most of which are lookups, rollups and formulas.

major issues with Airtable development, exploitation and testing:

  • no table-schema-as-a-code. people mess up with field names in UI and it break our python scripts and JS automations. things get worse when link field is renamed, it breaks all the downstream lookups and rollups. we are also continuously discovering and fixing discrepancies between table schemes jn prod and dev tables
  • generally we prefer stubs to mocks in tests. for example, we spin MongoDB, RabbitMQ, and Moto (as a drop-in replacement for s3) containers in tests. this approach is not working for pyairtable, there is no stub for Airtable rest api available. which is really inconvenient, because our typical unit of logic deals with 5-10 fields, most of which are lookups and rollups (this is why I am also happy for close ORM features release), and it is a nightmare to mock, test and assert
  • ORM mode (soon to be released) will cone very handy. as I mentioned, there are tons of lookups and rollups, which lead to spaghetti code without ORM mode

@mesozoic
Copy link
Collaborator Author

@walkingpendulum Your use case sounds pretty complicated! So far we've avoided the field name issues by locking down Creator privileges for the bases where we've built a lot of heavy integrations. Sounds like that might not be feasible for you.

We haven't really come up with a great solution to testing; we have a minimal "fake Airtable" that mocks out the API's basic behaviors in-memory, and for integration testing we have a "partitioning shim" that injects some extra formulas/fields into every API call so that multiple test runners can operate on a single base without interfering w/ each other (as long as there's a text field where they can store a unique ID per test run). Both are utilities we'd like to move from our repos into upstream.

@walkingpendulum
Copy link

hello, guys! it's been a long time :)

I'd like to touch base on the 3.0 feature "Testing utilities for library users to safely mock the pyAirtable API in their own tests". do you still aim for it? I am as hyped to see it as I was a year ago.

also - great job done! we have moved from one-fits-all connector component that isolates AT API calls to ad-hoc pyairtable calls, because we realized how simple and powerful pyairtable is, and never looked back. thank you for your work.

@mesozoic
Copy link
Collaborator Author

@walkingpendulum I'd still like to move what we have upstream at some point, but it's not a high priority at the moment. I'm glad some of the other improvements to the library have worked out for you!

@acmeguy
Copy link

acmeguy commented May 11, 2024

Is it possible for Table.all() functions to return the label/value of a Lookup field as well as the record id?
(This is all dynamic and I can not use the ORM)

@d717an
Copy link

d717an commented May 23, 2024

Is it possible to enable passing parameters to the underlying request implementation when creating the Api(token) instance? For example, I need to pass in a path to a pem file. With the requests library, I do this with a verify=path_to_pem parameter.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants