beerxml2md 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #!/usr/bin/env python2
  2. # -*- coding: utf-8 -*-
  3. from __future__ import print_function
  4. import os
  5. import sys
  6. import json
  7. import logging
  8. from xmlutils.xml2json import xml2json
  9. logging.basicConfig(level=logging.INFO)
  10. LOG = logging.getLogger()
  11. def get_fermentables(ferms):
  12. ret = []
  13. row = "* {0:10} {1:10}"
  14. for ferm in ferms:
  15. try:
  16. ret.append(
  17. row.format(ferm["DISPLAY_AMOUNT"], ferm["NAME"]))
  18. except KeyError:
  19. ret.append(
  20. row.format(ferm["AMOUNT"], ferm["NAME"]))
  21. return "\n".join(ret)
  22. def get_hops(hops):
  23. ret = []
  24. row = "* {0:10} {1:20} {2:10} {3} min"
  25. for hop in hops:
  26. try:
  27. ret.append(
  28. row.format(hop["DISPLAY_AMOUNT"],
  29. hop["NAME"], hop["USE"],
  30. hop["TIME"]))
  31. except KeyError:
  32. ret.append(
  33. row.format(hop["AMOUNT"],
  34. hop["NAME"], hop["USE"],
  35. hop["TIME"]))
  36. return "\n".join(ret)
  37. def get_yeast(yeast):
  38. ret = []
  39. row = "* {0:20} {1:20}"
  40. try:
  41. ret.append(
  42. row.format(yeast["LABORATORY"], yeast["NAME"]))
  43. except KeyError:
  44. pass
  45. return "\n".join(ret)
  46. def format_output(recipe):
  47. fermentable_list = []
  48. hop_list = []
  49. yeast_list = {}
  50. fermentables = recipe.get('FERMENTABLES')
  51. hops = recipe.get('HOPS')
  52. yeasts = recipe.get('YEASTS')
  53. if fermentables:
  54. fermentable_list = fermentables.get('FERMENTABLE', [])
  55. if hops:
  56. hop_list = hops.get('HOP', [])
  57. if yeasts:
  58. yeast_list = yeasts.get('YEAST', {})
  59. output = """{name}
  60. ===
  61. Recipe Specifics
  62. ---
  63. Batch Size (G): {batch_size}
  64. Boil Time (min): {boil}
  65. Efficiency: {eff}%
  66. Grain/Extract/Sugar
  67. ---
  68. {fermentables}
  69. Hops
  70. ---
  71. {hops}
  72. Yeast
  73. ---
  74. {yeast}
  75. """
  76. print(output.format(**{
  77. "name": recipe.get('NAME', 'Unname Recipe'),
  78. "batch_size": round(float(recipe.get('BATCH_SIZE', 0)) * 0.264172),
  79. "boil": recipe.get('BOIL_TIME', '0'),
  80. "eff": 10,
  81. "fermentables": get_fermentables(fermentable_list),
  82. "hops": get_hops(hop_list),
  83. "yeast": get_yeast(yeast_list),
  84. }))
  85. def main(xmlfile):
  86. if not os.path.isfile(xmlfile):
  87. logging.warn('%s is not a file', xmlfile)
  88. return 1
  89. converter = xml2json(xmlfile, encoding="utf-8")
  90. recipes = json.loads(converter.get_json())
  91. format_output(recipes["RECIPES"]["RECIPE"])
  92. if __name__ == "__main__":
  93. sys.exit(main(sys.argv[1]))