LogoLogo
Official SiteAPI Reference
stable/3.0
stable/3.0
  • Cement Developer Guide
  • Release Information
    • What's New!
    • Upgrading
    • ChangeLog
    • Deprecations
  • Getting Started
    • Installation
    • Developer Tools
    • Framework Overview
    • Beginner Tutorial
      • Part 1: Creating Your First Project
      • Part 2: Adding Features
      • Part 3: Extending a Project
      • Part 4: Making Everything Legit
  • Core Foundation
    • Interfaces and Handlers
    • Hooks
    • Configuration Settings
    • Arguments
    • Logging
    • Controllers
    • Output Rendering
    • Caching
    • Mail Messaging
    • Framework Extensions
    • Application Plugins
    • Templating
  • Utilities
    • Filesystem
    • Shell
    • Miscellaneous
  • Extensions
    • Alarm
    • Argparse
    • Colorlog
    • ConfigParser
    • Daemon
    • Dummy
    • Generate
    • Jinja2
    • Json
    • Logging
    • Memcached
    • Mustache
    • Plugin
    • Print
    • Redis
    • Scrub
    • SMTP
    • Tabulate
    • Yaml
    • Watchdog
  • Additional Topics
    • Extending The App Object
    • Unit Testing
    • Cleanup
    • Signal Handling
    • Pipenv
    • Autocomplete
    • Profiling with cProfile
    • Debugging with VSCode
  • Environment Variables
  • Terminology
  • Contributing
  • Privacy Policy
Powered by GitBook
On this page
  • # 3.0.14 - May 5, 2025
  • 3.0.12 - Nov 10, 2024
  • 3.0.10 - Feb 28, 2024
  • 3.0.8 - Aug 18, 2022
  • 3.0.6 - Dec 18, 2021
  • 3.0.4 - May 17, 2019
  • 3.0.2 - November 6, 2018
  • 3.0.0 - Aug 21, 2018
  1. Release Information

ChangeLog

PreviousUpgradingNextDeprecations

Last updated 3 days ago

# 3.0.14 - May 5, 2025

Bugs:

  • [ext_jinja2] Refactor hard-coded reference to jinja2 template handler.

  • [ext_smtp] Misc fixes and updates to better support content types.

Features:

  • None

Refactoring:

  • None

Misc:

  • None

Deprecations:

  • None

3.0.12 - Nov 10, 2024

Bugs:

  • None

Features:

  • None

Refactoring:

  • [dev] Refactor String Substitutions (%s) with F-Strings

  • [dev] Allow line lengths up to 100 characters (previously 78)

  • [dev] Modernize Packaging (pyproject.toml, PDM)

  • [dev] Implement Ruff for Code Compliance (replaces Flake8)

  • [dev] Remove Python 3.5, 3.6, 3.7 Docker Dev Targets

  • [dev] Added Python 3.13 Dev Target

  • [dev] Testing now requires typing compliance (make test -> make comply-mypy)

Misc:

  • [cli] Move CLI dependencies to cement[cli] extras package, and remove included/nexted contrib sources. See note on 'Potential Upgrade Incompatibility'

Deprecations:

  • None

Special Recognitions:

Potential Upgrade Incompatibility:

This update removes included contrib libraries that are dependencies for the cement command line tool to function (PyYAML, and Jinja2). The dependencies are now included via the cement[cli] extras package.

This is not an upgrade incompatibility in the core Cement code, and it would not affect any applications that are built on Cement. That said, it does have the potential to break any automation or other uses of the cement command line tool.

Resolution:

pip install cement[cli]

3.0.10 - Feb 28, 2024

Bugs:

  • [ext.logging] Support logging.propagate to avoid duplicate log entries

  • [core.foundation] Quiet mode file is never closed

  • [ext.smtp] Ability to Enable TLS without SSL

  • [ext.smtp] Empty (wrong) addresses sent when CC/BCC is None

Features:

  • [utils.fs] Add Timestamp Support to fs.backup

  • [ext.smtp] Support for sending file attachements.

  • [ext.smtp] Support for sending both Plain Text and HTML

Refactoring:

  • [core.plugin] Deprecate the use of imp in favor of importlib

  • [ext.smtp] Actually test SMTP against a real server (replace mocks)

Misc:

  • [dev] Add Smoke tests for Python 3.11, 3.12

  • [dev] Make Python 3.12 the default development target

  • [dev] Drop support for Python 3.7

  • [docker] Base official Docker image on Python 3.12

  • [utils.version] Resolve deprecated datetime.utcfromtimestamp()

  • [dev] Add comply-typing to make helpers, start working toward typing.

  • [dev] Add mailpit service to docker-compose development config.

Deprecations:

  • [ext.logging] Deprecate FATAL facility in favor of CRITICAL.

3.0.8 - Aug 18, 2022

Bugs:

  • [cli] Cement CLI broken on Python 3.10

  • [cli] Generated script returns version of Cement

  • [cli] Generated script should allow dash/underscore

  • [core.foundation] App.render() not suppressed in quiet mode

  • [core.foundation] Console log not suppressed by output handler override (JSON/YAML)

Features:

  • [utils.shell] Support suppress meta option on Prompt to suppress user input.

  • [ext] Use extras_require for optional extensions

Refactoring:

  • [utils.misc] Use SHA256 instead of MD5 in rando() to support Redhap/FIPS compliance

  • [core.foundation] Make quiet/debug options configurable

Misc:

  • [dev] Cement CLI smoke tests

  • [dev] Add Python 3.10 to Travis CI tests

  • [core.deprecations] Implement Cement deprecation warnings

Deprecations:

  • [core.foundation] Deprecate CEMENT_FRAMEWORK_LOGGING in favor of CEMENT_LOG.

3.0.6 - Dec 18, 2021

Bugs:

  • [ext.argparse] Parser (self._parser) not accessible inside _pre_argument_parsing when stacked_type = 'embedded'

  • [ext.configparser] Overriding config options with environment variables doesn't work correctly with surrounding underscore characters

  • [utils.fs] Fix bug where trailing slash was not removed in fs.backup() of a directory.

  • [cement.cli] Generated README contains incorrect installation instructions.

Features:

  • None

Refactoring:

  • [ext.colorlog] Support subclassing of ext_colorlog.

Misc:

  • [dev] Update to Python 3.10 for default development / Docker version.

  • [dev] Remove Python 3.5/3.6 from Travis CI tests.

3.0.4 - May 17, 2019

Bugs:

  • [ext.yaml] YamlConfigHandler uses unsafe load method

  • [ext.configparser] Configparser 'getboolean' exception

Features:

  • [utils.misc] Support y as a truth boolean in utils.misc.is_true

3.0.2 - November 6, 2018

Bugs:

  • [cli] Generate Variable Mishap in Project Template

  • [ext.generator] Error class is malformed

  • [core.template] MemoryError during 'cement generate project'

  • [core.foundation] Contents of plugin_dirs is printed to console

Features:

  • [ext.argparse] Command name override

3.0.0 - Aug 21, 2018

Bugs:

  • [ext.redis] Unable To Set Redis Host

  • [ext.argparse] Empty Sub-Commands List

  • [core.foundation] Handler Override Options Do Not Honor Meta Defaults

Features:

  • [core] Add Docker / Docker Compose Support

  • [core] Add ability to override the output handler used when app.render() is called.

  • [ext.print] Add the Print Extension to be used as a drop in replacement for the standard print(), but allowing the developer to honor framework features like pre_render and post_render hooks.

  • [ext.scrub] Add Scrub Extension to easily obfuscate sensitive data from rendered output.

  • [core] Add ability to override config settings via environment variables.

  • [ext.argparse] Add ability to get list of exposed commands

  • [core] Add Template Interface

  • [ext.mustache] Add MustacheTemplateHandler

  • [ext.handlebars] Add HandlebarsTemplateHandler

  • [ext.jinja2] Add Jinja2TemplateHandler

  • [ext.generate] Add Generate Extension

  • [ext.logging] Add -l LEVEL command line option to override log level

  • [cli] Add Cement CLI (includes ability to generate apps, plugins,

    extensions, and scripts using the Generate Extension)

  • [core] Added clear separation between Interfaces and Handlers

  • [utils.fs] - Added several helpers include fs.Tmp for creation and cleanup of temporary directory and file.

Refactoring:

  • Too many to reference

