mirror of
				https://github.com/karl0ss/MiGenieHASS.git
				synced 2025-11-04 00:21:02 +00:00 
			
		
		
		
	move to app, working docker
This commit is contained in:
		
						commit
						f052a4a2ec
					
				
							
								
								
									
										2
									
								
								.env.sample
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.env.sample
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
username=''
 | 
			
		||||
password=''
 | 
			
		||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
.env
 | 
			
		||||
*.pyc
 | 
			
		||||
							
								
								
									
										25
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
{
 | 
			
		||||
    // Use IntelliSense to learn about possible attributes.
 | 
			
		||||
    // Hover to view descriptions of existing attributes.
 | 
			
		||||
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
 | 
			
		||||
    "version": "0.2.0",
 | 
			
		||||
    "configurations": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Python: Flask",
 | 
			
		||||
            "type": "python",
 | 
			
		||||
            "request": "launch",
 | 
			
		||||
            "module": "flask",
 | 
			
		||||
            "env": {
 | 
			
		||||
                "FLASK_APP": "./app/main.py",
 | 
			
		||||
                "FLASK_DEBUG": "1"
 | 
			
		||||
            },
 | 
			
		||||
            "args": [
 | 
			
		||||
                "run",
 | 
			
		||||
                "--no-debugger",
 | 
			
		||||
                "--no-reload"
 | 
			
		||||
            ],
 | 
			
		||||
            "jinja": true,
 | 
			
		||||
            "justMyCode": true
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								app/Routes/heating.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								app/Routes/heating.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,45 @@
 | 
			
		||||
from lib import migenie, utils
 | 
			
		||||
 | 
			
		||||
def format_temp(temp:int):
 | 
			
		||||
    """_summary_
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
        temp (int): _description_
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
        _type_: _description_
 | 
			
		||||
    """    
 | 
			
		||||
    temp = str(temp)
 | 
			
		||||
    whole = temp[:-1]
 | 
			
		||||
    decimal = temp[-1]
 | 
			
		||||
    return float(f"{whole}.{decimal}")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_heating_root()->dict:
 | 
			
		||||
    """_summary_
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
        dict: _description_
 | 
			
		||||
    """    
 | 
			
		||||
    data = migenie.get_heating_data()
 | 
			
		||||
    return data, 200
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_heating_status()->dict:
 | 
			
		||||
    """_summary_
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
        dict: _description_
 | 
			
		||||
    """    
 | 
			
		||||
    data = migenie.get_heating_data()['status']
 | 
			
		||||
    heatingStatus = {
 | 
			
		||||
            "heatingOn": utils.is_item_on(data['currentSetpoint']),
 | 
			
		||||
            "measuredRoomTemp": format_temp(data['measuredRoomTemp']),
 | 
			
		||||
            "currentSetpoint": utils.convert_to_real_temp(data['currentSetpoint']),
 | 
			
		||||
            "lastTimerSetPoint": utils.convert_to_real_temp(data['lastTimerSetPoint']),
 | 
			
		||||
            "lastTimerDurationMinutes": data['lastTimerDurationMinutes'],
 | 
			
		||||
            "nextScheduleEventUtcTime": utils.format_datetime(data['nextScheduleEventUtcTime'])
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
    return heatingStatus, 200
 | 
			
		||||
    
 | 
			
		||||
							
								
								
									
										30
									
								
								app/Routes/water.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								app/Routes/water.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
from lib import migenie, utils
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_water_root()->dict:
 | 
			
		||||
    """_summary_
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
        dict: _description_
 | 
			
		||||
    """    
 | 
			
		||||
    data = migenie.get_water_data()
 | 
			
		||||
    return data, 200
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
def get_water_status()->dict:
 | 
			
		||||
    """_summary_
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
        dict: _description_
 | 
			
		||||
    """    
 | 
			
		||||
    data = migenie.get_water_data()['status']
 | 
			
		||||
    waterStatus = {
 | 
			
		||||
            "waterOn": utils.is_item_on(data['currentSetpoint']),
 | 
			
		||||
            "currentSetpoint": utils.convert_to_real_temp(data['currentSetpoint']),
 | 
			
		||||
            "lastTimerSetPoint": utils.convert_to_real_temp(data['lastTimerSetPoint']),
 | 
			
		||||
            "lastTimerDurationMinutes": data['lastTimerDurationMinutes'],
 | 
			
		||||
            "nextScheduleEventUtcTime": utils.format_datetime(data['nextScheduleEventUtcTime'])
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return waterStatus, 200
 | 
			
		||||
    
 | 
			
		||||
							
								
								
									
										25
									
								
								app/lib/migenie.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								app/lib/migenie.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
import requests
 | 
			
		||||
from dotenv import load_dotenv
 | 
			
		||||
import os
 | 
			
		||||
load_dotenv()
 | 
			
		||||
 | 
			
		||||
username = os.getenv("username")
 | 
			
		||||
password = os.getenv("password")
 | 
			
		||||
 | 
			
		||||
def poll_genie():  
 | 
			
		||||
    url = "https://public.wcs.schneider-electric.ws/rpc/public_genie/poll"
 | 
			
		||||
    payload = "{}"
 | 
			
		||||
    headers = {
 | 
			
		||||
    'User-Agent-Wiser': 'iPhoneTestTool;iOS6;WiserApp2.0.0',
 | 
			
		||||
    'Content-Type': 'application/javascript',
 | 
			
		||||
    }
 | 
			
		||||
    response = requests.request("POST", url, headers=headers, data=payload, auth=(username, password))
 | 
			
		||||
    return response.json()
 | 
			
		||||
 | 
			
		||||
def get_heating_data():
 | 
			
		||||
    data = poll_genie()
 | 
			
		||||
    return data['updateData']['zones'][0]
 | 
			
		||||
 | 
			
		||||
def get_water_data():
 | 
			
		||||
    data = poll_genie()
 | 
			
		||||
    return data['updateData']['zones'][1]
 | 
			
		||||
							
								
								
									
										42
									
								
								app/lib/utils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								app/lib/utils.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
import datetime
 | 
			
		||||
 | 
			
		||||
def convert_to_real_temp(migenie_value:int)->float:
 | 
			
		||||
    """_summary_
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
        migenie_value (int): _description_
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
        float: _description_
 | 
			
		||||
    """    
 | 
			
		||||
    start = [50,5]
 | 
			
		||||
    if migenie_value == 0:
 | 
			
		||||
        return 0.0
 | 
			
		||||
    else:
 | 
			
		||||
        steps = migenie_value - start[0]
 | 
			
		||||
        return start[1] + .5*steps
 | 
			
		||||
    
 | 
			
		||||
def is_item_on(item_name:int)->bool:
 | 
			
		||||
    """_summary_
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
        item_name (int): _description_
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
        bool: _description_
 | 
			
		||||
    """
 | 
			
		||||
    if item_name > 0:
 | 
			
		||||
        return True
 | 
			
		||||
    else:
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
def format_datetime(date_time:int)->str:
 | 
			
		||||
    """_summary_
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
        date_time (int): _description_
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
        str: _description_
 | 
			
		||||
    """
 | 
			
		||||
    return datetime.datetime.fromtimestamp(date_time).strftime('%d-%m-%Y %H:%M:%S')
 | 
			
		||||
							
								
								
									
										25
									
								
								app/main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								app/main.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
from flask import Flask
 | 
			
		||||
from flask_restful import Api
 | 
			
		||||
from Routes import water, heating
 | 
			
		||||
app = Flask(__name__)
 | 
			
		||||
api = Api(app)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@app.route('/water')
 | 
			
		||||
def water_root():
 | 
			
		||||
    return water.get_water_root()
 | 
			
		||||
 | 
			
		||||
@app.route('/water/status')
 | 
			
		||||
def water_status():
 | 
			
		||||
    return water.get_water_status()
 | 
			
		||||
    
 | 
			
		||||
@app.route('/heating')
 | 
			
		||||
def heating_root():
 | 
			
		||||
    return heating.get_heating_root()
 | 
			
		||||
 | 
			
		||||
@app.route('/heating/status')
 | 
			
		||||
def heating_status():
 | 
			
		||||
    return heating.get_heating_status()
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    app.run(host='0.0.0.0') # run our Flask app
 | 
			
		||||
							
								
								
									
										12
									
								
								dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								dockerfile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
FROM python:3.8-slim
 | 
			
		||||
RUN mkdir /app 
 | 
			
		||||
COPY /app /app
 | 
			
		||||
COPY pyproject.toml /app 
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
ENV PYTHONPATH=${PYTHONPATH}:${PWD} 
 | 
			
		||||
RUN pip3 install poetry
 | 
			
		||||
RUN poetry config virtualenvs.create false
 | 
			
		||||
RUN poetry install --no-dev --no-root
 | 
			
		||||
CMD [ "python", "main.py"]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										343
									
								
								poetry.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										343
									
								
								poetry.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,343 @@
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "aniso8601"
 | 
			
		||||
version = "9.0.1"
 | 
			
		||||
description = "A library for parsing ISO 8601 strings."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = "*"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
dev = ["black", "coverage", "isort", "pre-commit", "pyenchant", "pylint"]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "certifi"
 | 
			
		||||
version = "2022.12.7"
 | 
			
		||||
description = "Python package for providing Mozilla's CA Bundle."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.6"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "charset-normalizer"
 | 
			
		||||
version = "2.1.1"
 | 
			
		||||
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.6.0"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
unicode_backport = ["unicodedata2"]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "click"
 | 
			
		||||
version = "8.1.3"
 | 
			
		||||
description = "Composable command line interface toolkit"
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.7"
 | 
			
		||||
 | 
			
		||||
[package.dependencies]
 | 
			
		||||
colorama = {version = "*", markers = "platform_system == \"Windows\""}
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "colorama"
 | 
			
		||||
version = "0.4.6"
 | 
			
		||||
description = "Cross-platform colored terminal text."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "Flask"
 | 
			
		||||
version = "2.2.2"
 | 
			
		||||
description = "A simple framework for building complex web applications."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.7"
 | 
			
		||||
 | 
			
		||||
[package.dependencies]
 | 
			
		||||
click = ">=8.0"
 | 
			
		||||
importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""}
 | 
			
		||||
itsdangerous = ">=2.0"
 | 
			
		||||
Jinja2 = ">=3.0"
 | 
			
		||||
Werkzeug = ">=2.2.2"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
async = ["asgiref (>=3.2)"]
 | 
			
		||||
dotenv = ["python-dotenv"]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "Flask-RESTful"
 | 
			
		||||
version = "0.3.9"
 | 
			
		||||
description = "Simple framework for creating REST APIs"
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = "*"
 | 
			
		||||
 | 
			
		||||
[package.dependencies]
 | 
			
		||||
aniso8601 = ">=0.82"
 | 
			
		||||
Flask = ">=0.8"
 | 
			
		||||
pytz = "*"
 | 
			
		||||
six = ">=1.3.0"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
docs = ["sphinx"]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "idna"
 | 
			
		||||
version = "3.4"
 | 
			
		||||
description = "Internationalized Domain Names in Applications (IDNA)"
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.5"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "importlib-metadata"
 | 
			
		||||
version = "5.1.0"
 | 
			
		||||
description = "Read metadata from Python packages"
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.7"
 | 
			
		||||
 | 
			
		||||
[package.dependencies]
 | 
			
		||||
zipp = ">=0.5"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"]
 | 
			
		||||
perf = ["ipython"]
 | 
			
		||||
testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "itsdangerous"
 | 
			
		||||
version = "2.1.2"
 | 
			
		||||
description = "Safely pass data to untrusted environments and back."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.7"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "Jinja2"
 | 
			
		||||
version = "3.1.2"
 | 
			
		||||
description = "A very fast and expressive template engine."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.7"
 | 
			
		||||
 | 
			
		||||
[package.dependencies]
 | 
			
		||||
MarkupSafe = ">=2.0"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
i18n = ["Babel (>=2.7)"]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "MarkupSafe"
 | 
			
		||||
version = "2.1.1"
 | 
			
		||||
description = "Safely add untrusted strings to HTML/XML markup."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.7"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "python-dotenv"
 | 
			
		||||
version = "0.21.0"
 | 
			
		||||
description = "Read key-value pairs from a .env file and set them as environment variables"
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.7"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
cli = ["click (>=5.0)"]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "pytz"
 | 
			
		||||
version = "2022.6"
 | 
			
		||||
description = "World timezone definitions, modern and historical"
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = "*"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "requests"
 | 
			
		||||
version = "2.28.1"
 | 
			
		||||
description = "Python HTTP for Humans."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.7, <4"
 | 
			
		||||
 | 
			
		||||
[package.dependencies]
 | 
			
		||||
certifi = ">=2017.4.17"
 | 
			
		||||
charset-normalizer = ">=2,<3"
 | 
			
		||||
idna = ">=2.5,<4"
 | 
			
		||||
urllib3 = ">=1.21.1,<1.27"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
 | 
			
		||||
use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "six"
 | 
			
		||||
version = "1.16.0"
 | 
			
		||||
description = "Python 2 and 3 compatibility utilities"
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "urllib3"
 | 
			
		||||
version = "1.26.13"
 | 
			
		||||
description = "HTTP library with thread-safe connection pooling, file post, and more."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
 | 
			
		||||
secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
 | 
			
		||||
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "Werkzeug"
 | 
			
		||||
version = "2.2.2"
 | 
			
		||||
description = "The comprehensive WSGI web application library."
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.7"
 | 
			
		||||
 | 
			
		||||
[package.dependencies]
 | 
			
		||||
MarkupSafe = ">=2.1.1"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
watchdog = ["watchdog"]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "zipp"
 | 
			
		||||
version = "3.11.0"
 | 
			
		||||
description = "Backport of pathlib-compatible object wrapper for zip files"
 | 
			
		||||
category = "main"
 | 
			
		||||
optional = false
 | 
			
		||||
python-versions = ">=3.7"
 | 
			
		||||
 | 
			
		||||
[package.extras]
 | 
			
		||||
docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"]
 | 
			
		||||
testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
 | 
			
		||||
 | 
			
		||||
[metadata]
 | 
			
		||||
lock-version = "1.1"
 | 
			
		||||
python-versions = "^3.8"
 | 
			
		||||
content-hash = "810250c963183539f8d27111b29094cb16e4d84692a4162296507e76c9bea432"
 | 
			
		||||
 | 
			
		||||
[metadata.files]
 | 
			
		||||
aniso8601 = [
 | 
			
		||||
    {file = "aniso8601-9.0.1-py2.py3-none-any.whl", hash = "sha256:1d2b7ef82963909e93c4f24ce48d4de9e66009a21bf1c1e1c85bdd0812fe412f"},
 | 
			
		||||
    {file = "aniso8601-9.0.1.tar.gz", hash = "sha256:72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973"},
 | 
			
		||||
]
 | 
			
		||||
certifi = [
 | 
			
		||||
    {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
 | 
			
		||||
    {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
 | 
			
		||||
]
 | 
			
		||||
charset-normalizer = [
 | 
			
		||||
    {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"},
 | 
			
		||||
    {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"},
 | 
			
		||||
]
 | 
			
		||||
click = [
 | 
			
		||||
    {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
 | 
			
		||||
    {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
 | 
			
		||||
]
 | 
			
		||||
colorama = [
 | 
			
		||||
    {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
 | 
			
		||||
    {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
 | 
			
		||||
]
 | 
			
		||||
Flask = [
 | 
			
		||||
    {file = "Flask-2.2.2-py3-none-any.whl", hash = "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526"},
 | 
			
		||||
    {file = "Flask-2.2.2.tar.gz", hash = "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b"},
 | 
			
		||||
]
 | 
			
		||||
Flask-RESTful = [
 | 
			
		||||
    {file = "Flask-RESTful-0.3.9.tar.gz", hash = "sha256:ccec650b835d48192138c85329ae03735e6ced58e9b2d9c2146d6c84c06fa53e"},
 | 
			
		||||
    {file = "Flask_RESTful-0.3.9-py2.py3-none-any.whl", hash = "sha256:4970c49b6488e46c520b325f54833374dc2b98e211f1b272bd4b0c516232afe2"},
 | 
			
		||||
]
 | 
			
		||||
idna = [
 | 
			
		||||
    {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
 | 
			
		||||
    {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
 | 
			
		||||
]
 | 
			
		||||
importlib-metadata = [
 | 
			
		||||
    {file = "importlib_metadata-5.1.0-py3-none-any.whl", hash = "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"},
 | 
			
		||||
    {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"},
 | 
			
		||||
]
 | 
			
		||||
itsdangerous = [
 | 
			
		||||
    {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"},
 | 
			
		||||
    {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"},
 | 
			
		||||
]
 | 
			
		||||
Jinja2 = [
 | 
			
		||||
    {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
 | 
			
		||||
    {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
 | 
			
		||||
]
 | 
			
		||||
MarkupSafe = [
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
 | 
			
		||||
    {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
 | 
			
		||||
]
 | 
			
		||||
python-dotenv = [
 | 
			
		||||
    {file = "python-dotenv-0.21.0.tar.gz", hash = "sha256:b77d08274639e3d34145dfa6c7008e66df0f04b7be7a75fd0d5292c191d79045"},
 | 
			
		||||
    {file = "python_dotenv-0.21.0-py3-none-any.whl", hash = "sha256:1684eb44636dd462b66c3ee016599815514527ad99965de77f43e0944634a7e5"},
 | 
			
		||||
]
 | 
			
		||||
pytz = [
 | 
			
		||||
    {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"},
 | 
			
		||||
    {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"},
 | 
			
		||||
]
 | 
			
		||||
requests = [
 | 
			
		||||
    {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"},
 | 
			
		||||
    {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"},
 | 
			
		||||
]
 | 
			
		||||
six = [
 | 
			
		||||
    {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
 | 
			
		||||
    {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
 | 
			
		||||
]
 | 
			
		||||
urllib3 = [
 | 
			
		||||
    {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"},
 | 
			
		||||
    {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"},
 | 
			
		||||
]
 | 
			
		||||
Werkzeug = [
 | 
			
		||||
    {file = "Werkzeug-2.2.2-py3-none-any.whl", hash = "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5"},
 | 
			
		||||
    {file = "Werkzeug-2.2.2.tar.gz", hash = "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f"},
 | 
			
		||||
]
 | 
			
		||||
zipp = [
 | 
			
		||||
    {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"},
 | 
			
		||||
    {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"},
 | 
			
		||||
]
 | 
			
		||||
							
								
								
									
										19
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
[tool.poetry]
 | 
			
		||||
name = "migenie-python"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
description = ""
 | 
			
		||||
authors = ["Karl Hudgell <karl@k-world.me.uk>"]
 | 
			
		||||
readme = "README.md"
 | 
			
		||||
packages = [{include = "migenie_python"}]
 | 
			
		||||
 | 
			
		||||
[tool.poetry.dependencies]
 | 
			
		||||
python = "^3.8"
 | 
			
		||||
Flask = "^2.2.2"
 | 
			
		||||
Flask-RESTful = "^0.3.9"
 | 
			
		||||
requests = "^2.28.1"
 | 
			
		||||
python-dotenv = "^0.21.0"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[build-system]
 | 
			
		||||
requires = ["poetry-core"]
 | 
			
		||||
build-backend = "poetry.core.masonry.api"
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user