lognflow


Namelognflow JSON
Version 0.11.1 PyPI version JSON
download
home_pagehttps://github.com/arsadri/lognflow
SummaryLog and Flow tracking made easy with Python
upload_time2024-03-26 00:45:44
maintainerNone
docs_urlNone
authorAlireza Sadri
requires_python>=3.7
licenseGNU General Public License v3
keywords lognflow
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            lognflow
========

Log and Flow tracking made easy with Python. You can install it by::

	pip install lognflow

A simple program to use it would be similar to the following::

	from lognflow import lognflow
	import numpy as np
	
	data = np.random.rand(100)

	logger = lognflow(r'c:\all_logs\\')
	logger('This is a test for lognflow and log_single')
	logger.log_single('data', data)

The logviewer is also very useful::

	from lognflow import logviewer
	logged = logviewer(r'c:\all_logs\some_log\\')
	data = logged.get_single('data')

The printprogress makes a pretty nice progress bar::

	from lognflow import printprogress
	N = 100
	pbar = printprogress(N)
	for _ in range(N):
		# do_something()
		pbar()
		
There is also a conviniant way to use multiprocessing in Python. You wish to 
provide a function name, iterable inputs and shared inputs. Then ask 
to run the function over the iterable inputs using multiprcessing. Then
The multiprocessor is for you. The following is a cross-correlation of two
masked verctors using a given ststistical function::

	from lognflow import multiprocessor
	
	def masked_cross_correlation(inputs_to_iter_sliced, inputs_to_share):
		""" Calculate the correlation of two masked vectors, then use a given
			statsitcal function to get the stat of the correlation.
		"""
	    vec1, vec2 = inputs_to_iter_sliced
	    mask, statistics_func = inputs_to_share
	    vec1 = vec1[mask==1]
	    vec2 = vec2[mask==1]
	    vec1 -= vec1.mean()
	    vec1_std = vec1.std()
	    if vec1_std > 0:
	        vec1 /= vec1_std
	    vec2 -= vec2.mean()
	    vec2_std = vec2.std()
	    if vec2_std > 0:
	        vec2 /= vec2_std
	    correlation = vec1 * vec2
	    to_return = statistics_func(correlation)
	    return(to_return)
	    
	
	if __name__ == '__main__':
	    data_shape = (1000, 2000)
	    data1 = np.random.randn(*data_shape)
	    data2 = 2 + 5 * np.random.randn(*data_shape)
	    mask = (2*np.random.rand(data_shape[1])).astype('int')
	    statistics_func = np.median
	    
	    inputs_to_iter = (data1, data2)
	    inputs_to_share = (mask, statistics_func)
	    ccorr = multiprocessor(masked_cross_correlation, 
	    					   inputs_to_iter, 
	    					   inputs_to_share)
	    print(f'ccorr: {ccorr}')

In this package we use a folder on the HDD to generate files and folders in typical
formats such as numpy npy and npz, png, ... to log. A log viewer is also availble
to turn an already logged flow into variables. Obviously, it will read the folders 
and map them for you, which is something you could spend hours to do by yourself.
Also there is the nicest progress bar, that you can easily understand
and use or implement yourself when you have the time.

Looking at most logging packages online, you see that you need to spend a lot of time
learning how to use them and realizing how they work. Especially when you have to deal
with http servers and ... which will be a huge pain when working for companies
who have their own HPC. 

This is why lognflow is handy and straight forward.

Many tests are avialable in the tests directory.

* Free software: GNU General Public License v3
* Documentation: https://lognflow.readthedocs.io.

Features
--------

* lognflow puts all the logs into a directory on your pc
* lognflow makes it easy to log text or simple plots.
* logviewer makes it easy to load variables or directories
* printprogress is one of the best progress bars in Python.

Credits
^^^^^^^^

This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.

.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage


History
=======

0.1.0 (2022-11-16)
------------------

* First release on PyPI.

0.3.0 (2022-12-19)
------------------

* Very consistent and easy-to-handle interface

0.3.2 (2022-12-27)
------------------

* log your dictionary.

0.5.2 (2023-01-11)
------------------

* logger call takes txt only for the main_log
* main_log name can have no time_stamp
* All logs can be force_flush = True.
* __del__ is well implemented.

0.5.3 (2023-03-19)
------------------

* use logger.log_single('aName', aDict) to save a dictionary using numpy.savez
* time_in_file_name has been changed to time_tag, sorry there! but early stages.
* time_tag is True in the constructor, but could always be set to False
* All tests passed!

0.6.0 (2023-03-22)
------------------
* This is a stable release
* All text files are handled by the with statement
* Renaming bug is fixed
* all tests run properly.
* lognflow has all that logviewer has. We will check if dir exists at every use

0.6.1 (2023-03-22)
------------------
* rename had a bug that is fixed

0.6.2 (2023-03-25)
------------------
* made it possible to flush_all()
* We support Python 3.7+ because of dataclasses
* printprogress now can disable printing anything and return ETA at the __call__

0.6.3 (2023-04-01)
------------------
* lognflow class does all logviewer does. Maybe it is time to remove logviewer.

0.6.4 (2023-04-06)
------------------
* Better documentation and examples for readme
* get_var is added to lognflow to get buffered variables logged by log_var

0.6.5 (2023-04-26)
------------------
* Fixed a bug in the docs to allow sphinx compile it.
* log_var will log only the valid time stamps.
* added end keyword argument to log_text

0.6.6 (2023-04-27)
------------------
* Better documentation
* added tifffile imread to logviewer and imwrite to lognflow

0.6.7 (2023-04-27)
------------------
* A bug in tifffile support was fixed

0.6.8 (2023-05-04)
------------------
* Fixing readme for PyPI.
* removed marker from log_plot. user marker and linestyle keyword arguments.
* printprogress returns proper ETA every time if print_function is set to None::

0.7.0 (2023-05-15)
------------------
* logviewer returns data by log_sigle if the full name is mentioned.

0.7.1 (2023-05-22)
------------------
* printprogress supports lognflow.
* bugs fixed in lognflow.
* For now I guess lognflow and logviewer could be separate.

0.7.2 (2023-05-25)
------------------
* bug fixed in logviewer
* text_to_object added to logviewer to read dict or list logged via log_single
* test pass for logviewer including the test for text_to_object

0.7.3 (2023-06-01)
------------------
* bug fixed in logviewer in the use of suffix in get_stack_of_files
* log_imshow takes colorbar and remove_axis_ticks flags.
* every lognflow instance has a logviewer pointing to its log_dir called logged.

0.7.4 (2023-06-26)
------------------
* critical bug fixed in log_imshow

0.7.5 (2023-06-27)
------------------
* Added complex numbers to log_imshow

0.7.6 (2023-07-17)
------------------
* printprogress can handle up to 99 days
* log_text takes any save_as
* If variable name has escape key is alright
* If variable name is splitable, we replace them with _

0.8.0 (2023-07-25)
------------------
* logger.save and savez are set to be identical to log_single.
* logged.load is set to be identical to get_single.
* utils.py is added to contain all misc functions.
* replace_all added to utils

0.8.1 (2023-07-26)
------------------
* a bug fixed in log_var

0.8.2 (2023-08-02)
------------------
* the word save_as is now replaced with suffix as is in pathlib
* all loggers can take the suffix as the extension in the parameter_name

0.8.3 (2023-08-02)
-----------------
* critical bug fixed in log_var to support v0.8.2

0.8.4 (2023-08-03)
-----------------
* variable names that are pecular will always be fixed first.
* suffix can be read form the file name.
* time_tag will always accompany file name unless stated otherwised.

0.8.5 (2023-08-04)
-----------------
* Some functions can go to utils and be mentioned in the __init__
* a bug was fixed in printprogress.

0.8.6 (2023-08-04)
-----------------
* plt_utils was not added tp 0.8.5

0.9.0 (2023-08-09)
-----------------
* copy() is now possible from a file or a variable name into another
* default suffix in get_flist is *
* logviewer.get_stack_of_files is only useful for reading data.
* more tests are added.
* moved multichannel_to_frame to utils

0.9.1 (2023-08-25)
-----------------
* bug removed from plt_utils numbers_as_images_4D.
* bug removed from printprogress when number of steps is very small.

0.10.0 (2023-09-01)
-----------------
* I added multiprocessor to lognflow
* bug fixed in logviewer

0.10.1 (2023-09-12)
-----------------
* multi_channel_by_subplots bug fixed for non-square shape
* default colormap is viridis everywhere
* multiprocessor heavily debugged and made a lot easier to use
* better tests added for multiprocessor

0.10.2 (2023-10-04)
-----------------
* printprogress can be used as an iterator, test added
* time_tag is False by default for copy()
* to log MATLAB files, input must be a dictionary.
* bug fixed in get_flist to return dirs only as well
* all new features for Python 3.10 onwards are removed.

0.10.3 (2023-10-09)
-----------------
* multiprocessor handles errors with maximum speed as all processes share error_event
* multichannel_plots assume fitrst fimension is the channels not the last 
* printprogress as iterator does not take the first __next__ as a tick
* log_imshow takes meaningful input sizes to make one frame
* log_imshow_by_subplots can put images in different places
* log_imshow_series is the new name of the log_canvas
* if there are multiple images the shape should be n_f x n_r x n_c
* tests are added for all functions
* tests for lognflow.utils is added

0.10.4 (2023-10-12)
-----------------
* get_flist returns whatever search pattern means for .glob
* plt_tight_layout is removed and replaced by bbox
* You can get name from file when file is within the log_dir root

0.10.5 (2023-10-18)
-----------------
* Added new files for readthedocs
* copy() checks for proper use of arguments
* __call__ returns fpath
* loopprocessor is added

0.10.6 (2023-10-19)
-----------------
* bugs fixed in multiprocessor and loopprocessor
* tests added

0.10.7 (2023-11-01)
-----------------
* multiprocessor_gen is a generator that yields the list of arrived results
* get_flist and thus get_single do not put asterisks on their own.

0.10.8 (2023-11-03)
------------------
* a bug fixed in get_flist

0.10.9 (2023-12-01)
------------------
* a bug fixed in name generator when suffix is given
* copy returns destination path
* exists_ok can be given to make the log_dir of lognflow
* added get_namelist and its test
* bug fixed in plt_utils
* plt_imshow added to plt_utils

0.10.10 (2024-01-30)
------------------
* rgb2hsv is added
* plt_imshow supports complex color map and is bug free
* added printprogress to loopprocessor

0.11.0 (2024-02-25)
------------------
* is_builtin_collection is added for multiprocessor concatenation
* setting time_tag to 'counter' or 'counter&time' will count filenames instead of time
* plt_violinplot was added
* plt_imhist is added 

