Untitled
unknown
python
10 months ago
4.8 kB
1
Indexable
from enum import Enum from datetime import datetime def int_fix(s: any, default = None): """ Función que covierte un valor a un entero, en caso de que no sea un valor valido retorna un caracter vacio Args: s (any): Valor de tipo no especificado Returns: _type_: int or any """ try: return int(float(s)) except (ValueError, TypeError): return s def float_fix(n: any): """ Intenta convertir el valor n a un número de punto flotante. Args: n: El valor que se intentará convertir a un número de punto flotante. Returns: Un número de punto flotante que representa el valor de n si es posible convertirlo, de lo contrario devuelve n. """ try: return float(n) except: return n def float_round_fix(n: any, r=2): """ Intenta convertir el valor n a un número de punto flotante con solo r decimales sin aproximar. Args: n (any): El valor que se intentará convertir a un número de punto flotante con solo r decimales. r (int): La cantidad de decimales a mantener (por defecto 2). Returns: float: Un número de punto flotante con solo r decimales que representa el valor de n si es posible convertirlo, de lo contrario devuelve n. """ if n: try: n = str(n) if "." in n: integer_part, decimal_part = n.split('.') return float(integer_part + "." + decimal_part[:r]) except: return n return n def text_fix(s: any): """ Función que convierte un valor a String, si el valor es 'null' or 'NULL' retornará None Args: s (any): Valor de tipo no especificado Returns: _type_: str or None """ return str(s) if s is not None and str(s).lower() != 'null' else None def moneda_fix(numero): """ Funcion para formatear moneda """ partes = str(numero).split('.') entero = partes[0] decimal = (partes[1] if len(partes) > 1 else '00')[:2] if len(decimal) == 1: decimal = decimal + '0' entero = entero[::-1] entero = ','.join(entero[i:i+3] for i in range(0, len(entero), 3)) entero = entero[::-1] # return "RD$ " + entero + "." + decimal return entero + "." + decimal #Convierte fecha a formato (01-2023) - (01-11-2023) def date_fix(value, separator='-'): """ Esta función toma un valor de fecha en formato 'YYYYMM' o 'YYYYMMDD' y un separador opcional, y devuelve la fecha en el formato 'DD-MM-YYYY' o 'MM-YYYY' respectivamente. Args: value (str): El valor de fecha en formato 'YYYYMM' o 'YYYYMMDD'. separator (str, opcional): El separador a utilizar en el resultado. Por defecto es '-'. Returns: str: La fecha formateada en el formato especificado, si no es posible convertir retorna el valor de entrada. """ try: if len(value) == 6: fecha = datetime.strptime(value, "%Y%m").strftime("%m" + separator + "%Y") else: fecha = datetime.strptime(value, "%Y%m%d").strftime("%d" + separator + "%m" + separator + "%Y") except: fecha = value return fecha ####################### Funciones PE ####################### # Función para quitar el espacio de nombres de una etiqueta def remove_namespace(tag): if '}' in tag: return tag.split('}')[1] return tag # Función para convertir un elemento XML a un diccionario recursivamente def xml_to_dict(element): dict_data = {} if element.attrib: dict_data.update(element.attrib) if element.text and element.text.strip(): dict_data[remove_namespace(element.tag)] = element.text.strip() for child in element: if len(child) == 0: dict_data[remove_namespace(child.tag)] = child.text.strip() if child.text else None else: child_dict = xml_to_dict(child) child_tag = remove_namespace(child.tag) if child_tag in dict_data: if not isinstance(dict_data[child_tag], list): dict_data[child_tag] = [dict_data[child_tag]] dict_data[child_tag].append(child_dict) else: dict_data[child_tag] = child_dict return dict_data # Comprueba si un Dict posee KEY def default_value(data, keys, default=None): try: value = data for key in keys: value = value.get(key) if value is None: return default return value except (AttributeError, KeyError): return default
Editor is loading...