Brain-brew

Latest version: v0.3.10

Safety actively analyzes 629788 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 2

0.2.5

Changes:

1. Atomisation of Build Parts

The build parts have been split up to be as atomic as possible. This will give users more control over which data they wish to use, and generally make the system more configurable and maintainable.

Old

yaml
- build_deck_parts:
- from_crowd_anki:
folder: brain_brew_build/Ultimate Geography/
notes:
part_id: standard notes
sort_order: [Country]
save_to_file: src/deck_parts/notes/english.yaml
note_models:
- part_id: Ultimate Geography
save_to_file: src/deck_parts/note_models/Ultimate Geography.yaml
headers:
part_id: default
save_to_file: src/deck_parts/headers/default.yaml
media:
from_notes: true
from_note_models: true


New
yaml
- build_parts:
- notes_from_crowd_anki:
source: brain_brew_build/Ultimate Geography/
part_id: standard notes
sort_order: [Country]
save_to_file: src/deck_parts/notes/english.yaml
- note_models_from_crowd_anki:
source: brain_brew_build/Ultimate Geography/
part_id: Ultimate Geography
save_to_file: src/deck_parts/note_models/Ultimate Geography.yaml
- headers_from_crowd_anki:
source: brain_brew_build/Ultimate Geography/
part_id: default
save_to_file: src/deck_parts/headers/default.yaml
- media_group_from_crowd_anki:
source: brain_brew_build/Ultimate Geography/
part_id: all_anki_media
- save_media_group_to_folder:
parts: [all_anki_media]
folder: src/deck_parts/media
clear_folder: false



Each build task is also override-able with a list of itself, to be concise and keep readability. As in the following example:


yaml
- note_model_templates_from_html:
part_id: Country - Capital
html_file: src/deck_parts/note_models/templates/Country - Capital.html
- note_model_templates_from_html:
part_id: Capital - Country
html_file: src/deck_parts/note_models/templates/Capital - Country.html
- note_model_templates_from_html:
part_id: Country - Flag
html_file: src/deck_parts/note_models/templates/Country - Flag.html


is equivalent to

yaml
- note_model_templates_from_html:
- part_id: Country - Capital
html_file: src/deck_parts/note_models/templates/Country - Capital.html
- part_id: Capital - Country
html_file: src/deck_parts/note_models/templates/Capital - Country.html
- part_id: Country - Flag
html_file: src/deck_parts/note_models/templates/Country - Flag.html


The more entries you have, the better it is to group them together as a list. Though it is entirely optional.

---

- Note Model can now be created from individual CSS and Html files using the new `note_model_from_html_parts` and `note_model_templates_from_html` part builders.

Note Templates are made up of a single Html, with a `--` as a separator for the front and back template.

html
{{Front}}

--

{{Back}}


And that is read in like so:

yaml
- note_model_templates_from_html:
- part_id: Country - Capital
html_file: src/deck_parts/note_models/templates/Country - Capital.html
- part_id: Capital - Country
html_file: src/deck_parts/note_models/templates/Capital - Country.html
browser_html_file: otherfile.html
template_name: override_name_for_template_that_isnt_the_part_name


yaml
- note_model_from_html_parts:
part_id: Ultimate Geography
model_name: Ultimate Geography
model_id: 43e2586a-9a65-11e8-a777-a0481cc15658
css_file: src/deck_parts/note_models/style.css <------------ CSS File
fields:
- name: Country
font: Arial
- name: Country info
font: Arial
- name: Capital
font: Arial
- name: Capital info
font: Arial
- name: Capital hint
font: Arial
- name: Flag
font: Arial
- name: Flag similarity
font: Arial
- name: Map
font: Arial
templates: <-------------- List of templates created in previous step
- Country - Capital
- Capital - Country
- Country - Flag
- Country - Map



This allows for a lot of flexibility in with which templates or fields to use.


---

- Similar to above, Deck Description can now be taken from a HTML file

yaml
- headers_from_yaml_part:
- part_id: default header
file: src/deck_parts/headers/default.yaml
override:
deck_description_html_file: src/deck_parts/headers/desc.html <------ Html file


---

- Media Group is now a build part, which can read all the files from any arbitrary folder. It also supports recursion, to find files in any subfolders, as well as a whitelist / blacklist optional filter which takes any previously created Media Group

yaml
- media_group_from_folder:
- part_id: all_media
source: src/deck_parts/media
recursive: true
filter_whitelist_from_parts: other_part_name


´crowdanki_generate` now takes a list of MediaGroups which are combined and added into the Crowd Anki Export.

---

2. [Yamale](https://github.com/23andMe/Yamale) is now used for Yaml Validation for user written recipes. This will give users much better feedback if their Yaml is incorrect (not what Brain Brew was expecting). Validation is run before any recipe parts are executed, and can be done exclusively using the `-v` option, so no recipes should break mid-run.

<details>
<summary>What this means for contributors (Click!)</summary>

Contributors who wish to make their own deck parts and have them be recognised as build tasks can simply:


1. Choose whether your task is a `TopLevelBuildTask` or `BuildPartTask`
- Create a new class which inherits that task type
- Add your new class to the `yamale_dependencies` of that Task type
- Implement the below functions, which are required by the parent
- `task_regex` is optional, if one wishes to have multiple matches for your task name. The above `task_name` will be used instead if it does not exist.
- `yamale_dependencies` is also optional, but should be used if your `yamale_schema` contains any other Yaml objects. Items here will be included automatically in any other task that uses your task.
2. Run the `scripts/yamale_build.py` script. This will add your yamale schema (and all of it's dependencies) into the `schemas/recipes.yaml` file, which contains the commands recognised by the Yamale validation.

E.g. class:

python
dataclass
class NotesFromCsvs(SharedBaseCsvs, BuildPartTask):
classmethod
def task_name(cls) -> str:
return r'notes_from_csvs'

classmethod
def task_regex(cls) -> str:
return r'notes_from_csv[s]?'

classmethod
def yamale_schema(cls) -> str:
return f'''\
part_id: str()
save_to_file: str(required=False)
note_model_mappings: list(include('{NoteModelMapping.task_name()}'))
file_mappings: list(include('{FileMapping.task_name()}'))
'''

classmethod
def yamale_dependencies(cls) -> set:
return {NoteModelMapping, FileMapping}



</details>

---

Install with Pip from PyPi: https://pypi.org/project/Brain-Brew/0.2.4/
Created with the support of [my lovely Patreons](https://www.patreon.com/jmohare?fan_landing=true).
<a title="Support a fellow Weekend Warrior on Patreon" href="https://www.patreon.com/jmohare?fan_landing=true"><img src="https://img.shields.io/badge/patreon-support-%23f96854.svg"></a>
<a title="Buy me a cuppa tea" href="https://ko-fi.com/brainbrew"><img src="https://img.shields.io/badge/ko--fi-contribute-%23579ebd.svg"></a>

0.2.4

Bugfix:

* Fixed creation of missing directories 12 (Credit: aplaice)

Changes:

* `Builder files` are now known as `Recipes`
* The Deck Part `name` key has been renamed to `part_id`



Install with Pip from PyPi: https://pypi.org/project/Brain-Brew/0.2.4/
Created with the support of [my lovely Patreons](https://www.patreon.com/jmohare?fan_landing=true).
<a title="Support a fellow Weekend Warrior on Patreon" href="https://www.patreon.com/jmohare?fan_landing=true"><img src="https://img.shields.io/badge/patreon-support-%23f96854.svg"></a>
<a title="Buy me a cuppa tea" href="https://ko-fi.com/brainbrew"><img src="https://img.shields.io/badge/ko--fi-contribute-%23579ebd.svg"></a>

0.2.2

Various bug fixes.

- Fixed install requirement of Ruamel
- DeckParts not read until Execute
- Fixed Task name regex
- Missing optionals for some fields
- Create missing files/dirs in more places


Install with Pip from PyPi: https://pypi.org/project/Brain-Brew/0.2.2/
Created with the support of [my lovely Patreons](https://www.patreon.com/jmohare?fan_landing=true).
<a title="Support a fellow Weekend Warrior on Patreon" href="https://www.patreon.com/jmohare?fan_landing=true"><img src="https://img.shields.io/badge/patreon-support-%23f96854.svg"></a>
<a title="Buy me a cuppa tea" href="https://ko-fi.com/brainbrew"><img src="https://img.shields.io/badge/ko--fi-contribute-%23579ebd.svg"></a>

0.2.1

Install with Pip from PyPi: https://pypi.org/project/Brain-Brew/0.2.1/

The end result will be the same, though the builder file structure has changed significantly (for the better). The project is now much more object orientation and has *a somewhat planned structure!* :sweat_smile: :wink: rather than the hodgepodge that I originally created :scream:

**Hopefully this will make it easier for others to add their own changes!**

Changes include:
* Json representatons refactored to Yaml
* CrowdAnki files have their own Yaml representations and classes
* No longer needs to write DeckParts to a file (but still can, as Yaml)
* A file and path will be automatically created where they do not yet exist on write
* Yaml verification using Yamale

Created with the support of [my lovely Patreons](https://www.patreon.com/jmohare?fan_landing=true).
<a title="Support a fellow Weekend Warrior on Patreon" href="https://www.patreon.com/jmohare?fan_landing=true"><img src="https://img.shields.io/badge/patreon-support-%23f96854.svg"></a>
<a title="Buy me a cuppa tea" href="https://ko-fi.com/brainbrew"><img src="https://img.shields.io/badge/ko--fi-contribute-%23579ebd.svg"></a>

Page 2 of 2

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.