From a1df4f4aac2a541506d654670135e575b6442383 Mon Sep 17 00:00:00 2001 From: Jason Reisman Date: Thu, 4 Apr 2019 14:24:36 -0400 Subject: [PATCH 01/13] Update to Python 3 --- make_sequence.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/make_sequence.py b/make_sequence.py index 18ddbc8..d939711 100755 --- a/make_sequence.py +++ b/make_sequence.py @@ -46,7 +46,7 @@ def parse_input_file(self, filename): # skip comments continue if line.startswith('@phase'): - tokens = map(lambda s : s.strip(), line[len('@phase'):].split(',')) + tokens = [s.strip() for s in line[len('@phase'):].split(',')] assert len(tokens) > 0, '@phase must contain at least a name' phase_name = tokens[0] assert len(phase_name) > 0, '@phase must contain at least a name' @@ -60,7 +60,7 @@ def parse_input_file(self, filename): self.phases.append(p) elif line.startswith('@order'): assert num_lines_processed==0, '@order may only be on the first line!' - tokens = map(lambda s : s.strip(), line[len('@order'):].split(',')) + tokens = [s.strip() for s in line[len('@order'):].split(',')] for t in tokens: key = len(self.actors) self.actors_map[t] = key @@ -71,7 +71,7 @@ def parse_input_file(self, filename): assert len(open_phases) == 0, '@phase opened without corresponding closing @endphase' def parse_step(self, line): - tokens = map(lambda s : s.strip(), line.split(',')) + tokens = [s.strip() for s in line.split(',')] assert len(tokens) >= 3, 'line %i has less than 3 tokens' % (i) if len(tokens) < 3: return @@ -174,17 +174,17 @@ def get_markers(self, color): return start_marker, end_marker def usage(): - print 'Usage: ./make_sequence.py > ' + print('Usage: ./make_sequence.py > ') sys.exit(-1) if __name__ == '__main__': if len(sys.argv) < 2: - print 'missing input filename' + print('missing input filename') usage() filename = sys.argv[1] if not os.path.isfile(filename): - print 'file %s not found' % filename + print('file %s not found' % filename) sys.exit(-1) seq = Sequence(sys.argv[1]) seq.build() - print seq.to_string() \ No newline at end of file + print(seq.to_string()) \ No newline at end of file From 3b0ddc64c13f9053c681aec4f389217ed4c76ce8 Mon Sep 17 00:00:00 2001 From: Jason Reisman Date: Thu, 4 Apr 2019 14:26:50 -0400 Subject: [PATCH 02/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 60db81e..aa61915 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Sequence A tool for creating SVG sequence diagrams from text input files. -###Example +### Example Sequence lets you make sequence diagrams that look like this: From a65f00e54e1b45923c84fd7c69696ab340d509c6 Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Wed, 14 Sep 2022 00:48:23 -0600 Subject: [PATCH 03/13] Update README.md file and added help folder with images --- README.md | 14 +++++++------- help/alice_bob.png | Bin 0 -> 100608 bytes help/alice_bob_ordered.png | Bin 0 -> 143504 bytes 3 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 help/alice_bob.png create mode 100644 help/alice_bob_ordered.png diff --git a/README.md b/README.md index aa61915..4d2de26 100644 --- a/README.md +++ b/README.md @@ -29,11 +29,11 @@ Browser, Browser, Rasterizes content Browser, User, Presents content @endphase ``` -###Data format +### Data format Sequence generates its SVG from a simple text data file. There are two basic entities in the data file: _steps_ and _phases_. Lines that begin with a hashtag (#) will be interpretted as comments, and have no effect on the image rendered. Empty lines are also ignored. -####Steps +#### Steps Each _step_ in the sequence, where a step is defined as _an action between two actors_, is a single line in the input data file. (A step will be rendered as an arrow with text between actor columns.) The line must be comma-separated and contain either three or four values. The first value is the source actor, the one invoking the action. The second entry is the target actor, the one receiving the action. The third entry is a description of the action itself. The fourth value is optional, but if present will be used as the step's color. @@ -54,7 +54,7 @@ Client, Server, Makes Request, green **Note #2**: if the source actor and target actor are the same, then no arrow will be drawn between the actors. Instead a dot will appear in the source/target actor column with the text describing the action. -####Phases +#### Phases A _phase_ is a collection of steps which will visually grouped together in the SVG. Phases are opened by the special directive in the data `@phase`. When opening a phase you will need to supply the name for the phase. This is just text included after the open phase directive. For example: @@ -84,9 +84,9 @@ Bob, Bob, Decrypts message w/ priv key which produces this SVG: - + -####Ordering +#### Ordering By defaults, actors will be rendered from left to right in the order that they appear in the sequence file. However, if you want to specify a specific order for the actors in your diagram, you can do so by using the `@order` directive as the first line in your sequence file, followed by the (comma separated) specific actor order that you'd like to see. Comment and blank lines may preceed `@order`, but nothing else. @@ -107,14 +107,14 @@ Bob, Bob, Decrypts message w/ priv key which then produces this SVG: - + Any actors not specified in the `@order` directive will appear in the order they appear in the rest of the file. ### Prerequisites You must have a python 2.7 installation and install the Python package `svgwrite` (e.g., `pip install svgwrite`) -###Usage +### Usage ``` python make_sequence.py in.seq > out.svg ``` diff --git a/help/alice_bob.png b/help/alice_bob.png new file mode 100644 index 0000000000000000000000000000000000000000..e75cf42a88160d35c117289b7d21f30d851e6e24 GIT binary patch literal 100608 zcmeFYWmJ{j+BOV`0;05l(k;12fkl@zC?MU4fOPjlxF z_p@*Je)jnOyyN@xjn^?8V{y$s=bUF8=P`rdDM&tl`syhH0>X1?DRCtP1mq?Jgh#2U zPk=AtlRtbA5T3m>6BBzUEha|(&d&OinT0U|f>dx^0*bnFKYs64Jf5g1y11~+wtSRs z&Lt%|iG?4v@M|_?pO9uIhBAB=@$$?<@~0(_qa-B6v5m3IrX{fB;vCDrJdWd*M(}K@ zUAkHHSem~XOtK$=n;g!kyhK>H)Ibt>Qh*>#Dp0T*3SYSEa&L20`+omYFO)JcW%vmKT3~8d|0fesK{SMt5qwm81ab$_#zi=> zcjA(WD!!;U0#?7F!q~=O4MseA?vigR1oPNH1+j!)jBdad|b0V$tFwB$WCDn=C}0n6KRPlH50b z{1nu4^V2^rnc-OwR^-bOEs5(UeKxTJDJmg)&Sw=k>x29eU3x>8N)m`;Mt6_)Ev$J= zz91qzLMuuB3yq{5R3;@T5~ zBru(YMqTR{B+ag^bui5^1wZ-FN6MT39&ucqDI$f0fW0KV^ZX?4a~qE~!Sj*2n z5O9O^<&jQ>UoAU6n|$7;H;ymVh9nw=RM+M)#7>IMXtvU6PTlv&OJvn&KbQw3%}B5= zdXs=wc=j11nx?ouI>_PpnH_COMB@sJ3u=>F+vjk;RfRQMIoOGAaEmyZA;MUsDf@Td z=O0Yk7?7Lpt2{%g`KcVR)3K~@+)$lGSS>a>*g{`G>E7Z$N|&h!yGw{2 zu#Q+;I7qWLc+I15`xPA6faYK92F}?&DZv=B)#AZXoF|DG#?Wk4d!795#FE8pU$N-u zhAm=tLvCZgM}=B``!fCbnl1Fw*}lvBa+yq^ym|($=mlS7wL!Q#iN4`hnOhMFAJt}X z+_6dpPLF$Nl&Nf>tIL{T{D=74_>B83=U<6P-`8Dzi4T2V;I%?k&glx0C}BF|+SLgY?;WDzVJQL*iy zSDE32&(UsDiMr&4PBS*ws4BuY`U z2fYdNY=rYX?VI`86xs^MG+bG)vJDvmL##9@^8=M=W8(9M+1HKG03^fdF4CpEY zDkDG6SXl!osG`2M&$RK3)OBBRO4~Pa)Wd773WCHIl7D`_`oWGgAS-<&VGm@DQp8}ted6!97ekvoG)p26-SH2$e z0TTxkrut&7QpM8>O|vQe^PaiMWJ{e-o}B@o)=Vmgau+wNi<6kAooWwA_!<@*8o8W? zo%Hre_WduWE^aZdF@iDpNUZo6_yYLwd3BvAd0cs!?LRwQZ(AItu6fMEtO@KB91=QN zK)EmF*A)0zi>E(K$89u>R`-VQ#BbM37x(J)rfujR-gSwM`mWjjT&vFuHc8&X9#zwg z*A*>Q);(%YYff8z!Y8cZ-8ZOv z@1lBT%@M@WVG=v+f^YDmoF|hjnv|CtYO`(=t2P<%<7TX9EOUF45SFOH7RPpE8QYO;`Q$?4v{U&Fg=&%T+O#3+=& zbtz6s!S?3FX4OQMurQS?7B8`i!z}7xc(Di4f3j?`a%Qhn-#x$8U((;*4^q-rev@~W z*N_*Vjd9%M%I8u#fi!-R-K>ZyD-|&@GHD0=$N0VW-BZA>|<9{^K?EkT}z+wOf%OqU3S6~VRZPfS(ZVjdZrCF3msdo z5Z6|w4uWz5F3>NHCc~38nsnI)l|xiy3gQf`NoVg3Tq}wTe%pnjXy7mc8H<$KTVQ%*%M%^i@nu^ly zim8^OnUvYB)9nFKt=Hn$hP6*gY8t}|;c0tLElb_AQ_a7PoX<&z1^nFw4>k^(D@VQb zEb9$i`ys1$^S7fIUBsrh-6shHzPl*sm=NABp-E-z_hU*s?=)Q1*Ny`is$^8AygvT= zI+7(QxmP$`csa%T`DvuLQKpgCUGmjl@mhOtiXu_qhCxZihozFUo zo*tglJKrXTpR+vAgH&D}yvtHBntd6^K{TQ?QX!3ue?&W+>j({%B+mb2Ap!-9RF{Z{uvSYzqY#v)ODD;#k} zq+QHEkS3CoH16I2Dk&f7Ihxcf82LLxT(Ev=@X!;+d9$-(^WU-)G;B4eV=k(px&#aZ9 zm9LkN$tDF=JRION*Ypu0bL!GPPqzu*N_X z4h?iiaf!(4lOENJ_K_M5!$G?58s|vPo_S=`_vp*^27+Ikz<`zdb8_Vsou=CeD8i5M zVQ~`1+5R`b#0t<$J0qG7M5o_$`J-N5xo>n& z{(4_U41ag`xPsjR^wDFr7KjzlY@{^o5fJcc9{wXrD^VXKARwljsi-@s%gcd{tSwm# zK3W?Zv$$B=0JRYi_+7xjPfKG519BHj3oCoDivZw)nfB zw;^AArlnrwC4K$(KL1(c-EjrRe;E-d4Z}lxT>6zkfrIM5>8-G0A^S^PgQ3(jz_9 zrTUQi>Fxho$X_+u2f_cW`5*0Bm5}k8-WKo-hyB~?|5e#1!SR2~=Al$S8xTOaif!`C z|0X?h#K)k$|GN07HYx0P$FK5NIXV8jWDAEleNwC%=!?|LDdFd(Ue6hetCZA@!nrzn zh^&cKbzL{WX486Jo>yyR_k_PR&5Mt>C50LUm&~^AZjLZ_(u->s8<>j}E?snya1sTO zt?E_+Z1#$41BT!HW*SQ2w!Wa|m)$w2T_V*iR#mqj=IZ=hSRAkOa^DJ6B-P6`t&L0S zvg}=UcfA)V$-j#2E8oTR?4af55WV&Gz`C=O?C$vchHWp2v)^y4#$q=NRSn}Fy{*c! zSow;-1=#i)H?dr=Z(7G$XZZ-^1sf!6nbvi;RCiu*?8MEu>MC>C8MoO=b5?~|wZJxI zh{d`XNYZ+>tm<>1vXYMjzXU|Zhnj47lFAArbt*2WyC0%)FS-~l^O^|pb{))a$1`i; z$Ak2AX*_+Ozd?<3pI>_t9}dx=a7y#Mn58IRr|Q~Fv0j|$_4lT6lR{eUe0sir*?R9; zce&_ZsB#M%^&(|x4>kGXOmWn$^67MIwA62aqTQ7J&$G;mhx|$WxM8=T5J?qS$mgGcNo%Xs=2)=?@Z4-_2xEwD9Z7dhKWpIyh2Tw^xB+x>4Cdd1$ndH-&4>Z!Af*O2Njh^n@XTi1*ysEz7+LE=$WT>K;Ch%jeyCN1${FLsFviG z++uU2ZG@dBBU7_BqOy`LSr9am3%=-lIT*bk_`-5if$ug-TgE)V9@T5jSgMWgO?M$v^JX{=M7uPuqU7mtg!U2*nO@n@SCyd zqZ2y{+?1#Mm0Wc|CT;7e^LB&GjtFbd zM@s}6{+H_X#7+D~5pHH&(V`4ne*P@DX)E2mz_pq7)!V!qLRtxvSj$%!UDQ{%>iY8z z6Y_EAPh!yNdQ**^=WQil9CngklzpzQhjesN`gw48_`{5)hzh4Hn@)N>bHZ&BA2DZe z9{_r%wDZ#sLfFCjYrZ?e0Du1haq!-;f#E(Ub>N5IM5YFUK*wdv+6C2ap%-GMPu|}( zuV?8A`7(IzV%h&LZai$Tl&(AfrS<6i3;T}h(n{yN@??h4?T+G9nbEEhD8fx_mW@oW z;D(>T&w0u7@`K1b%sRn1EB5n9hxRDWQ>G4dbmq;Meve@4j#D2RX@$r}Py?+-i4dO` z>^IUDtWXwikE@OydDW=`|*P5Mp}})m7g&dee_Yp zmO)ndn_VZ_HLi4t4hnu^7)_CGQiAv9scNpX!Yk;^;CzCyOEd8)OUp?Q(VjD{ea8E| z*$z5pDGpur7*7`EtL(rFrfT|0vE6rfsbl!qWa#T{+Q2>dAA`p_hn%Z&yefG$Ym%XJ z{{!?M+8NV2Zwcr@OA)G|wSjOzod8ujJO3>g4 zoCGWG6O!%Zt%=e-q6ktz_aP7}LQ5c9sc*cPGcQzts%lxrWsp{SEjUhpfE|8(A;}X& zkX;-@C0~|BB|W#?!(f%|JX>LGS*VB8vyq@j`sTMq<(s>~1Q2EsLju@^o&^jKvT`8q zu}{!-Gy4E>&0|^++uAOV^t70+57QTc#84^n9o8AqKyvJH7Zj@CD=0*}M#{Ztiw-q4 zv!7Bv8;gu5+^m5!dq?<=<`W}DVueOA%)~7WGa97RzFR5P=9AU0X%|rK@LzVc6!lKV zS)GHr(?T^-$yw|6D+U?Hn7Z5J!P5Mbbh}gJ3m^B$njohsOJUL+X}64}O%)76>5&gc zu25gZgg+Q7=$AuZ$~^f%3;n#+){no;6r*kWn>>OOfA+@BWb;?QozvgXnRe}*An#hi z{ISmsRyzC_qJ?s%P4`~c(#Xb7o|bN4S3r+_9;5dR(_OwxaB%`ZKiY!n>(=%P-JMkP zr1nmkk$Fd(#9jAQs)4)I=k6d9eeA>$X1xh4I-0?$8;fm$Xm7N0>&!Y` z1^L+I4_+BdrTL%ardZ9Lq@{N_GX8N2ZqSN6OdXVyo`c`Re-828xO${2dZlg!^6F({ z<6WJM#E+=&zNW79wI1crQ^K$DNK;e&N!3PE5i=`EuF|B19m~1{Y?r|n+1ZdKM7;9YrYZo1p<+kvK zUYUU~$}^{IqVJSB;a8{$Bc|!S4AEDZUg}vCqGJ@T%RcA~g|)E}>ygY5Y4jm*@%EEO z`%!_~!=Sc!=z7-Ytkb4rPmWl~(hvD{l8`6Ur*?kq74ek_46uW=(?9S@LtJ={SC%d7JIRtGGa2j9Q*QVlU_n?DsRq^DzpVqEyer z+Wb2T-Rv7^U40~6nfnwv+Ufgzm1&w!ep4ZBWRJ?xE1c_BpKtyp%KQ5=?S|tHbn_<; ztJq2O+)$L1*mNs1iuXZ?tex+=+OlIMVaWdFkC9tndV6(6M1T{}xY0OHYdX4Js zoyRe}BgiDL|EnrgdKNnGU>D>Y)J#u2C$@{7se2cOjbZ6?&DRG(=*ukO3rb}8fErN@L585qYEcv(x;D#cTlh`?H_KU7tQ_sr3s9$}Hd!jumbPum7Q!-&1 zH4mY3{5H<^JGKU{Ep!t@@3s1!C5r40AEe8l>p_1xIh$qw_=ft-qJATuBv3@Y2EL-u zTf4*CzxQePDw=jz@$iRotYQIy^kg<^UPBsuEdeY-(tfhPp5{Dq(iBC?lxo9I;2=jo zO&y^^Knh1;ymG?Tw!4?V@h$LDU!#s!_t!@ZUW0va7RF;q;>-yIXYf$%a~AXS%~n{4 z)c)q3dpeMvpLXCxM)_d?-Epm75n}h-Mj>${zHt(Jml_`JOYg{pMwe4f-l4aMF%H22 z*~-^8o{sSCz0Mzm=QxXbQXG=cE7!WV$oAeKWAw+x#~zb=<+Ioh@dcWoqtBcWkLuV> zf)2Mz9sK$$6XtTE*Dk$5v(ja2X_bHn^s82Xcz`diraFdb(q8(iDbFR6R+2A8i}+Mm zR6W34S65zJiO}l7SNNwi9B z*l*NSK}48jBFJuo44=g@c5}ji)_Zo~roYqK8svvyPuT_Pdw=uOE7Bko4AQId%iseG z84GT|)8|b9zYIb~&ti=wCShOAsZ8Yq%gBqW;+)#G)_>4~v?Sb$#CnlprU^o0`M`$K zKeBKWp^weMhH3L32Qx{NtFXd11q|)SB*7M^Atu?Gub_g72){0V)+dzKId0$?_(jSjihu0AHA5w| zMWNT1$!qnSaxiNwpSaknK?>8M{@BO%_(LLbSYFvoyvL3Tm3BOd7&w$haR8;Y{+)E< z74u`YaUF1ahSFJEW@QzGf~jj(37)M$XJtIIMuJ&z_r8Q4GpIJlR1Ca4IoP#Z|5`^- z*^gtpf^G<+J^O}hLDoGk6qL3pvikA>pL8YL2@k@*BwteGewAdJX8N>s+P=vb%hNto zY~Yw)(RF~(JB0NmZ8GsWEx{+ArD4ND59?(z*<9etfyq>%4M9JB$&+?%o<2J9%nz2anV;#ZVt*0(ZMKfdg{Q^#{R%5x-r1d}73kdAS=vdEuroV-L8BrB1!r7xJ z(%{LsAESTmPck0uwPGbhl(ybv6bnDjYO2cY^Jjps7$YQgbh^D%lgp534vai|iY@)X|lfv8?AR!S!<^kK}=qKC|S!dMc zWx{vh2_%eQzai&GxP(R|Q^U_2;4%I>A-EKocN95j$Ot->ccChDGeWHF&uUEgsZ<(s7`aYJeLvQDa&V})nFVEXP zY1eEEK8=y61Z{*(p39U#F`_R&^lC7P?a93A#iT%wFW}cI``p!AU1D>|$P8Ugv2SYzCIUBPqK>`+BiChh3Iw~x8o zEX=dx`_!Pba7SmDi@0gf?W~sZF5!=W$PvkiuK(2uF~_LPof!Y{+LU?CAS`&`29*!9 zwMlT1P0V;33+hXXn6qE>v;TE#(dD&K3!ZR8PEN`ayBCa&|>WEjl&UT%_V`&J7^7lFPOHA3rMI@GBW@1?6?+_YgU1UVfsd8q(NRbSs47fkzD zHB3U2%RS(U^WJ_=~ZoK}JbAbKqdy9i2OW+=ikgrU4__xVYQPl4;JON@d+onQ*!Z z#KSGvPOM3XFkydj11-)W`5sw36+CYBQ6{}TJH<9DF`=5~r%l+<i6p-tDT~n+ieA`DJtb%}IaB?JMWjFH5*#dzVEIcYBS; zi+{J;`IycZu)ooCdOYZE@3p}dVV3Z^w2738_LOCZMu1)}UD9ty$wqXN|8$6>5YEmY zcQvqb=Ih4NZ{A;((ycAi_~&)4m)0La({*J#?M$uLpdBwC=}ao{gv@hDbEfT0=C_CV zDd@30dq#Puph_3>JS8}BaAfpjC-LO1^7}hftyncd&X@=qACXp)${nVAD^(`nRRLX| zAX(p%>6l_Kb)E7#Q~Gi8&#XgXQ>ZT$ewk4q4X~0unKg6K?*9ZHYzb@Jsgr(f1)V

qc-t8Bpm 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 D?KQ;E literal 0 HcmV?d00001 diff --git a/help/alice_bob_ordered.png b/help/alice_bob_ordered.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2224a8f5fe39eadac9cc633147740036681760 GIT binary patch literal 143504 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�tskDe6WKE?{5ZKW1i$5-!K3w0Ng_fpBh+5 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ℑ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 K%=^>+-2VV>Cp@wM literal 0 HcmV?d00001 From d3d171bf014e0262fa4dd56a431c93c8f0cafb21 Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Wed, 14 Sep 2022 00:50:18 -0600 Subject: [PATCH 04/13] Added shebang to python script --- make_sequence.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/make_sequence.py b/make_sequence.py index d939711..e6b14fd 100755 --- a/make_sequence.py +++ b/make_sequence.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import svgwrite import os.path @@ -187,4 +189,4 @@ def usage(): sys.exit(-1) seq = Sequence(sys.argv[1]) seq.build() - print(seq.to_string()) \ No newline at end of file + print(seq.to_string()) From 7bef3b3b63d94f597101da24f057a0b27776481c Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Tue, 27 Sep 2022 12:43:10 -0600 Subject: [PATCH 05/13] Added argument parser, error handling --- make_sequence.py | 399 +++++++++++++++++++++++++---------------------- 1 file changed, 215 insertions(+), 184 deletions(-) diff --git a/make_sequence.py b/make_sequence.py index e6b14fd..f49b608 100755 --- a/make_sequence.py +++ b/make_sequence.py @@ -1,192 +1,223 @@ #!/usr/bin/env python3 import svgwrite - +import argparse import os.path import sys +import logging -class Colors: - black = '#000000' - gray = '#C0C0C0' - -class Phase: - def __init__(self, name, color, action0): - self.name = name - self.color = color - self.action0 = action0 - self.action1 = None - -class Sequence: - def __init__(self, filename): - self.filename = filename - self.actors = [] - self.actors_map = {} - self.actions = [] - self.phases = [] - # read actions into file - self.parse_input_file(filename) - # create drawing - self.top_left = (100, 50) - self.step_size = (100, 25) - self.text_fudge = (0, 5) - self.width = self.top_left[0] + (len(self.actors) + 1)*self.step_size[0] - self.height = self.top_left[1] + (len(self.actions) + 1)*self.step_size[1] - self.drawing = svgwrite.Drawing(size=(self.width, self.height)) - self.markers = {} - - def parse_input_file(self, filename): - # read actions into file - open_phases = [] - num_lines_processed = 0 - with open(filename) as f: - for i, line in enumerate(f): - line = line.strip() - if len(line) == 0: - # skip empty lines - continue - if line[0] == '#': - # skip comments - continue - if line.startswith('@phase'): - tokens = [s.strip() for s in line[len('@phase'):].split(',')] - assert len(tokens) > 0, '@phase must contain at least a name' - phase_name = tokens[0] - assert len(phase_name) > 0, '@phase must contain at least a name' - phase_color = tokens[1] if len(tokens) > 1 else Colors.gray - p = Phase(phase_name, phase_color, len(self.actions)) - open_phases.append(p) - elif line.startswith('@endphase'): - assert len(open_phases) > 0, '@endphase found with no corresponding opening @phase' - p = open_phases.pop() - p.action1 = len(self.actions) - self.phases.append(p) - elif line.startswith('@order'): - assert num_lines_processed==0, '@order may only be on the first line!' - tokens = [s.strip() for s in line[len('@order'):].split(',')] - for t in tokens: - key = len(self.actors) - self.actors_map[t] = key - self.actors.append(t) - else: - self.parse_step(line) - num_lines_processed += 1 - assert len(open_phases) == 0, '@phase opened without corresponding closing @endphase' - - def parse_step(self, line): - tokens = [s.strip() for s in line.split(',')] - assert len(tokens) >= 3, 'line %i has less than 3 tokens' % (i) - if len(tokens) < 3: - return - actor0 = tokens[0] - actor1 = tokens[1] - action = tokens[2] - if actor0 not in self.actors_map: - key = len(self.actors) - self.actors_map[actor0] = key - self.actors.append(actor0) - if actor1 not in self.actors_map: - key = len(self.actors) - self.actors_map[actor1] = key - self.actors.append(actor1) - key0 = self.actors_map[actor0] - key1 = self.actors_map[actor1] - color = Colors.black - if len(tokens) > 3: - color = tokens[3].strip() - self.actions.append((key0, key1, action, color)) - - - def build(self): - self.create_header() - self.create_actors() - self.create_phases() - self.create_actions() - pass - - def to_string(self): - return self.drawing.tostring() - - def create_header(self): - text = 'filename: %s' % self.filename - self.drawing.add(self.drawing.text(text, insert=(self.top_left[0] - 0.5*self.step_size[0], 0.5*self.top_left[1]), stroke='none', fill=Colors.gray, font_family="Helevetica", font_size="8pt", text_anchor="start")) - - def create_phases(self): - for phase in self.phases: - action0 = self.actions[phase.action0] - action1 = self.actions[phase.action1 - 1] - - left = len(self.actors) + 1 - right = -1 - for action in self.actions[phase.action0:phase.action1]: - mn = min(action[0:2]) - mx = max(action[0:2]) - left = mn if mn < left else left - right = mx if mx > right else right - x = self.top_left[0] + (left - 0.5)*self.step_size[0] - y = self.top_left[1] + (phase.action0 + 0.5)*self.step_size[1] - w = (right - left + 1)*self.step_size[0] - h = (phase.action1 - phase.action0 - 0.125)*self.step_size[1] - filled_rect = self.drawing.add(self.drawing.rect((x,y), (w,h))) - filled_rect.fill(phase.color, None, 0.15) - self.drawing.add(self.drawing.rect((x,y), (w,h), stroke=phase.color, stroke_width=1, fill='none')) - transform = 'rotate(180,%i,%i) translate(6,0)' % (x, y+0.5*h) - self.drawing.add(self.drawing.text(phase.name, insert=(x, y+0.5*h), stroke='none', fill=phase.color, font_family="Helevetica", font_size="6pt", text_anchor="middle", writing_mode="tb", transform=transform)) - - def create_actors(self): - x = self.top_left[0] - y = self.top_left[1] - for name in self.actors: - self.drawing.add(self.drawing.text(name, insert=(x, y - self.text_fudge[1]), stroke='none', fill=Colors.black, font_family="Helevetica", font_size="8pt", text_anchor="middle")) - line = self.drawing.add(self.drawing.line((x, y), (x, self.height), stroke=Colors.gray, stroke_width=1)) - line.dasharray([5, 5]) - x += self.step_size[0] - - def create_actions(self): - markers = {} - # add actions - y = self.top_left[1] + self.step_size[1] - for (a0, a1, act, color) in self.actions: - x0 = self.top_left[0] + a0*self.step_size[0] - x1 = self.top_left[0] + a1*self.step_size[0] - if a0 == a1: - self.drawing.add(self.drawing.circle((x0, y), r=2, fill=color)) - else: - start_marker, end_marker = self.get_markers(color) - assert start_marker is not None - assert end_marker is not None - line = self.drawing.add(self.drawing.line((x0, y), (x1, y), stroke=color, stroke_width=1)) - line['marker-start'] = start_marker.get_funciri() - line['marker-end'] = end_marker.get_funciri() - self.drawing.add(self.drawing.text(act, insert=(0.5*(x0 + x1), y - self.text_fudge[1]), stroke='none', fill=color, font_family="Helevetica", font_size="6pt", text_anchor="middle")) - y += self.step_size[1] - - def get_markers(self, color): - # create or get marker objects - start_marker, end_marker = None, None - if color in self.markers: - start_marker, end_marker = self.markers[color] - else: - start_marker = self.drawing.marker(insert=(2,2), size=(10,10), orient='auto') - start_marker.add(self.drawing.circle((2,2), r=2, fill=color)) - self.drawing.defs.add(start_marker) - end_marker = self.drawing.marker(insert=(6,3), size=(10,10), orient='auto') - end_marker.add(self.drawing.path("M0,0 L0,7 L6,3 L0,0", fill=color)) - self.drawing.defs.add(end_marker) - self.markers[color] = (start_marker, end_marker) - return start_marker, end_marker - -def usage(): - print('Usage: ./make_sequence.py > ') - sys.exit(-1) +logging.basicConfig(level=logging.DEBUG) +class Colors: + black = '#000000' + gray = '#C0C0C0' + +class PhaseError(Exception): + pass + +class Phase(object): + def __init__(self, name, color, action0): + self.name = name + self.color = color + self.action0 = action0 + self.action1 = None + +class Sequence(object): + def __init__(self, filename): + self.filename = filename + self.actors = [] + self.actors_map = {} + self.actions = [] + self.phases = [] + # read actions into file + self.parse_input_file(filename) + # create drawing + self.top_left = (100, 50) + self.step_size = (100, 25) + self.text_fudge = (0, 5) + self.width = self.top_left[0] + (len(self.actors) + 1)*self.step_size[0] + self.height = self.top_left[1] + (len(self.actions) + 1)*self.step_size[1] + self.drawing = svgwrite.Drawing(size=(self.width, self.height)) + self.markers = {} + + def parse_input_file(self, filename): + # read actions into file + open_phases = [] + num_lines_processed = 0 + with open(filename) as f: + for i, line in enumerate(f): + line = line.strip() + logging.debug('New line: %s' % line) + if len(line) == 0: + logging.debug('skip empty lines') + continue + if line[0] == '#': + logging.debug('skip comments') + continue + if line.startswith('@phase'): + logging.debug('opens a phase') + tokens = [s.strip() for s in line[len('@phase'):].split(',')] + assert len(tokens) > 0, '@phase must contain at least a name' + phase_name = tokens[0] + assert len(phase_name) > 0, '@phase must contain at least a name' + phase_color = tokens[1] if len(tokens) > 1 else Colors.gray + p = Phase(phase_name, phase_color, len(self.actions)) + open_phases.append(p) + logging.debug('total open phases: %d' % len(open_phases)) + elif line.startswith('@endphase'): + logging.debug('ends a phase') + assert len(open_phases) > 0, '@endphase found with no corresponding opening @phase' + p = open_phases.pop() + p.action1 = len(self.actions) + self.phases.append(p) + elif line.startswith('@order'): + logging.debug('order line') + assert num_lines_processed==0, '@order may only be on the first line!' + tokens = [s.strip() for s in line[len('@order'):].split(',')] + for t in tokens: + key = len(self.actors) + self.actors_map[t] = key + self.actors.append(t) + else: + logging.debug('process a flow line') + self.parse_step(line) + num_lines_processed += 1 + if len(open_phases) != 0: + raise PhaseError('@phase opened without corresponding closing @endphase') + + def parse_step(self, line): + tokens = [s.strip() for s in line.split(',')] + assert len(tokens) >= 3, 'line %i has less than 3 tokens' % (i) + if len(tokens) < 3: + return + actor0 = tokens[0] + actor1 = tokens[1] + action = tokens[2] + if actor0 not in self.actors_map: + key = len(self.actors) + self.actors_map[actor0] = key + self.actors.append(actor0) + if actor1 not in self.actors_map: + key = len(self.actors) + self.actors_map[actor1] = key + self.actors.append(actor1) + key0 = self.actors_map[actor0] + key1 = self.actors_map[actor1] + color = Colors.black + if len(tokens) > 3: + color = tokens[3].strip() + self.actions.append((key0, key1, action, color)) + + + def build(self): + self.create_header() + self.create_actors() + self.create_phases() + self.create_actions() + pass + + def to_string(self): + return self.drawing.tostring() + + def create_header(self): + text = 'filename: %s' % self.filename + self.drawing.add(self.drawing.text(text, insert=(self.top_left[0] - 0.5*self.step_size[0], 0.5*self.top_left[1]), stroke='none', fill=Colors.gray, font_family="Helevetica", font_size="8pt", text_anchor="start")) + + def create_phases(self): + for phase in self.phases: + action0 = self.actions[phase.action0] + action1 = self.actions[phase.action1 - 1] + + left = len(self.actors) + 1 + right = -1 + for action in self.actions[phase.action0:phase.action1]: + mn = min(action[0:2]) + mx = max(action[0:2]) + left = mn if mn < left else left + right = mx if mx > right else right + x = self.top_left[0] + (left - 0.5)*self.step_size[0] + y = self.top_left[1] + (phase.action0 + 0.5)*self.step_size[1] + w = (right - left + 1)*self.step_size[0] + h = (phase.action1 - phase.action0 - 0.125)*self.step_size[1] + filled_rect = self.drawing.add(self.drawing.rect((x,y), (w,h))) + filled_rect.fill(phase.color, None, 0.15) + self.drawing.add(self.drawing.rect((x,y), (w,h), stroke=phase.color, stroke_width=1, fill='none')) + transform = 'rotate(180,%i,%i) translate(6,0)' % (x, y+0.5*h) + self.drawing.add(self.drawing.text(phase.name, insert=(x, y+0.5*h), stroke='none', fill=phase.color, font_family="Helevetica", font_size="6pt", text_anchor="middle", writing_mode="tb", transform=transform)) + + def create_actors(self): + x = self.top_left[0] + y = self.top_left[1] + for name in self.actors: + self.drawing.add(self.drawing.text(name, insert=(x, y - self.text_fudge[1]), stroke='none', fill=Colors.black, font_family="Helevetica", font_size="8pt", text_anchor="middle")) + line = self.drawing.add(self.drawing.line((x, y), (x, self.height), stroke=Colors.gray, stroke_width=1)) + line.dasharray([5, 5]) + x += self.step_size[0] + + def create_actions(self): + markers = {} + # add actions + y = self.top_left[1] + self.step_size[1] + for (a0, a1, act, color) in self.actions: + x0 = self.top_left[0] + a0*self.step_size[0] + x1 = self.top_left[0] + a1*self.step_size[0] + if a0 == a1: + self.drawing.add(self.drawing.circle((x0, y), r=2, fill=color)) + else: + start_marker, end_marker = self.get_markers(color) + assert start_marker is not None + assert end_marker is not None + line = self.drawing.add(self.drawing.line((x0, y), (x1, y), stroke=color, stroke_width=1)) + line['marker-start'] = start_marker.get_funciri() + line['marker-end'] = end_marker.get_funciri() + self.drawing.add(self.drawing.text(act, insert=(0.5*(x0 + x1), y - self.text_fudge[1]), stroke='none', fill=color, font_family="Helevetica", font_size="6pt", text_anchor="middle")) + y += self.step_size[1] + + def get_markers(self, color): + # create or get marker objects + start_marker, end_marker = None, None + if color in self.markers: + start_marker, end_marker = self.markers[color] + else: + start_marker = self.drawing.marker(insert=(2,2), size=(10,10), orient='auto') + start_marker.add(self.drawing.circle((2,2), r=2, fill=color)) + self.drawing.defs.add(start_marker) + end_marker = self.drawing.marker(insert=(6,3), size=(10,10), orient='auto') + end_marker.add(self.drawing.path("M0,0 L0,7 L6,3 L0,0", fill=color)) + self.drawing.defs.add(end_marker) + self.markers[color] = (start_marker, end_marker) + return start_marker, end_marker + + +def main(): + # Parameters + cmd_param = argparse.ArgumentParser( + description='A tool for creating SVG sequence diagrams from text input files.') + cmd_param.add_argument('--in', '-i', dest='inputfile', + metavar='text_flow_filename', + type=str, required=True, + help='Flow text file input.') + cmd_param.add_argument('--out', '-o', dest='outputfile', + metavar='svg_filename', type=str, + required=True, + help='This is the result svg file.') + + param = cmd_param.parse_args() + + txtin_flow_filename = param.inputfile + svgout_flow_filename = param.outputfile + + if not os.path.isfile(txtin_flow_filename): + print(f'File {txtin_flow_filename} not found') + sys.exit(-1) + + seq = Sequence(txtin_flow_filename) + seq.build() + print(seq.to_string()) + + with open(svgout_flow_filename, 'w') as f: + print(seq.to_string(), file=f) + + if __name__ == '__main__': - if len(sys.argv) < 2: - print('missing input filename') - usage() - filename = sys.argv[1] - if not os.path.isfile(filename): - print('file %s not found' % filename) - sys.exit(-1) - seq = Sequence(sys.argv[1]) - seq.build() - print(seq.to_string()) + main() From 53a9f58f76abc557548ac0c26b27b863f3ebcb1c Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Tue, 27 Sep 2022 12:45:56 -0600 Subject: [PATCH 06/13] Update readme file --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d2de26..5b02a7e 100644 --- a/README.md +++ b/README.md @@ -116,5 +116,14 @@ You must have a python 2.7 installation and install the Python package `svgwrite ### Usage ``` -python make_sequence.py in.seq > out.svg +usage: make_sequence.py [-h] --in text_flow_filename --out svg_filename + +A tool for creating SVG sequence diagrams from text input files. + +options: + -h, --help show this help message and exit + --in text_flow_filename, -i text_flow_filename + Flow text file input. + --out svg_filename, -o svg_filename + This is the result svg file. ``` From cc9d88a6e7c769a18a89736aeb1b0f4a6df9a037 Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Tue, 27 Sep 2022 13:09:21 -0600 Subject: [PATCH 07/13] Adding logger object and enable debug mode --- make_sequence.py | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/make_sequence.py b/make_sequence.py index f49b608..0e930be 100755 --- a/make_sequence.py +++ b/make_sequence.py @@ -6,7 +6,11 @@ import sys import logging -logging.basicConfig(level=logging.DEBUG) +# Default logging configuration +logging.basicConfig(level=logging.INFO) + +# Get logger object +logger = logging.getLogger(__name__) class Colors: black = '#000000' @@ -47,15 +51,15 @@ def parse_input_file(self, filename): with open(filename) as f: for i, line in enumerate(f): line = line.strip() - logging.debug('New line: %s' % line) + logger.debug('New line: %s' % line) if len(line) == 0: - logging.debug('skip empty lines') + logger.debug('skip empty lines') continue if line[0] == '#': - logging.debug('skip comments') + logger.debug('skip comments') continue if line.startswith('@phase'): - logging.debug('opens a phase') + logger.debug('opens a phase') tokens = [s.strip() for s in line[len('@phase'):].split(',')] assert len(tokens) > 0, '@phase must contain at least a name' phase_name = tokens[0] @@ -63,15 +67,15 @@ def parse_input_file(self, filename): phase_color = tokens[1] if len(tokens) > 1 else Colors.gray p = Phase(phase_name, phase_color, len(self.actions)) open_phases.append(p) - logging.debug('total open phases: %d' % len(open_phases)) + logger.debug('total open phases: %d' % len(open_phases)) elif line.startswith('@endphase'): - logging.debug('ends a phase') + logger.debug('ends a phase') assert len(open_phases) > 0, '@endphase found with no corresponding opening @phase' p = open_phases.pop() p.action1 = len(self.actions) self.phases.append(p) elif line.startswith('@order'): - logging.debug('order line') + logger.debug('order line') assert num_lines_processed==0, '@order may only be on the first line!' tokens = [s.strip() for s in line[len('@order'):].split(',')] for t in tokens: @@ -79,7 +83,7 @@ def parse_input_file(self, filename): self.actors_map[t] = key self.actors.append(t) else: - logging.debug('process a flow line') + logger.debug('process a flow line') self.parse_step(line) num_lines_processed += 1 if len(open_phases) != 0: @@ -201,9 +205,14 @@ def main(): metavar='svg_filename', type=str, required=True, help='This is the result svg file.') + cmd_param.add_argument('--debug', '-d', dest='debug', default=False, + required=False, action='store_true', + help='Enable debug mode.') param = cmd_param.parse_args() - + if param.debug: + # change logger verbose level + logger.setLevel(logging.DEBUG) txtin_flow_filename = param.inputfile svgout_flow_filename = param.outputfile @@ -213,11 +222,11 @@ def main(): seq = Sequence(txtin_flow_filename) seq.build() - print(seq.to_string()) + + logger.debug('SVG file: %s' %seq.to_string()) with open(svgout_flow_filename, 'w') as f: print(seq.to_string(), file=f) - if __name__ == '__main__': main() From f0944e7a7beca8ab1e213a2bae23dce700f5d4f5 Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Tue, 27 Sep 2022 13:39:34 -0600 Subject: [PATCH 08/13] Adding logger information messages --- make_sequence.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/make_sequence.py b/make_sequence.py index 0e930be..7f6a5fd 100755 --- a/make_sequence.py +++ b/make_sequence.py @@ -194,6 +194,7 @@ def get_markers(self, color): def main(): + logger.info('Process start') # Parameters cmd_param = argparse.ArgumentParser( description='A tool for creating SVG sequence diagrams from text input files.') @@ -220,6 +221,7 @@ def main(): print(f'File {txtin_flow_filename} not found') sys.exit(-1) + logger.info('Processing sequence text file') seq = Sequence(txtin_flow_filename) seq.build() @@ -227,6 +229,7 @@ def main(): with open(svgout_flow_filename, 'w') as f: print(seq.to_string(), file=f) + logger.info('SVG file saved') if __name__ == '__main__': main() From c32131f723110eb4077db9309e6da19cf92a5ecc Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Tue, 27 Sep 2022 13:40:24 -0600 Subject: [PATCH 09/13] Change message process start --- make_sequence.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/make_sequence.py b/make_sequence.py index 7f6a5fd..8fa50e2 100755 --- a/make_sequence.py +++ b/make_sequence.py @@ -194,7 +194,6 @@ def get_markers(self, color): def main(): - logger.info('Process start') # Parameters cmd_param = argparse.ArgumentParser( description='A tool for creating SVG sequence diagrams from text input files.') @@ -217,6 +216,8 @@ def main(): txtin_flow_filename = param.inputfile svgout_flow_filename = param.outputfile + logger.info('Process start') + if not os.path.isfile(txtin_flow_filename): print(f'File {txtin_flow_filename} not found') sys.exit(-1) From 70dcf3a01a6209388f417c1ac468f312211f4ee6 Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Tue, 27 Sep 2022 13:41:31 -0600 Subject: [PATCH 10/13] Update readme file with debug mode --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5b02a7e..c170a21 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ You must have a python 2.7 installation and install the Python package `svgwrite ### Usage ``` -usage: make_sequence.py [-h] --in text_flow_filename --out svg_filename +usage: make_sequence.py [-h] --in text_flow_filename --out svg_filename [--debug] A tool for creating SVG sequence diagrams from text input files. @@ -126,4 +126,5 @@ options: Flow text file input. --out svg_filename, -o svg_filename This is the result svg file. + --debug, -d Enable debug mode. ``` From 449438f84972e6fafc19c2415a456ebe1445a081 Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Tue, 27 Sep 2022 17:13:18 -0600 Subject: [PATCH 11/13] Refactor code to create a sequence drawing module --- .gitignore | 3 + make_sequence.py | 185 +++---------------------------------------- sequence/__init__.py | 0 sequence/colors.py | 8 ++ sequence/phase.py | 14 ++++ sequence/sequence.py | 172 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 209 insertions(+), 173 deletions(-) create mode 100644 sequence/__init__.py create mode 100644 sequence/colors.py create mode 100644 sequence/phase.py create mode 100644 sequence/sequence.py diff --git a/.gitignore b/.gitignore index 4c827d5..451cfe0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ /*.seq *.svg +*~ +*# +sequence/__pycache__/* diff --git a/make_sequence.py b/make_sequence.py index 8fa50e2..a36560b 100755 --- a/make_sequence.py +++ b/make_sequence.py @@ -1,10 +1,10 @@ #!/usr/bin/env python3 -import svgwrite import argparse import os.path import sys import logging +from sequence import sequence # Default logging configuration logging.basicConfig(level=logging.INFO) @@ -12,188 +12,26 @@ # Get logger object logger = logging.getLogger(__name__) -class Colors: - black = '#000000' - gray = '#C0C0C0' - -class PhaseError(Exception): - pass - -class Phase(object): - def __init__(self, name, color, action0): - self.name = name - self.color = color - self.action0 = action0 - self.action1 = None - -class Sequence(object): - def __init__(self, filename): - self.filename = filename - self.actors = [] - self.actors_map = {} - self.actions = [] - self.phases = [] - # read actions into file +class MakeSequence(sequence.Sequence): + def __init__(self, filename, loglevel=logging.INFO): + self.sequence_lines = [] + # read actions into list self.parse_input_file(filename) # create drawing - self.top_left = (100, 50) - self.step_size = (100, 25) - self.text_fudge = (0, 5) - self.width = self.top_left[0] + (len(self.actors) + 1)*self.step_size[0] - self.height = self.top_left[1] + (len(self.actions) + 1)*self.step_size[1] - self.drawing = svgwrite.Drawing(size=(self.width, self.height)) - self.markers = {} + super().__init__(self.sequence_lines, loglevel=loglevel) + def parse_input_file(self, filename): # read actions into file open_phases = [] num_lines_processed = 0 - with open(filename) as f: + with open(filename, 'rt') as f: for i, line in enumerate(f): line = line.strip() - logger.debug('New line: %s' % line) - if len(line) == 0: - logger.debug('skip empty lines') - continue - if line[0] == '#': - logger.debug('skip comments') - continue - if line.startswith('@phase'): - logger.debug('opens a phase') - tokens = [s.strip() for s in line[len('@phase'):].split(',')] - assert len(tokens) > 0, '@phase must contain at least a name' - phase_name = tokens[0] - assert len(phase_name) > 0, '@phase must contain at least a name' - phase_color = tokens[1] if len(tokens) > 1 else Colors.gray - p = Phase(phase_name, phase_color, len(self.actions)) - open_phases.append(p) - logger.debug('total open phases: %d' % len(open_phases)) - elif line.startswith('@endphase'): - logger.debug('ends a phase') - assert len(open_phases) > 0, '@endphase found with no corresponding opening @phase' - p = open_phases.pop() - p.action1 = len(self.actions) - self.phases.append(p) - elif line.startswith('@order'): - logger.debug('order line') - assert num_lines_processed==0, '@order may only be on the first line!' - tokens = [s.strip() for s in line[len('@order'):].split(',')] - for t in tokens: - key = len(self.actors) - self.actors_map[t] = key - self.actors.append(t) - else: - logger.debug('process a flow line') - self.parse_step(line) - num_lines_processed += 1 - if len(open_phases) != 0: - raise PhaseError('@phase opened without corresponding closing @endphase') - - def parse_step(self, line): - tokens = [s.strip() for s in line.split(',')] - assert len(tokens) >= 3, 'line %i has less than 3 tokens' % (i) - if len(tokens) < 3: - return - actor0 = tokens[0] - actor1 = tokens[1] - action = tokens[2] - if actor0 not in self.actors_map: - key = len(self.actors) - self.actors_map[actor0] = key - self.actors.append(actor0) - if actor1 not in self.actors_map: - key = len(self.actors) - self.actors_map[actor1] = key - self.actors.append(actor1) - key0 = self.actors_map[actor0] - key1 = self.actors_map[actor1] - color = Colors.black - if len(tokens) > 3: - color = tokens[3].strip() - self.actions.append((key0, key1, action, color)) - - - def build(self): - self.create_header() - self.create_actors() - self.create_phases() - self.create_actions() - pass - - def to_string(self): - return self.drawing.tostring() - - def create_header(self): - text = 'filename: %s' % self.filename - self.drawing.add(self.drawing.text(text, insert=(self.top_left[0] - 0.5*self.step_size[0], 0.5*self.top_left[1]), stroke='none', fill=Colors.gray, font_family="Helevetica", font_size="8pt", text_anchor="start")) - - def create_phases(self): - for phase in self.phases: - action0 = self.actions[phase.action0] - action1 = self.actions[phase.action1 - 1] - - left = len(self.actors) + 1 - right = -1 - for action in self.actions[phase.action0:phase.action1]: - mn = min(action[0:2]) - mx = max(action[0:2]) - left = mn if mn < left else left - right = mx if mx > right else right - x = self.top_left[0] + (left - 0.5)*self.step_size[0] - y = self.top_left[1] + (phase.action0 + 0.5)*self.step_size[1] - w = (right - left + 1)*self.step_size[0] - h = (phase.action1 - phase.action0 - 0.125)*self.step_size[1] - filled_rect = self.drawing.add(self.drawing.rect((x,y), (w,h))) - filled_rect.fill(phase.color, None, 0.15) - self.drawing.add(self.drawing.rect((x,y), (w,h), stroke=phase.color, stroke_width=1, fill='none')) - transform = 'rotate(180,%i,%i) translate(6,0)' % (x, y+0.5*h) - self.drawing.add(self.drawing.text(phase.name, insert=(x, y+0.5*h), stroke='none', fill=phase.color, font_family="Helevetica", font_size="6pt", text_anchor="middle", writing_mode="tb", transform=transform)) - - def create_actors(self): - x = self.top_left[0] - y = self.top_left[1] - for name in self.actors: - self.drawing.add(self.drawing.text(name, insert=(x, y - self.text_fudge[1]), stroke='none', fill=Colors.black, font_family="Helevetica", font_size="8pt", text_anchor="middle")) - line = self.drawing.add(self.drawing.line((x, y), (x, self.height), stroke=Colors.gray, stroke_width=1)) - line.dasharray([5, 5]) - x += self.step_size[0] - - def create_actions(self): - markers = {} - # add actions - y = self.top_left[1] + self.step_size[1] - for (a0, a1, act, color) in self.actions: - x0 = self.top_left[0] + a0*self.step_size[0] - x1 = self.top_left[0] + a1*self.step_size[0] - if a0 == a1: - self.drawing.add(self.drawing.circle((x0, y), r=2, fill=color)) - else: - start_marker, end_marker = self.get_markers(color) - assert start_marker is not None - assert end_marker is not None - line = self.drawing.add(self.drawing.line((x0, y), (x1, y), stroke=color, stroke_width=1)) - line['marker-start'] = start_marker.get_funciri() - line['marker-end'] = end_marker.get_funciri() - self.drawing.add(self.drawing.text(act, insert=(0.5*(x0 + x1), y - self.text_fudge[1]), stroke='none', fill=color, font_family="Helevetica", font_size="6pt", text_anchor="middle")) - y += self.step_size[1] - - def get_markers(self, color): - # create or get marker objects - start_marker, end_marker = None, None - if color in self.markers: - start_marker, end_marker = self.markers[color] - else: - start_marker = self.drawing.marker(insert=(2,2), size=(10,10), orient='auto') - start_marker.add(self.drawing.circle((2,2), r=2, fill=color)) - self.drawing.defs.add(start_marker) - end_marker = self.drawing.marker(insert=(6,3), size=(10,10), orient='auto') - end_marker.add(self.drawing.path("M0,0 L0,7 L6,3 L0,0", fill=color)) - self.drawing.defs.add(end_marker) - self.markers[color] = (start_marker, end_marker) - return start_marker, end_marker - + self.sequence_lines.append(line) def main(): + logging_level = logging.INFO # Parameters cmd_param = argparse.ArgumentParser( description='A tool for creating SVG sequence diagrams from text input files.') @@ -211,6 +49,7 @@ def main(): param = cmd_param.parse_args() if param.debug: + logging_level = logging.DEBUG # change logger verbose level logger.setLevel(logging.DEBUG) txtin_flow_filename = param.inputfile @@ -223,7 +62,7 @@ def main(): sys.exit(-1) logger.info('Processing sequence text file') - seq = Sequence(txtin_flow_filename) + seq = MakeSequence(txtin_flow_filename, loglevel=logging_level) seq.build() logger.debug('SVG file: %s' %seq.to_string()) diff --git a/sequence/__init__.py b/sequence/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sequence/colors.py b/sequence/colors.py new file mode 100644 index 0000000..526e67c --- /dev/null +++ b/sequence/colors.py @@ -0,0 +1,8 @@ +import logging + +# Get logger object +logger = logging.getLogger(__name__) + +class Colors: + black = '#000000' + gray = '#C0C0C0' diff --git a/sequence/phase.py b/sequence/phase.py new file mode 100644 index 0000000..f36f5e3 --- /dev/null +++ b/sequence/phase.py @@ -0,0 +1,14 @@ +import logging + +# Get logger object +logger = logging.getLogger(__name__) + +class PhaseError(Exception): + pass + +class Phase(object): + def __init__(self, name, color, action0): + self.name = name + self.color = color + self.action0 = action0 + self.action1 = None diff --git a/sequence/sequence.py b/sequence/sequence.py new file mode 100644 index 0000000..3d2fc02 --- /dev/null +++ b/sequence/sequence.py @@ -0,0 +1,172 @@ +import svgwrite +import logging +from .colors import Colors +from .phase import Phase + +# Get logger object +logger = logging.getLogger(__name__) + +class Sequence(object): + def __init__(self, sequencelist, loglevel=logging.INFO): + logger.setLevel(loglevel) + self.sequencelist = sequencelist + self.actors = [] + self.actors_map = {} + self.actions = [] + self.phases = [] + # read actions into file + self.parse_input_list(sequencelist) + # create drawing + self.top_left = (100, 50) + self.step_size = (100, 25) + self.text_fudge = (0, 5) + self.width = self.top_left[0] + (len(self.actors) + 1)*self.step_size[0] + self.height = self.top_left[1] + (len(self.actions) + 1)*self.step_size[1] + self.drawing = svgwrite.Drawing(size=(self.width, self.height)) + self.markers = {} + + def parse_input_list(self, sequencelist): + # read actions into file + open_phases = [] + num_lines_processed = 0 + for line in self.sequencelist: + logger.debug('New line: %s' % line) + if len(line) == 0: + logger.debug('skip empty lines') + continue + if line[0] == '#': + logger.debug('skip comments') + continue + if line.startswith('@phase'): + logger.debug('opens a phase') + tokens = [s.strip() for s in line[len('@phase'):].split(',')] + assert len(tokens) > 0, '@phase must contain at least a name' + phase_name = tokens[0] + assert len(phase_name) > 0, '@phase must contain at least a name' + phase_color = tokens[1] if len(tokens) > 1 else Colors.gray + p = Phase(phase_name, phase_color, len(self.actions)) + open_phases.append(p) + logger.debug('total open phases: %d' % len(open_phases)) + elif line.startswith('@endphase'): + logger.debug('ends a phase') + assert len(open_phases) > 0, '@endphase found with no corresponding opening @phase' + p = open_phases.pop() + p.action1 = len(self.actions) + self.phases.append(p) + elif line.startswith('@order'): + logger.debug('order line') + assert num_lines_processed==0, '@order may only be on the first line!' + tokens = [s.strip() for s in line[len('@order'):].split(',')] + for t in tokens: + key = len(self.actors) + self.actors_map[t] = key + self.actors.append(t) + else: + logger.debug('process a flow line') + self.parse_step(line) + num_lines_processed += 1 + if len(open_phases) != 0: + raise PhaseError('@phase opened without corresponding closing @endphase') + + def parse_step(self, line): + tokens = [s.strip() for s in line.split(',')] + assert len(tokens) >= 3, 'line %i has less than 3 tokens' % (i) + if len(tokens) < 3: + return + actor0 = tokens[0] + actor1 = tokens[1] + action = tokens[2] + if actor0 not in self.actors_map: + key = len(self.actors) + self.actors_map[actor0] = key + self.actors.append(actor0) + if actor1 not in self.actors_map: + key = len(self.actors) + self.actors_map[actor1] = key + self.actors.append(actor1) + key0 = self.actors_map[actor0] + key1 = self.actors_map[actor1] + color = Colors.black + if len(tokens) > 3: + color = tokens[3].strip() + self.actions.append((key0, key1, action, color)) + + + def build(self): + self.create_header() + self.create_actors() + self.create_phases() + self.create_actions() + pass + + def to_string(self): + return self.drawing.tostring() + + def create_header(self): + text = 'sequencelist: %s' % self.sequencelist + self.drawing.add(self.drawing.text(text, insert=(self.top_left[0] - 0.5*self.step_size[0], 0.5*self.top_left[1]), stroke='none', fill=Colors.gray, font_family="Helevetica", font_size="8pt", text_anchor="start")) + + def create_phases(self): + for phase in self.phases: + action0 = self.actions[phase.action0] + action1 = self.actions[phase.action1 - 1] + + left = len(self.actors) + 1 + right = -1 + for action in self.actions[phase.action0:phase.action1]: + mn = min(action[0:2]) + mx = max(action[0:2]) + left = mn if mn < left else left + right = mx if mx > right else right + x = self.top_left[0] + (left - 0.5)*self.step_size[0] + y = self.top_left[1] + (phase.action0 + 0.5)*self.step_size[1] + w = (right - left + 1)*self.step_size[0] + h = (phase.action1 - phase.action0 - 0.125)*self.step_size[1] + filled_rect = self.drawing.add(self.drawing.rect((x,y), (w,h))) + filled_rect.fill(phase.color, None, 0.15) + self.drawing.add(self.drawing.rect((x,y), (w,h), stroke=phase.color, stroke_width=1, fill='none')) + transform = 'rotate(180,%i,%i) translate(6,0)' % (x, y+0.5*h) + self.drawing.add(self.drawing.text(phase.name, insert=(x, y+0.5*h), stroke='none', fill=phase.color, font_family="Helevetica", font_size="6pt", text_anchor="middle", writing_mode="tb", transform=transform)) + + def create_actors(self): + x = self.top_left[0] + y = self.top_left[1] + for name in self.actors: + self.drawing.add(self.drawing.text(name, insert=(x, y - self.text_fudge[1]), stroke='none', fill=Colors.black, font_family="Helevetica", font_size="8pt", text_anchor="middle")) + line = self.drawing.add(self.drawing.line((x, y), (x, self.height), stroke=Colors.gray, stroke_width=1)) + line.dasharray([5, 5]) + x += self.step_size[0] + + def create_actions(self): + markers = {} + # add actions + y = self.top_left[1] + self.step_size[1] + for (a0, a1, act, color) in self.actions: + x0 = self.top_left[0] + a0*self.step_size[0] + x1 = self.top_left[0] + a1*self.step_size[0] + if a0 == a1: + self.drawing.add(self.drawing.circle((x0, y), r=2, fill=color)) + else: + start_marker, end_marker = self.get_markers(color) + assert start_marker is not None + assert end_marker is not None + line = self.drawing.add(self.drawing.line((x0, y), (x1, y), stroke=color, stroke_width=1)) + line['marker-start'] = start_marker.get_funciri() + line['marker-end'] = end_marker.get_funciri() + self.drawing.add(self.drawing.text(act, insert=(0.5*(x0 + x1), y - self.text_fudge[1]), stroke='none', fill=color, font_family="Helevetica", font_size="6pt", text_anchor="middle")) + y += self.step_size[1] + + def get_markers(self, color): + # create or get marker objects + start_marker, end_marker = None, None + if color in self.markers: + start_marker, end_marker = self.markers[color] + else: + start_marker = self.drawing.marker(insert=(2,2), size=(10,10), orient='auto') + start_marker.add(self.drawing.circle((2,2), r=2, fill=color)) + self.drawing.defs.add(start_marker) + end_marker = self.drawing.marker(insert=(6,3), size=(10,10), orient='auto') + end_marker.add(self.drawing.path("M0,0 L0,7 L6,3 L0,0", fill=color)) + self.drawing.defs.add(end_marker) + self.markers[color] = (start_marker, end_marker) + return start_marker, end_marker From 9e8ddd90a0247caaaed2963dc06ee947746b2703 Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Tue, 27 Sep 2022 17:15:58 -0600 Subject: [PATCH 12/13] Update python version README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c170a21..77bb8de 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ which then produces this SVG: Any actors not specified in the `@order` directive will appear in the order they appear in the rest of the file. ### Prerequisites -You must have a python 2.7 installation and install the Python package `svgwrite` (e.g., `pip install svgwrite`) +You must have a python 3 installation and install the Python package `svgwrite` (e.g., `pip install svgwrite`) ### Usage ``` From ece536bef9f230918073a27ce647d9b27ddbde34 Mon Sep 17 00:00:00 2001 From: Rafael Alpizar Date: Tue, 27 Sep 2022 17:22:18 -0600 Subject: [PATCH 13/13] Update readme file --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 77bb8de..b5f1ba4 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,11 @@ Browser, Browser, Rasterizes content Browser, User, Presents content @endphase ``` -### Data format +### Data format Sequence generates its SVG from a simple text data file. There are two basic entities in the data file: _steps_ and _phases_. Lines that begin with a hashtag (#) will be interpretted as comments, and have no effect on the image rendered. Empty lines are also ignored. #### Steps - Each _step_ in the sequence, where a step is defined as _an action between two actors_, is a single line in the input data file. (A step will be rendered as an arrow with text between actor columns.) The line must be comma-separated and contain either three or four values. The first value is the source actor, the one invoking the action. The second entry is the target actor, the one receiving the action. The third entry is a description of the action itself. The fourth value is optional, but if present will be used as the step's color. For example: @@ -55,7 +54,6 @@ Client, Server, Makes Request, green **Note #2**: if the source actor and target actor are the same, then no arrow will be drawn between the actors. Instead a dot will appear in the source/target actor column with the text describing the action. #### Phases - A _phase_ is a collection of steps which will visually grouped together in the SVG. Phases are opened by the special directive in the data `@phase`. When opening a phase you will need to supply the name for the phase. This is just text included after the open phase directive. For example: ``` @@ -87,7 +85,6 @@ which produces this SVG: #### Ordering - By defaults, actors will be rendered from left to right in the order that they appear in the sequence file. However, if you want to specify a specific order for the actors in your diagram, you can do so by using the `@order` directive as the first line in your sequence file, followed by the (comma separated) specific actor order that you'd like to see. Comment and blank lines may preceed `@order`, but nothing else. For instance, if we wanted to change the previous example to be in the order Alice, Bob, Keystore (instead of Bob, Keystore, Alice) we could add a `@order` directive at the top: