diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae0011d..15921e1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,7 +19,10 @@ jobs: - name: Install Python dependencies run: | pip install poetry - poetry install --no-dev + poetry install + - name: Run Test + run: | + poetry run pytest --no-cov # - name: Install Node dependencies # run: npm install # - run: cp .env.example .env diff --git a/.github/workflows/ci-changelog.yml b/.github/workflows/ci-changelog.yml index ab4ecf7..8ae1372 100644 --- a/.github/workflows/ci-changelog.yml +++ b/.github/workflows/ci-changelog.yml @@ -14,13 +14,13 @@ jobs: with: ref: master - name: Update Changelog - uses: heinrichreimer/github-changelog-generator-action@v2.1.1 + uses: heinrichreimer/github-changelog-generator-action@v2.2 with: token: ${{ secrets.GITHUB_TOKEN }} issues: true issuesWoLabels: true - pullRequests: false - prWoLabels: false + pullRequests: true + prWoLabels: true unreleased: true addSections: '{"documentation":{"prefix":"**Documentation:**","labels":["documentation"]}}' - uses: stefanzweifel/git-auto-commit-action@v4 diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index 3dceef4..778aeb3 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -22,7 +22,7 @@ jobs: python-version: ${{ env.PYTHON_VERSION }} - name: Python Poetry Action - uses: abatilo/actions-poetry@v2.1.0 + uses: abatilo/actions-poetry@v2.1.2 with: poetry-version: ${{ env.POETRY_VERSION }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index eefa920..0d7897e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: with: ref: master - name: Update Changelog - uses: heinrichreimer/github-changelog-generator-action@v2.1.1 + uses: heinrichreimer/github-changelog-generator-action@v2.2 with: token: ${{ secrets.GITHUB_TOKEN }} issues: true @@ -53,7 +53,7 @@ jobs: - name: Get Changelog Entry id: changelog_reader - uses: mindsers/changelog-reader-action@v1 + uses: mindsers/changelog-reader-action@v2 with: version: ${{ env.CURRENT_VERSION }} path: ./CHANGELOG.md diff --git a/.gitignore b/.gitignore index c581b61..5101875 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,6 @@ maker_hub/static/cache_manifest.json !.vscode/launch.json site/* +app/coverage.xml +coverage.xml +htmlcov diff --git a/CHANGELOG.md b/CHANGELOG.md index 56a3b4f..4ce5a61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ - Add pages site \(docs\) link to README [\#51](https://github.com/madeinoz67/maker-hub/issues/51) +**Closed issues:** + +- Update About page with new Repo [\#59](https://github.com/madeinoz67/maker-hub/issues/59) + ## [v2021.0.0-dev1](https://github.com/madeinoz67/maker-hub/tree/v2021.0.0-dev1) (2021-05-22) **Implemented enhancements:** diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..71e4f7c --- /dev/null +++ b/Pipfile @@ -0,0 +1,11 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] + +[dev-packages] + +[requires] +python_version = "3.9" diff --git a/app/api/.gitkeep b/app/api/__init__.py similarity index 100% rename from app/api/.gitkeep rename to app/api/__init__.py diff --git a/app/api/part_api.py b/app/api/part_api.py new file mode 100644 index 0000000..9eeeab5 --- /dev/null +++ b/app/api/part_api.py @@ -0,0 +1,24 @@ +import fastapi + +from app.schema.datatable import DataTableRequest, DataTableResponse +from app.services import part_service + +api = fastapi.APIRouter() + + +@api.post("/api/part/datatable") +async def table_datasource(request: DataTableRequest) -> DataTableResponse: + """Parts Datatable Source + + Returns: + [TableResponse]: [DataTable Ajax Response] + """ + + draw = request.draw + + data = await part_service.get_latest_parts( + start=request.start, limit=request.length + ) + return DataTableResponse( + draw=draw, recordsTotal=100, recordsFiltered=100, data=data + ) diff --git a/app/main.py b/app/main.py index 842b1dc..2610e9f 100644 --- a/app/main.py +++ b/app/main.py @@ -1,7 +1,7 @@ import os import fastapi import fastapi_chameleon -import uvicorn + from starlette.staticfiles import StaticFiles from dotenv import load_dotenv @@ -11,8 +11,13 @@ from app.views import storage from app.views import reports +from app.api import part_api -app = fastapi.FastAPI() +app = fastapi.FastAPI( + title="Maker Hub", + description="Personal Hub for makers: Manage Parts, projects, ideas, documentation, parts and footprints etc", + version="2021.0.0-dev1", +) def main(): @@ -37,6 +42,11 @@ def configure_routes(): static_folder = os.path.join(folder, "static") static_folder = os.path.abspath(static_folder) app.mount("/static", StaticFiles(directory=static_folder), name="static") + + # API endpoints + app.include_router(part_api.api) + + # Webpages app.include_router(home.router) app.include_router(parts.router) app.include_router(projects.router) diff --git a/app/schema/__init__.py b/app/schema/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/schema/datatable.py b/app/schema/datatable.py new file mode 100644 index 0000000..c22ebe6 --- /dev/null +++ b/app/schema/datatable.py @@ -0,0 +1,75 @@ +from typing import List, Optional + +from pydantic import BaseModel + +from app.schema.part import Part + + +class Search(BaseModel): + value: str = "" + regex: bool = False + + +class Order(BaseModel): + column: int + dir: str = "asc" + + +class Column(BaseModel): + name: str + data: str + searchable: bool = True + orderable: bool = True + search: Search + + +class DataTableBase(BaseModel): + draw: int + + +class DataTableRequest(DataTableBase): + start: int + length: int + search: Search + order: List[Order] + columns: List[Column] + + +class DataTableResponse(DataTableBase): + recordsTotal: int + recordsFiltered: int + data: List[Part] = [] + error: Optional[str] = None + + +# Example DataTable generated Query +# { +# "draw": 1, +# "columns": [ +# { +# "data": "id", +# "name": "", +# "searchable": false, +# "orderable": false, +# "search": {"value": "", "regex": false}, +# }, +# { +# "data": "name", +# "name": "", +# "searchable": true, +# "orderable": true, +# "search": {"value": "", "regex": false}, +# }, +# { +# "data": "description", +# "name": "", +# "searchable": true, +# "orderable": true, +# "search": {"value": "", "regex": false}, +# }, +# ], +# "order": [{"column": 1, "dir": "asc"}], +# "start": 0, +# "length": 100, +# "search": {"value": "", "regex": false}, +# } diff --git a/app/schema/part.py b/app/schema/part.py new file mode 100644 index 0000000..00b994d --- /dev/null +++ b/app/schema/part.py @@ -0,0 +1,7 @@ +from pydantic import BaseModel + + +class Part(BaseModel): + id: str + name: str + description: str diff --git a/app/services/part_service.py b/app/services/part_service.py index bad3fa7..3fbdfdc 100644 --- a/app/services/part_service.py +++ b/app/services/part_service.py @@ -1,33 +1,526 @@ from typing import List -def get_part_count() -> int: +async def get_part_count() -> int: return 283 -def get_total_stock() -> int: - return 1_00 +async def get_total_stock() -> int: + return 1_000 -def get_stock_value() -> int: - return 1_500 +async def get_stock_value() -> float: + return 1_500.00 -def get_latest_parts(limit: int = 5) -> List: - return [ +async def get_latest_parts( + start: int = 0, limit: int = 5 +) -> List: # TODO change return to List[Part] when db implemented + + start = max(0, start) + limit = max(0, limit) + + data = [ + { + "id": 1, + "name": "felis", + "description": "feugiat non pretium quis lectus suspendisse potenti in eleifend quam a odio in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis molestie lorem quisque ut erat", + }, + { + "id": 2, + "name": "adipiscing", + "description": "praesent blandit nam nulla integer pede justo lacinia eget tincidunt eget tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus", + }, + { + "id": 3, + "name": "augue", + "description": "leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin eu mi nulla ac enim in tempor turpis nec euismod scelerisque quam turpis adipiscing lorem vitae mattis nibh ligula nec sem duis aliquam convallis nunc proin at turpis a pede posuere", + }, + { + "id": 4, + "name": "vulputate", + "description": "amet lobortis sapien sapien non mi integer ac neque duis bibendum morbi non quam nec dui luctus rutrum nulla tellus in sagittis dui vel nisl duis ac nibh fusce lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in", + }, + { + "id": 5, + "name": "vestibulum", + "description": "porttitor id consequat in consequat ut nulla sed accumsan felis ut at dolor quis odio consequat varius integer ac", + }, + { + "id": 6, + "name": "massa", + "description": "lectus aliquam sit amet diam in magna bibendum imperdiet nullam orci pede venenatis non sodales sed tincidunt eu felis fusce posuere felis sed lacus morbi sem mauris laoreet ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem", + }, + { + "id": 7, + "name": "fusce", + "description": "faucibus cursus urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at velit vivamus vel nulla eget eros", + }, + { + "id": 8, + "name": "non", + "description": "turpis a pede posuere nonummy integer non velit donec diam neque vestibulum eget vulputate ut ultrices vel augue vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae donec pharetra magna", + }, + { + "id": 9, + "name": "turpis", + "description": "nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum in hac habitasse", + }, + { + "id": 10, + "name": "eu", + "description": "in sapien iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc donec quis", + }, + { + "id": 11, + "name": "est", + "description": "molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet", + }, + { + "id": 12, + "name": "vestibulum", + "description": "suspendisse potenti cras in purus eu magna vulputate luctus cum sociis natoque penatibus et magnis dis parturient montes", + }, + { + "id": 13, + "name": "turpis", + "description": "turpis elementum ligula vehicula consequat morbi a ipsum integer a nibh in quis justo maecenas rhoncus aliquam lacus morbi quis tortor id nulla ultrices aliquet maecenas leo odio condimentum id luctus nec molestie sed justo pellentesque viverra pede ac diam cras pellentesque volutpat dui", + }, + { + "id": 14, + "name": "cum", + "description": "vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae mauris viverra diam vitae quam suspendisse potenti nullam porttitor lacus at turpis donec posuere metus vitae ipsum aliquam non mauris morbi non lectus aliquam sit amet diam in magna bibendum imperdiet", + }, + { + "id": 15, + "name": "nulla", + "description": "id nulla ultrices aliquet maecenas leo odio condimentum id luctus nec molestie sed justo pellentesque viverra pede ac diam cras pellentesque volutpat dui maecenas tristique est et tempus semper est quam pharetra magna ac consequat metus sapien ut nunc vestibulum ante ipsum", + }, + { + "id": 16, + "name": "justo", + "description": "tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat", + }, + { + "id": 17, + "name": "volutpat", + "description": "consequat varius integer ac leo pellentesque ultrices mattis odio donec vitae nisi nam ultrices libero non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at", + }, + { + "id": 18, + "name": "mi", + "description": "ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae donec pharetra magna vestibulum aliquet ultrices erat tortor sollicitudin mi sit amet lobortis sapien sapien non mi integer ac neque duis bibendum morbi non quam nec dui luctus rutrum nulla tellus in sagittis", + }, + { + "id": 19, + "name": "proin", + "description": "elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget congue", + }, + { + "id": 20, + "name": "habitasse", + "description": "urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at velit vivamus vel nulla", + }, + { + "id": 21, + "name": "ultrices", + "description": "sapien cum sociis natoque penatibus et magnis dis parturient montes nascetur ridiculus mus etiam vel augue vestibulum rutrum rutrum neque aenean auctor gravida sem praesent id massa id nisl venenatis lacinia aenean sit amet justo morbi ut odio cras mi pede", + }, + { + "id": 22, + "name": "ante", + "description": "lobortis sapien sapien non mi integer ac neque duis bibendum morbi non quam nec", + }, + { + "id": 23, + "name": "eget", + "description": "in hac habitasse platea dictumst etiam faucibus cursus urna ut", + }, + { + "id": 24, + "name": "pellentesque", + "description": "blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum neque sapien placerat ante nulla justo aliquam", + }, { - "id": "cfc3w1ypx6g6x81ftygyzhk4ak", - "name": "DMG1012T-7", - "description": "Transistor: N-MOSFET; unipolar; 20V; 0.45A; 0.28W; SOT523", + "id": 25, + "name": "elit", + "description": "vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae mauris viverra diam vitae quam suspendisse potenti nullam porttitor lacus", }, { - "id": "fv5vatbcprgx2910n2h3czc1xv", - "name": "SK-3296S-01-L1", - "description": "SPDT 50mA @ 12VDC 12V On-On SMD Toggle Switches RoHS", + "id": 26, + "name": "tempus", + "description": "cursus urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy", }, { - "id": "ath9dj6w8pjjf94g2sysfmv3f3", - "name": "AO3400A", - "description": "N-Channel 30V 5.8A 1.4V @ 250uA 28mΩ @ 5.8A,10V 1.4W MOSFET", + "id": 27, + "name": "metus", + "description": "auctor sed tristique in tempus sit amet sem fusce consequat nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus", }, - ][:limit] + { + "id": 28, + "name": "turpis", + "description": "donec ut mauris eget massa tempor convallis nulla neque libero convallis eget eleifend luctus ultricies eu nibh quisque id justo sit amet sapien dignissim vestibulum vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae nulla dapibus dolor vel est donec odio justo sollicitudin", + }, + { + "id": 29, + "name": "sollicitudin", + "description": "ac nibh fusce lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in eleifend quam a odio in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis molestie lorem quisque ut", + }, + { + "id": 30, + "name": "nullam", + "description": "hac habitasse platea dictumst aliquam augue quam sollicitudin vitae consectetuer eget rutrum at lorem integer tincidunt ante vel ipsum praesent blandit lacinia erat vestibulum sed magna at nunc commodo placerat praesent blandit nam nulla integer pede justo lacinia", + }, + { + "id": 31, + "name": "integer", + "description": "sem mauris laoreet ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem sed sagittis nam congue risus semper porta volutpat quam pede", + }, + { + "id": 32, + "name": "in", + "description": "turpis a pede posuere nonummy integer non velit donec diam neque vestibulum eget vulputate ut ultrices vel augue vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae", + }, + { + "id": 33, + "name": "volutpat", + "description": "suspendisse accumsan tortor quis turpis sed ante vivamus tortor duis mattis egestas metus aenean fermentum donec ut mauris eget massa tempor convallis nulla neque libero convallis eget eleifend luctus ultricies eu nibh quisque id justo sit amet sapien dignissim vestibulum vestibulum ante ipsum primis", + }, + { + "id": 34, + "name": "id", + "description": "imperdiet nullam orci pede venenatis non sodales sed tincidunt eu felis fusce posuere felis sed lacus morbi sem mauris laoreet ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem sed sagittis nam", + }, + { + "id": 35, + "name": "et", + "description": "nulla elit ac nulla sed vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus", + }, + { + "id": 36, + "name": "augue", + "description": "accumsan odio curabitur convallis duis consequat dui nec nisi volutpat eleifend donec ut dolor morbi vel lectus in quam fringilla rhoncus mauris enim leo rhoncus", + }, + { + "id": 37, + "name": "faucibus", + "description": "arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo in hac habitasse platea dictumst", + }, + { + "id": 38, + "name": "morbi", + "description": "enim blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum neque sapien placerat ante nulla justo aliquam quis turpis eget", + }, + { + "id": 39, + "name": "leo", + "description": "morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus auctor sed tristique in tempus sit amet sem fusce consequat nulla nisl nunc nisl duis bibendum felis sed interdum", + }, + { + "id": 40, + "name": "curae", + "description": "interdum in ante vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae", + }, + { + "id": 41, + "name": "dapibus", + "description": "nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum", + }, + { + "id": 42, + "name": "duis", + "description": "eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec", + }, + { + "id": 43, + "name": "a", + "description": "eu felis fusce posuere felis sed lacus morbi sem mauris laoreet ut", + }, + { + "id": 44, + "name": "lorem", + "description": "pede malesuada in imperdiet et commodo vulputate justo in blandit ultrices enim lorem ipsum dolor sit amet consectetuer adipiscing elit proin interdum mauris", + }, + { + "id": 45, + "name": "risus", + "description": "amet eros suspendisse accumsan tortor quis turpis sed ante vivamus tortor duis mattis", + }, + { + "id": 46, + "name": "in", + "description": "cursus id turpis integer aliquet massa id lobortis convallis tortor risus dapibus augue vel accumsan tellus nisi eu orci mauris lacinia sapien quis libero nullam sit amet turpis elementum ligula vehicula consequat morbi a ipsum integer a nibh in quis justo maecenas rhoncus aliquam", + }, + { + "id": 47, + "name": "vel", + "description": "feugiat et eros vestibulum ac est lacinia nisi venenatis tristique fusce congue diam id ornare imperdiet sapien urna pretium nisl ut volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis", + }, + { + "id": 48, + "name": "varius", + "description": "felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec", + }, + { + "id": 49, + "name": "vestibulum", + "description": "maecenas tristique est et tempus semper est quam pharetra magna ac consequat metus sapien ut nunc vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia", + }, + { + "id": 50, + "name": "pulvinar", + "description": "nulla sed vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum ac lobortis vel dapibus at diam", + }, + { + "id": 51, + "name": "amet", + "description": "proin risus praesent lectus vestibulum quam sapien varius ut blandit non interdum in ante vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae duis faucibus accumsan odio curabitur convallis duis consequat", + }, + { + "id": 52, + "name": "faucibus", + "description": "sed vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque", + }, + { + "id": 53, + "name": "vulputate", + "description": "sed lacus morbi sem mauris laoreet ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem sed sagittis nam congue risus semper porta volutpat quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam molestie nibh in lectus pellentesque at nulla suspendisse potenti cras in purus eu", + }, + { + "id": 54, + "name": "ut", + "description": "lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in eleifend quam a odio in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla", + }, + { + "id": 55, + "name": "dui", + "description": "dolor sit amet consectetuer adipiscing elit proin interdum mauris non ligula pellentesque ultrices phasellus id sapien in sapien iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget", + }, + { + "id": 56, + "name": "sit", + "description": "ac nulla sed vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum ac", + }, + { + "id": 57, + "name": "tellus", + "description": "pellentesque ultrices phasellus id sapien in sapien iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt", + }, + { + "id": 58, + "name": "magnis", + "description": "et eros vestibulum ac est lacinia nisi venenatis tristique fusce congue diam id ornare imperdiet sapien urna pretium nisl", + }, + { + "id": 59, + "name": "nisl", + "description": "in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum neque sapien placerat ante nulla justo aliquam", + }, + { + "id": 60, + "name": "tortor", + "description": "nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit", + }, + { + "id": 61, + "name": "luctus", + "description": "risus dapibus augue vel accumsan tellus nisi eu orci mauris lacinia sapien quis libero nullam sit amet turpis elementum ligula vehicula consequat morbi a ipsum integer a nibh in", + }, + { + "id": 62, + "name": "nisi", + "description": "elit proin risus praesent lectus vestibulum quam sapien varius ut blandit non interdum in ante vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae duis faucibus accumsan odio curabitur convallis duis consequat dui nec nisi volutpat eleifend donec", + }, + { + "id": 63, + "name": "velit", + "description": "nulla integer pede justo lacinia eget tincidunt eget tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus auctor sed tristique in tempus sit amet sem fusce consequat", + }, + { + "id": 64, + "name": "mauris", + "description": "duis faucibus accumsan odio curabitur convallis duis consequat dui nec nisi volutpat eleifend donec ut dolor morbi vel lectus in quam fringilla", + }, + { + "id": 65, + "name": "nulla", + "description": "nullam porttitor lacus at turpis donec posuere metus vitae ipsum aliquam non mauris morbi non lectus aliquam sit amet diam in magna", + }, + { + "id": 66, + "name": "rutrum", + "description": "mauris non ligula pellentesque ultrices phasellus id sapien in sapien", + }, + { + "id": 67, + "name": "rhoncus", + "description": "platea dictumst aliquam augue quam sollicitudin vitae consectetuer eget rutrum at lorem integer tincidunt ante vel ipsum praesent", + }, + { + "id": 68, + "name": "odio", + "description": "non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed vel enim sit amet nunc viverra dapibus", + }, + { + "id": 69, + "name": "quis", + "description": "ultrices posuere cubilia curae nulla dapibus dolor vel est donec odio justo sollicitudin ut suscipit a feugiat et eros vestibulum ac est lacinia nisi venenatis tristique fusce congue", + }, + { + "id": 70, + "name": "et", + "description": "vitae nisl aenean lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus", + }, + { + "id": 71, + "name": "enim", + "description": "mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum ac lobortis vel dapibus at diam nam", + }, + { + "id": 72, + "name": "libero", + "description": "risus praesent lectus vestibulum quam sapien varius ut blandit non interdum in ante vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae duis faucibus accumsan odio curabitur convallis duis consequat dui nec nisi", + }, + { + "id": 73, + "name": "vel", + "description": "pede ac diam cras pellentesque volutpat dui maecenas tristique est et tempus semper est quam", + }, + { + "id": 74, + "name": "tortor", + "description": "varius integer ac leo pellentesque ultrices mattis odio donec vitae nisi nam ultrices libero non mattis pulvinar", + }, + { + "id": 75, + "name": "velit", + "description": "nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus duis at", + }, + { + "id": 76, + "name": "risus", + "description": "dui proin leo odio porttitor id consequat in consequat ut nulla sed accumsan felis ut at dolor quis odio consequat varius integer ac leo pellentesque ultrices mattis odio donec vitae nisi nam ultrices libero non mattis pulvinar nulla", + }, + { + "id": 77, + "name": "diam", + "description": "sem duis aliquam convallis nunc proin at turpis a pede posuere nonummy integer non velit donec diam neque vestibulum eget vulputate ut ultrices vel augue vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae donec pharetra magna vestibulum aliquet ultrices erat tortor sollicitudin mi sit amet", + }, + { + "id": 78, + "name": "eu", + "description": "condimentum neque sapien placerat ante nulla justo aliquam quis turpis eget elit sodales scelerisque mauris sit amet eros suspendisse accumsan tortor quis turpis sed ante vivamus tortor duis mattis egestas metus aenean fermentum donec ut mauris eget massa tempor convallis nulla neque libero convallis eget eleifend luctus", + }, + { + "id": 79, + "name": "primis", + "description": "vitae mattis nibh ligula nec sem duis aliquam convallis nunc proin at turpis a pede posuere nonummy integer non velit", + }, + { + "id": 80, + "name": "nisi", + "description": "etiam faucibus cursus urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat", + }, + { + "id": 81, + "name": "elit", + "description": "ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem sed sagittis nam congue risus semper porta volutpat quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam molestie nibh in lectus pellentesque at", + }, + { + "id": 82, + "name": "sed", + "description": "vel ipsum praesent blandit lacinia erat vestibulum sed magna at nunc commodo placerat praesent blandit nam nulla integer pede justo lacinia eget tincidunt eget tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in", + }, + { + "id": 83, + "name": "sapien", + "description": "eu felis fusce posuere felis sed lacus morbi sem mauris laoreet", + }, + { + "id": 84, + "name": "posuere", + "description": "fringilla rhoncus mauris enim leo rhoncus sed vestibulum sit amet cursus id turpis integer", + }, + { + "id": 85, + "name": "dapibus", + "description": "libero non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit", + }, + { + "id": 86, + "name": "tortor", + "description": "lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus in felis eu", + }, + { + "id": 87, + "name": "ultrices", + "description": "sapien iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in", + }, + { + "id": 88, + "name": "in", + "description": "pellentesque at nulla suspendisse potenti cras in purus eu magna vulputate", + }, + { + "id": 89, + "name": "ut", + "description": "nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin eu mi nulla ac enim", + }, + { + "id": 90, + "name": "faucibus", + "description": "a ipsum integer a nibh in quis justo maecenas rhoncus aliquam lacus morbi quis tortor id nulla ultrices aliquet maecenas leo odio condimentum id luctus nec", + }, + { + "id": 91, + "name": "risus", + "description": "elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum neque sapien placerat ante nulla justo aliquam quis turpis eget elit sodales scelerisque mauris sit amet eros suspendisse accumsan tortor quis turpis sed ante vivamus tortor", + }, + { + "id": 92, + "name": "in", + "description": "ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est", + }, + { + "id": 93, + "name": "platea", + "description": "pharetra magna vestibulum aliquet ultrices erat tortor sollicitudin mi sit amet lobortis sapien sapien non mi integer", + }, + { + "id": 94, + "name": "integer", + "description": "orci eget orci vehicula condimentum curabitur in libero ut massa volutpat", + }, + { + "id": 95, + "name": "dui", + "description": "curabitur at ipsum ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum ac lobortis vel dapibus at diam nam tristique tortor eu pede", + }, + { + "id": 96, + "name": "facilisi", + "description": "eleifend donec ut dolor morbi vel lectus in quam fringilla rhoncus mauris enim leo rhoncus sed vestibulum sit amet cursus id turpis integer aliquet massa id lobortis convallis tortor", + }, + { + "id": 97, + "name": "dictumst", + "description": "quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam molestie nibh in lectus pellentesque at nulla suspendisse potenti cras in purus eu magna vulputate luctus cum sociis natoque penatibus et magnis dis parturient montes nascetur ridiculus mus vivamus vestibulum sagittis", + }, + { + "id": 98, + "name": "vel", + "description": "blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum", + }, + { + "id": 99, + "name": "augue", + "description": "pede justo lacinia eget tincidunt eget tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus auctor sed tristique in tempus sit amet sem fusce consequat nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor", + }, + { + "id": 100, + "name": "praesent", + "description": "at lorem integer tincidunt ante vel ipsum praesent blandit lacinia erat vestibulum sed magna at", + }, + ] + + return data[start : start + limit] # noqa: E203 diff --git a/app/services/project_service.py b/app/services/project_service.py index 5e1febd..8e2b98e 100644 --- a/app/services/project_service.py +++ b/app/services/project_service.py @@ -1,25 +1,518 @@ from typing import List -def get_project_count() -> int: +async def get_project_count() -> int: return 34 -def get_latest_projects(limit: int = 5) -> List: - return [ +async def get_latest_projects( + start: int = 0, limit: int = 5 +) -> List: # TODO: change to List[Project] after db implementation + + start = max(0, start) + limit = max(0, limit) + + data = [ + { + "id": 1, + "name": "felis", + "description": "feugiat non pretium quis lectus suspendisse potenti in eleifend quam a odio in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis molestie lorem quisque ut erat", + }, + { + "id": 2, + "name": "adipiscing", + "description": "praesent blandit nam nulla integer pede justo lacinia eget tincidunt eget tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus", + }, + { + "id": 3, + "name": "augue", + "description": "leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin eu mi nulla ac enim in tempor turpis nec euismod scelerisque quam turpis adipiscing lorem vitae mattis nibh ligula nec sem duis aliquam convallis nunc proin at turpis a pede posuere", + }, + { + "id": 4, + "name": "vulputate", + "description": "amet lobortis sapien sapien non mi integer ac neque duis bibendum morbi non quam nec dui luctus rutrum nulla tellus in sagittis dui vel nisl duis ac nibh fusce lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in", + }, + { + "id": 5, + "name": "vestibulum", + "description": "porttitor id consequat in consequat ut nulla sed accumsan felis ut at dolor quis odio consequat varius integer ac", + }, + { + "id": 6, + "name": "massa", + "description": "lectus aliquam sit amet diam in magna bibendum imperdiet nullam orci pede venenatis non sodales sed tincidunt eu felis fusce posuere felis sed lacus morbi sem mauris laoreet ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem", + }, + { + "id": 7, + "name": "fusce", + "description": "faucibus cursus urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at velit vivamus vel nulla eget eros", + }, + { + "id": 8, + "name": "non", + "description": "turpis a pede posuere nonummy integer non velit donec diam neque vestibulum eget vulputate ut ultrices vel augue vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae donec pharetra magna", + }, + { + "id": 9, + "name": "turpis", + "description": "nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum in hac habitasse", + }, + { + "id": 10, + "name": "eu", + "description": "in sapien iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc donec quis", + }, + { + "id": 11, + "name": "est", + "description": "molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet", + }, + { + "id": 12, + "name": "vestibulum", + "description": "suspendisse potenti cras in purus eu magna vulputate luctus cum sociis natoque penatibus et magnis dis parturient montes", + }, + { + "id": 13, + "name": "turpis", + "description": "turpis elementum ligula vehicula consequat morbi a ipsum integer a nibh in quis justo maecenas rhoncus aliquam lacus morbi quis tortor id nulla ultrices aliquet maecenas leo odio condimentum id luctus nec molestie sed justo pellentesque viverra pede ac diam cras pellentesque volutpat dui", + }, + { + "id": 14, + "name": "cum", + "description": "vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae mauris viverra diam vitae quam suspendisse potenti nullam porttitor lacus at turpis donec posuere metus vitae ipsum aliquam non mauris morbi non lectus aliquam sit amet diam in magna bibendum imperdiet", + }, + { + "id": 15, + "name": "nulla", + "description": "id nulla ultrices aliquet maecenas leo odio condimentum id luctus nec molestie sed justo pellentesque viverra pede ac diam cras pellentesque volutpat dui maecenas tristique est et tempus semper est quam pharetra magna ac consequat metus sapien ut nunc vestibulum ante ipsum", + }, + { + "id": 16, + "name": "justo", + "description": "tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat", + }, + { + "id": 17, + "name": "volutpat", + "description": "consequat varius integer ac leo pellentesque ultrices mattis odio donec vitae nisi nam ultrices libero non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at", + }, + { + "id": 18, + "name": "mi", + "description": "ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae donec pharetra magna vestibulum aliquet ultrices erat tortor sollicitudin mi sit amet lobortis sapien sapien non mi integer ac neque duis bibendum morbi non quam nec dui luctus rutrum nulla tellus in sagittis", + }, + { + "id": 19, + "name": "proin", + "description": "elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget congue", + }, + { + "id": 20, + "name": "habitasse", + "description": "urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at velit vivamus vel nulla", + }, + { + "id": 21, + "name": "ultrices", + "description": "sapien cum sociis natoque penatibus et magnis dis parturient montes nascetur ridiculus mus etiam vel augue vestibulum rutrum rutrum neque aenean auctor gravida sem praesent id massa id nisl venenatis lacinia aenean sit amet justo morbi ut odio cras mi pede", + }, + { + "id": 22, + "name": "ante", + "description": "lobortis sapien sapien non mi integer ac neque duis bibendum morbi non quam nec", + }, + { + "id": 23, + "name": "eget", + "description": "in hac habitasse platea dictumst etiam faucibus cursus urna ut", + }, + { + "id": 24, + "name": "pellentesque", + "description": "blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum neque sapien placerat ante nulla justo aliquam", + }, { - "id": "5z2v341ypg4f6b684n4gra3myk", - "name": "STR-16-011-BatteryDesulfator", - "description": "Battery Desulfator", + "id": 25, + "name": "elit", + "description": "vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae mauris viverra diam vitae quam suspendisse potenti nullam porttitor lacus", }, { - "id": "5hhxy81gm44f69rn3mkpz8c6tn", - "name": "Dog Bark Stop", - "description": "Project to stop dog barking", + "id": 26, + "name": "tempus", + "description": "cursus urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy", }, { - "id": "e77wqg1h364f69rn3mkpz8c6tn", - "name": "STR-15-011-PiCluster", - "description": "Raspberry Pi Cluster", + "id": 27, + "name": "metus", + "description": "auctor sed tristique in tempus sit amet sem fusce consequat nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus", }, - ][:limit] + { + "id": 28, + "name": "turpis", + "description": "donec ut mauris eget massa tempor convallis nulla neque libero convallis eget eleifend luctus ultricies eu nibh quisque id justo sit amet sapien dignissim vestibulum vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae nulla dapibus dolor vel est donec odio justo sollicitudin", + }, + { + "id": 29, + "name": "sollicitudin", + "description": "ac nibh fusce lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in eleifend quam a odio in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis molestie lorem quisque ut", + }, + { + "id": 30, + "name": "nullam", + "description": "hac habitasse platea dictumst aliquam augue quam sollicitudin vitae consectetuer eget rutrum at lorem integer tincidunt ante vel ipsum praesent blandit lacinia erat vestibulum sed magna at nunc commodo placerat praesent blandit nam nulla integer pede justo lacinia", + }, + { + "id": 31, + "name": "integer", + "description": "sem mauris laoreet ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem sed sagittis nam congue risus semper porta volutpat quam pede", + }, + { + "id": 32, + "name": "in", + "description": "turpis a pede posuere nonummy integer non velit donec diam neque vestibulum eget vulputate ut ultrices vel augue vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae", + }, + { + "id": 33, + "name": "volutpat", + "description": "suspendisse accumsan tortor quis turpis sed ante vivamus tortor duis mattis egestas metus aenean fermentum donec ut mauris eget massa tempor convallis nulla neque libero convallis eget eleifend luctus ultricies eu nibh quisque id justo sit amet sapien dignissim vestibulum vestibulum ante ipsum primis", + }, + { + "id": 34, + "name": "id", + "description": "imperdiet nullam orci pede venenatis non sodales sed tincidunt eu felis fusce posuere felis sed lacus morbi sem mauris laoreet ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem sed sagittis nam", + }, + { + "id": 35, + "name": "et", + "description": "nulla elit ac nulla sed vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus", + }, + { + "id": 36, + "name": "augue", + "description": "accumsan odio curabitur convallis duis consequat dui nec nisi volutpat eleifend donec ut dolor morbi vel lectus in quam fringilla rhoncus mauris enim leo rhoncus", + }, + { + "id": 37, + "name": "faucibus", + "description": "arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo in hac habitasse platea dictumst", + }, + { + "id": 38, + "name": "morbi", + "description": "enim blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum neque sapien placerat ante nulla justo aliquam quis turpis eget", + }, + { + "id": 39, + "name": "leo", + "description": "morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus auctor sed tristique in tempus sit amet sem fusce consequat nulla nisl nunc nisl duis bibendum felis sed interdum", + }, + { + "id": 40, + "name": "curae", + "description": "interdum in ante vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae", + }, + { + "id": 41, + "name": "dapibus", + "description": "nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum", + }, + { + "id": 42, + "name": "duis", + "description": "eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec", + }, + { + "id": 43, + "name": "a", + "description": "eu felis fusce posuere felis sed lacus morbi sem mauris laoreet ut", + }, + { + "id": 44, + "name": "lorem", + "description": "pede malesuada in imperdiet et commodo vulputate justo in blandit ultrices enim lorem ipsum dolor sit amet consectetuer adipiscing elit proin interdum mauris", + }, + { + "id": 45, + "name": "risus", + "description": "amet eros suspendisse accumsan tortor quis turpis sed ante vivamus tortor duis mattis", + }, + { + "id": 46, + "name": "in", + "description": "cursus id turpis integer aliquet massa id lobortis convallis tortor risus dapibus augue vel accumsan tellus nisi eu orci mauris lacinia sapien quis libero nullam sit amet turpis elementum ligula vehicula consequat morbi a ipsum integer a nibh in quis justo maecenas rhoncus aliquam", + }, + { + "id": 47, + "name": "vel", + "description": "feugiat et eros vestibulum ac est lacinia nisi venenatis tristique fusce congue diam id ornare imperdiet sapien urna pretium nisl ut volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis", + }, + { + "id": 48, + "name": "varius", + "description": "felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec", + }, + { + "id": 49, + "name": "vestibulum", + "description": "maecenas tristique est et tempus semper est quam pharetra magna ac consequat metus sapien ut nunc vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia", + }, + { + "id": 50, + "name": "pulvinar", + "description": "nulla sed vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum ac lobortis vel dapibus at diam", + }, + { + "id": 51, + "name": "amet", + "description": "proin risus praesent lectus vestibulum quam sapien varius ut blandit non interdum in ante vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae duis faucibus accumsan odio curabitur convallis duis consequat", + }, + { + "id": 52, + "name": "faucibus", + "description": "sed vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque", + }, + { + "id": 53, + "name": "vulputate", + "description": "sed lacus morbi sem mauris laoreet ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem sed sagittis nam congue risus semper porta volutpat quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam molestie nibh in lectus pellentesque at nulla suspendisse potenti cras in purus eu", + }, + { + "id": 54, + "name": "ut", + "description": "lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in eleifend quam a odio in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla", + }, + { + "id": 55, + "name": "dui", + "description": "dolor sit amet consectetuer adipiscing elit proin interdum mauris non ligula pellentesque ultrices phasellus id sapien in sapien iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget", + }, + { + "id": 56, + "name": "sit", + "description": "ac nulla sed vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum ac", + }, + { + "id": 57, + "name": "tellus", + "description": "pellentesque ultrices phasellus id sapien in sapien iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt", + }, + { + "id": 58, + "name": "magnis", + "description": "et eros vestibulum ac est lacinia nisi venenatis tristique fusce congue diam id ornare imperdiet sapien urna pretium nisl", + }, + { + "id": 59, + "name": "nisl", + "description": "in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum neque sapien placerat ante nulla justo aliquam", + }, + { + "id": 60, + "name": "tortor", + "description": "nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit", + }, + { + "id": 61, + "name": "luctus", + "description": "risus dapibus augue vel accumsan tellus nisi eu orci mauris lacinia sapien quis libero nullam sit amet turpis elementum ligula vehicula consequat morbi a ipsum integer a nibh in", + }, + { + "id": 62, + "name": "nisi", + "description": "elit proin risus praesent lectus vestibulum quam sapien varius ut blandit non interdum in ante vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae duis faucibus accumsan odio curabitur convallis duis consequat dui nec nisi volutpat eleifend donec", + }, + { + "id": 63, + "name": "velit", + "description": "nulla integer pede justo lacinia eget tincidunt eget tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus auctor sed tristique in tempus sit amet sem fusce consequat", + }, + { + "id": 64, + "name": "mauris", + "description": "duis faucibus accumsan odio curabitur convallis duis consequat dui nec nisi volutpat eleifend donec ut dolor morbi vel lectus in quam fringilla", + }, + { + "id": 65, + "name": "nulla", + "description": "nullam porttitor lacus at turpis donec posuere metus vitae ipsum aliquam non mauris morbi non lectus aliquam sit amet diam in magna", + }, + { + "id": 66, + "name": "rutrum", + "description": "mauris non ligula pellentesque ultrices phasellus id sapien in sapien", + }, + { + "id": 67, + "name": "rhoncus", + "description": "platea dictumst aliquam augue quam sollicitudin vitae consectetuer eget rutrum at lorem integer tincidunt ante vel ipsum praesent", + }, + { + "id": 68, + "name": "odio", + "description": "non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed vel enim sit amet nunc viverra dapibus", + }, + { + "id": 69, + "name": "quis", + "description": "ultrices posuere cubilia curae nulla dapibus dolor vel est donec odio justo sollicitudin ut suscipit a feugiat et eros vestibulum ac est lacinia nisi venenatis tristique fusce congue", + }, + { + "id": 70, + "name": "et", + "description": "vitae nisl aenean lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus", + }, + { + "id": 71, + "name": "enim", + "description": "mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum ac lobortis vel dapibus at diam nam", + }, + { + "id": 72, + "name": "libero", + "description": "risus praesent lectus vestibulum quam sapien varius ut blandit non interdum in ante vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae duis faucibus accumsan odio curabitur convallis duis consequat dui nec nisi", + }, + { + "id": 73, + "name": "vel", + "description": "pede ac diam cras pellentesque volutpat dui maecenas tristique est et tempus semper est quam", + }, + { + "id": 74, + "name": "tortor", + "description": "varius integer ac leo pellentesque ultrices mattis odio donec vitae nisi nam ultrices libero non mattis pulvinar", + }, + { + "id": 75, + "name": "velit", + "description": "nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus duis at", + }, + { + "id": 76, + "name": "risus", + "description": "dui proin leo odio porttitor id consequat in consequat ut nulla sed accumsan felis ut at dolor quis odio consequat varius integer ac leo pellentesque ultrices mattis odio donec vitae nisi nam ultrices libero non mattis pulvinar nulla", + }, + { + "id": 77, + "name": "diam", + "description": "sem duis aliquam convallis nunc proin at turpis a pede posuere nonummy integer non velit donec diam neque vestibulum eget vulputate ut ultrices vel augue vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae donec pharetra magna vestibulum aliquet ultrices erat tortor sollicitudin mi sit amet", + }, + { + "id": 78, + "name": "eu", + "description": "condimentum neque sapien placerat ante nulla justo aliquam quis turpis eget elit sodales scelerisque mauris sit amet eros suspendisse accumsan tortor quis turpis sed ante vivamus tortor duis mattis egestas metus aenean fermentum donec ut mauris eget massa tempor convallis nulla neque libero convallis eget eleifend luctus", + }, + { + "id": 79, + "name": "primis", + "description": "vitae mattis nibh ligula nec sem duis aliquam convallis nunc proin at turpis a pede posuere nonummy integer non velit", + }, + { + "id": 80, + "name": "nisi", + "description": "etiam faucibus cursus urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat", + }, + { + "id": 81, + "name": "elit", + "description": "ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem sed sagittis nam congue risus semper porta volutpat quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam molestie nibh in lectus pellentesque at", + }, + { + "id": 82, + "name": "sed", + "description": "vel ipsum praesent blandit lacinia erat vestibulum sed magna at nunc commodo placerat praesent blandit nam nulla integer pede justo lacinia eget tincidunt eget tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in", + }, + { + "id": 83, + "name": "sapien", + "description": "eu felis fusce posuere felis sed lacus morbi sem mauris laoreet", + }, + { + "id": 84, + "name": "posuere", + "description": "fringilla rhoncus mauris enim leo rhoncus sed vestibulum sit amet cursus id turpis integer", + }, + { + "id": 85, + "name": "dapibus", + "description": "libero non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit", + }, + { + "id": 86, + "name": "tortor", + "description": "lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus in felis eu", + }, + { + "id": 87, + "name": "ultrices", + "description": "sapien iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in", + }, + { + "id": 88, + "name": "in", + "description": "pellentesque at nulla suspendisse potenti cras in purus eu magna vulputate", + }, + { + "id": 89, + "name": "ut", + "description": "nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin eu mi nulla ac enim", + }, + { + "id": 90, + "name": "faucibus", + "description": "a ipsum integer a nibh in quis justo maecenas rhoncus aliquam lacus morbi quis tortor id nulla ultrices aliquet maecenas leo odio condimentum id luctus nec", + }, + { + "id": 91, + "name": "risus", + "description": "elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum neque sapien placerat ante nulla justo aliquam quis turpis eget elit sodales scelerisque mauris sit amet eros suspendisse accumsan tortor quis turpis sed ante vivamus tortor", + }, + { + "id": 92, + "name": "in", + "description": "ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est", + }, + { + "id": 93, + "name": "platea", + "description": "pharetra magna vestibulum aliquet ultrices erat tortor sollicitudin mi sit amet lobortis sapien sapien non mi integer", + }, + { + "id": 94, + "name": "integer", + "description": "orci eget orci vehicula condimentum curabitur in libero ut massa volutpat", + }, + { + "id": 95, + "name": "dui", + "description": "curabitur at ipsum ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum ac lobortis vel dapibus at diam nam tristique tortor eu pede", + }, + { + "id": 96, + "name": "facilisi", + "description": "eleifend donec ut dolor morbi vel lectus in quam fringilla rhoncus mauris enim leo rhoncus sed vestibulum sit amet cursus id turpis integer aliquet massa id lobortis convallis tortor", + }, + { + "id": 97, + "name": "dictumst", + "description": "quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam molestie nibh in lectus pellentesque at nulla suspendisse potenti cras in purus eu magna vulputate luctus cum sociis natoque penatibus et magnis dis parturient montes nascetur ridiculus mus vivamus vestibulum sagittis", + }, + { + "id": 98, + "name": "vel", + "description": "blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum", + }, + { + "id": 99, + "name": "augue", + "description": "pede justo lacinia eget tincidunt eget tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus auctor sed tristique in tempus sit amet sem fusce consequat nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor", + }, + { + "id": 100, + "name": "praesent", + "description": "at lorem integer tincidunt ante vel ipsum praesent blandit lacinia erat vestibulum sed magna at", + }, + ] + + return data[start:limit] diff --git a/app/services/storage_service.py b/app/services/storage_service.py index e4d3163..f708e21 100644 --- a/app/services/storage_service.py +++ b/app/services/storage_service.py @@ -1,6 +1,6 @@ -def get_location_count() -> int: +async def get_location_count() -> int: return 234 -def get_locations_used() -> int: +async def get_locations_used() -> int: return 230 diff --git a/app/static/css/app.css b/app/static/css/app.css new file mode 100644 index 0000000..2e34407 --- /dev/null +++ b/app/static/css/app.css @@ -0,0 +1,6 @@ +table td { + max-width:50px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} \ No newline at end of file diff --git a/app/templates/parts/partslist.pt b/app/templates/parts/partslist.pt index ff1c85a..820898c 100644 --- a/app/templates/parts/partslist.pt +++ b/app/templates/parts/partslist.pt @@ -12,543 +12,23 @@
- | Name | -Position | -Office | -Extn | -Start date | -Salary | +Part | +Description |
---|---|---|---|---|---|---|---|---|
1 | -Tiger Nixon | -System Architect | -Edinburgh | -61 | -2011/04/25 | -$320,800 | -||
2 | -Garrett Winters | -Accountant | -Tokyo | -63 | -2011/07/25 | -$170,750 | -||
3 | -Ashton Cox | -Junior Technical Author | -San Francisco | -66 | -2009/01/12 | -$86,000 | -||
4 | -Cedric Kelly | -Senior Javascript Developer | -Edinburgh | -22 | -2012/03/29 | -$433,060 | -||
5 | -Airi Satou | -Accountant | -Tokyo | -33 | -2008/11/28 | -$162,700 | -||
6 | -Brielle Williamson | -Integration Specialist | -New York | -61 | -2012/12/02 | -$372,000 | -||
7 | -Herrod Chandler | -Sales Assistant | -San Francisco | -59 | -2012/08/06 | -$137,500 | -||
8 | -Rhona Davidson | -Integration Specialist | -Tokyo | -55 | -2010/10/14 | -$327,900 | -||
9 | -Colleen Hurst | -Javascript Developer | -San Francisco | -39 | -2009/09/15 | -$205,500 | -||
10 | -Sonya Frost | -Software Engineer | -Edinburgh | -23 | -2008/12/13 | -$103,600 | -||
11 | -Jena Gaines | -Office Manager | -London | -30 | -2008/12/19 | -$90,560 | -||
12 | -Quinn Flynn | -Support Lead | -Edinburgh | -22 | -2013/03/03 | -$342,000 | -||
13 | -Charde Marshall | -Regional Director | -San Francisco | -36 | -2008/10/16 | -$470,600 | -||
14 | -Haley Kennedy | -Senior Marketing Designer | -London | -43 | -2012/12/18 | -$313,500 | -||
15 | -Tatyana Fitzpatrick | -Regional Director | -London | -19 | -2010/03/17 | -$385,750 | -||
16 | -Michael Silva | -Marketing Designer | -London | -66 | -2012/11/27 | -$198,500 | -||
17 | -Paul Byrd | -Chief Financial Officer (CFO) | -New York | -64 | -2010/06/09 | -$725,000 | -||
18 | -Gloria Little | -Systems Administrator | -New York | -59 | -2009/04/10 | -$237,500 | -||
19 | -Bradley Greer | -Software Engineer | -London | -41 | -2012/10/13 | -$132,000 | -||
20 | -Dai Rios | -Personnel Lead | -Edinburgh | -35 | -2012/09/26 | -$217,500 | -||
21 | -Jenette Caldwell | -Development Lead | -New York | -30 | -2011/09/03 | -$345,000 | -||
22 | -Yuri Berry | -Chief Marketing Officer (CMO) | -New York | -40 | -2009/06/25 | -$675,000 | -||
23 | -Caesar Vance | -Pre-Sales Support | -New York | -21 | -2011/12/12 | -$106,450 | -||
24 | -Doris Wilder | -Sales Assistant | -Sidney | -23 | -2010/09/20 | -$85,600 | -||
25 | -Angelica Ramos | -Chief Executive Officer (CEO) | -London | -47 | -2009/10/09 | -$1,200,000 | -||
26 | -Gavin Joyce | -Developer | -Edinburgh | -42 | -2010/12/22 | -$92,575 | -||
27 | -Jennifer Chang | -Regional Director | -Singapore | -28 | -2010/11/14 | -$357,650 | -||
28 | -Brenden Wagner | -Software Engineer | -San Francisco | -28 | -2011/06/07 | -$206,850 | -||
29 | -Fiona Green | -Chief Operating Officer (COO) | -San Francisco | -48 | -2010/03/11 | -$850,000 | -||
30 | -Shou Itou | -Regional Marketing | -Tokyo | -20 | -2011/08/14 | -$163,000 | -||
31 | -Michelle House | -Integration Specialist | -Sidney | -37 | -2011/06/02 | -$95,400 | -||
32 | -Suki Burks | -Developer | -London | -53 | -2009/10/22 | -$114,500 | -||
33 | -Prescott Bartlett | -Technical Author | -London | -27 | -2011/05/07 | -$145,000 | -||
34 | -Gavin Cortez | -Team Leader | -San Francisco | -22 | -2008/10/26 | -$235,500 | -||
35 | -Martena Mccray | -Post-Sales support | -Edinburgh | -46 | -2011/03/09 | -$324,050 | -||
36 | -Unity Butler | -Marketing Designer | -San Francisco | -47 | -2009/12/09 | -$85,675 | -||
37 | -Howard Hatfield | -Office Manager | -San Francisco | -51 | -2008/12/16 | -$164,500 | -||
38 | -Hope Fuentes | -Secretary | -San Francisco | -41 | -2010/02/12 | -$109,850 | -||
39 | -Vivian Harrell | -Financial Controller | -San Francisco | -62 | -2009/02/14 | -$452,500 | -||
40 | -Timothy Mooney | -Office Manager | -London | -37 | -2008/12/11 | -$136,200 | -||
41 | -Jackson Bradshaw | -Director | -New York | -65 | -2008/09/26 | -$645,750 | -||
42 | -Olivia Liang | -Support Engineer | -Singapore | -64 | -2011/02/03 | -$234,500 | -||
43 | -Bruno Nash | -Software Engineer | -London | -38 | -2011/05/03 | -$163,500 | -||
44 | -Sakura Yamamoto | -Support Engineer | -Tokyo | -37 | -2009/08/19 | -$139,575 | -||
45 | -Thor Walton | -Developer | -New York | -61 | -2013/08/11 | -$98,540 | -||
46 | -Finn Camacho | -Support Engineer | -San Francisco | -47 | -2009/07/07 | -$87,500 | -||
47 | -Serge Baldwin | -Data Coordinator | -Singapore | -64 | -2012/04/09 | -$138,575 | -||
48 | -Zenaida Frank | -Software Engineer | -New York | -63 | -2010/01/04 | -$125,250 | -||
49 | -Zorita Serrano | -Software Engineer | -San Francisco | -56 | -2012/06/01 | -$115,000 | -||
50 | -Jennifer Acosta | -Junior Javascript Developer | -Edinburgh | -43 | -2013/02/01 | -$75,650 | -||
51 | -Cara Stevens | -Sales Assistant | -New York | -46 | -2011/12/06 | -$145,600 | -||
52 | -Hermione Butler | -Regional Director | -London | -47 | -2011/03/21 | -$356,250 | -||
53 | -Lael Greer | -Systems Administrator | -London | -21 | -2009/02/27 | -$103,500 | -||
54 | -Jonas Alexander | -Developer | -San Francisco | -30 | -2010/07/14 | -$86,500 | -||
55 | -Shad Decker | -Regional Director | -Edinburgh | -51 | -2008/11/13 | -$183,000 | -||
56 | -Michael Bruce | -Javascript Developer | -Singapore | -29 | -2011/06/27 | -$183,000 | -||
57 | -Donna Snider | -Customer Support | -New York | -27 | -2011/01/25 | -$112,000 | -||
- | Name | -Position | -Office | -Age | -Start date | -Salary | +Part | +Description |