Subscribe for free YouTube tutorial
In this YouTube series we turn you into a Python Master! Subscribe for free to this new series on YouTube.
Get the source code
Please support our effort and purchase the source code that we created in the YouTube Series:
#1 – Setting up Virtual Environment with Miniconda and Anaconda
In this episode you learn how to install Miniconda and Anaconda and how to setup a virtual environment for Python.
YouTube:
Miniconda:
Download (Linux):
mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
Install (Linux)
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 ~/miniconda3/bin/conda init bash
eval "$(~/miniconda3/bin/conda shell.bash hook)"
Prevent autoactivation of conda’s base environment on terminal startup
conda config --set auto_activate_base false
Anaconda:
Download (Linux):
curl https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh --output /tmp/anaconda.sh
bash /tmp/anaconda.sh -b
eval "$(~/anaconda3/bin/conda shell.bash hook)"
conda init
Prevent autoactivation of conda’s base environment on terminal startup
conda config --set auto_activate_base false
Conda commands:
Create Virtual Environment:
conda create -n <projectname> python=3.10.0
Activate Virtual Environment:
conda activate <projectname>
Deactivate Virtual Environment:
conda deactivate
Delete Virtual Environment and its packages:
conda remove -y -n <projectname> --all
Load environment variables from .env file
.env – file:
MY_KEY=4711
app.py:
from dotenv import load_dotenv import os load_dotenv() MY_KEY = os.environ.get("MY_KEY") def main(): # Print the result print(f"Greetings from Hello World App. My key is: {MY_KEY}") if __name__ == "__main__": main()
#2 – Flask App in a Class
In this episode we dive into Object Oriented Programming (OOP) with Python. In paticular we show you how to wrap a Flask App in a python class. This is especially useful if you want to include Flask based APIs in your object oriented python app.
YouTube:
app.py:
from flask import Flask class Flask_OOP(): @property def app(self) -> Flask: return self._app @app.setter def app(self, app: Flask): self._app = app def __init__(self) -> None: self.app = Flask(__name__) self.register_endpoints() def register_endpoints(self): self.app.add_url_rule(rule='/', endpoint='helloworld', view_func=self.helloworld, methods=['GET']) def helloworld(self): return "Greetings from Flask OOP App" def run(self, *args, **kwargs): self.app.run(*args, **kwargs) if __name__ == "__main__": myFlaskApp = Flask_OOP() myFlaskApp.run(debug=False, port=5100)
#3 – Pass self to another class
Learn how to pass self to the constructor of another class and still take advantage of static type checking in Python. We show you how to fix the ImportError: cannot import name from partially initialized module (most likely due to a circular import) by implementing a Protocol Class.
app.py:
from flask import Flask from endpoint_helloworld import Endpoint_Helloworld class Flask_OOP(): @property def app(self) -> Flask: return self._app @app.setter def app(self, app: Flask): self._app = app def __init__(self) -> None: self.app = Flask(__name__) self.register_endpoints() def register_endpoints(self): helloworld_endpoint = Endpoint_Helloworld(self) helloworld_endpoint.register_endpoint() def run(self, *args, **kwargs): self.app.run(*args, **kwargs) if __name__ == "__main__": myFlaskApp = Flask_OOP() myFlaskApp.run(debug=False, port=5100)
app_stub.py:
from flask import Flask from typing import Protocol class Flask_OOP_Stub(Protocol): @property def app(self) -> Flask: ...
endpoint_helloworld.py:
from app_stub import Flask_OOP_Stub class Endpoint_Helloworld(): def __init__(self, flask_oop: Flask_OOP_Stub) -> None: self.flask_oop = flask_oop self.route = '/' self.endpoint = 'helloworld' self.callback_function = self.helloworld self.methods = ['GET'] def helloworld(self): return "Greetings from Flask OOP App" def register_endpoint(self): self.flask_oop.app.add_url_rule(rule=self.route, endpoint=self.endpoint, view_func=self.callback_function, methods=self.methods)
#4 – Derive from Base Class
In this video you learn how to create an abstract base class in Python and how to derive your child classes from it. We create an abstract class for endpoints and inherit unique endpoints from this class.
app.py:
from flask import Flask from endpoint_helloworld import Endpoint_Helloworld from endpoint_index import Endpoint_Index class Flask_OOP(): @property def app(self) -> Flask: return self._app @app.setter def app(self, app: Flask): self._app = app def __init__(self) -> None: self.app = Flask(__name__) self.register_endpoints() def register_endpoints(self): index_endpoint = Endpoint_Index(self) index_endpoint.register_endpoint() helloworld_endpoint = Endpoint_Helloworld(self) helloworld_endpoint.register_endpoint() def run(self, *args, **kwargs): self.app.run(*args, **kwargs) if __name__ == "__main__": myFlaskApp = Flask_OOP() myFlaskApp.run(debug=False, port=5100)
app_stub.py:
from flask import Flask from typing import Protocol class Flask_OOP_Stub(Protocol): @property def app(self) -> Flask: ...
endpoint_abstract.py:
from app_stub import Flask_OOP_Stub from abc import ABC class Endpoint_Abstract(ABC): route: str = None endpoint: str = None callback_function: str = None methods: list = None def __init__(self, flask_oop: Flask_OOP_Stub) -> None: self.flask_oop = flask_oop def register_endpoint(self): self.flask_oop.app.add_url_rule(rule=self.route, endpoint=self.endpoint, view_func=self.callback_function, methods=self.methods)
endpoint_index.py:
from app_stub import Flask_OOP_Stub from endpoint_abstract import Endpoint_Abstract class Endpoint_Index(Endpoint_Abstract): def __init__(self, flask_oop: Flask_OOP_Stub) -> None: super().__init__(flask_oop) self.route = '/' self.endpoint = 'index' self.callback_function = self.index self.methods = ['GET'] def index(self): return "Greetings from Flask OOP Index Endpoint"
endpoint_helloworld.py:
from app_stub import Flask_OOP_Stub from endpoint_abstract import Endpoint_Abstract class Endpoint_Helloworld(Endpoint_Abstract): def __init__(self, flask_oop: Flask_OOP_Stub) -> None: super().__init__(flask_oop) self.route = '/helloworld' self.endpoint = 'helloworld' self.callback_function = self.helloworld self.methods = ['GET'] def helloworld(self): return "Greetings from Flask OOP Helloworld Endpoint"
Need further support or consulting?
Please checkout our Consulting hours.