From 95b548f22465281ef0372388bd98a078964f40c9 Mon Sep 17 00:00:00 2001 From: 2XXE-SRA <40869774+2XXE-SRA@users.noreply.github.com> Date: Thu, 5 Dec 2024 14:45:45 -0500 Subject: [PATCH] v1.8.0 --- CHANGELOG.md | 7 +++ ...whl => marketmaker-1.8.0-py3-none-any.whl} | Bin 6867292 -> 6867609 bytes libmm/scripts/mmdarkpool.py | 41 ++++++++++++++-- .../mmdarkpool/templates/blueprint.html.j2 | 18 +++---- .../mmdarkpool/templates/variant.html.j2 | 44 +++++++++--------- .../mmdarkpool/templates/variants.html.j2 | 4 +- libmm/sql.py | 2 +- pyproject.toml | 2 +- 8 files changed, 79 insertions(+), 39 deletions(-) rename dist/{marketmaker-1.7.2-py3-none-any.whl => marketmaker-1.8.0-py3-none-any.whl} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9acde8b..e84c7c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ *** +# Version 1.8.0 - December 2024 + +- Added support for Blueprint overrides to Darkpool +- Fixed prerequisites list in Darkpool + +*** + # Version 1.7.2 - November 2024 - Added back scoping check diff --git a/dist/marketmaker-1.7.2-py3-none-any.whl b/dist/marketmaker-1.8.0-py3-none-any.whl similarity index 99% rename from dist/marketmaker-1.7.2-py3-none-any.whl rename to dist/marketmaker-1.8.0-py3-none-any.whl index 427c3abbab1acff9455f6f8a06d1f6b6201da73d..7009248a08f85d055515363f1548acaa9b924e35 100644 GIT binary patch delta 16628 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%0D@AF*oli@ltyF@1= zrQr*r&^L_=OG#25c%nsmWPmhV$v^x4lO^jXVDDMNVD4GcKQf84B&?$)rYp#MV{|sr zI)w?*6D(iLRtM5|8vSECiz%6o+^3Bo-eSq;hne|b+za^;djphFvT7I+4CHNN>^gm9 z>lz@wXjny+c@KFr{0pzmxr|^L7)1XUtwdEKqo``h%(sID;F)+S9=Ze+9R$oLC2{;D z486uN?+>t(!TCvb^I#9#=L;)a&m*}^X;#Aip$F{yA;iMi0AZ*Kd}JOzixEIVAEcSwifXK%Sz~lboBPi2c_U2RB3JWJzK283nNZP8@ zB4OF;OH~@J7S+MMBm8$gw6N)N$jIt}>X2@PKRcaPRYpfqWfJoEaOLu5MXd=gEOr)Z zQXzgSemv!$)O2a~OnwKI#ll!S`99Vo$%17!~_RxJ)*8i6}rD())9ZgP_*G!-e<;QekKM3ha{;CZA6 zxoNCF2MV^tvf@cna#$Rre)^`mX(3%6RbW(8MomND#K`DW<7DEpVT!U5d~I_+P$+n1 zp(LG0xRFgG&3o*z8DQX%XWMJK?}dt0#+|qbu_*(`5y7P4&S_|FVZVgLNnL@&T?YXg zz-{9JeM4opJ)zQhKd6ATk#Pm&9l=q=VeOYpjmn|rm5?fMxG-@nh&?|`LsZu#FFn#P zXnUyHbATN`jg9oJ*1TQ`4p4u@tL-?D)AC0W73U9lW=$}-U=3d7JiqgJsgE^QRMJjv zRN~; z=`DJXcM#@3o7|monsZ^HLZbCeyOdI>W+)rP4JjA-I)3_9iNAuLH0eA?XW%V4Z|$Uy zS}E6TN8G}kX3xJ2Q98+B)@P_RsLtO*_Tu}O#lQyc-8s(!=fxB6Di3(=5FQOB?@`ck zUw(=DNBxh7L(yM_#)a1CoD038nUsH;w8Lt*&N-{E8}Tm(fz9MrkE7EM+2p3;Xc7vx z4)fDyFvL_2Y(wQS!o5E9i=ic%eJbr{Saw)ONfI&3}GsF~9a{h?qXWP$7z4#$riX0fMs^%QA5>hY1U zAoh@xa$UQaTZi=qc)HJg{(=+rkpz^Lnr6slWl)>WY5$HGyJy>WtXLW{;&k zJ9vEGze;z{73#p@HWM0(U|QI8M~ZARun5y_NofXK?``-oN`>N``-Y(D*# z+dc=bq1?i*&E|m)*C??EeBnayN2sC`igjfUG4shr3~q-b7{s@Pty#JeAH)&gXL>Jf zO7*_=>A(XQ_gE&iF5F@8!!8brUxgQGk@4C|1ztazzsCZ_O@zLh^uM$woyQ5`%Qcj@ zJr^bQ{h&s~%TE_5EwT*sGZ%8e-3XT|z*s?_zgMYy{=8o$+qTtezVJR~88k2$&Vx>| zh0bq1x=E_1i*NVLPZ|+o`oB~#qrMP-J9{D@OG!of<;DjTGoG?7I1M#v^2Vnlocky` zH=p3FFVF%bm13yBzH@usNjEN?pwtJt)iRS)k|Wvskl?+_^7|G>{MJKw;B@^#S$=n#^pU>guYIzrNuUc49Exp9&G5 zC^Wz?2Ia{X`41i%>Y&mPw?wW!9v>_i< z7ZC;iVUK=%@p(iG62tl^T-C=xO*R=MhU-yto;LXP0GYNBcW5N^PZQ%%?7mTiq(U~y z$=89J{s9ywQ85iWK)8Aluqn30l-z%GEmsNU76SHbFmfwl`L3F`u1mkI0A$pF@XJ8?!J8#4`|f zs;g`c_Kq@*lfbw4kJyPQTWy$z&&_CCr;C8|P!u1RR$cX<-s{enL z`u_{}ApCC}ek%4bfC<7(Emd+DAOX>$nfhZGKuPpJyRBwmU`YRK+^j+B*f4+>rNA2i z=3r~?=*Z&n-Nh<(rw@RcO7IV<3;Sm5o_I?oH|EJ-96}l4G5E1_=bT9&- z{;!%BZ4`iw&C~RsQ2e6+A?%RW{}hTD{pYnfZT~5>HVR;1`G1Rq|Ng=v@a+FMh-(Z$ M4#Uw4_y_lY0Lln~4FCWD delta 16328 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

