From 295b00f36011c911efb6bc03a905e234a5d45fdf Mon Sep 17 00:00:00 2001 From: Laurence Isla Date: Fri, 21 Jun 2024 20:38:33 -0500 Subject: [PATCH] docs: use PlantUML instead of Latex to generate Schema Isolation image --- docs/_diagrams/uml/dark/sch-iso-dark.uml | 3 +++ docs/_diagrams/uml/sch-iso.uml | 29 +++++++++++++++++++++++ docs/_static/arch-dark.svg | 2 +- docs/_static/css/custom.css | 4 ++++ docs/_static/db.png | Bin 6799 -> 0 bytes docs/_static/sch-iso-dark.svg | 1 + docs/_static/sch-iso.svg | 1 + docs/explanations/schema_isolation.rst | 16 +++++++++++-- 8 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 docs/_diagrams/uml/dark/sch-iso-dark.uml create mode 100644 docs/_diagrams/uml/sch-iso.uml delete mode 100644 docs/_static/db.png create mode 100644 docs/_static/sch-iso-dark.svg create mode 100644 docs/_static/sch-iso.svg diff --git a/docs/_diagrams/uml/dark/sch-iso-dark.uml b/docs/_diagrams/uml/dark/sch-iso-dark.uml new file mode 100644 index 000000000..df4220bb8 --- /dev/null +++ b/docs/_diagrams/uml/dark/sch-iso-dark.uml @@ -0,0 +1,3 @@ +@startuml +!include ../sch-iso.uml +@enduml diff --git a/docs/_diagrams/uml/sch-iso.uml b/docs/_diagrams/uml/sch-iso.uml new file mode 100644 index 000000000..30fb808c8 --- /dev/null +++ b/docs/_diagrams/uml/sch-iso.uml @@ -0,0 +1,29 @@ +@startuml + +skinparam backgroundColor transparent +skinparam linetype ortho + +skinparam node { + backgroundColor transparent + borderThickness 1 +} + +database "PostgreSQL" { + node public { + rectangle tables_public as "tables" + } + + node extensions as "**extensions**" { + } + + node API as "api" { + rectangle vf_api as "views + functions" + } + + tables_public <-- vf_api + extensions <-- vf_api +} + +vf_api <-[thickness=3]-> () PostgREST + +@enduml diff --git a/docs/_static/arch-dark.svg b/docs/_static/arch-dark.svg index 31c19df5e..f55c127c4 100644 --- a/docs/_static/arch-dark.svg +++ b/docs/_static/arch-dark.svg @@ -1 +1 @@ -PostgRESTPostgreSQLAuthorizationAPI schemaHTTPAuthApiRequestPlanQueryConnection PoolSchema CacheListenerHTTPAdminConfigCLITables, extensionsRoles, GRANT, RLSFunctions, ViewsuserProxyoperatordeveloperAuthenticates the user requestParses the URL syntaxGenerates the SQLLISTEN sessionusesreloads \ No newline at end of file +PostgRESTPostgreSQLAuthorizationAPI schemaHTTPAuthApiRequestPlanQueryConnection PoolSchema CacheListenerHTTPAdminConfigCLITables, extensionsRoles, GRANT, RLSFunctions, ViewsuserProxyoperatordeveloperAuthenticates the user requestParses the URL syntaxGenerates the SQLLISTEN sessionusesreloads \ No newline at end of file diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index 0839457dc..c71e0deb2 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -149,3 +149,7 @@ html[data-theme="dark"] .img-translucent img { transition: background-color 0.3s; margin-bottom: 24px; } + +.svg-container-md { + max-width: 400px; +} diff --git a/docs/_static/db.png b/docs/_static/db.png deleted file mode 100644 index 5b6d41edd991121047f5ee7f5904e16c3d73a2e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6799 zcmeAS@N?(olHy`uVBq!ia0y~yV60?dV2tBnW?*0lFPY!Sz`&r8>=ES4z)+>ez|hdb z!0?NKfuZ3A14F3+1H-EX1_rAc3=HB0b9M#VFfcH-1^9%x{{R11p_u-VNPLL zdB+4bzhc{*=_S*){{R1f*Qr~Pjmxgye|h5S!wIX8c$dwexApYnS06rp`O&ms&zb|5 z)4JEKUA9bLS2r#?Ixj2B-q!Zb6@=7_El6=uoSu|C5D)YbsrUu@buLbanby%@}#7&=AOj+ zGp*j)Rxc~3e4ezf>5bE|^3R{Wl-EvmnNohuQbV{qRk$<8Xy>~lGd^ff>p0~Vu<}-= zR@y|L>BkqR7`1oXik<%8<`jPM2Ako#ubS6FdstaE|30K~swi|)R&c9B)}h0zIIIf1 z^Kf3BBYbcHI*x3^(h>)2X1YDcNF3jC8=V0d4~QuNJ%*?Sy+g$bLpE1PfWj19=? zHIGY=oN--6X3mN|CmB7D#$|*sbNn~BS+6tOuXjfHp;srGPadkb6=(aS{NgA3>6)f` zXR})g^L|`^l>DOiX{JN-YMW#8`!@5{E&BN7mzGocf&DX2Z(1aO_Su$cTf#K-@*gm@ z>nERlWM&#)@gtV0k#8ID zV&vsN(O*&U#O46WTtDmCHt$W=cD%}%RO4eI?KUa*N$Ne%D8ZX2uUD#Px`u3+=&m#? zebJt|dtOXUU&yv;@_Nq2=?iu-S6<9L>|nHMvi=j-?~J8W1tz@-Obxu#zesm$Tgvi^ zIH4CWS4AG)xLde#s}_^YEUl*}&xSqEzQH6kebbc?#}y0Cy|F#uzB;Kyl6U2@(DSdh zXFdsxn_;`BtMc;X^KT55l`m!`8ECKZ`ti%tsOIFHeO^XFzB^y*mtXd>|dA5|) zwkBn>@8t)!9y%?~QnNiPt6SbjqF(y�a6PPG&BUYl{vZhhq!i&u-+tiK;L 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 diff --git a/docs/_static/sch-iso-dark.svg b/docs/_static/sch-iso-dark.svg new file mode 100644 index 000000000..bf6c8a0d5 --- /dev/null +++ b/docs/_static/sch-iso-dark.svg @@ -0,0 +1 @@ +PostgreSQLpublicapitablesextensionsviews + functionsPostgREST \ No newline at end of file diff --git a/docs/_static/sch-iso.svg b/docs/_static/sch-iso.svg new file mode 100644 index 000000000..0a54cba0f --- /dev/null +++ b/docs/_static/sch-iso.svg @@ -0,0 +1 @@ +PostgreSQLpublicapitablesextensionsviews + functionsPostgREST \ No newline at end of file diff --git a/docs/explanations/schema_isolation.rst b/docs/explanations/schema_isolation.rst index 6c8240108..a70f34e93 100644 --- a/docs/explanations/schema_isolation.rst +++ b/docs/explanations/schema_isolation.rst @@ -8,6 +8,18 @@ A PostgREST instance exposes all the tables, views, and functions of a single `P It is recommended that you don't expose tables on your API schema. Instead expose views and functions which insulate the internal details from the outside world. This allows you to change the internals of your schema and maintain backwards compatibility. It also keeps your code easier to refactor, and provides a natural way to do API versioning. -.. container:: img-translucent +.. container:: svg-container-md - .. image:: ../_static/db.png + .. container:: img-dark + + .. See https://github.com/sphinx-doc/sphinx/issues/2240#issuecomment-187366626 + + .. raw:: html + + + + .. container:: img-light + + .. raw:: html + +