0.11.1 (2024-03-26)
------------------
* plt_imshow_by_subplots takes stacks as well now.
* log_code is added, pass __file__ for current script to be logged.
* multiple plt_imhist is possible

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/arsadri/lognflow",
    "name": "lognflow",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "lognflow",
    "author": "Alireza Sadri",
    "author_email": "arsadri@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/d3/d6/3c320b06f297dfa23f01c03d2abca33ae3701557067ae3ba82818924a8fc/lognflow-0.11.1.tar.gz",
    "platform": null,
    "description": "lognflow\n========\n\nLog and Flow tracking made easy with Python. You can install it by::\n\n\tpip install lognflow\n\nA simple program to use it would be similar to the following::\n\n\tfrom lognflow import lognflow\n\timport numpy as np\n\t\n\tdata = np.random.rand(100)\n\n\tlogger = lognflow(r'c:\\all_logs\\\\')\n\tlogger('This is a test for lognflow and log_single')\n\tlogger.log_single('data', data)\n\nThe logviewer is also very useful::\n\n\tfrom lognflow import logviewer\n\tlogged = logviewer(r'c:\\all_logs\\some_log\\\\')\n\tdata = logged.get_single('data')\n\nThe printprogress makes a pretty nice progress bar::\n\n\tfrom lognflow import printprogress\n\tN = 100\n\tpbar = printprogress(N)\n\tfor _ in range(N):\n\t\t# do_something()\n\t\tpbar()\n\t\t\nThere is also a conviniant way to use multiprocessing in Python. You wish to \nprovide a function name, iterable inputs and shared inputs. Then ask \nto run the function over the iterable inputs using multiprcessing. Then\nThe multiprocessor is for you. The following is a cross-correlation of two\nmasked verctors using a given ststistical function::\n\n\tfrom lognflow import multiprocessor\n\t\n\tdef masked_cross_correlation(inputs_to_iter_sliced, inputs_to_share):\n\t\t\"\"\" Calculate the correlation of two masked vectors, then use a given\n\t\t\tstatsitcal function to get the stat of the correlation.\n\t\t\"\"\"\n\t    vec1, vec2 = inputs_to_iter_sliced\n\t    mask, statistics_func = inputs_to_share\n\t    vec1 = vec1[mask==1]\n\t    vec2 = vec2[mask==1]\n\t    vec1 -= vec1.mean()\n\t    vec1_std = vec1.std()\n\t    if vec1_std > 0:\n\t        vec1 /= vec1_std\n\t    vec2 -= vec2.mean()\n\t    vec2_std = vec2.std()\n\t    if vec2_std > 0:\n\t        vec2 /= vec2_std\n\t    correlation = vec1 * vec2\n\t    to_return = statistics_func(correlation)\n\t    return(to_return)\n\t    \n\t\n\tif __name__ == '__main__':\n\t    data_shape = (1000, 2000)\n\t    data1 = np.random.randn(*data_shape)\n\t    data2 = 2 + 5 * np.random.randn(*data_shape)\n\t    mask = (2*np.random.rand(data_shape[1])).astype('int')\n\t    statistics_func = np.median\n\t    \n\t    inputs_to_iter = (data1, data2)\n\t    inputs_to_share = (mask, statistics_func)\n\t    ccorr = multiprocessor(masked_cross_correlation, \n\t    \t\t\t\t\t   inputs_to_iter, \n\t    \t\t\t\t\t   inputs_to_share)\n\t    print(f'ccorr: {ccorr}')\n\nIn this package we use a folder on the HDD to generate files and folders in typical\nformats such as numpy npy and npz, png, ... to log. A log viewer is also availble\nto turn an already logged flow into variables. Obviously, it will read the folders \nand map them for you, which is something you could spend hours to do by yourself.\nAlso there is the nicest progress bar, that you can easily understand\nand use or implement yourself when you have the time.\n\nLooking at most logging packages online, you see that you need to spend a lot of time\nlearning how to use them and realizing how they work. Especially when you have to deal\nwith http servers and ... which will be a huge pain when working for companies\nwho have their own HPC. \n\nThis is why lognflow is handy and straight forward.\n\nMany tests are avialable in the tests directory.\n\n* Free software: GNU General Public License v3\n* Documentation: https://lognflow.readthedocs.io.\n\nFeatures\n--------\n\n* lognflow puts all the logs into a directory on your pc\n* lognflow makes it easy to log text or simple plots.\n* logviewer makes it easy to load variables or directories\n* printprogress is one of the best progress bars in Python.\n\nCredits\n^^^^^^^^\n\nThis package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.\n\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage\n\n\nHistory\n=======\n\n0.1.0 (2022-11-16)\n------------------\n\n* First release on PyPI.\n\n0.3.0 (2022-12-19)\n------------------\n\n* Very consistent and easy-to-handle interface\n\n0.3.2 (2022-12-27)\n------------------\n\n* log your dictionary.\n\n0.5.2 (2023-01-11)\n------------------\n\n* logger call takes txt only for the main_log\n* main_log name can have no time_stamp\n* All logs can be force_flush = True.\n* __del__ is well implemented.\n\n0.5.3 (2023-03-19)\n------------------\n\n* use logger.log_single('aName', aDict) to save a dictionary using numpy.savez\n* time_in_file_name has been changed to time_tag, sorry there! but early stages.\n* time_tag is True in the constructor, but could always be set to False\n* All tests passed!\n\n0.6.0 (2023-03-22)\n------------------\n* This is a stable release\n* All text files are handled by the with statement\n* Renaming bug is fixed\n* all tests run properly.\n* lognflow has all that logviewer has. We will check if dir exists at every use\n\n0.6.1 (2023-03-22)\n------------------\n* rename had a bug that is fixed\n\n0.6.2 (2023-03-25)\n------------------\n* made it possible to flush_all()\n* We support Python 3.7+ because of dataclasses\n* printprogress now can disable printing anything and return ETA at the __call__\n\n0.6.3 (2023-04-01)\n------------------\n* lognflow class does all logviewer does. Maybe it is time to remove logviewer.\n\n0.6.4 (2023-04-06)\n------------------\n* Better documentation and examples for readme\n* get_var is added to lognflow to get buffered variables logged by log_var\n\n0.6.5 (2023-04-26)\n------------------\n* Fixed a bug in the docs to allow sphinx compile it.\n* log_var will log only the valid time stamps.\n* added end keyword argument to log_text\n\n0.6.6 (2023-04-27)\n------------------\n* Better documentation\n* added tifffile imread to logviewer and imwrite to lognflow\n\n0.6.7 (2023-04-27)\n------------------\n* A bug in tifffile support was fixed\n\n0.6.8 (2023-05-04)\n------------------\n* Fixing readme for PyPI.\n* removed marker from log_plot. user marker and linestyle keyword arguments.\n* printprogress returns proper ETA every time if print_function is set to None::\n\n0.7.0 (2023-05-15)\n------------------\n* logviewer returns data by log_sigle if the full name is mentioned.\n\n0.7.1 (2023-05-22)\n------------------\n* printprogress supports lognflow.\n* bugs fixed in lognflow.\n* For now I guess lognflow and logviewer could be separate.\n\n0.7.2 (2023-05-25)\n------------------\n* bug fixed in logviewer\n* text_to_object added to logviewer to read dict or list logged via log_single\n* test pass for logviewer including the test for text_to_object\n\n0.7.3 (2023-06-01)\n------------------\n* bug fixed in logviewer in the use of suffix in get_stack_of_files\n* log_imshow takes colorbar and remove_axis_ticks flags.\n* every lognflow instance has a logviewer pointing to its log_dir called logged.\n\n0.7.4 (2023-06-26)\n------------------\n* critical bug fixed in log_imshow\n\n0.7.5 (2023-06-27)\n------------------\n* Added complex numbers to log_imshow\n\n0.7.6 (2023-07-17)\n------------------\n* printprogress can handle up to 99 days\n* log_text takes any save_as\n* If variable name has escape key is alright\n* If variable name is splitable, we replace them with _\n\n0.8.0 (2023-07-25)\n------------------\n* logger.save and savez are set to be identical to log_single.\n* logged.load is set to be identical to get_single.\n* utils.py is added to contain all misc functions.\n* replace_all added to utils\n\n0.8.1 (2023-07-26)\n------------------\n* a bug fixed in log_var\n\n0.8.2 (2023-08-02)\n------------------\n* the word save_as is now replaced with suffix as is in pathlib\n* all loggers can take the suffix as the extension in the parameter_name\n\n0.8.3 (2023-08-02)\n-----------------\n* critical bug fixed in log_var to support v0.8.2\n\n0.8.4 (2023-08-03)\n-----------------\n* variable names that are pecular will always be fixed first.\n* suffix can be read form the file name.\n* time_tag will always accompany file name unless stated otherwised.\n\n0.8.5 (2023-08-04)\n-----------------\n* Some functions can go to utils and be mentioned in the __init__\n* a bug was fixed in printprogress.\n\n0.8.6 (2023-08-04)\n-----------------\n* plt_utils was not added tp 0.8.5\n\n0.9.0 (2023-08-09)\n-----------------\n* copy() is now possible from a file or a variable name into another\n* default suffix in get_flist is *\n* logviewer.get_stack_of_files is only useful for reading data.\n* more tests are added.\n* moved multichannel_to_frame to utils\n\n0.9.1 (2023-08-25)\n-----------------\n* bug removed from plt_utils numbers_as_images_4D.\n* bug removed from printprogress when number of steps is very small.\n\n0.10.0 (2023-09-01)\n-----------------\n* I added multiprocessor to lognflow\n* bug fixed in logviewer\n\n0.10.1 (2023-09-12)\n-----------------\n* multi_channel_by_subplots bug fixed for non-square shape\n* default colormap is viridis everywhere\n* multiprocessor heavily debugged and made a lot easier to use\n* better tests added for multiprocessor\n\n0.10.2 (2023-10-04)\n-----------------\n* printprogress can be used as an iterator, test added\n* time_tag is False by default for copy()\n* to log MATLAB files, input must be a dictionary.\n* bug fixed in get_flist to return dirs only as well\n* all new features for Python 3.10 onwards are removed.\n\n0.10.3 (2023-10-09)\n-----------------\n* multiprocessor handles errors with maximum speed as all processes share error_event\n* multichannel_plots assume fitrst fimension is the channels not the last \n* printprogress as iterator does not take the first __next__ as a tick\n* log_imshow takes meaningful input sizes to make one frame\n* log_imshow_by_subplots can put images in different places\n* log_imshow_series is the new name of the log_canvas\n* if there are multiple images the shape should be n_f x n_r x n_c\n* tests are added for all functions\n* tests for lognflow.utils is added\n\n0.10.4 (2023-10-12)\n-----------------\n* get_flist returns whatever search pattern means for .glob\n* plt_tight_layout is removed and replaced by bbox\n* You can get name from file when file is within the log_dir root\n\n0.10.5 (2023-10-18)\n-----------------\n* Added new files for readthedocs\n* copy() checks for proper use of arguments\n* __call__ returns fpath\n* loopprocessor is added\n\n0.10.6 (2023-10-19)\n-----------------\n* bugs fixed in multiprocessor and loopprocessor\n* tests added\n\n0.10.7 (2023-11-01)\n-----------------\n* multiprocessor_gen is a generator that yields the list of arrived results\n* get_flist and thus get_single do not put asterisks on their own.\n\n0.10.8 (2023-11-03)\n------------------\n* a bug fixed in get_flist\n\n0.10.9 (2023-12-01)\n------------------\n* a bug fixed in name generator when suffix is given\n* copy returns destination path\n* exists_ok can be given to make the log_dir of lognflow\n* added get_namelist and its test\n* bug fixed in plt_utils\n* plt_imshow added to plt_utils\n\n0.10.10 (2024-01-30)\n------------------\n* rgb2hsv is added\n* plt_imshow supports complex color map and is bug free\n* added printprogress to loopprocessor\n\n0.11.0 (2024-02-25)\n------------------\n* is_builtin_collection is added for multiprocessor concatenation\n* setting time_tag to 'counter' or 'counter&time' will count filenames instead of time\n* plt_violinplot was added\n* plt_imhist is added \n\n0.11.1 (2024-03-26)\n------------------\n* plt_imshow_by_subplots takes stacks as well now.\n* log_code is added, pass __file__ for current script to be logged.\n* multiple plt_imhist is possible\n",
    "bugtrack_url": null,
    "license": "GNU General Public License v3",
    "summary": "Log and Flow tracking made easy with Python",
    "version": "0.11.1",
    "project_urls": {
        "Homepage": "https://github.com/arsadri/lognflow"
    },
    "split_keywords": [
        "lognflow"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7f68bf436f55553e7777ce2cd9a71f01547f86362e52d2cda2f4a057eea72901",
                "md5": "a64312a332743accaa3a7874d6634111",
                "sha256": "c7910a26c80a95bf0e6cf0645345aad25fbc209297cafd0c29b62716b5231d27"
            },
            "downloads": -1,
            "filename": "lognflow-0.11.1-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a64312a332743accaa3a7874d6634111",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.7",
            "size": 43242,
            "upload_time": "2024-03-26T00:45:42",
            "upload_time_iso_8601": "2024-03-26T00:45:42.791589Z",
            "url": "https://files.pythonhosted.org/packages/7f/68/bf436f55553e7777ce2cd9a71f01547f86362e52d2cda2f4a057eea72901/lognflow-0.11.1-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d3d63c320b06f297dfa23f01c03d2abca33ae3701557067ae3ba82818924a8fc",
                "md5": "3de8add957e374ae6f2fae4d17ac4906",
                "sha256": "bb3630e8325fa73b62f6167cab80e998305a1bdc0fefc13eb1e4a2406acdda11"
            },
            "downloads": -1,
            "filename": "lognflow-0.11.1.tar.gz",
            "has_sig": false,
            "md5_digest": "3de8add957e374ae6f2fae4d17ac4906",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 56059,
            "upload_time": "2024-03-26T00:45:44",
            "upload_time_iso_8601": "2024-03-26T00:45:44.236574Z",
            "url": "https://files.pythonhosted.org/packages/d3/d6/3c320b06f297dfa23f01c03d2abca33ae3701557067ae3ba82818924a8fc/lognflow-0.11.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-26 00:45:44",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "arsadri",
    "github_project": "lognflow",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "lognflow"
}
        
Elapsed time: 0.22444s