Skip to content

PascalCase methods don't comply with Python's snake_case convention #426

Open
@sebastian-correa

Description

@sebastian-correa

These methods

def getChrome(self) -> BrowserUserAgentData:
"""Get a random Chrome user agent, with additional data."""
return self.getBrowser(["Chrome", "Chrome Mobile", "Chrome Mobile iOS"])
@property
def getFirefox(self) -> BrowserUserAgentData:
"""Get a random Firefox user agent, with additional data."""
return self.getBrowser("Firefox")
@property
def getSafari(self) -> BrowserUserAgentData:
"""Get a random Safari user agent, with additional data."""
return self.getBrowser(["Safari", "Mobile Safari"])
@property
def getOpera(self) -> BrowserUserAgentData:
"""Get a random Safari user agent, with additional data."""
return self.getBrowser(["Opera", "Opera Mobile"])
@property
def getGoogle(self) -> BrowserUserAgentData:
"""Get a random Google user agent, with additional data."""
return self.getBrowser(["Google"])
@property
def getEdge(self) -> BrowserUserAgentData:
"""Get a random Edge user agent, with additional data."""
return self.getBrowser(["Edge", "Edge Mobile"])
@property
def getRandom(self) -> BrowserUserAgentData:
"""Get a random user agent, with additional data."""
return self.getBrowser("random")

are written in PascalCase, which doesn't comply with the most common way to write Python: snake_case. I think this will be unexpected for developers used to the Python ecosystem.

~~Furthermore, if I didn't misread this, these methods duplicate the non get properties above:~~~

def chrome(self) -> str:
"""Get a random Chrome user agent."""
return self.__getattr__(["Chrome", "Chrome Mobile", "Chrome Mobile iOS"])
@property
def googlechrome(self) -> str:
"""Get a random Chrome user agent."""
return self.chrome
@property
def ff(self) -> str:
"""Get a random Firefox user agent."""
return self.firefox
@property
def firefox(self) -> str:
"""Get a random Firefox user agent."""
return self.__getattr__(["Firefox", "Firefox Mobile", "Firefox iOS"])
@property
def safari(self) -> str:
"""Get a random Safari user agent."""
return self.__getattr__(["Safari", "Mobile Safari"])
@property
def opera(self) -> str:
"""Get a random Opera user agent."""
return self.__getattr__(["Opera", "Opera Mobile"])
@property
def google(self) -> str:
"""Get a random Google user agent."""
return self.__getattr__(["Google"])
@property
def edge(self) -> str:
"""Get a random Edge user agent."""
return self.__getattr__(["Edge", "Edge Mobile"])
@property
def random(self) -> str:
"""Get a random user agent."""
return self.__getattr__("random")

The Zen of Python says that There should be one-- and preferably only one --obvious way to do it., and I tend to agree.

Therefore, I propose we remove the PascalCased getters, in favor of just the properties.

This is a breaking change, so doing so will need a new major bump to v3. If we decide to move forwards with this, we should think about how to develop it so that we don't keep bumping major versions too often.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions