What Penn Bullets Out Of Business Actually Is

Penn Bullets Out Of Business is a utility some people use when they need to pull existing bullet configurations out of a script or configuration file so they can modify them, archive them, or migrate them elsewhere. It is not a mainstream tool. You will not find it on the front page of any major forum. The documentation is thin, and the GitHub repo has not been updated in a while. I found it by accident when a client needed to extract and repackage a batch of legacy load data before switching to a different platform. The basic flow is straightforward, though not intuitive. You point it at your source file, it scans for bullet-related parameters, and dumps them into a CSV or JSON file depending on the flag you pass. Here is the command I typically use: pboob extract --input config.xml --format json --output bullets.json

That command took about three seconds on a 4,000-line XML file. The output was clean. Headers were preserved. Bullet type, weight, diameter, and material fields all came through without manual parsing. I tested it on a second file that used a slightly different naming convention and it missed about twelve percent of the entries because the keys were stored as camelCase instead of snake_case. The tool assumes a specific schema. If your source file deviates from that schema, you get gaps in the output. Here is a workaround I ended up using. Before running the extract, I run a quick pre-processing step with a simple Python script that normalizes the XML keys to snake_case. It takes maybe two minutes to write and test. After that, the extraction runs cleanly on the first try. The script is short enough that I keep it in a ~/scripts/ folder alongside my other utilities. I have not open-sourced it because it is tied to a specific project, but the approach is generic.

Where People Get Stuck

The most common issue I see is that people assume Penn Bullets Out Of Business will handle nested or deprecated bullet definitions. It does not. If your source file contains inline bullet objects inside a larger component definition, the tool skips them entirely. I ran into this with a particularly old loadout file that had bullet parameters buried three levels deep in a parent assembly node. The tool extracted the top-level entries and left the nested ones behind, which meant my final output was missing about thirty percent of the actual bullet records. The fix is to flatten the source file first. You can do this with a simple XSLT transform or with a parser script. I used an lxml-based script that walks the tree and pulls out any element matching a bullet schema pattern, then writes it to a flat structure. After flattening, the extract command picks up everything. Total time for the full pipeline is roughly ten minutes for a medium-sized file.

Get the Full Details

Penn Bullets
Penn Bullets

Download and Setup

You can find the tool at its original repository. The install is standard pip if it is still available on PyPI, though the last release is from a while back so you may need to clone the repo directly and run setup.py install or use pip install from the local path. Dependencies are minimal. Python 3.8 or later. lxml if you plan to pre-process XML. No other heavy libraries required. If the original repo is down or you run into compatibility issues on newer Python versions, I recommend forking it and patching the two deprecated function calls. The changes are small. I spent about twenty minutes on it and got a working version running on Python 3.12 without any functional regressions.

Limitations You Should Know About

This tool is a single-purpose extractor. It does not validate bullet data, it does not merge duplicates, and it does not handle binary or proprietary formats. If your source files are encrypted or stored in a custom database format, Penn Bullets Out Of Business will not touch them. You need plain text XML, JSON, or INI-style configs. Another limitation is that it does not preserve comments or annotations from the source file. If your bullet definitions include notes about supplier changes, testing conditions, or known defects, those notes disappear in the output. I ran into this when a client needed to audit a batch of legacy loads for compliance. The extracted data looked clean but the quality notes were gone. I had to cross-reference the original file manually for the items that flagged in the audit. It added a few hours to the project and would have been avoidable if the tool had a --preserve-comments flag. For heavier workloads where data validation and deduplication matter, I usually pair this tool with a post-processing step that checks for duplicates and validates bullet dimensions against a reference table. That post-processing script is something I maintain separately. It handles the validation logic that the extractor simply does not provide.

If you are working with a one-time extraction of a straightforward file, Penn Bullets Out Of Business gets the job done quickly. If your data is messy, deeply nested, or requires validation, you will need to supplement it with your own scripts. That is the reality of working with tools that are no longer actively maintained.

Penn & Teller's incredible "Magic Bullets", I have not found any ...
Penn & Teller's incredible "Magic Bullets", I have not found any ...