- {% set campaign_len = blueprint.child_campaigns | list | length | int %} + {% set campaign_len = campaigns | length | int %} {% set campaign_left = (campaign_len/2)|int + (campaign_len % 2) %}
- {% if variant.guidance %} + {% if variant["guidance"] %} {%- set _ = toc.append("Commands") %}
@@ -127,8 +127,8 @@

- {% if variant.controls %} - {% for control in variant.controls %} + {% if variant["controls"] %} + {% for control in variant["controls"] %} {{ control }} {% endfor %} {% endif %} @@ -141,8 +141,8 @@

Detect

    - {% if variant.detect %} - {% for detect in variant.detect %} + {% if variant["detect"] %} + {% for detect in variant["detect"] %}
  • {{ detect }}
  • {% endfor %} {% endif %} @@ -153,8 +153,8 @@

    Block

      - {% if variant.block %} - {% for block in variant.block %} + {% if variant["block"] %} + {% for block in variant["block"] %}
    • {{ block }}
    • {% endfor %} {% endif %} diff --git a/libmm/scripts/mmdarkpool/templates/variants.html.j2 b/libmm/scripts/mmdarkpool/templates/variants.html.j2 index 4ce1aea..bf68932 100644 --- a/libmm/scripts/mmdarkpool/templates/variants.html.j2 +++ b/libmm/scripts/mmdarkpool/templates/variants.html.j2 @@ -4,7 +4,7 @@
      - {% for tid, variants in all_variants | groupby('tid') %} + {% for tid, variants in grouped_variants.items() %}
      @@ -28,7 +28,7 @@
    • diff --git a/libmm/sql.py b/libmm/sql.py index cf2631f..8d7b595 100644 --- a/libmm/sql.py +++ b/libmm/sql.py @@ -183,7 +183,7 @@ def render(self, apply_overrides: bool = True, blueprint_id: str = None): # dictionary fields are decided based on an inclusion criteria rather than exclusion # NOTE: when adding new attributes to the Variant class, make sure to update this list - top_level_includes = ["description", "platforms", "guidance", "block", "detect", "controls"] + top_level_includes = ["description", "platforms", "prerequisites", "guidance", "block", "detect", "controls"] for include in top_level_includes: if include in original_dict: final_dict[include] = original_dict[include] diff --git a/pyproject.toml b/pyproject.toml index 2661ad6..5393d45 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "marketmaker" -version = "1.7.2" +version = "1.8.0" description = "Suite of tools for managing and creating attack plans" authors = ["2XXE "] readme = "README.md"