Skip to main content

A fixture generator based on type annotations.

Project description

Fistro

pypi codecov

A fixture generator based on type annotations.

Examples

from dataclasses import dataclass
from datetime import datetime, date
from typing import List

from fistro.fistro import generate


@dataclass
class Employee:
   id: int
   birthday: date
   last_access: datetime
   password: str
   number_plates: List[int]
   name: str = 'Carlos Sánchez'

employee = generate(Employee)()
print(employee)

It will show something like this:

Employee(id=5809893100, birthday=datetime.date(559, 3, 6), last_access=datetime.datetime(1053, 8, 29, 19, 11, 14), password="iFZ>?)V0'", number_plates=[85863115, 3528889142, 2818728907, 6043092538, 4985672707], name='Carlos Sánchez')

generate function can be called with to_json or to_dict boolean pararameters to return json or dict representation respectively:

class AreaOfCompany(BaseModel):                     
    enable: bool                                    
    riskOwner: str                                  
    description: str                                
    name: str                                       
    code: str
    
print(fistro.generate(AreaOfCompany, as_dict=True))
>>> {'enable': True, 'riskOwner': 'LqPqS\x0c{kZ', 'description': 'k1917GvOV', 'name': '`;ORxzQ7i', 'code': 'w2 |P\rEps'}
print(fistro.generate(AreaOfCompany, as_json=True))
>>> {"enable": true, "riskOwner": "h@Ij34u?H", "description": ",R,G%0<y#", "name": "K4.\u000b:lK!}", "code": "fvitVYrk3"}

Another useful functions are generate_from_json and get_class_body_from_annotations:

from json import loads

from fistro.fistro import generate_from_json, get_class_body_from_annotations

specific_str = """{
            "_id": "5ae09b3947467b00111e7bf6",
            "localExposure": 0,
            "answer": "mitigate",
            "idRisk": "5ae09b3947467b00111e7bf6",
            "version": 4,
            "country": "BR",
            "company": "0185",
            "currency": "BRL",
            "zone": "DIRT8",
            "internalRef": "RSP-BR-0185-DIRT8-105",
            "creationDate": "2017-12-13T23:00:00.000Z",
            "title": "Tributário: Contribuições Previdenciárias sobre Plano de Stock Options",
            "riskCategory": {
                "es": "22. Contingencias tributarias",
                "en": "22. Tax contingencies",
                "pt": "22. Contingências Fiscais"
            },
            "evaluationType": "quantitative",
            "basicRef": "26376309-2cc2-4a0d-9c6a-373e0a7d9043",
            "localQUANTITATIVENetCASHFLOW": 0,
            "euroQUANTITATIVENetCASHFLOW": 0,
            "localQUANTITATIVEGrossCASHFLOW": 241000000,
            "euroQUANTITATIVEGrossCASHFLOW": 57324742,
            "probability": "veryPossible",
            "status": "open",
            "commissionApproval": false,
            "companyRegistry": true,
            "companyCode": "0185",
            "IDNotification": "0aa0370e-e6d6-405c-a619-a47da0602dee",
            "localQUANTITATIVEGrossOIBDA": 241000000,
            "localQUANTITATIVEGrossCAPEX": 0,
            "localQUANTITATIVENetOIBDA": 0,
            "localQUANTITATIVENetCAPEX": 0,
            "euroQUANTITATIVEGrossOIBDA": 57324742,
            "euroQUANTITATIVEGrossCAPEX": 0,
            "euroQUANTITATIVENetOIBDA": 0,
            "euroQUANTITATIVENetCAPEX": 0,
            "hierarchy": "principal",
            "hierarchySubsidiaries": [],
            "owner": "Vasco Gruber"
        }"""

specific_json = loads(specific_str)

the_class = generate_from_json(specific_json)
print(get_class_body_from_annotations(the_class.__annotations__))

It will print:

_id: str
localExposure: int
answer: str
idRisk: str
version: int
country: str
company: str
currency: str
zone: str
internalRef: str
creationDate: str
title: str
riskCategory: typing.Dict[str, str]
evaluationType: str
basicRef: str
localQUANTITATIVENetCASHFLOW: int
euroQUANTITATIVENetCASHFLOW: int
localQUANTITATIVEGrossCASHFLOW: int
euroQUANTITATIVEGrossCASHFLOW: int
probability: str
status: str
commissionApproval: bool
companyRegistry: bool
companyCode: str
IDNotification: str
localQUANTITATIVEGrossOIBDA: int
localQUANTITATIVEGrossCAPEX: int
localQUANTITATIVENetOIBDA: int
localQUANTITATIVENetCAPEX: int
euroQUANTITATIVEGrossOIBDA: int
euroQUANTITATIVEGrossCAPEX: int
euroQUANTITATIVENetOIBDA: int
euroQUANTITATIVENetCAPEX: int
hierarchy: str
hierarchySubsidiaries: typing.List[typing.Any]
owner: str

Installation

pip install fistro

Credits

In memoriam of Chiquito de la Calzada.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fistro-0.3.0.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

fistro-0.3.0-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file fistro-0.3.0.tar.gz.

File metadata

  • Download URL: fistro-0.3.0.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.11 CPython/3.10.0 Linux/5.10.60.1-microsoft-standard-WSL2

File hashes

Hashes for fistro-0.3.0.tar.gz
Algorithm Hash digest
SHA256 ebb20642f694716897a5b7a8e5cf078cc396e4931ec51aec8f0fd3a8e3f6f5e8
MD5 ce9ae87882ffaf7b6f665ea982fd8a33
BLAKE2b-256 8e37561823bf96145d8b67e1eae23ae2dc5b02edcfff905f40991aee8161297c

See more details on using hashes here.

File details

Details for the file fistro-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: fistro-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.11 CPython/3.10.0 Linux/5.10.60.1-microsoft-standard-WSL2

File hashes

Hashes for fistro-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9e1661766cca0d001b3b25129e439f0f1e249dab287f2ada4b7a5ec3decee1e4
MD5 327e59635fce628701fa5299913d8a7a
BLAKE2b-256 8340a69580f86299f050b2c72e2d4b7913c01f7802a929064ca9439bbb6eeeb6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page