blob: 9f90808ee79e856dcf4321cd82c087e260b3fc16 [file] [log] [blame]
(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{634:function(t,s,a){"use strict";a.r(s);var e=a(70),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"python-native-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#python-native-api"}},[t._v("#")]),t._v(" Python Native API")]),t._v(" "),a("h3",{attrs:{id:"requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),a("p",[t._v("You have to install thrift (>=0.13) before using the package.")]),t._v(" "),a("h3",{attrs:{id:"how-to-use-example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#how-to-use-example"}},[t._v("#")]),t._v(" How to use (Example)")]),t._v(" "),a("p",[t._v("First, download the package: "),a("code",[t._v("pip3 install apache-iotdb")])]),t._v(" "),a("p",[t._v("You can get an example of using the package to read and write data at here: "),a("a",{attrs:{href:"https://github.com/apache/iotdb/blob/master/client-py/SessionExample.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("Example"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("(you need to add "),a("code",[t._v("import iotdb")]),t._v(" in the head of the file)")]),t._v(" "),a("p",[t._v("Or:")]),t._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Session "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Session\n\nip "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),t._v("\nport_ "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6667"')]),t._v("\nusername_ "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'root'")]),t._v("\npassword_ "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'root'")]),t._v("\nsession "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ip"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" port_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" username_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nzone "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get_time_zone"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h3",{attrs:{id:"iotdb-testcontainer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#iotdb-testcontainer"}},[t._v("#")]),t._v(" IoTDB Testcontainer")]),t._v(" "),a("p",[t._v("The Test Support is based on the lib "),a("code",[t._v("testcontainers")]),t._v(" (https://testcontainers-python.readthedocs.io/en/latest/index.html) which you need to install in your project if you want to use the feature.")]),t._v(" "),a("p",[t._v("To start (and stop) an IoTDB Database in a Docker container simply do:")]),t._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyTestCase")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("unittest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("TestCase"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("test_something")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("self"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("with")]),t._v(" IoTDBContainer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n session "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'localhost'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get_exposed_port"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6667")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'root'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'root'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n result "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute_query_statement"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SHOW TIMESERIES"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("p",[t._v("by default it will load the image "),a("code",[t._v("apache/iotdb:latest")]),t._v(", if you want a specific version just pass it like e.g. "),a("code",[t._v('IoTDBContainer("apache/iotdb:0.12.0")')]),t._v(" to get version "),a("code",[t._v("0.12.0")]),t._v(" running.")]),t._v(" "),a("h3",{attrs:{id:"pandas-support"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pandas-support"}},[t._v("#")]),t._v(" Pandas Support")]),t._v(" "),a("p",[t._v("To easily transform a query result to a "),a("a",{attrs:{href:"https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Pandas Dataframe"),a("OutboundLink")],1),t._v("\nthe SessionDataSet has a method "),a("code",[t._v(".todf()")]),t._v(" which consumes the dataset and transforms it to a pandas dataframe.")]),t._v(" "),a("p",[t._v("Example:")]),t._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Session "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Session\n\nip "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),t._v("\nport_ "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6667"')]),t._v("\nusername_ "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'root'")]),t._v("\npassword_ "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'root'")]),t._v("\nsession "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ip"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" port_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" username_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nresult "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute_query_statement"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SELECT * FROM root.*"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Transform to Pandas Dataset")]),t._v("\ndf "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("todf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nsession"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Now you can work with the dataframe")]),t._v("\ndf "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])]),a("h3",{attrs:{id:"developers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#developers"}},[t._v("#")]),t._v(" Developers")]),t._v(" "),a("h4",{attrs:{id:"introduction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),a("p",[t._v("This is an example of how to connect to IoTDB with python, using the thrift rpc interfaces. Things are almost the same on Windows or Linux, but pay attention to the difference like path separator.")]),t._v(" "),a("h4",{attrs:{id:"prerequisites"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),a("p",[t._v("Python3.7 or later is preferred.")]),t._v(" "),a("p",[t._v("You have to install Thrift (0.11.0 or later) to compile our thrift file into python code. Below is the official tutorial of installation, eventually, you should have a thrift executable.")]),t._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("http://thrift.apache.org/docs/install/\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("Before starting you need to install "),a("code",[t._v("requirements_dev.txt")]),t._v(" in your python environment, e.g. by calling")]),t._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("pip "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -r requirements_dev.txt\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("h4",{attrs:{id:"compile-the-thrift-library-and-debug"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#compile-the-thrift-library-and-debug"}},[t._v("#")]),t._v(" Compile the thrift library and Debug")]),t._v(" "),a("p",[t._v("In the root of IoTDB's source code folder, run "),a("code",[t._v("mvn clean generate-sources -pl client-py -am")]),t._v(".")]),t._v(" "),a("p",[t._v("This will automatically delete and repopulate the folder "),a("code",[t._v("iotdb/thrift")]),t._v(" with the generated thrift files.\nThis folder is ignored from git and should "),a("strong",[t._v("never be pushed to git!")])]),t._v(" "),a("p",[a("strong",[t._v("Notice")]),t._v(" Do not upload "),a("code",[t._v("iotdb/thrift")]),t._v(" to the git repo.")]),t._v(" "),a("h4",{attrs:{id:"session-client-example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#session-client-example"}},[t._v("#")]),t._v(" Session Client & Example")]),t._v(" "),a("p",[t._v("We packed up the Thrift interface in "),a("code",[t._v("client-py/src/iotdb/Session.py")]),t._v(" (similar with its Java counterpart), also provided an example file "),a("code",[t._v("client-py/src/SessionExample.py")]),t._v(" of how to use the session module. please read it carefully.")]),t._v(" "),a("p",[t._v("Or, another simple example:")]),t._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" iotdb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Session "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Session\n\nip "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),t._v("\nport_ "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6667"')]),t._v("\nusername_ "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'root'")]),t._v("\npassword_ "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'root'")]),t._v("\nsession "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ip"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" port_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" username_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nzone "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get_time_zone"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h4",{attrs:{id:"tests"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tests"}},[t._v("#")]),t._v(" Tests")]),t._v(" "),a("p",[t._v("Please add your custom tests in "),a("code",[t._v("tests")]),t._v(" folder.")]),t._v(" "),a("p",[t._v("To run all defined tests just type "),a("code",[t._v("pytest .")]),t._v(" in the root folder.")]),t._v(" "),a("p",[a("strong",[t._v("Notice")]),t._v(" Some tests need docker to be started on your system as a test instance is started in a docker container using "),a("a",{attrs:{href:"https://testcontainers-python.readthedocs.io/en/latest/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("testcontainers"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h4",{attrs:{id:"futher-tools"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#futher-tools"}},[t._v("#")]),t._v(" Futher Tools")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://pypi.org/project/black/",target:"_blank",rel:"noopener noreferrer"}},[t._v("black"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://pypi.org/project/flake8/",target:"_blank",rel:"noopener noreferrer"}},[t._v("flake8"),a("OutboundLink")],1),t._v(" are installed for autoformatting and linting.\nBoth can be run by "),a("code",[t._v("black .")]),t._v(" or "),a("code",[t._v("flake8 .")]),t._v(" respectively.")]),t._v(" "),a("h3",{attrs:{id:"releasing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#releasing"}},[t._v("#")]),t._v(" Releasing")]),t._v(" "),a("p",[t._v("To do a release just ensure that you have the right set of generated thrift files.\nThen run linting and auto-formatting.\nThen, ensure that all tests work (via "),a("code",[t._v("pytest .")]),t._v(").\nThen you are good to go to do a release!")]),t._v(" "),a("h4",{attrs:{id:"preparing-your-environment"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#preparing-your-environment"}},[t._v("#")]),t._v(" Preparing your environment")]),t._v(" "),a("p",[t._v("First, install all necessary dev dependencies via "),a("code",[t._v("pip install -r requirements_dev.txt")]),t._v(".")]),t._v(" "),a("h4",{attrs:{id:"doing-the-release"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#doing-the-release"}},[t._v("#")]),t._v(" Doing the Release")]),t._v(" "),a("p",[t._v("There is a convenient script "),a("code",[t._v("release.sh")]),t._v(" to do all steps for a release.\nNamely, these are")]),t._v(" "),a("ul",[a("li",[t._v("Remove all transient directories from last release (if exists)")]),t._v(" "),a("li",[t._v("(Re-)generate all generated sources via mvn")]),t._v(" "),a("li",[t._v("Run Linting (flake8)")]),t._v(" "),a("li",[t._v("Run Tests via pytest")]),t._v(" "),a("li",[t._v("Build")]),t._v(" "),a("li",[t._v("Release to pypi")])])])}),[],!1,null,null,null);s.default=n.exports}}]);