Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

<noun>() vs get_<noun>() vs <verb>_<noun>() #911

Copy link
Copy link
@jgeewax

Description

@jgeewax
Issue body actions

Moved over from #910 per @dhermes

Goal of this issue is to decide:

  1. Is it reasonable to provide one-liners to do things like create_topic() which is just a wrapper:
    python def create_topic(self, name): topic = self.topic(name) topic.create() return topic
  2. Can we agree on the naming convention of what does and does not require an API request

Comment from the pull request was...

The name create_topic is ambiguous to new users. Does it mean create a Topic instance or actual insert one?

That's a good point. I think we should adopt the attitude that client.<verb>_<noun>() is an API request. So create_topic would hit the API trying to 'insert' the topic (using Google's API lingo). client.<noun> is nothing more than a factory for the noun which won't fire an API request but gives you back an instance of the .

We'd need to offer Client.topic and Client.create_topic side-by-side since users would need to construct pre-existing topics without sending insert.

Totally agree -- I think we had this debate already and I'm totally sold on the need for .topic() as the sole way to get a hold of a topic object, without hitting the API (as the topic literally has zero extra metadata).

For other APIs, where the object itself holds lots of (potentially important) metadata, I think it might be worthwhile to provide a get_<noun>() to pull down that metadata, in addition to the <noun>() method which just gives you an object which may not be tied to the remote (authoritative) representation.

An example here might be bucket.

  • .bucket() gives me a bucket object, sans remote data (no API request).
  • create_bucket() explicitly creates the bucket in the remote service, throwing an error if I was unable to do so.
  • get_bucket() would be an API request that gives me all the metadata about a bucket.

Note that the <verb>_bucket() methods are really just shortcuts so that I can have one-liners for the common things I want to do with a bucket. (ie, create == bucket = client.bucket('name'); bucket.create(); return bucket;)

In boto for S3, they have this verify or check parameter on the bucket constructor, so the comparisons look like:

Action boto gcloud (suggestion)
Get a bucket, no API request connection.get_bucket(validate=False) client.bucket()
Get a bucket + metadata connection.get_bucket() client.get_bucket()

I personally don't love the boto method, and would much rather the "gcloud (suggestion)" option.

Metadata

Metadata

Assignees

Labels

api: coretype: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.‘Nice-to-have’ improvement, new feature or different behavior or design.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.