File: data.py

package info (click to toggle)
openfpgaloader 0.13.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 34,300 kB
  • sloc: cpp: 23,693; python: 555; makefile: 64; tcl: 62; xml: 41
file content (118 lines) | stat: -rw-r--r-- 3,237 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
from typing import List, Union
from pathlib import Path
from dataclasses import dataclass
from yaml import load as yaml_load, Loader as yaml_loader, dump as yaml_dump
from tabulate import tabulate


ROOT = Path(__file__).resolve().parent


@dataclass
class Board:
    ID: str
    Description: str = None
    URL: str = None
    FPGA: str = None
    Memory: str = None
    Flash: str = None
    Constraints: str = None
    SPIFlash: str = None


def ReadBoardDataFromYAML():
    with (ROOT / 'boards.yml').open('r', encoding='utf-8') as fptr:
        data = [Board(**item) for item in yaml_load(fptr, yaml_loader)]
    return data


def BoardDataToTable(data, tablefmt: str = "rst"):
    def processConstraints(constraints):
        if constraints is None:
            return None
        if isinstance(constraints, str):
            constraints = [constraints]
        return " ".join([f":ref:`{item} ➚ <constraints:boards:{item.lower()}>`" for item in constraints])

    return tabulate(
        [
            [
                item.ID,
                f"`{item.Description} <{item.URL}>`__",
                item.FPGA,
                item.Memory,
                item.Flash,
                processConstraints(item.Constraints)
            ] for item in data
        ],
        headers=["Board name", "Description", "FPGA", "Memory", "Flash", "Constraints"],
        tablefmt=tablefmt
    )


@dataclass
class FPGA:
    Model: Union[str, List[str]]
    Description: str
    URL: str = None
    Memory: str = None
    Flash: str = None


def ReadFPGADataFromYAML():
    with (ROOT / 'FPGAs.yml').open('r', encoding='utf-8') as fptr:
        data = yaml_load(fptr, yaml_loader)
        for vendor, content in data.items():
            data[vendor] = [FPGA(**item) for item in content]
    return data


def FPGADataToTable(data, tablefmt: str = "rst"):
    return tabulate(
        [
            [
                f":ref:`{vendor} <{vendor.lower().replace(' ','')}>`",
                f"`{item.Description} <{item.URL}>`__",
                item.Model if isinstance(item.Model, str) else ', '.join(item.Model),
                item.Memory,
                item.Flash
            ] for vendor, content in data.items() for item in content
        ],
        headers=["Vendor", "Description", "Model", "Memory", "Flash"],
        tablefmt=tablefmt
    )


@dataclass
class Cable:
    Name: str
    Description: str
    URL: str = None
    Note: str = None


def ReadCableDataFromYAML():
    with (ROOT / 'cable.yml').open('r', encoding='utf-8') as fptr:
        data = yaml_load(fptr, yaml_loader)
        for keyword, content in data.items():
            data[keyword] = [Cable(**item) for item in content]
    return data


def CableDataToTable(data, tablefmt: str = "rst"):
    def processURL(name, url):
        if url is None:
            return f"{name}"
        else:
            return f"`{name} <{url}>`__"
    return tabulate(
        [
            [
                f"{vendor}",
                processURL(item.Name, item.URL),
                item.Description
            ] for vendor, content in data.items() for item in content
        ],
        headers=["keyword", "Name", "Description"],
        tablefmt=tablefmt
    )