--- title: Conventions and Typing hide_title: true sidebar_position: 7 version: 1 --- ## Conventions ### Python Parameters in the `config.py` (which are accessible via the Flask app.config dictionary) are assumed to always be defined and thus should be accessed directly via, ```python blueprints = app.config["BLUEPRINTS"] ``` rather than, ```python blueprints = app.config.get("BLUEPRINTS") ``` or similar as the later will cause typing issues. The former is of type `List[Callable]` whereas the later is of type `Optional[List[Callable]]`. ## Typing ### Python To ensure clarity, consistency, all readability, _all_ new functions should use [type hints](https://docs.python.org/3/library/typing.html) and include a docstring. Note per [PEP-484](https://www.python.org/dev/peps/pep-0484/#exceptions) no syntax for listing explicitly raised exceptions is proposed and thus the recommendation is to put this information in a docstring, i.e., ```python import math from typing import Union def sqrt(x: Union[float, int]) -> Union[float, int]: """ Return the square root of x. :param x: A number :returns: The square root of the given number :raises ValueError: If the number is negative """ return math.sqrt(x) ``` ### TypeScript TypeScript is fully supported and is the recommended language for writing all new frontend components. When modifying existing functions/components, migrating to TypeScript is appreciated, but not required. Examples of migrating functions/components to TypeScript can be found in [#9162](https://github.com/apache/superset/pull/9162) and [#9180](https://github.com/apache/superset/pull/9180).