Incompatible:

  • [core] Replace Interfaces with ABC Base Classes

  • [core.foundation] Rename CementApp to App.

  • [core.foundation] Drop deprecated App.Meta.override_arguments

  • [core.foundation] Remove App.Meta.plugin_config_dir and App.Meta.plugin_config_dirs in favor of App.Meta.config_dirs

  • [core.founcation] Rename App.Meta.plugin_bootstrap as App.Meta.plugin_module

  • [core.handler] Rename CementBaseHandler to Handler

  • [core.handler] Drop deprecated backend globals

  • [core.hook] Drop deprecated backend globals

  • [core.controller] Drop CementBaseController

  • [ext.logging] Drop deprecated warn facility (use warning)

  • [ext.argcomplete] Drop ArgComplete Extension

  • [ext.reload_config] Drop Reload Config Extension

  • [ext.configobj] Drop ConfigObj Extension

  • [ext.json] Disable overridable option by default

  • [ext.yaml] Disable overridable option by default

  • [ext.json_configobj] Drop JSON ConfigObj Extension

  • [ext.yaml_configobj] Drop YAML ConfigObj Extension

  • [ext.handlebars] Drop Handlebars Extension

  • [ext.genshi] Drop Genshi Extension

  • [ext.argparse] ArgparseController.Meta.default_func is now _default, and will print help info and exit. Can now set this to None as well to pass/exit.

  • [ext.plugin] All plugin configuration sections must start with plugin..

    For example, [plugin.myplugin].

  • [core.foundation] Renamed App.Meta.config_extension to App.Meta.config_file_suffix

  • [core.foundation] Drop App.Meta.arguments_override_config

Deprecation:

  • Everything with deprecation notices in Cement < 3

[dev] Type Annotations (related: )

[core.arg]

[core.cache]

[core.config]

[core.controller]

[core.deprecations]

[core.exc]

[core.extension]

[core.foundation]

[core.handler]

[core.hook]

[core.interface]

[core.log]

[core.mail]

[core.meta]

[core.output]

[core.plugin]

[core.template]

[ext.alarm]

[ext.argparse]

[ext.colorlog]

[ext.configparser]

[ext.daemon]

[ext.dummy]

[ext.generate]

[ext.jinja2]

[ext.json]

[ext.logging]

[ext.memcached]

[ext.mustache]

[ext.plugin]

[ext.print]

[ext.redis]

[ext.scrub]

[ext.smtp]

[ext.tabulate]

[ext.watchdog]

[ext.yaml]

[utils.fs]

[utils.misc]

[utils.shell]

[utils.version]

Many thanks to for their contributions in modernizing the packaging system. Cement was started in 2009, and has some lingering technical debt that is now being addressed. Their contribution was a major help in moving off of setuptools and on to PDM and pyproject.toml, along with initial implementations of Ruff for a new generation of code compliance. I sincerely appreciate your help!

Many thanks to for their contributions toward adding type annotations in . This PR was too large to merge directly, but it is serving as a guide to finally begin work toward adding type annotations to Cement. This was a massive effort, and is very helpful to have this work available to guide the effort even if it will not be merged directly.

Issue #749
PR #742
Issue #733
Issue #680
PR #681
Issue #671
PR #681
PR #628
Issue #692
Issue #693
Issue #694
Issue #695
Issue #696
Issue #697
Issue #698
Issue #699
Issue #700
Issue #700
Issue #702
Issue #703
Issue #704
Issue #705
Issue #706
Issue #707
Issue #708
Issue #709
Issue #710
Issue #711
Issue #712
Issue #713
Issue #714
Issue #715
Issue #716
Issue #717
Issue #718
Issue #719
Issue #720
Issue #721
Issue #722
Issue #723
Issue #724
Issue #725
Issue #726
Issue #727
Issue #728
Issue #688
Issue #689
Issue #690
Issue #691
Issue #679
@sigma67
@rednar
PR #628
Issue #310
Issue #653
Issue #667
Issue #668
Issue #611
PR #669
PR #669
Issue #386
Issue #658
Issue #661
Issue #599
PR #628
Issue #533
Issue #619
Issue #632
Issue #614
Issue #636
Issue #637
Issue #621
Issue #604
Issue #626
Issue #613
Issue #620
Issue #618
Issue #631
Issue #638
Issue #569
Issue #590
Issue #610
Issue #588
Issue #571
Issue #553
Issue #558
Issue #542
Issue #532
Issue #535
Issue #531
Issue #538
Issue #529
Issue #440
Issue #444
Issue #513
Issue #439
Issue #471
Issue #469
Issue #437
Issue #455
Issue #464
Issue #487
Issue #497
Issue #490
Issue #506
Issue #192
Issue #521
Issue #523
Issue #426
Issue #445
Issue #493