1.23.1 - December 12, 2024
- Renamed class
Vault
toAnsibleVault
- Moved class
Vaulty
fromext_jinjafx.py
intojinjafx.py
1.23.0 - December 10, 2024
- Added support for multiple templates within a DataTemplate to allow templates to be nested
1.22.2 - December 2, 2024
- Jinja2 Extension
jinja2.ext.do
is now enabled by default
1.22.1 - December 2, 2024
- Added support so you can escape a comma (i.e.
\,
) withindata.csv
1.22.0 - December 2, 2024
- Added support for list values in
data.csv
using brackets around header fields - Removed
pytz
dependency and replaced it with the built-inzoneinfo
package - Updated copyright year to 2025 in all files
1.21.0 - October 10, 2024
- Added support for a
filters
lookup to dynamically use filters - Column widths are now correctly worked out if
jinjafx.tabulate()
uses row values with simple ANSI colour codes - You can now append additional data using
-d
alongside-dt
- Jinja2 Extension
jinja2.ext.loopcontrols
is now enabled by default
1.20.1 - May 15, 2024
- Added suport for different table styles for
jinjafx.tabulate()
1.20.0 - May 8, 2024
- Added support for
jinjafx.tabulate()
to produce GitHub Markdown style tables fromdata.csv
1.19.3 - April 22, 2024
- Added an optional
row
argument tojinjafx.counter()
to allow the current row to be overridden
1.19.2 - April 10, 2024
- Exceptions are now always mapped back to the specific line within the Jinja2 template
- Added an actual
CHANGELOG.md
instead of relying on GitHub Release history
1.19.1 - March 25, 2024
- Dropped support for Python 3.8
- Added support for using
vars.json
alongsidevars.yml
1.18.7 - January 9, 2024
- Don't use a completely random nonce for
vaulty_encrypt
as it will potentially result in nonce re-use - Updated copyright year to 2024 in all files
1.18.6 - November 30, 2023
- Added support for
ansible.netcommon.vlan_parser
filter - Added support for
ansible.netcommon.vlan_expander
filter - Renamed
ext_ansible_ipaddr.py
extension toext_ansible_netcommon.py
1.18.5 - November 22, 2023
- Added support for
summarize_address_range
filter due to a lack of support in the Ansibleipaddr
filter
1.18.4 - November 20, 2023
- Added support for
ipsort
filter which will sort a list of IPv4 and/or IPv6 addresses into numerical order
1.18.3 - November 3 2023
- Added support for Cisco's Type 10 hashing algorithm (Unix Crypt based SHA512) as used in IOS-XR 64-bit
1.18.2 - October 25, 2023
- Added support for row specific hierarchical counters to allow
jinjafx.counter()
to be used for heading numbering (seeREADME.md
for more details), e.g:
{{ jinjafx.counter('A.') }} Heading
{{ jinjafx.counter('A.A.') }} Heading
{{ jinjafx.counter('A.A.A.') }} Heading
{{ jinjafx.counter('A.A.A.') }} Heading
{{ jinjafx.counter('A.') }} Heading
Would result in the following:
1. Heading
1.1. Heading
1.1.1. Heading
1.1.2. Heading
2. Heading
jinjafx.counter()
keys are now case insensitive
1.18.0 - October 19, 2023
- Fixed an issue where a Jinja2 template could modify variables within
vars.yml
and the change would persist to subsequent data rows. This was fixed by performing a deep copy instead of a shallow copy before each data row is rendered - hopefully it doesn't have any unexpected consequences
1.17.9 - September 27, 2023
- JinjaFx will now display the full output path when writing outputs to file
1.17.8 - September 23, 2023
- Fixed syntax errors on Python <3.8 so version checking works
1.17.7 - September 21, 2023
- Enforce minimal Python version in code
1.17.6 - August 20, 2023
- Allow
data.csv
to be read from<stdin>
1.17.5 - August 11, 2023
- Added support for keyless YAML via the
_
website
1.17.4 - July 18, 2023
- Added
__all__
variable tojinjafx.py
1.17.3 - April 28, 2023
- Added support for a looping counter
{n1|n2|n3[:repeat]}
- Removed debug statement that was left in the previous release
1.17.2 - April 28, 2023
- Added support for an optional repeat operator to passive
{start:step[:repeat]}
and active{start[-end]:step[:repeat]}
counters
1.17.1 - April 26, 2023
- Added support for an optional split operator for
jinjafx.first()
andjinjafx.last()
1.17.0 - April 24, 2023
- Dropped support for Python 3.7
- Added support for
vars
andvarnames
shorthand aliases - Migrated codebase to use Python's walrus operator
- Migrated type annotations into
README.md
1.16.2 - February 21, 2023
- Fixed typo - rename filter
to_bool
tobool
to align with Ansible
1.16.1 - February 17, 2023
- Further enhancements to Python Type Hints - removed
Any
return type from__jfx_expand()
and replaced with valid type - JinjaFx now passes
mypy
validation with--strict
across entire codebase (addedignore
directive to Ansible extensions for untyped and resolved other errors)
1.16.0 - February 16, 2023
- Python Type Hints (PEP484) have been added to core JinjaFx (
jinjafx.py
andext_jinjafx.py
) files and passstrict
validation withmypy
- The Ansible extensions (
ext_ansible_core.py
andext_ansible_ipaddr.py
) have been updated so they passmypy
validation withcheck-untyped-defs
but notstrict
as that is for Ansible upstream to update and then they will be incorporated into JinjaFx - Fixed an issue where
hwaddr("linux")
wasn't working
1.15.4 - February 1, 2023
- Added support for Ansible filter
urlsplit
1.15.3 - January 18, 2023
- Further enhancements to exception handling within templates
1.15.2 - January 17, 2023
- Added support for Ansible's
varnames
lookup - Improved exception handling within templates to include line numbers
1.15.1 - December 30, 2022
- Removed support for Python 3.6 due to end of life
- Updated Python build to use
pyproject.toml
to avoid deprecation
1.15.0 - December 30, 2022
- Deprecated support for Python 3.6 as it is end of life
- Added support for the "global" section within DataTemplates
- The
xpath
filter only works if thelxml
python module is present - Increased version dependency on
cryptography
to removedefault_backend
use - Moved some of the cryptographic hashes to use
hashlib
as it is faster - Replaced the deprecated
crypt
module as it will be removed in Python 3.12 - Improved exception handling by displaying more context
- Fixed a Python 3.6 issue with
importlib
1.14.3 - December 14, 2022
- Fixed issue with jinja2 rendering of
vars.yml
with lookup - Fixed
link_local_query
to use /16 instead of /24 - Updated copyright year to 2023 in all files
1.14.2 - November 5, 2022
- Added
jinjafx_render_vars
variable to replace command line option-xg
1.14.1 - November 2, 2022
- Added
-xg
command line option to disable recursive rendering of global variables
1.14.0 - November 2, 2022
- Support Jinja2 syntax within
vars.yml
which can reference variables it defines
1.13.3 - September 30, 2022
- Fixed an issue with
jinjafx.now()
where it wasn't working when passed a timezone
1.13.2 - August 19, 2022
- The
JinjaFx()
function will now throw aMemoryError
exception if required
1.13.1 - August 17, 2022
- Fixed
jinjafx_adjust_headers
which was broken in the last release
1.13.0 - August 17, 2022
- BREAKING CHANGE -
jinjafx.data
has reluctantly been changed from a list of lists to a function. This has been done to address memory issues with large datasets, where it doubled the memory requirements. Any occurrences ofjinjafx.data[row][col]
will now need to be replaced withjinjafx.data(row, col)
, which should be functionally the same - Massive performance improvements following the removal of
deepcopy
and profiling/optimising the code - using a large dataset, processing was improved from 104 seconds down to 8 seconds! - Further memory reductions by ensuring data doesn't get duplicated multiple times while rows are being expanded
- Added support for
-var
command line argument to pass global Jinja2 variables on the command line - Fields can now be designated as
:float
indata.csv
to provide similar behaviour to using:int
- Added support for Jinja2's
SandboxedEnvironment
which will be used by JinjaFx Server. When the Sandbox is enabled there is also a global limit of 5000 expansions to limit the size of datasets - Code re-arrangements to make it more Pythonic and updates to strings to use f-strings for formatting
1.12.3 - July 13, 2022
- Backported ansible/ansible#70337 to Ansible Core filters
- Allow
ipaddr
style filters to be used viaansible.utils.ipaddr
- Improved exception handling to match Exception explicitly
1.12.2 - June 21, 2022
- Added support for an
xpath
filter to manipulate XML and HTML
1.12.1 - May 29, 2022
- Changed order of import so extensions will now redefine existing filters if using the same name
1.12.0 - May 13, 2022
- Increased
jinja2
minimal version to 3.0.0 to supportjinja2.pass_environment
- Allow output format to be transparently passed through in templates for JinjaFx Server
1.11.9 - May 11, 2022
- Added support for Ansible filter
extract
- Added support for Ansible filter
flatten
- Added support for Ansible filter
product
- Added support for Ansible filter
permutations
- Added support for Ansible filter
combinations
- Added support for Ansible filter
unique
- Added support for Ansible filter
intersect
- Added support for Ansible filter
difference
- Added support for Ansible filter
symmetric_difference
- Added support for Ansible filter
union
- Added support for Ansible filter
zip
- Added support for Ansible filter
zip_longest
1.11.8 - May 6, 2022
- Added support for Ansible filter
dict2items
- Added support for Ansible filter
items2dict
1.11.7 - May 5, 2022
- Added support for Ansible filter
regex_escape
- Added support for Ansible filter
random
- Added support for Ansible filter
shuffle
- Added support for Ansible filter
ternary
1.11.6 - May 1, 2022
- Added
py36
specific wheel to deal with dependencies deprecating Python 3.6 due to EOL (RHEL8 uses 3.6 as default)
1.11.4 - April 29, 2022
- Nothing significant - updates to PyPI packaging and
README.md
1.11.3 - April 21, 2022
- Added support for
vaulty_encrypt
andvaulty_decrypt
using ChaCha20-Poly1305 encryption
1.11.2 - April 15, 2022
- Added Support for Ansible Tests
contains
,any
andall
- Added Support for Ansible Filters
from_yaml
andfrom_json
- Updated
lookup
to acceptansible.builtin.vars
as well asvars
- Updated
to_yaml
andto_nice_yaml
to useSafeDumper
1.11.1 - April 11, 2022
- Added support for
-encrypt
to encrypt strings and files using Ansible Vault - Added support for
-decrypt
to decrypt strings and files using Ansible Vault
1.11.0 - April 5, 2022
- Added support for DataTemplates (
-dt
) with DataSets (-ds
) - Updated usage screen to include more detailed output
1.10.4 - March 22, 2022
- Fixed a bug when output tags aren't on their own line and output was being lost
1.10.3 - March 22, 2022
- Added support for the following Ansible core filters:
to_yaml
,to_nice_yaml
,to_json
,to_nice_json
,to_bool
,to_datetime
andstrftime
- Added support for the following Ansible math filters:
log
,pow
androot
1.10.2 - March 21, 2022
- Added
ansible_vault_decrypt
public method for JinjaFx Server
1.10.1 - March 21, 2022
- Ported Ansible Vault decryption to JinjaFx which completely removes Ansible as a dependency
1.10.0 - March 3, 2022
- Removed support for passing a DataTemplate on the command line using
-dt
- Removed support for importing Ansible Filters and Tests - provide common ones as JinjaFx extensions (this may cause breakages if a filter was being used that I haven't included)
- Added extension
ext_ansible_core.plugin
forb64encode
,b64decode
,hash
,regex_replace
,regex_search
andregex_findall
filters - Added extension
ext_ansible_ipaddr.plugin
to port allipaddr
filters (i.e.ipaddr
,ipmath
, etc)
1.9.5 - February 17, 2022
- Added support for
cisco8hash
filter - Added support for
cisco9hash
filter - Added support for
junos6hash
filter
1.9.2 - February 8, 2022
- Removed legacy Python 2 fudges around
bytes
vsstr
- inputs tojinjafx()
must now be of typestr
- Removed support for previously deprecated legacy padding in counters
1.9.1 - January 21, 2022
- Fixed an issue when importing Extensions
1.9.0 - January 21, 2022
- Added JinjaFx Extension which adds support for
cisco_snmpv3_key
,junos_snmpv3_key
,cisco7encode
andjunos9encode
custom filters
1.8.5 - January 20, 2022
- Added support for specifying directories to search for Jinja2 Extensions
1.8.4 - January 7, 2022
- Added missing
pyyaml
dependency tosetup.py
1.8.2 - December 10, 2021
- Added support for
jinjafx.now()
to output current date and time
1.8.1 - December 8, 2021
- Added support for
ansible.builtin.vars
lookup
1.8.0 - December 6, 2021
- Added support for the
%
Pad Operator for zero padding on numbers - Deprecated zero padding on counters in favour of the Pad Operator
1.7.3 - November 30, 2021
- Fixed an issue where it couldn't import a
jinja2_extension
from the current directory
1.7.2 - November 26, 2021
- Added
__main__.py
sopython3 -m jinjafx
works
1.7.1 - November 26, 2021
- Split out jinjafx_server into separate repository
- Improved function and variable encapsulation
- Make jinjafx available as a PyPI module
- Removed support for
jinjafx.nslookup()
1.7.0 - October 20, 2021
- Completely removed jQuery dependency and migrated codebase to Bootstrap v5
- Improved the security of the HAProxy Dockerfile by dropping to a non-root user
- Added GZip compression across the board to all aspects of JinjaFx
- Updated
Cache-Control
headers to work better with ETags - Increased logging verbosity of 404 errors
- Updated CodeMirror library to 5.63.3
- Improved HTTP
<meta>
tags for SEO
1.6.1 - October 12, 2021
- Dropped support for IE11 - it is a security risk and is holding back development
- Reduced logging output to only show legitimate requests if verbose logging is not enabled
- Updated CodeMirror to 5.63.1 and add
crossorigin
flag to imports - Fixed a race condition when prompting for DataTemplate password
- Removed all reliance on jQuery outside of Bootstrap 4 modals
- Switched from
moment.js
today.js
for time and date stuff - Updated font size of CSV table as it was too small
- Added support for GZip compression of resources
1.6.0 - September 1, 2021
- Added support for
prompt
syntax for JinjaFx Input - Changed the shebang lines to use Python 3 as Python 2 is EOL
- Commented out
__future__
imports for Python 2 as it is EOL
1.5.7 - July 2, 2021
- Terminate gracefully when receiving
SIGTERM
orSIGINT
1.5.6 - June 17, 2021
- Fixed an issue where Ansible Vaulted credentials didn't work
- Reduced Docker image size to around 150MB from over 650MB
1.5.5 - June 11, 2021
- Logging now includes the number of bytes on POST requests
- Fixed a bug where the reported revision wasn't formatted correctly
- Fixed an issue in IE11 where the CSV data table wasn't showing
- Added support for Jinja2 folding for
template.j2
- Changed the formatting of
data.csv
CSV table - Fixed a left radius on the "Update" button
- Updated CodeMirror to v5.61.1
1.5.4 - May 11, 2021
- Added support for
jinjafx.warning()
1.5.3 - April 27, 2021
- Non-printable ASCII characters are now highlighted in red in the data pane
1.5.2 - April 19, 2021
- Updated versions of included JavaScript libraries
- Included
Content-Security-Policy
header - Included
X-Content-Type-Options
header - Included
Referrer-Policy
header - Removed all inline style blocks
- Removed all inline script blocks
- Removed support for inline JavaScript in JinjaFx Input Forms
1.5.1 - April 13, 2021
- Added support for inline JavaScript in JinjaFx Input Forms
- Added support for Jinja2 templating in JinjaFx Input Forms
- Added support for being able to change protection passwords
- Added support for HTTP OPTIONS method
1.5.0 - April 6, 2021
- Added support for
match
,search
andregex
Ansible tests
- Added support for JinjaFx Input Forms
- Added support for Password Protected DataTemplates
- Added support for restoring a pane to it's original size after expanding it
- Added support for fullscreen mode using F11 (or Cmd-Enter on Mac)
- Added support for Ctrl+S and Ctrl+G shortcut keys
- Added support for DataTemplate revisions to mitigate 0-RTT replay attacks
- Added support for ETags to allow cacheing of static content
- Added support for "Copy" button on HTML outputs
- Added support for "Download" button even on single outputs
- Fixed an issue where
template.j2
was being trimmed - Fixed an issue if
vars.yml
was all commented out
1.4.0 - March 10, 2021
- Added support for Data Sets - the same template can now be used with different
data.csv
/vars.yml
- Log output now hides valid internal .js, .css and .png requests in output
- Updated
viewportMargin
to fix issue an issue where panes weren't showing data until after a redraw event - Display a
$
sign at the end of the row intemplate.j2
to indicate trailing whitespace - Present a warning if the remote DataTemplate changes after you have made changes locally
- Don't remove comments from
data.csv
when file was being exported or saved - Added
Cache-Control
header to GET requests to stop data being cached - Added a "Copy" button on Output window to copy output to clipboard
- Updated CodeMirror and Bootstrap to latest versions
1.3.4 - February 24, 2021
- Fixed a code execution security risk in YAML parsing thanks to
@b1nslashsh
- Fixed an issue where a colon couldn't be used in output names
- Minor tweak to the default pane dimensions in JinjaFx Server
- Improved the formatting of the Generated time and date
1.3.3 - February 19, 2021
- Added support for using the longer
ansible.netcommon
prefix foripaddr
Ansible filters - Improved
jinjafx_adjust_headers
variable to specify desired case (upper or lower) - Updated fields in saved DataTemplates to use valid field names
- Updated CodeMirror from version 5.58.3 to 5.59.2
1.3.2 - February 11, 2021
- Fixed an issue where
data.csv
didn't go disabled when waiting - Split out JinjaFx Server into a separate directory
- Updates to
jinjafx.nslookup
to usegetnameinfo
instead ofgethostbyname
1.3.1 - January 23, 2021
- Added support for
ANSIBLE_VAULT_PASSWORD_FILE
to match Ansible - Renamed
ANSIBLE_VAULT_PASS
toANSIBLE_VAULT_PASSWORD
for consistency - Added support for
-m
to merge global variables instead of overwriting duplicate keys - Added support for API only mode to JinjaFx Server to start without web front end
- JinjaFx Server now makes it obvious if it is waiting for something
- Updated error handling routines and fixed a few minor bugs
1.3.0 - December 15, 2020
- Added JinjaFx function
jinjafx.nslookup()
for dns lookups in templates - Renamed
jfx
symlink tojinjafx
- Added support for using aws s3 buckets as dt repository
- Added wait cursor when loading dt from repository
- Updated get/put routines for repository to use a unique link per request
- Added rate limit support for get link and update link
- Started to implement support for dt lock files for read only files
- Stop officially supporting Python 2.7
1.2.3 - December 1, 2020
- Added support for
vars.yml
variablejinjafx_adjust_headers
- Added support for JinjaFx function
jinjafx.exception()
1.2.2 - November 12, 2020
- Added support for "intelligent bracket auto-escaping"
- Escape characters are now removed from inside capture groups
- Updated
jinjafx_filter
so it is now case sensitive when matching - Added support for custom sort order in
jinjafx_sort
- Added support for ordered output blocks
1.2.1 - October 30, 2020
- Added
jfx
symlink to jinjafx repository - Only try to expand static groups if it detects a
|
between parenthesis - Whitespace is now automatically removed from header fields
- Added
jinjafx.yml
for deploying using Kubernetes
1.2.0 - October 13, 2020
- Renamed variable
jinja_extensions
tojinja2_extensions
invars.yml
- Added support for variable
jinjafx_sort
invars.yml
- Added support for variable
jinjafx_filter
invars.yml
- Added support for declaring a field of type
int
- Error messages will now contain the original data row number before expansion
- Updated 3rd party libraries to latest versions from
cdnjs
- Added option
-q
to JinjaFx which suppresses title and version
1.1.6 - September 28, 2020
- Better handling of read-only DataTemplates in JinjaFx Server
- JinjaFx now correctly imports the
ipaddr
filter with Ansible 2.10 - Added support to JinjaFx to change the default output directory for relative outputs
1.1.5 - September 7, 2020
- Added support to be able to maximise panes in JinjaFx Server
- JinjaFx will now warn if it can't import Ansible filters via
jinjafx.import_filters()
1.1.4 - August 20, 2020
- Added support for Ansible Vaulted strings in
vars.yml
1.1.3 - July 19, 2020
- Active counters and ranges in character classes can now decrement as well as increment
1.1.2 - July 9, 2020
- Added support for "Update Link" capability
- Added support for active counters in
jinjafx.expand()
- Improved error handling - it now reports the data row
1.1.1 - June 28, 2020
- Completely rewrote JinjaFx Server web UI using Bootstrap v4.4.1
- Added support for processing JinjaFx DataTemplates to JinjaFx
1.1.0 - June 22, 2020
- Removed propriety DataTemplate format in JinjaFx Server in favour of YAML
- Fixed an issue where the data pane was blank after pasting in JinjaFx Server
- Removed
--ask-vault-pass
in JinjaFx - it now detects if it needs to ask you - Added support for a vaulted
vars.yml
in JinjaFx Server - Updated CodeMirror to version 5.55.0 in JinjaFx Server
1.0.10 - June 14, 2020
- Added support for comments in
data.csv
- Error message if it detects invalid characters in header fields
- Minor changes to the link format on "Get Link"
- Fixed an issue with white-space at the beginning of rows
- Cosmetic changes to
data.csv
table in JinjaFx Server
1.0.9 - June 9, 2020
- Greatly improved error reporting in templates
- Fixed HTTP status codes for AJAX requests
- Fixed CodeMirror search dialogue
- Added HAProxy rate limit example
1.0.8 - June 1, 2020
- Removed Data URL in DataTemplate Export in JinjaFx Server
- Added support for "Get Link" in JinjaFx Server using a Repository Directory
- Added support for data row expansion counters
1.0.7 - May 18, 2020
- Added Data URL in DataTemplate Export in JinjaFx Server
- Improved support for tabular view of the
data.csv
window
1.0.6 - May 12, 2020
- Fixed regression from previous version where I completely messed up
jinjafx.expand()
with regex capture groups - The
data.csv
pane in the JinjaFx Server now formats itself into a table when focus is lost
1.0.5 - May 11, 2020
- Added support for regex style capture groups
- Added support for
jinjafx.fields()
- Enabled Ansible Core filters if available
- Improved error reporting in JinjaFx Server
- Fixed an issue with elapsed time being incorrect
1.0.4 - May 5, 2020
- Added support for
ipaddr
Ansible filters (if Ansible is installed and requiresnetaddr
Python module)
1.0.3 - May 4, 2020
- Fixed an issue where whitespace options weren't being acted upon
1.0.2 - May 3, 2020
- Added support for the JinjaFx Server
1.0.1 - April 29, 2020
- Added support for Jinja2 extensions using the
jinja_extensions
variable
- Initial release