-
Notifications
You must be signed in to change notification settings - Fork 229
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Skip assignment and return expression directly * Simplify get_bom_index() parameters - Use the actual BOM as first parameter instead of the whole harness. - Use a whole AdditionalComponent as second parameter instead of each attribute separately. * Use the same lambda in get_bom_index() as for deduplicating BOM Move the lambda declaration out of the function scope for common access from two different functions. * Convert dataclass object to dict to use the same lambda * Redefine the common lambda to an ordinary function * Simplify BOM header row logic * Simplify collecting designators for a joined BOM entry Assign input designators once to a temporary variable for easy reusage. * Simplify deduplication and sorting of collected designators * Remove parentheses around return expressions https://stackoverflow.com/questions/4978567/should-a-return-statement-have-parentheses * Move out code from inner loop into helper functions * Move BOM sorting above grouping to use groupby() - Use one common entry loop to consume iterator only once. - Use same key function for sort() and groupby(), except replace None with empty string when sorting. * Make the BOM grouping function return string tuple for sorting * Use a generator expressions and raise exception if failing Seems to be the most popular search alternative: https://stackoverflow.com/questions/8653516/python-list-of-dictionaries-search Raising StopIteration if not found is better than returning None to detect such an internal error more easily. * Replace accumulation loop with sum expressions Make a list from the group iterator for reusage in sum expressions and to pick first group entry. The expected group sizes are very small, so performance loss by creating a temporary list should be neglectable. Alternativly, itertools.tee(group, 3) could be called to triplicate the iterator, but it was not chosen for readability reasons. * Add function type hints and doc strings * Add BOMEntry type alias This type alias describes the possible types of keys and values in the dict representing a BOM entry. * Rename extra variable to part for consistency * Build output string in one big expression Build output string in component_table_entry() as the similar strings in generate_bom(). Repeating a couple of minor if-expressions is small cost to obtain a more compact and readable main expression. * Move default qty value=1 to BOM deduplication * Eliminate local variable * Rename the 'item' key to 'description' in all BOMEntry dicts This way, both BOM and harness.additional_bom_items uses the same set of keys in their dict entries. This was originally suggested in a #115 review, but had too many issues to be implemented then. * Move repeated code into new optional_fields() function * Group common function arguments into a dict * Revert "Use a generator expressions and raise exception if failing" This reverts commit 96d393d. However, raising an exception if failing the BOM index search is still wanted, so a custom exception is raised instead of returning None. * Use new BOMKey type alias for get_bom_index() target argument Replace the get_bom_index() part argument with the target key argument to prepare for quering any BOM entry that matches the target key. * Cache the BOM entry key in the entry itself * Rename bom_types_group() to bom_entry_key() * Define tuples of BOM columns as common constants * Clarify a comment * Change BOM heading from `Item` to `Description` Co-authored-by: kvid <[email protected]> Co-authored-by: Daniel Rojas <[email protected]>
- Loading branch information
1 parent
cf91977
commit 31d55ff
Showing
1 changed file
with
104 additions
and
92 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters