{ "cells": [ { "cell_type": "code", "execution_count": null, "source": [ "%pip install servicestack\r\n", "\r\n", "\r\n", "\r\n", "import datetime\r\n", "import decimal\r\n", "from marshmallow.fields import *\r\n", "from servicestack import *\r\n", "from typing import *\r\n", "from dataclasses import dataclass, field\r\n", "from dataclasses_json import dataclass_json, LetterCase, Undefined, config\r\n", "from enum import Enum, IntEnum\r\n", "\r\n", "\r\n", "class TechnologyTier(str, Enum):\r\n", " PROGRAMMING_LANGUAGE = 'ProgrammingLanguage'\r\n", " CLIENT = 'Client'\r\n", " HTTP = 'Http'\r\n", " SERVER = 'Server'\r\n", " DATA = 'Data'\r\n", " SOFTWARE_INFRASTRUCTURE = 'SoftwareInfrastructure'\r\n", " OPERATING_SYSTEM = 'OperatingSystem'\r\n", " HARDWARE_INFRASTRUCTURE = 'HardwareInfrastructure'\r\n", " THIRD_PARTY_SERVICES = 'ThirdPartyServices'\r\n", "\r\n", "\r\n", "@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)\r\n", "@dataclass\r\n", "class TechnologyBase:\r\n", " id: int = 0\r\n", " name: Optional[str] = None\r\n", " vendor_name: Optional[str] = None\r\n", " vendor_url: Optional[str] = None\r\n", " product_url: Optional[str] = None\r\n", " logo_url: Optional[str] = None\r\n", " description: Optional[str] = None\r\n", " created: datetime.datetime = datetime.datetime(1, 1, 1)\r\n", " created_by: Optional[str] = None\r\n", " last_modified: datetime.datetime = datetime.datetime(1, 1, 1)\r\n", " last_modified_by: Optional[str] = None\r\n", " owner_id: Optional[str] = None\r\n", " slug: Optional[str] = None\r\n", " logo_approved: bool = False\r\n", " is_locked: bool = False\r\n", " tier: Optional[TechnologyTier] = None\r\n", " last_status_update: Optional[datetime.datetime] = None\r\n", " organization_id: Optional[int] = None\r\n", " comments_post_id: Optional[int] = None\r\n", " view_count: int = 0\r\n", " fav_count: int = 0\r\n", "\r\n", "\r\n", "@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)\r\n", "@dataclass\r\n", "class Technology(TechnologyBase):\r\n", " pass\r\n", "\r\n", "\r\n", "@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)\r\n", "@dataclass\r\n", "class TechnologyView:\r\n", " id: Optional[int] = None\r\n", " name: Optional[str] = None\r\n", " vendor_name: Optional[str] = None\r\n", " vendor_url: Optional[str] = None\r\n", " product_url: Optional[str] = None\r\n", " logo_url: Optional[str] = None\r\n", " description: Optional[str] = None\r\n", " created: Optional[datetime.datetime] = None\r\n", " created_by: Optional[str] = None\r\n", " last_modified: Optional[datetime.datetime] = None\r\n", " last_modified_by: Optional[str] = None\r\n", " owner_id: Optional[str] = None\r\n", " slug: Optional[str] = None\r\n", " logo_approved: Optional[bool] = None\r\n", " is_locked: Optional[bool] = None\r\n", " tier: Optional[TechnologyTier] = None\r\n", " last_status_update: Optional[datetime.datetime] = None\r\n", " organization_id: Optional[int] = None\r\n", " comments_post_id: Optional[int] = None\r\n", " view_count: Optional[int] = None\r\n", " fav_count: Optional[int] = None\r\n", "\r\n", "\r\n", "# @Route(\"/technology/search\")\r\n", "# @AutoQueryViewer(DefaultSearchField=\"Tier\", DefaultSearchText=\"Data\", DefaultSearchType=\"=\", Description=\"Explore different Technologies\", IconUrl=\"octicon:database\", Title=\"Find Technologies\")\r\n", "@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)\r\n", "@dataclass\r\n", "class FindTechnologies(QueryDb2[Technology, TechnologyView], IReturn[QueryResponse[TechnologyView]], IGet):\r\n", " ids: Optional[List[int]] = None\r\n", " name: Optional[str] = None\r\n", " vendor_name: Optional[str] = None\r\n", " name_contains: Optional[str] = None\r\n", " vendor_name_contains: Optional[str] = None\r\n", " description_contains: Optional[str] = None\r\n", "\r\n", "\r\n", "\r\n", "from IPython.core.display import display, HTML\r\n", "\r\n", "client = JsonServiceClient(\"https://techstacks.io\")\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 9, "source": [ "response = client.send(FindTechnologies(\r\n", " ids=[1, 2, 4, 6],\r\n", " vendor_name=\"Google\",\r\n", " take=10,\r\n", " fields=\"Id, Name, VendorName, Tier, FavCount, ViewCount\"))\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 10, "source": [ "display(HTML(htmldump(response)))\r\n" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "<IPython.core.display.HTML object>" ], "text/html": [ "<table><tbody><tr><th>offset</th><td>0</td></tr><tr><th>total</th><td>19</td></tr><tr><th>results</th><td><table>\n", "<thead><tr><th>id</th><th>name</th><th>vendorName</th><th>tier</th><th>viewCount</th><th>favCount</th></tr></head>\n", "<tbody>\n", "<tr><td>1</td><td>ServiceStack</td><td>ServiceStack</td><td>Server</td><td>4204</td><td>5</td></tr><tr><td>2</td><td>PostgreSQL</td><td>PostgreSQL</td><td>Data</td><td>2291</td><td>4</td></tr><tr><td>4</td><td>Windows Server 2012</td><td>Microsoft</td><td>OperatingSystem</td><td>878</td><td>1</td></tr><tr><td>6</td><td>AWS RDS</td><td>Amazon</td><td>Data</td><td>625</td><td>1</td></tr><tr><td>7</td><td>AngularJS</td><td>Google</td><td>Client</td><td>5012</td><td>1</td></tr><tr><td>13</td><td>Google Closure Library</td><td>Google</td><td>Client</td><td>390</td><td>1</td></tr><tr><td>15</td><td>Dart</td><td>Google</td><td>ProgrammingLanguage</td><td>320</td><td>2</td></tr><tr><td>18</td><td>Go</td><td>Google</td><td>ProgrammingLanguage</td><td>3865</td><td>2</td></tr><tr><td>57</td><td>LevelDB</td><td>Google</td><td>Data</td><td>325</td><td>1</td></tr><tr><td>61</td><td>Firebase</td><td>Google</td><td>Data</td><td>722</td><td>1</td></tr>\n", "</tbody>\n", "</table></td></tr></tbody></table>" ] }, "metadata": {} } ], "metadata": {} }, { "cell_type": "code", "execution_count": 11, "source": [ "printtable(response.results)\r\n" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "+-----------------------------------------------------------------------------------------+\n", "| id | name | vendorName | tier | viewCount | favCount |\n", "|-----------------------------------------------------------------------------------------|\n", "| 1 | ServiceStack | ServiceStack | Server | 4204 | 5 |\n", "| 2 | PostgreSQL | PostgreSQL | Data | 2291 | 4 |\n", "| 4 | Windows Server 2012 | Microsoft | OperatingSystem | 878 | 1 |\n", "| 6 | AWS RDS | Amazon | Data | 625 | 1 |\n", "| 7 | AngularJS | Google | Client | 5012 | 1 |\n", "| 13 | Google Closure Library | Google | Client | 390 | 1 |\n", "| 15 | Dart | Google | ProgrammingLanguage | 320 | 2 |\n", "| 18 | Go | Google | ProgrammingLanguage | 3865 | 2 |\n", "| 57 | LevelDB | Google | Data | 325 | 1 |\n", "| 61 | Firebase | Google | Data | 722 | 1 |\n", "+-----------------------------------------------------------------------------------------+\n" ] } ], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [], "outputs": [], "metadata": {} } ], "metadata": { "kernelspec": { "name": "python3", "display_name": "Python 3.9.6 64-bit" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.6" }, "interpreter": { "hash": "63fd5069d213b44bf678585dea6b12cceca9941eaf7f819626cde1f2670de90d" } }, "nbformat": 4, "nbformat_minor": 2 }