%global _empty_manifest_terminate_build 0 Name: python-humbug Version: 0.3.1 Release: 1 Summary: Humbug: Do you build developer tools? Humbug helps you know your users. License: Apache Software License URL: https://github.com/bugout-dev/humbug Source0: https://mirrors.nju.edu.cn/pypi/web/packages/39/88/188290a6b580b63db943bf26df716e463d6b76860827a18d82e3fabd330a/humbug-0.3.1.tar.gz BuildArch: noarch Requires: python3-requests Requires: python3-dataclasses Requires: python3-black Requires: python3-mypy Requires: python3-wheel Requires: python3-types-pkg-resources Requires: python3-types-requests Requires: python3-types-dataclasses Requires: python3-types-psutil Requires: python3-setuptools Requires: python3-twine Requires: python3-wheel Requires: python3-psutil Requires: python3-GPUtil Requires: python3-types-psutil %description # Humbug Python The Humbug Python library. ## Installation ### Using pip ```bash pip install humbug ``` ### From source Clone this repository and enter this directory. Make sure you are in your desired Python environment and then run: ```bash python setup.py install ``` ## Integration To add Humbug to your project, first create a Bugout access token and journal [following these instructions](../README.md#trying-it-out). You can follow the recipes below to integrate Humbug into your codebase: 1. [Error reporting](./recipes/error_reporting.py) 1. [System reporting](./recipes/system_reporting.py) All reports are generated (and published) by a Humbug reporter. By default, Humbug publishes all reports asynchronously and in the background. If you would like to publish selected reports synchronously, all reporter methods take a `wait=True` argument. If you plan to _only_ use a reporter synchronously or to do your own thread management, you can instantiate the reporter in synchronous mode: ```python from humbug.report import Reporter, Modes reporter = Reporter( "", client_id="", session_id="", bugout_token="", bugout_journal_id="", mode=Modes.SYNCHRONOUS, ) ``` Using Modes.SYNCHRONOUS in this manner skips the creation of the thread from which the reporter publishes reports. ### Consent Humbug cares deeply about consent. The innocuous `HumbugConsent` from the snippet above supports a wide range of consent flows. #### Opting in with environment variables For example, if you would like your users to be able to opt in by setting an environment variable `MY_APP_CONSENT=true`: ```python from humbug.consent import environment_variable_opt_in, HumbugConsent from humbug.report import Reporter consent = HumbugConsent(environment_variable_opt_in("MY_APP_CONSENT", ["true"])) reporter = Reporter( "", consent, bugout_token="", bugout_journal_id="", ) ``` If you use this configuration, unless your user uses your tool with `MY_APP_CONSENT=true`, no reports will ever get sent to your knowledge base. #### Opting out with environment variables If, [like `homebrew`](https://docs.brew.sh/Analytics#opting-out), you would like users to be able to opt out by setting an environment variable `MY_APP_NO_CONSENT=1`: ```python from humbug.consent import environment_variable_opt_out, HumbugConsent from humbug.report import Reporter consent = HumbugConsent(environment_variable_opt_out("MY_APP_NO_CONSENT", ["1"])) reporter = Reporter( "", consent, bugout_token="", bugout_journal_id="", ) ``` In this case, reports are sent by default unless the user sets `MY_APP_NO_CONSENT=1` in which case reports will never be sent. #### Composing consent mechanisms Humbug allows you to combine multiple consent mechanisms. For example: ```python from humbug.consent import environment_variable_opt_in, environment_variable_opt_out, HumbugConsent from humbug.report import Reporter consent = HumbugConsent( environment_variable_opt_in("MY_APP_CONSENT", ["true"]), environment_variable_opt_out("MY_APP_NO_CONSENT", ["1"]), ) reporter = Reporter( "", consent, bugout_token="", bugout_journal_id="", ) ``` If your users do not set `MY_APP_CONSENT` or give it a value other than `true`, Humbug won't even bother to send you any reports. If `MY_APP_CONSENT` is indeed set to `true`, but the user has set `MY_APP_NO_CONSENT=1`, then again no reports will get sent back. On the other hand, if the user has set `MY_APP_CONSENT=true` and left `MY_APP_NO_CONSENT` unset or set to a value other than `1`, Humbug will send you any reports you have configured. ### Blacklisting parameters in feature reports Arguments to functions and other callables can sometimes contain sensitive information which you may not want to include in Humbug reports. Blacklist functions allow you to specify which parameters from an argument list to filter out of your feature reports. #### `blacklist.generate_filter_parameters_by_key_fn` If you would just like to filter out all paramters with a given name, you can use the `blacklist.generate_filter_parameters_by_key_fn`. For example, to ignore all parameters named `token` (case insensitive), you would instantiate your `HumbugReporter` as follows: ```python reporter = HumbugReporter( ..., blacklist_fn=blacklist.generate_filter_parameters_by_key_fn(["token"]), ) ``` #### Custom blacklist functions You could also implement a custom blacklist function to remove all parameters that contained the substring `token` (case insensitive): ```python def blacklist_token_parameters_fn(params: Dict[str, Any]) -> Dict[str, Any]: admissible_params = {k:v for k, v in params.items() if "token" not in k} return admissible_params reporter = HumbugReporter( ..., blacklist_fn=blacklist_token_parameters_fn ) ``` ### Case study: activeloopai/deeplake [This pull request](https://github.com/activeloopai/deeplake/pull/624) shows how [Activeloop](https://www.activeloop.ai/) integrated Humbug into their popular [`deeplake`](https://github.com/activeloopai/deeplake) tool. This example shows how to use Humbug to record consent in a configuration file that the user can modify at will. It also shows how to add custom tags to your Humbug reports. %package -n python3-humbug Summary: Humbug: Do you build developer tools? Humbug helps you know your users. Provides: python-humbug BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-humbug # Humbug Python The Humbug Python library. ## Installation ### Using pip ```bash pip install humbug ``` ### From source Clone this repository and enter this directory. Make sure you are in your desired Python environment and then run: ```bash python setup.py install ``` ## Integration To add Humbug to your project, first create a Bugout access token and journal [following these instructions](../README.md#trying-it-out). You can follow the recipes below to integrate Humbug into your codebase: 1. [Error reporting](./recipes/error_reporting.py) 1. [System reporting](./recipes/system_reporting.py) All reports are generated (and published) by a Humbug reporter. By default, Humbug publishes all reports asynchronously and in the background. If you would like to publish selected reports synchronously, all reporter methods take a `wait=True` argument. If you plan to _only_ use a reporter synchronously or to do your own thread management, you can instantiate the reporter in synchronous mode: ```python from humbug.report import Reporter, Modes reporter = Reporter( "", client_id="", session_id="", bugout_token="", bugout_journal_id="", mode=Modes.SYNCHRONOUS, ) ``` Using Modes.SYNCHRONOUS in this manner skips the creation of the thread from which the reporter publishes reports. ### Consent Humbug cares deeply about consent. The innocuous `HumbugConsent` from the snippet above supports a wide range of consent flows. #### Opting in with environment variables For example, if you would like your users to be able to opt in by setting an environment variable `MY_APP_CONSENT=true`: ```python from humbug.consent import environment_variable_opt_in, HumbugConsent from humbug.report import Reporter consent = HumbugConsent(environment_variable_opt_in("MY_APP_CONSENT", ["true"])) reporter = Reporter( "", consent, bugout_token="", bugout_journal_id="", ) ``` If you use this configuration, unless your user uses your tool with `MY_APP_CONSENT=true`, no reports will ever get sent to your knowledge base. #### Opting out with environment variables If, [like `homebrew`](https://docs.brew.sh/Analytics#opting-out), you would like users to be able to opt out by setting an environment variable `MY_APP_NO_CONSENT=1`: ```python from humbug.consent import environment_variable_opt_out, HumbugConsent from humbug.report import Reporter consent = HumbugConsent(environment_variable_opt_out("MY_APP_NO_CONSENT", ["1"])) reporter = Reporter( "", consent, bugout_token="", bugout_journal_id="", ) ``` In this case, reports are sent by default unless the user sets `MY_APP_NO_CONSENT=1` in which case reports will never be sent. #### Composing consent mechanisms Humbug allows you to combine multiple consent mechanisms. For example: ```python from humbug.consent import environment_variable_opt_in, environment_variable_opt_out, HumbugConsent from humbug.report import Reporter consent = HumbugConsent( environment_variable_opt_in("MY_APP_CONSENT", ["true"]), environment_variable_opt_out("MY_APP_NO_CONSENT", ["1"]), ) reporter = Reporter( "", consent, bugout_token="", bugout_journal_id="", ) ``` If your users do not set `MY_APP_CONSENT` or give it a value other than `true`, Humbug won't even bother to send you any reports. If `MY_APP_CONSENT` is indeed set to `true`, but the user has set `MY_APP_NO_CONSENT=1`, then again no reports will get sent back. On the other hand, if the user has set `MY_APP_CONSENT=true` and left `MY_APP_NO_CONSENT` unset or set to a value other than `1`, Humbug will send you any reports you have configured. ### Blacklisting parameters in feature reports Arguments to functions and other callables can sometimes contain sensitive information which you may not want to include in Humbug reports. Blacklist functions allow you to specify which parameters from an argument list to filter out of your feature reports. #### `blacklist.generate_filter_parameters_by_key_fn` If you would just like to filter out all paramters with a given name, you can use the `blacklist.generate_filter_parameters_by_key_fn`. For example, to ignore all parameters named `token` (case insensitive), you would instantiate your `HumbugReporter` as follows: ```python reporter = HumbugReporter( ..., blacklist_fn=blacklist.generate_filter_parameters_by_key_fn(["token"]), ) ``` #### Custom blacklist functions You could also implement a custom blacklist function to remove all parameters that contained the substring `token` (case insensitive): ```python def blacklist_token_parameters_fn(params: Dict[str, Any]) -> Dict[str, Any]: admissible_params = {k:v for k, v in params.items() if "token" not in k} return admissible_params reporter = HumbugReporter( ..., blacklist_fn=blacklist_token_parameters_fn ) ``` ### Case study: activeloopai/deeplake [This pull request](https://github.com/activeloopai/deeplake/pull/624) shows how [Activeloop](https://www.activeloop.ai/) integrated Humbug into their popular [`deeplake`](https://github.com/activeloopai/deeplake) tool. This example shows how to use Humbug to record consent in a configuration file that the user can modify at will. It also shows how to add custom tags to your Humbug reports. %package help Summary: Development documents and examples for humbug Provides: python3-humbug-doc %description help # Humbug Python The Humbug Python library. ## Installation ### Using pip ```bash pip install humbug ``` ### From source Clone this repository and enter this directory. Make sure you are in your desired Python environment and then run: ```bash python setup.py install ``` ## Integration To add Humbug to your project, first create a Bugout access token and journal [following these instructions](../README.md#trying-it-out). You can follow the recipes below to integrate Humbug into your codebase: 1. [Error reporting](./recipes/error_reporting.py) 1. [System reporting](./recipes/system_reporting.py) All reports are generated (and published) by a Humbug reporter. By default, Humbug publishes all reports asynchronously and in the background. If you would like to publish selected reports synchronously, all reporter methods take a `wait=True` argument. If you plan to _only_ use a reporter synchronously or to do your own thread management, you can instantiate the reporter in synchronous mode: ```python from humbug.report import Reporter, Modes reporter = Reporter( "", client_id="", session_id="", bugout_token="", bugout_journal_id="", mode=Modes.SYNCHRONOUS, ) ``` Using Modes.SYNCHRONOUS in this manner skips the creation of the thread from which the reporter publishes reports. ### Consent Humbug cares deeply about consent. The innocuous `HumbugConsent` from the snippet above supports a wide range of consent flows. #### Opting in with environment variables For example, if you would like your users to be able to opt in by setting an environment variable `MY_APP_CONSENT=true`: ```python from humbug.consent import environment_variable_opt_in, HumbugConsent from humbug.report import Reporter consent = HumbugConsent(environment_variable_opt_in("MY_APP_CONSENT", ["true"])) reporter = Reporter( "", consent, bugout_token="", bugout_journal_id="", ) ``` If you use this configuration, unless your user uses your tool with `MY_APP_CONSENT=true`, no reports will ever get sent to your knowledge base. #### Opting out with environment variables If, [like `homebrew`](https://docs.brew.sh/Analytics#opting-out), you would like users to be able to opt out by setting an environment variable `MY_APP_NO_CONSENT=1`: ```python from humbug.consent import environment_variable_opt_out, HumbugConsent from humbug.report import Reporter consent = HumbugConsent(environment_variable_opt_out("MY_APP_NO_CONSENT", ["1"])) reporter = Reporter( "", consent, bugout_token="", bugout_journal_id="", ) ``` In this case, reports are sent by default unless the user sets `MY_APP_NO_CONSENT=1` in which case reports will never be sent. #### Composing consent mechanisms Humbug allows you to combine multiple consent mechanisms. For example: ```python from humbug.consent import environment_variable_opt_in, environment_variable_opt_out, HumbugConsent from humbug.report import Reporter consent = HumbugConsent( environment_variable_opt_in("MY_APP_CONSENT", ["true"]), environment_variable_opt_out("MY_APP_NO_CONSENT", ["1"]), ) reporter = Reporter( "", consent, bugout_token="", bugout_journal_id="", ) ``` If your users do not set `MY_APP_CONSENT` or give it a value other than `true`, Humbug won't even bother to send you any reports. If `MY_APP_CONSENT` is indeed set to `true`, but the user has set `MY_APP_NO_CONSENT=1`, then again no reports will get sent back. On the other hand, if the user has set `MY_APP_CONSENT=true` and left `MY_APP_NO_CONSENT` unset or set to a value other than `1`, Humbug will send you any reports you have configured. ### Blacklisting parameters in feature reports Arguments to functions and other callables can sometimes contain sensitive information which you may not want to include in Humbug reports. Blacklist functions allow you to specify which parameters from an argument list to filter out of your feature reports. #### `blacklist.generate_filter_parameters_by_key_fn` If you would just like to filter out all paramters with a given name, you can use the `blacklist.generate_filter_parameters_by_key_fn`. For example, to ignore all parameters named `token` (case insensitive), you would instantiate your `HumbugReporter` as follows: ```python reporter = HumbugReporter( ..., blacklist_fn=blacklist.generate_filter_parameters_by_key_fn(["token"]), ) ``` #### Custom blacklist functions You could also implement a custom blacklist function to remove all parameters that contained the substring `token` (case insensitive): ```python def blacklist_token_parameters_fn(params: Dict[str, Any]) -> Dict[str, Any]: admissible_params = {k:v for k, v in params.items() if "token" not in k} return admissible_params reporter = HumbugReporter( ..., blacklist_fn=blacklist_token_parameters_fn ) ``` ### Case study: activeloopai/deeplake [This pull request](https://github.com/activeloopai/deeplake/pull/624) shows how [Activeloop](https://www.activeloop.ai/) integrated Humbug into their popular [`deeplake`](https://github.com/activeloopai/deeplake) tool. This example shows how to use Humbug to record consent in a configuration file that the user can modify at will. It also shows how to add custom tags to your Humbug reports. %prep %autosetup -n humbug-0.3.1 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-humbug -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Mon Apr 10 2023 Python_Bot - 0.3.1-1 - Package Spec generated