PYTHON: mudanças entre as edições
Ir para navegação
Ir para pesquisar
Linha 102: | Linha 102: | ||
data = {} | data = {} | ||
for attr in self.get_attributes(): | for attr in self.get_attributes(): | ||
data.update({attr: self.__getattribute__(attr)}) | if attr == "kwargs": | ||
continue | |||
else: | |||
data.update({attr: self.__getattribute__(attr)}) | |||
return data | return data | ||
def __str__(self): | def __str__(self): |
Edição das 00h32min de 14 de maio de 2024
Python
DATA
PIP
venv/pip.conf
[global] index-url=https://username:password|PAT@pkgs.somewhere.com/something/xxxxxxxxxx/
Reference
CODE
FastApi Controller
import json
from dataclasses import dataclass
from types import SimpleNamespace
from typing import Optional
from src.model.resource import ResourceModel, ResourceModelList
from fastapi import FastAPI, HTTPException
from src.model.provider import ProviderModel
from src.repository.resource import ResourceRepository
from src.service.resource import ResourceService
import inspect
@dataclass(init=True)
class ResourceController:
app: FastAPI
def make_cal(self, obj, all_arguments, method):
try:
signature_values = inspect.signature(method).parameters.values()
all_argument_values = {
parameter.name: all_arguments[parameter.name] for parameter
in signature_values}
return obj(**all_argument_values)
except Exception as e:
raise HTTPException(
status_code=500,
detail="deu ruim.",
headers={"X-Error": e.__str__()}
)
def __post_init__(self):
app = self.app
@app.get("/api/resources", tags=["resource"])
async def get_api_resources(
name: Optional[str] | None = None,
before: Optional[str] | None = None,
after: Optional[str] | None = None
) :
"""
Action:
- Will return a list of resources.
Parameters:
- **name**: The name of the resource.
- **before**: An EPOCH number to match resources collected before specified dateTime.
- **after**: An EPOCH number to match resources collected after specified dateTime.
"""
resource_service = ResourceService()
return self.make_cal(
resource_service.get_resources,
locals(),
get_api_resources
)
app = FastAPI()
resource_controller = ResourceController(app=app)
Model Class
import json
from dataclasses import dataclass
from types import SimpleNamespace
from typing import Optional
@dataclass(init=True)
class User:
name: Optional[str] = None
address: Optional[str] = None
def __init__(self, **kwargs):
self.__dict__.update(**kwargs)
self.kwargs = kwargs
def __add__(self, other):
data = {}
for attr in self.get_attributes():
if other.__getattribute__(attr) is None:
data.update({attr: self.__getattribute__(attr)})
else:
data.update({attr: other.__getattribute__(attr)})
return __class__(**data)
def __repr__(self):
data = {}
for attr in self.get_attributes():
if attr == "kwargs":
continue
else:
data.update({attr: self.__getattribute__(attr)})
return data
def __str__(self):
return json.dumps(self.__repr__())
def __len__(self):
count = 0
for attr in self.get_attributes():
if self.__getattribute__(attr) is not None:
count = count + 1
return count
def to_dict(self):
return self.__repr__()
def get_attributes(self):
return [attr for attr in dir(self) if not callable(getattr(self, attr)) and not attr.startswith("__")]
def get_methods(self):
return [attr for attr in dir(self) if callable(getattr(self, attr)) and not attr.startswith("__")]
def to_simple_namespace(self):
return json.loads(self.__str__(), object_hook=lambda d: SimpleNamespace(**d))
def to_str(self):
return self.__str__()
def gen_gettersetters(self):
for attr in self.get_attributes():
attr_type = str(type(getattr(self, attr))).split("'")[1]
print(f"""
def set_{attr}(self, {attr}: {attr_type}):
self.{attr} = {attr}
def get_{attr}(self) -> {attr_type}:
return self.{attr}""")
if __name__ == "__main__":
ale1 = User(name="Ale")
ale2 = User(address="street somewhere")
print(ale1)
print(ale2)
ale = ale1 + ale2
print(ale)
print(len(ale1))
print(len(ale2))
print(len(ale))
SimpleNamespaces
sn = json.loads(json_data, object_hook=lambda d: SimpleNamespace(**d))
sn = SimpleNamespace(hetero_list=['aa', SimpleNamespace(y='ll')])
json.loads(json.dumps(sn, default=lambda s: vars(s)))
setup.py
"""Python Setup"""
from setuptools import setup, find_packages
VERSION = '0.0.10'
with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
setup(
name="my-app",
version=VERSION,
description="Template my-app",
long_description=long_description,
author = "Alexandre D'Amato",
author_email = "devops@clusterlab.com.br",
license='MIT',
install_requires=[
'requests==2.31.0'
],
extras_require={},
classifiers=[],
packages=find_packages(exclude=['docs', 'tests']),
python_requires=">=3.10",
entry_points={
'console_scripts': [
'my-app=myapp.__main__:main',
],
},
)
Frameworks
Mirroring a repository
Making a mirror of the docker-py package and using it on another machine without internet access.
virtualenv -p $(which python3) pypi-mirror
source pypi-mirror/bin/activate
mkdir data
pip install python-pypi-mirror
pypi-mirror download -d data docker-py
pypi-mirror create -d data/ -m simple
WEB server
- python2.7 -m SimpleHTTPServer 8383
- python3 -m http.server 8383
Codificação de terminal
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
Ansible em WSL
apt install python-txwinrm python3-winrm -y pip install "pywinrm>=0.2.2"
Articles
- OpenCV Histogram
- OpenCV Histogram Calculation
- Structuring Your Project
- https://realpython.com/intro-to-python-threading/
- https://www.tutorialspoint.com/python/python_multithreading.htm
- https://docs.python.org/3/library/threading.html