Roadmap ? Not so, but you can check this: https://github.com/davidfischer-ch/pytoolbox/issues
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.8.2...14.8.3
- Make
filesystem
Windows compatible (with some restrictions)
- Add
.flake8
configuration - Merge MR from dependabot
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.8.1...14.8.2
- Add TypeAlias
git.RefKind
and use it - Add function
logging.reset_logger
and use it
- Keep
git
/subprocess
log records separated - Prevent a strange issue when reloading logging module
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.8.0...14.8.1
- Replace your calls to
argparse.set_columns
byconsole.set_columns
- Replace your calls to
argparse.HelpArgumentParser
byargparse.ArgumentParser
- Replace your calls to
filesystem.recursive_copy
byfilesystem.copy_recursive
- Replace your calls to
subprocess.git_clone_or_pull
bygit.clone_or_pull
- Replace your calls to
subprocess.ssh
byssh.ssh
- Prevent
pytoolbox
logged events being output tosys.stderr
by registering aNullHandler
- Add class
argparse.ChainAction
(argument parsing action) - Add function
argparse.separator
(argument parsing type) - Add function
arpgarse.env_default
(utility function) - Add convenient constants
DIRECTORY_ARGS
,FILE_ARG
,REMAINDER_ARG
andMULTI_ARG()
(arpgarse
module) - Add class
argparse.ArgumentParser
(renamed fromargparse.HelpArgumentParser
) - Add class
argparse.ActionArgumentParser
- Add TypeAlias
Color
- Expose
arpgarse.{ArgumentTypeError,Namespace}
to be convenient (import argparse
not required) - Decorator
decorators.deprecated
now accept aguideline
argument (default to''
) - Expose
logging.{CRITICAL, ..., NOTSET}
,logging.{Logger, LogRecord}
to be convenient (import logging
not required) - Add TypedDict
subprocess.CallResult
and use it to type hint functions response (addedexception
key) - Function
subprocess.cmd
: Now logging topytoolbox.subprocess.cmd.<binary>
unless log is defined - Function
subprocess.cmd
: Log can be a function, aLogger
or astr
.None
will be mapped to default behavior
- Favor
type(obj)
overobj.__class__
- Class
exceptions.MessageMixin
: Now show missing attributes (attributes can be properties too) - Class
exceptions.CalledProcessError
: Add propertycmd_short
and prevent exposing sensitive data in__str__
or__repr__
- Fix calls to
yaml.dump
(as its nowruamel.yaml
) - Various improvements such as type hints, documentation, tests
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.7.0...14.8.0
- Replace
subprocess.CalledProcessError
byexceptions.CalledProcessError
- Rename function
subprocess.git_clone_or_pull
tossh.clone_or_pull
(keep a deprecated alias) - Rename function
subprocess.ssh
tossh.ssh
(keep a deprecated alias) - Rename TypeAlias
subprocess.LoggerType
tologging.LoggerType
- Replace your usage of
subprocess.CalledProcessError
byexceptions.CalledProcessError
- Replace your calls to
subprocess.git_clone_or_pull
byssh.clone_or_pull
- Replace your calls to
subprocess.ssh
byssh.ssh
- Add module
git
- Add module
ssh
- Add class
exceptions.CalledProcessError
- Add class
exceptions.DuplicateGitTagError
- Add class
exceptions.GitReferenceError
- Add class
exceptions.RegexMatchGroupNotFoundError
- Add class
exceptions.SSHAgentConnectionError
- Add class
exceptions.SSHAgentLoadingKeyError
- Add class
exceptions.SSHAgentParsingError
- Add function
logging.get_logger
- Add Protocol
logging.BasicLggerFunc
- Add class
logging.BasicFuncLogger
- Add function
regex.group_replace
- Add TypeAlias
serialization.YamlDataTypes
- Add function
serialization.get_yaml
- Add function
serialization.to_yaml
- Add decorator
unittest.skip_if_missing
- Module
subprocess
: Now log defaulting to module's log - Implement
__repr__
for exception classes - Replace
pyyaml
byruamel.yaml
- Cover
regex.Match
with tests - Test code with
ruff
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.6.0...14.7.0
- Drop Python 3.9 & 3.10 compatibility
- Favor
pathlib.Path
overstr
:- Returning
pathlib.Path
when its a path ... - Not accepting
- Returning
- Force named arguments when it makes sense (
mypy
should help you with this) - Drop
is_path
argument, instead check if its an instance ofpathlib.Path
:- Function
filesystem.from_template
- Function
filesystem.get_bytes
- Function
- Rename argument
format
tofmt
to fix a linter issue:- Function
datetime.datetime_now
- Function
datetime.datetime_to_str
- Function
datetime.str_to_datetime
- Function
- Method
module.All.diff
: Drop argumentto_type
- Function
network.http.download_ext_multi
: Argumentresources
must now be an iterable ofResource
- Functions
validation.valid_*
: Do not acceptNone
anymore - Rename function
filesystem.recursive_copy
tofilesystem.copy_recursive
(keep a deprecated alias)
- Replace your calls to
filesystem.copy_recursive
byfilesystem.recursive_copy
- Type hint a massive portion of code (and import annotations from future)!
- Ensure Python 3.11 & 3.12 compatibility
- Add optional MongoDB feature (
mongodb
extra) - Add class
argparse.Namespace
- Add context manager
filesystem.chdir
- Add Protocol
filesystem.CopyProgressCallback
- Add Protocol
filesystem.TemplateHookFunc
- Add dataclass
network.http.Resource
- Add Protocol
network.http.SingleProgressCallback
- Add Protocol
network.http.MultiProgressCallback
- Add TypeAlias
subprocess.CallArgType
- Add TypeAlias
subprocess.CallArgsType
- Add TypeAlias
subprocess.LoggerType
- Add TypeAlias
types.GenericType
- Add explicit named arguments
recursive
,top_down
,on_error
,follow_symlinks
:- Function
filesystem.chown
- Function
filesystem.find_recursive
- Function
- Add explicit named arguments related to
requests.get
:- Function
network.http.download_ext
- Function
network.http.iter_download_core
- Function
network.http.iter_download_to_file
- Function
- Module
multimedia.ffmpeg
: Enhance it and make it compatible with ffmpeg 6.1 (See commit d026afdbbe86becbccb3c75d2a1830052834cd0a) - Function
filesystem.copy_recursive
: Cover it with tests (See commit f4d5bd11992525d9fe08c56c668c254e7093f30d) - Class
network.smpte2022.base
: Make it Python 3.9+ compatible (by Július Milan [email protected]) - Class
types.StrongTypedMixin
: Make it compatible with future style annotations - Module
multimedia.ffmpeg.miscellaneous
: Consolidate code (move common attributes to the parent class) - Class
multimedia.ffmpeg.miscellaneous.Media
: Refactor it () - Refresh
__all__
and don't use magic when not necessary - Switch from Travis CI to GitHub Actions
- Rework imports (drop multiple-imports style)
- Fix various linter issues
- Update
AUTHORS.md
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.5.1...14.6.0
- Functions
humanize.natural*
: Renameformat
arguments tofmt
- Module
humanize
: Add functionsparse_*
- Ensure Python 3.11 compatibility
- Explain how to bother with GExiv2
- Add more type hints (especially
humanize
andmultimedia.exif
) - Add
PyGObject
to requirements forimaging
feature
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.5.0...14.5.1
- Make code compatible with legacy versions of
packaging
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.4.0...14.5.0
- Bye bye Django 3 and less
- Make code compatible with Django 4+
- Usage of
super()
magic - Upgrade testing stack especially pylint with its dozen tests
- Apply recommendations from linters (or silent it...)
- Convert Changelog and Authors in Markdown
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.3.0...14.4.0
- Replace
comparison.parse_version
bycomparison.try_parse_version
with a fallback behavior
- Add function
humanize.naturalweight
- Add function
console.toggle_colors
- Module
comparison
: Addunified_diff
,compare_versions
andsatisfy_version_constraints
- Compatibility with latest Django releases
- Compatibility with latest
packaging
module (LegacyVersion
was dropped)
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.2.0...14.3.0
- Drop Python 3.7 & 3.8 compatibility
- Drop
logging
extra (termcolor
is now installed by default)
- Add [types.merge_annotations` class decorator
- Module
comparison
: Addunified_diff
,compare_versions
andsatisfy_version_constraints
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.1.0...14.2.0
- Drop Python 3.6 compatibility
- Function
filesystem.from_template
: Make Jinja2 template strict with undefined values - Module
argparse
: Returnpathlib.Path
instead ofstr
(See commit 6acf8d13e2739a6e564b325bc035e33676c9ff07)
- Add some type hints (more to come)
- Convert some FIXMEs to TODOs
- Ensure Python 3.10 compatibility
- Fix many linter issues
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.0.2...14.1.0
- Module
dango.models.fields
: ApplyNullifyMixin
toStripCharField
andStripTextField
- Module
django.models.fields
: AddNullifyMixin
,CharField
andTextField
- Module
django.signals
: Fixstrip_strings_and_validate_model
not importable fromdjango.signals
- Module
django.models.fields
: FixStripMixin
not fair play with inheritance
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.0.1...14.0.2
- Fix Django deprecation warning (
ugettext_lazy
->gettext_lazy
)
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/14.0.0...14.0.1
- Function
filesystem.from_template
: Add directories optional argument - Fix Keras imports (because they changed)
- Fix newer pylint errors
Diff: https://github.com/davidfischer-ch/pytoolbox/compare/13.5.0...14.0.0
- Drop Python 2.7 - 3.5 compatibility
- Drop module
encoding
- Drop module
mongo
- Drop function
network.http.get_request_data
- Drop function
unittest.{mock_cmd,runtests}
(and dependency to nose) - Remove unused arguments on some functions
- Function
multimedia.exif.brand.Brand.clean
: Raiseexceptions.InvalidBrandError
- Rewrite code in Python 3 thanks to 2to3 and a lot of edits
- Rewrite tests in Python 3 and with pytest in replacement to unittest (and nose)
- Seamlessly download tests assets (small.mp4, ffmpeg, ffprobe) from S3
- Test on recent Python releases from 3.6 to 3.8 (3.9 will come next)
- Temporarily removed PyPy 3.6 from test matrix due to
tensorflow
(work in progress)
- setup.py an extra
all
one can install with pip install.[all]
- Separate requirements in three major groups: features, test and docs
- Make some functions compatible with
pathlib.Path
(work in progress) - Check code quality with pylint and flake8 (they are top notch)
- Remove doctests boilerplate code and make them more robust
- Fix deprecation issues by reimplementing some functions
- Fix code smells and silent irrelevant warnings
- Update Travis CI configuration: Define distribution, update script, ...
- Generate documentation with
python setup.py docs
- Class
multimedia.exif.miscellaneous.VideoStream
: Rename rotate to rotation
- Module
multimedia.exif
: Add Tamron brand
- Drop Python 2.6 + Python 3.2 support (remove from Travis CI build)
- Module
multimedia.ffmpeg
: Allow to pass input options (encoding)
- Module
multimedia.ffmpeg
: Refresh metadata classes - Class
multimedia.exif.Metadata
: Allow to define path to save EXIF metadata
- Module
django
: Django 2.0 compatibility - Module
filesystem
: Windows compatbility - Class
django.models.fields.URLField
: Set max_length to 8000 by default - Class
django.models.fields.\*
: UseOptionsMixin
on all fields - Add
requests
to requirements
- Function
filesystem.file_mime
: Convert to unicode only if required.
- Add module
pandas
- Module
multimedia.exif
: Add Huawei.
- Add function
console.shell
- Module
mutlimedia.exif
: Make classes swappable + importable from exif module. - Module
smpte2022
: Fixed wraparound sequence number calculations for RTP and FEC.
Thanks to @TobbeEdgeware!
- Function
serialization.object_to_dict
: Rely almost only on schema to produce output structure (hint: use list in schema)
- Function
collections.swap_dict_of_values
: Implement simple key-value swap.
- Function
aws.s3.remove_objects
: Add callback argument to make it more flexible. - Function
multimedia.image.remove_transparency
: Enhance code (removeforce_rgb arg
from 13.0.2). - Function
serialization.object_to_dict
: Additerable_callback
to customize container type of iterables.
- Remove fake bson's
ObjectId
(private
module) when library not available. - Function
filesystem.find_recursive
is now matching patterns against the whole path. - Function
aws.s3.list_objects
: Handle multiple patterns likefilesystem.find_recursive
. - Function
aws.s3.remove_objects
: Handle multiple patterns likefilesystem.find_recursive
.
- Add function
filesystem.to_user_id
- Add function
filesystem.to_group_id
- Add function
regex.from_path_patterns
- Replace relative imports of
len(.) > 1
by absolute imports
- Add module
aws.s3
- Remove
object_to_dict
andobject_to_dictV2
- Rename
object_to_dictV3
toobject_to_dict
- Move AI data to S3 (own account).
- Function
serialization.object_to_dict
: Also authorize to tweak obj (not only schema). - Function
serialization.object_to_dict
: Also add depth information. - Function
serialization.to_file
: Fixto_file
not usingmakedirs
properly
- Fix PEP-8 issue
- Class
django.models.fields.base.MoneyField
: Make decimal_places tweakable
- Add class
django.models.fields.mixins.LowercaseMixin
- Add function
serialization.object_to_dictV3
- Set line size to 100 chars and cleanup code
- Fix Travis build (remove
django
modules when testing) - Always install pillow when installing with -e imaging
- Update README to reflect newer options
- Class
multimedia.exif.brand.Brand
: Add more brands - Class
multimedia.exif.image.Orientation
: Use standard Enum, or object if not available
- Add module
ai
- Add
functions multimedia.image.PIL.{apply,get}_orientation
- Add constant
ORIENTATION_TO_ROTATION
tomultimedia.exif.image.Image
- Make function
multimedia.image.PIL.apply_orientation
more generic - Make function
multimedia.image.PIL.apply_orientation
defaulting to nothing if orientation is crazy - Make function
multimedia.image.PIL.get_orientation
more robust - Class
exceptions.MessageMixin
: Fix pickle recursion error
- Add module
multimedia.image.PIL
- Add function
types.merge_base_attribute
- Remove jinja2 from packages installed by default
- Support more Python versions (3.5, 3.6)
- Function
filesystem.makedirs
: Add parent argument - Module
logging
: Update logging color scheme + make it overridable - Module django.templatetags:
- Implement
TEMPLATE_STRING_IF_INVALID
for Django >= 1.8 - Implement
include_is_allowed
for Django >= 1.10
- Implement
Class multimedia.exif.Metadata
: Can also read EXIF metadata from buffer- Function
argparse.password
: Add it
- Remove unnecessary dependencies + put some as extra
- Module
filesystem
: Addwalk_kwargs
to some functions - Function
logging.setup_logging
: make possible to setup an instance of logger
- Module
argparse
: Set columns to a value or auto-detected - Module
exif
: Fix orientation is not value from Orientation - Module
smpte2022
: Various fixes by @AbdulTheProgrammer - Enhance function
logging.setup_logging
:- Add optional colorized mode
- Always setup log level and return logger
- Enhance module
multimedia.exif
:- Add optional orientation override
- Add rotation property based on orientation
- Add rewrite method to fix issues with exif tags
- Allow to specify gexiv2 version
- Use iteritems because its still a Python 2 (and 3) library
- Add method
get_frames_md5_checksum
toFFmpeg
class - Update exif brands
- Support Python 3.6
- Add function
itertools.chunk
- Fix syntax error in
multimedia.exif.lens
at line 22 - Prevent
AppRegistryNotReady
when importingdjango.models.utils
- Add
{pre,post}_func
arguments tofilesystem.from_template
- Function
filesystem.from_template
: Make destination optional + allow to set template to content
- Add function
crypto.get_password_generator
- Improve code quality
- Remove
try_
prefix fromfilesystem
functions (retro compat:try_
functions still defined)
- Add constant
encoding.integer_types
- Add function
subprocess.su
- Add function
types.get_arguments_names
- Add bare argument to
subprocess.git_clone_or_pull
- Add module
linux
- Add module
setuptools
- Add classes
types.Echo{Object,Dict}
- Add classes
argparse.Help{ArgumentParser,Formatter}
- Add docstrings and fix doctests
- Fix
django.forms.utils.get_instance
- Update
FromPrivateKeyMixin
to fix call to fail with recent DRF
- Update
git_clone_or_pull
to full clone by default
- Add module
network.url
- Add mixin
django.forms.mixins.CreatedByMixin
- Add mixin
django.forms.mixins.StaffOnlyFieldsMixin
- Add/fix docstrings and unit-tests
- Use
xrange
anditer{items,keys,values}
under Python 2 - Replace
nose.tools
bypytoolbox.unittest.asserts
- Make
RequestMixin
more transparent network.http.download_ext
: Passkwargs
toiter_download_to_file
django.views.mixins.AddRequestToFormKwargsMixin
: Check form "handles" request askwarg
based on its class
- Remove ming module to cleanup build
- Remove
django.models.mixins.PublishedMixin
(not generic enough neither powerful enough)
- Prefer path over filename (arguments convention)
- Replace
MapUniqueTogetherMixin
+MapUniqueTogetherIntegrityErrorToValidationErrorMixin
byBetterUniquenessErrorsMixin
. - Move
CancellableDeleteView
todjango.views.base
- Generate documentation and publish on readthedocs.org
- Add mixin
django.models.mixins.BetterUniquenessErrorsMixin
- Add/fix docstrings
- Update modules headers
- Make
django.views.mixins.ValidationErrorsMixin
more "generic" - Too many to be listed here, https://github.com/davidfischer-ch/pytoolbox/compare/10.4.0...11.0.0
- Add module
django.models.metaclass
- Add module
django.views.utils
- Add module
enum
- Add modules in
multimedia.exif
:brand
camera
equipement
image
lens
photo
tag
- Add module
rest_framework.metadata.mixins
- Add mixin
django.models.mixins.PublicMetaMixin
- Add decorator
decorators.cached_property
- Add decorator
decorators.hybridmethod
- Add functions in
django.models.utils
:get_related_manager
get_related_model
try_get_field
- Add function
types.get_properties
- Handle 24h+ hour format in
datetime.str_to_datetime
- Module
django.forms.utils
imports fromdjango.forms.utils
module - Fix
ReloadMixin
popping update_fields! - Refactor class
multimedia.exif.metadata.Metadata
(use newest classes) - Split module
multimedia.ffmpeg
- Fix
ffmpeg
's'mock
class
- Remove module
rest_framework.v2
- Refactor (optimize)
unittest.FilterByTagsMixin
- Rename module
exception
toexceptions
- Rename module
rest_framework.v3
torest_framework
- Rename some attributes of
multimedia.ffmpeg
classes
- Add many modules:
atlassian
itertools
module
(yes!)selenium
signals
states
string
voluptuous
- Add class
argparse.Range
- Add function
argparse.multiple
- Add function
collections.{merge_dicts, swap_dict_of_values}
- Add decorator
decorators.run_once
- Add modules and mixins in
django\*
module - Add value
encoding.binary_type
- Add function
humanize.naturalfrequency
- Add function
types.isiterable
- Add classes
types.{DummyObject,MissingType}
- Add object
types.Missing instance of MissingType
- Add mixins
unittest.{InMixin,InspectMixin}
- Add class
unittest.Asserts
- Add object
unittest.asserts
- Countless fixes and enhancements
- Follow
os.path
import best practices - Make
multimedia.ffmpeg
private functions public
- Add
EncodeStatistics
and refactorFFmpeg.encode()
- Merge
django.template
tags & filters into 1 file - Split
FFmpeg
class toFFmpeg
+FFprobe
classes
- Add module
django.exceptions
- Add
static_abspath
Django template tag - Add class
django.forms.mixins.EnctypeMixin
- Add class
django.models.mixins.AlwaysUpdateFieldsMixin
- Add class
django.models.mixins.AutoForceInsertMixin
- Add class
django.models.mixins.AutoUpdateFieldsMixin
- Add class
django.models.mixins.MapUniqueTogetherIntegrityErrorToValidationErrorMixin
- Add class
django.models.mixins.RelatedModelMixin
- Add class
django.models.mixins.UpdatePreconditionsMixin
- Add class
django.storage.ExpressTemporaryFileMixin
- Add class
django.test.mixins.FormWizardMixin
- Add class
django.views.mixins.InitialMixin
- Add class
logging.ColorizeFilter
- Add function
collections.flatten_dict
- Add function
datetime.multiply_time
- Avoid hardcoding
\n
- Module
console
: Write to given stream - Module
datetime
: Make API more consistent - Module
multimedia.ffmpeg
:- Split
FFmpeg
class inFFmpeg
andFFprobe
- Add
EncodeState
&EncodeStatistics
classes - Do some analysis before launching
ffmpeg
subprocess - Fix progress if sub-clipping
- Improve handling of
media
argument - Miscellaneous improvements
- Split
- Module
subprocess
: Import Popen from psutil if available - Refactor function
django.signals.create_site
- Method
multimedia.ffmpeg.FFmpeg.encode
always yields at start
- Add some mixins in
rest_framework.v*.views.mixins
- Add class
multimedia.ffmpeg.EncodingState
- Function
filesystem.get_bytes
returns a generator - Rename all functions with
_to_
instead of2
(e.g.str2time
->str_to_time
) - Rename some methods of the class
ffmpeg.FFmpeg
- Change signature of
console
module's functions
- Add module
comparison
- Add module
regex
- Add module
types
- Add class
filesystem.TempStorage
- Add function
exception.get_exception_with_traceback
- Add function
humanize.natural_int_key
- Add function
console.progress_bar
- Add
streams
methods toffmpeg.FFmpeg
- Improve
ffmpeg
module (addMedia
class for inputs/outputs) - Improve
network.http.download_ext
(Can download in chunks + progress callback) - Improve
filesystem.get_bytes
+crypto.*
to read a file in chunks (ifchunk_size
is set)
- Add module
humanize
- Add module
django.models.query.mixins
- Add module
django.test.runner.mixins
- Add
__all__
to make the API explicit - Add method
get_media_framerate
toFFmpeg
class - Add module
private
(with_parse_kwargs_string
) network
module: Cleaner usage ofstring.format()
- Refactor module
humanize
+ addnaturalfilesize
- Improve
humanize
functions to handle[0-1]
range + big numbers
- Refactor
multimedia
modules - Rename module
django.templatetags.pytoolbox_tags
to_filters
- Rename
django.forms
->django.forms.mixins
- Rename
django.views
->django.views.mixins
- Add module
django.templatetags.pytoolbox_tags
- Add module
multimedia.exif
- Add some
django mixins
- Fix unicode handling
- Function
datetime.total_seconds
now accept instance oftimedelta
- Function
filesystem.from_template
can now use jinja2 to generate the content timedelta
&to_filesize
Django template filters now handle empty string input- Add argument
create_out_directory
to methodmultimedia.ffmpeg.FFmpeg.encode
- Fix
multimedia.ffmpeg.FFmpeg.encode
: Create output directory before the subprocess - Improve
multimedia.ffmpeg.FFmpeg.encode
: Handle process missing + simplify mocking
- Add function
multimedia.ffmpeg.get_subprocess
- Rename module
django.models
->django.models.mixins
- Add module
django.models.fields
- Add class
validation.CleanAttributesMixin
- Add class
validation.StrongTypedMixin
- Add class
django.forms.RequestMixin
- Add class
django.views.AddRequestToFormKwargsMixin
- Add class
django.views.LoggedCookieMixin
- Add class
unittest.AwareTearDownMixin
- Add function
subprocess.git_add_submodule
- Add function
network.http.download_ext
- Add function
datetime.parts_to_time
- Add some classes in module
exception
- Add module
django.urls
with utility regular expressions - Improve
crypto.githash
to handle reading data from a file - Fix
SaveInstanceFilesMixin
(use .pk instead of .id) - Improve
datetime.str2time
to handle microseconds - Improve
filesystem.try_remove
to handle directories (whenrecursive=True
) - Improve
multimedia.ffprobe.get_media_duration
(return None in case of error) StrongTypedMixin
: Allow setting arg to the default value (if set)- Split
HelpTextToPlaceholderMixin
logic to allow modify behavior by inheritance - Fix
multimedia.ffmpeg.encode
(convert default_in_duration to time) - Fix
multimedia.ffmpeg.encode
(may return None - out_duration) - Fix
multimedia.ffmpeg.encode
(skip broken out duration) - Improve
multimedia.ffprobe.get_media_duration
to handle media info dict
- Move
ffmpeg
andx264
modules intomultimedia
- Replace unreliable
ffmpeg.get_media_*
functions bymultimedia.ffprobe.get_media_*
- Add module
multimedia.ffprobe
- Add function
datetime.str2time
- Store command line arguments in
args
attribute, do not update__dict__
of the instance.
- Add module
argparse
- Add function
argparse.is_file
- Add
cleanup
argument tojuju.boostrap
- Add docstring to function
juju.ensure_num_units
- Add
get_unit_public_address
+properties
methods to classjuju.Environment
(thanks @smarter) - Add args and namespace kwargs to
juju.DeploymentScenario.__init__
to allow bypassingsys.arv
- Fix various bugs of
juju
module + various updates according to juju 1.18 - Fix
subprocess.rsync
- Fix
crypto.githash
- Fix handling of juju bootstrap error message in Python 3
- Default to something if key is missing in stats (x264.encode)
- Use sudo with juju status (to work around https://bugs.launchpad.net/juju-core/+bug/1237259)
- Add timeout to valid_uri
- Improve errors and time-outs handling in
juju
module (for the best) - Move socket & twisted fec generators to
pytoolbox_bin
- Remove deprecated
flask.get_request_data
(replaced bynetwork.http.get_requests_data
) SmartJSONEncoderV2
now filter the class attributes- Fix
SmartJSONEncoderV2
!
- Add module
decorators
- Add module
django.utils
- Add module
x264
- Add function
datetime.secs_to_time
- Add function
datetime.time_ratio
- Add function
ffmpeg.get_media_resolution
- Add function
mongo.mongo_do
- Add function
network.http.download
- Add function
subprocess.git_clone_or_pull
- Fix
test_ensure_num_units
,str2datetime
- Fix computation of
FecReceiver.lostogram
- Fix usage of
time_ratio
byffmpeg
andx264
modules - Use renamed IP class (previously
IPAddress
) fallback import toIPAddress
- Accept None to leave owner or group unchanged (
filesystem.chown
) - Set default time-outs to None and update juju module (fixes)
- Add some arguments to
recursive_copy
andrsync
- Append sudo to juju bootstrap
- Add
juju.Environment.wait_unit
- Improve
ffmpeg
module
- Add timeout argument to
cmd()
- Remove symlink first, to avoid boring exceptions
- Add timeout to juju status !
- Add function
validation.valid_int()
- Add constants to
juju
module - Juju bootstrap will print time as int
- Add
makedirs
argument to some methods of the objects ofserialization
- Add user argument to function
subprocess.cmd
- Add path argument to
subprocess.make
- Add extra_args (list) to function
subprocess.rsync
- Fix
juju
,serialization
,subprocess
modules, update tests - Function subprocess.cmd : Handle
logging.Logger
as log, improve docstring, add retry loop - Upgrade
relation_
methods
- Move all django template tags into module
pytooblox_tags
- Move
juju
functions to theEnvironment
class
- Add
console.choice()
(by kyouko-taiga) - Add function
serialization.to_file
and use it to improvePickeableObject
andJsoneableObject
write methods.
- Add missing MANIFEST.in
- Add new django-related modules
- Add some django mixins + template tags
- Make class
django.models.GoogleMapsMixin
more generic - Add cli_output argument to
subprocess.cmd
- Add size_only argument to
subprocess.rsync
- Do not add hashlib to requirements if already part of the stdlib
- Fix headers + rest markup + update title
- Enhance function
ffmpeg.encode
- Call log more often
flask.get_request_data
replaced bynetwork.http.get_request_data
- Split
django
module into submodules - Rename
SmartModel
toAbsoluteUrlMixin
- Embed
smpte2022lib
- Add entry points (
socket-fec-generator
+twisted-fec-generator
) - Add commit and release scripts to make it more securely (run tests before, check sphinx ...)
- Add module
network.http
and classesjuju.SimulatedUnit(s)
- Add module
django.templatetags
with getattribute function - Add class
django.models.SaveInstanceFilesMixin
- Add function
django.forms.update_widget_attributes
- Lighter list of dependencies
- Add
--extra-...
flags to install dependencies for the extra features/modules. - Filter packages to avoid installing tests module !
- Fix
setup.py
to avoid removing tests from packages list if it did not exist. - Add kwargs to
serialization.object2json
->json.dumps
map_marker
: Convert to unicode sooner (to handle special field class)django.forms.SmartModelForm
: Attributes & replacement class applied depending of the form field's class- Add fill option to
collections.pygal_deque.list()
- Replace range by xrange, values by itervalues, ...
- Handle
datetime.date
class (functiondatetime.dateime2epoch
) - Add suffix parameter to
AbsoluteUrlMixin.get_absolute_url
- Ensure import from future of great things
- Fix docstrings
Example usage:
sudo python setup.py install --help
sudo python setup.py install --extra-flask
- Remove
py_
prefix of all modules & paths - Change license (GNU GPLv3 -> EUPL 1.1)
- Add module
mongo
- Use absolute imports
- Update classifiers
- Update README.rst
- Rename
duration2secs
->total_seconds
- Rename
get_request_json
->get_request_data
- Python 3 support
- Add module
py_collections
- Add module
py_django
- Add function
json_response2dict
- Add function
make
- Add function
ssh
- Greatly improve module
py_juju
- Greatly improve module
py_serialization
- Update README.rst
- Update function
get_request_data
- Update function
map_exceptions
- Update function
runtests
- Update
setup.py
- Greatly improve module
py_serialization
- Greatly improve module
py_juju
- Add class
TimeoutError
- Add function
print_error
- Fix
setup.py
- Update
cmd
- Update
rsync
- Rename module
py_mock
->py_unittest
- Remove function
unicode_csv_reader
- Add module
py_console
- Add module
py_unicode
- Add module and function
runtests
- Add class
JsoneableObject
- Add function
assert_raises_item
- Add function
valid_uri
- Add function
validate_list
- Greatly improve module
py_juju
- Greatly improve setup and unit-testing
- Fix shebangs
- Handle unicode
- Use new string formatting
- Update function map_exceptions
- Add kwargs to functions of module
py_subprocess