def handle(self, *args, **options): tap_list_provider = DigitalPourParser() with transaction.atomic(): for venue in tap_list_provider.get_venues(): self.stdout.write('Processing %s' % venue.name) tap_list_provider.handle_venue(venue) self.stdout.write(self.style.SUCCESS('Done!'))
def handle(self, *args, **options): if not BeerStyle.objects.exists(): raise ValueError('You must import BJCP styles before continuing') tap_list_provider = DigitalPourParser() with transaction.atomic(): for venue in tap_list_provider.get_venues(): self.stdout.write('Processing %s' % venue.name) tap_list_provider.handle_venue(venue) self.stdout.write(self.style.SUCCESS('Done!'))
def handle(self, *args, **options): tap_list_provider = DigitalPourParser() with transaction.atomic(): for venue in tap_list_provider.get_venues(): self.stdout.write("Processing %s" % venue.name) timestamp = tap_list_provider.handle_venue(venue) tap_list_provider.update_venue_timestamps(venue, timestamp) self.stdout.write(self.style.SUCCESS("Done!"))
def test_digital_pour_mead(self): tap = { 'Id': '5c9e54953527260f6c040dc1', 'MenuItemDisplayDetail': { '$type': 'BeerDashboard.Common.Models.Tap, BeerDashboard.Common', # noqa 'BeverageType': None, 'TapType': 'CO2', 'NonRotating': False, 'HasMeasuringSystem': False, 'ParentTapId': None, 'Material': None, 'LineDrop': None, 'LineLength': None, 'LineDiameter': None, 'CO2Mix': None, 'NitroMix': None, 'PSI': None, 'Id': '58882be35e002c105cb7e4bc', 'CompanyId': '57b130dd5e002c0388f8b686', 'CompanyName': 'Wish You Were Beer', 'LocationId': '2', 'LocationName': 'Campus 802', 'ItemType': 'Tap', 'DisplayName': '37', 'DisplayOrder': 37, 'DisplayLogoUrl': None, 'DisplayGroup': None, 'CostCenter': None, 'NotInUse': False, 'StorageLocation': { 'CompanyId': '57b130dd5e002c0388f8b686', 'CompanyName': None, 'LocationId': '2', 'LocationName': 'Campus 802', 'IsUsable': True, 'DefaultKegLocation': True, 'TemperatureSensorId': None, 'Temperature': 0.0, 'Id': '58882a955e002c105cb7e4ad', 'StorageLocationName': 'Cooler', }, 'ProductId': 'H9V0TYD4QY5PT', 'MeasuringSystemMappingId': None, 'EventTableId': None, 'TemperatureSensorId': None, 'Temperature': 0.0, 'IsDirty': False, }, 'MenuItemProductDetail': { '$type': 'BeerDashboard.Common.Models.Keg, BeerDashboard.Common', 'KegSize': 661.0, 'KegType': 'CO2', 'Coupler': 'US Sankey (D)', 'BatchId': None, 'DateKegged': None, 'KegId': None, 'InitialOuncesConsumed': 153.0, 'SamplesPoured': 0, 'SampleSize': 0.0, 'OuncesConsumed': 196.0, 'PercentFull': 0.7034795763993948, 'UseMeasuredValues': False, 'PosReportedOuncesConsumed': 196.0, 'PosReportedPercentFull': 0.7034795763993948, 'MeasuredOuncesConsumed': 0.0, 'MeasuredPercentFull': 0.0, 'ShellReturnedToDistributor': False, 'ShellReturnDate': None, 'DaysOn': 9, 'TimeOn': 4067.541096066667, 'AllowedTaps': None, 'PercentConsumedBySamples': 0.0, 'EstimatedOzLeft': 465.0, 'HasRestrictions': False, 'RestrictedReplacementsList': None, 'EstimatedKegLeftDuration': '6.16:50:00', 'AvailableInBottles': False, 'MoreKegsAvailable': False, 'Id': '6d22daf4-3c68-4986-8f32-f57f6e421569', 'BeverageType': 'Mead', 'Beverage': { '$type': 'BeerDashboard.Common.Models.MeadModels.Mead, BeerDashboard.Common', # noqa 'BeverageName': 'Passion Fruit Nectar', 'Meadery': { 'MeaderyName': 'Redstone', 'MeaderyUrl': 'http://www.redstonemeadery.com/', 'CultureSpecificMeaderyNames': {}, 'CultureSpecificLocationNames': {}, 'ProducerName': 'Redstone', 'SimplifiedProducerName': 'redstone', 'CultureAwareMeaderyName': 'Redstone', 'CultureAwareLocationName': 'Boulder, CO', 'Id': '52d89988fb890c01246b7835', 'FullProducerName': None, 'Location': 'Boulder, CO', 'ProducersUrl': None, 'LogoImageUrl': 'https://s3.amazonaws.com/digitalpourproducerlogos/52d89988fb890c01246b7835.png', # noqa 'TwitterName': '@RedstoneMeadery', 'Latitude': 0.0, 'Longitude': 0.0, 'DefaultKegSize': 1984.0, 'DefaultKegCoupler': 'US Sankey (D)', 'CompanyId': None, 'IsAmateur': False, 'AlternateLocations': [], }, 'Collaborators': [], 'MeadName': 'Passion Fruit Nectar', 'MeadStyle': { 'Id': '52d70daffb890c0f449213d0', 'StyleName': 'Session Mead', 'ParentId': None, 'ParentIds': ['52d5e81cfb890c047453c782'], 'Color': 15586620, 'RecommendedCO2Mix': None, 'RecommendedNitroMix': None, 'RecommendedPSI': None, 'RecommendedCO2ContentLow': None, 'RecommendedCO2ContentHigh': None, 'CultureSpecificStyleNames': {}, 'CultureAwareStyleName': 'Session Mead', }, 'StyleVariation': 'w/ Passionfruit', 'StyleVariationPrefix': None, 'Dryness': None, 'BarrelAging': None, 'HoneyUsed': None, 'HopsUsed': None, 'Abv': 8.0, 'OriginalGravity': None, 'FinalGravity': None, 'Attributes': None, 'MeadUrl': None, 'CultureSpecificMeadNames': {}, 'RateBeerUrl': None, 'BeerAdvocateUrl': None, 'UntappdUrl': None, 'CollaboratorList': '', 'BeverageProducer': { '$type': 'BeerDashboard.Common.Models.MeadModels.Meadery, BeerDashboard.Common', # noqa 'MeaderyName': 'Redstone', 'MeaderyUrl': 'http://www.redstonemeadery.com/', 'CultureSpecificMeaderyNames': {}, 'CultureSpecificLocationNames': {}, 'ProducerName': 'Redstone', 'SimplifiedProducerName': 'redstone', 'CultureAwareMeaderyName': 'Redstone', 'CultureAwareLocationName': 'Boulder, CO', 'Id': '52d89988fb890c01246b7835', 'FullProducerName': None, 'Location': 'Boulder, CO', 'ProducersUrl': None, 'LogoImageUrl': 'https://s3.amazonaws.com/digitalpourproducerlogos/52d89988fb890c01246b7835.png', # noqa 'TwitterName': '@RedstoneMeadery', 'Latitude': 0.0, 'Longitude': 0.0, 'DefaultKegSize': 1984.0, 'DefaultKegCoupler': 'US Sankey (D)', 'CompanyId': None, 'IsAmateur': False, 'AlternateLocations': [], }, 'BeverageStyle': { '$type': 'BeerDashboard.Common.Models.MeadModels.MeadStyle, BeerDashboard.Common', # noqa 'Id': '52d70daffb890c0f449213d0', 'StyleName': 'Session Mead', 'ParentId': None, 'ParentIds': ['52d5e81cfb890c047453c782'], 'Color': 15586620, 'RecommendedCO2Mix': None, 'RecommendedNitroMix': None, 'RecommendedPSI': None, 'RecommendedCO2ContentLow': None, 'RecommendedCO2ContentHigh': None, 'CultureSpecificStyleNames': {}, 'CultureAwareStyleName': 'Session Mead', }, 'FullMeaderyList': 'Redstone', 'ResolvedLogoImageUrl': 'https://s3.amazonaws.com/digitalpourproducerlogos/52d89988fb890c01246b7835.png', # noqa 'FullStyleName': 'Session Mead w/ Passionfruit', 'ExpandedStyleName': 'Session Mead w/ Passionfruit', 'StyleColor': 15586620, 'CultureAwareBeverageName': 'Passion Fruit Nectar', 'FullProducerList': 'Redstone', 'Id': '55c10a285e002c0bd4aa38d7', 'LogoImageUrl': None, 'CO2Content': None, 'CaloriesPerOz': None, 'CustomDescription': None, 'CustomStyle': None }, 'DateProduced': '0001-01-01T00:00:00Z', 'Year': 2019, 'BeverageCategory': 'Craft', 'BeverageCategoryLogoUrl': None, 'Attributes': [], 'CustomBeverageIcon': None, 'HasVintage': False, 'Prices': [ { 'Id': 'T', 'Size': 5.0, 'Price': 4.5, 'DisplayName': '5oz', 'DisplaySize': 5.0, 'PosModifier': 'AH4XB7W61363G', 'SizeInPos': None, 'UPCCode': None, 'CostCenter': None, 'Glassware': 'Taster', 'DisplayOnMenu': True, 'Deactivated': False, }, { 'Id': 'B', 'Size': 9.5, 'Price': 8.0, 'DisplayName': '10oz', 'DisplaySize': 10.0, 'PosModifier': '0VP4K444GFZV4', 'SizeInPos': None, 'UPCCode': None, 'CostCenter': None, 'Glassware': 'Half Snifter', 'DisplayOnMenu': True, 'Deactivated': False, }, { 'Id': 'C', 'Size': 35.2, 'Price': 20.0, 'DisplayName': '32oz', 'DisplaySize': 32.0, 'PosModifier': 'HSA294Z3N388A', 'SizeInPos': None, 'UPCCode': None, 'CostCenter': None, 'Glassware': 'Growler (Small)', 'DisplayOnMenu': False, 'Deactivated': False, }, { 'Id': 'D', 'Size': 70.4, 'Price': 40.0, 'DisplayName': '64oz', 'DisplaySize': 64.0, 'PosModifier': 'W517XXS16C6JT', 'SizeInPos': None, 'UPCCode': None, 'CostCenter': None, 'Glassware': 'Growler', 'DisplayOnMenu': True, 'Deactivated': False, }, ], 'EventPrices': [ { 'Id': 'T', 'Size': 5.0, 'Price': 4.5, 'DisplayName': '5oz', 'DisplaySize': 5.0, 'PosModifier': 'AH4XB7W61363G', 'SizeInPos': None, 'UPCCode': None, 'CostCenter': None, 'Glassware': 'Taster', 'DisplayOnMenu': True, 'Deactivated': False, }, { 'Id': 'B', 'Size': 9.5, 'Price': 7.0, 'DisplayName': '10oz', 'DisplaySize': 10.0, 'PosModifier': '0VP4K444GFZV4', 'SizeInPos': None, 'UPCCode': None, 'CostCenter': None, 'Glassware': 'Half Snifter', 'DisplayOnMenu': True, 'Deactivated': False, }, { 'Id': 'C', 'Size': 35.2, 'Price': 18.5, 'DisplayName': '32oz', 'DisplaySize': 32.0, 'PosModifier': 'HSA294Z3N388A', 'SizeInPos': None, 'UPCCode': None, 'CostCenter': None, 'Glassware': 'Growler (Small)', 'DisplayOnMenu': False, 'Deactivated': False, }, { 'Id': 'D', 'Size': 70.4, 'Price': 37.0, 'DisplayName': '64oz', 'DisplaySize': 64.0, 'PosModifier': 'W517XXS16C6JT', 'SizeInPos': None, 'UPCCode': None, 'CostCenter': None, 'Glassware': 'Growler', 'DisplayOnMenu': True, 'Deactivated': False, }, ], 'EventPricesActive': False, 'EventId': None, 'EventName': None, 'DateAdded': '2019-03-30T17:25:53.579Z', 'DoNotUse': False, 'ProductFinished': False, 'ReplacesBeverageIds': [], 'BeverageNameWithVintage': 'Passion Fruit Nectar', 'FullBeverageName': 'Redstone Passion Fruit Nectar', 'FullProducerList': 'Redstone', 'FullStyleName': 'Session Mead w/ Passionfruit', 'OverrideableFullStyleName': 'Session Mead w/ Passionfruit', 'EventItem': False, 'ReplaceableItem': False, }, 'Active': True, 'EstimatedDatePutOn': None, 'DatePutOn': '2019-03-29T17:23:35.219Z', 'DatePulledOff': None, 'QuantityOnTap': 0, 'LastRefreshDateTime': '2019-04-04T00:00:15.523Z', } parser = DigitalPourParser() producer = parser.parse_manufacturer(tap) self.assertEqual(producer['name'], 'Redstone', producer) beer = parser.parse_beer(tap) self.assertEqual(beer['name'], 'Passion Fruit Nectar', beer)
def test_digital_pour_mead(self): tap = { "Id": "5c9e54953527260f6c040dc1", "MenuItemDisplayDetail": { "$type": "BeerDashboard.Common.Models.Tap, BeerDashboard.Common", # noqa "BeverageType": None, "TapType": "CO2", "NonRotating": False, "HasMeasuringSystem": False, "ParentTapId": None, "Material": None, "LineDrop": None, "LineLength": None, "LineDiameter": None, "CO2Mix": None, "NitroMix": None, "PSI": None, "Id": "58882be35e002c105cb7e4bc", "CompanyId": "57b130dd5e002c0388f8b686", "CompanyName": "Wish You Were Beer", "LocationId": "2", "LocationName": "Campus 802", "ItemType": "Tap", "DisplayName": "37", "DisplayOrder": 37, "DisplayLogoUrl": None, "DisplayGroup": None, "CostCenter": None, "NotInUse": False, "StorageLocation": { "CompanyId": "57b130dd5e002c0388f8b686", "CompanyName": None, "LocationId": "2", "LocationName": "Campus 802", "IsUsable": True, "DefaultKegLocation": True, "TemperatureSensorId": None, "Temperature": 0.0, "Id": "58882a955e002c105cb7e4ad", "StorageLocationName": "Cooler", }, "ProductId": "H9V0TYD4QY5PT", "MeasuringSystemMappingId": None, "EventTableId": None, "TemperatureSensorId": None, "Temperature": 0.0, "IsDirty": False, }, "MenuItemProductDetail": { "$type": "BeerDashboard.Common.Models.Keg, BeerDashboard.Common", "KegSize": 661.0, "KegType": "CO2", "Coupler": "US Sankey (D)", "BatchId": None, "DateKegged": None, "KegId": None, "InitialOuncesConsumed": 153.0, "SamplesPoured": 0, "SampleSize": 0.0, "OuncesConsumed": 196.0, "PercentFull": 0.7034795763993948, "UseMeasuredValues": False, "PosReportedOuncesConsumed": 196.0, "PosReportedPercentFull": 0.7034795763993948, "MeasuredOuncesConsumed": 0.0, "MeasuredPercentFull": 0.0, "ShellReturnedToDistributor": False, "ShellReturnDate": None, "DaysOn": 9, "TimeOn": 4067.541096066667, "AllowedTaps": None, "PercentConsumedBySamples": 0.0, "EstimatedOzLeft": 465.0, "HasRestrictions": False, "RestrictedReplacementsList": None, "EstimatedKegLeftDuration": "6.16:50:00", "AvailableInBottles": False, "MoreKegsAvailable": False, "Id": "6d22daf4-3c68-4986-8f32-f57f6e421569", "BeverageType": "Mead", "Beverage": { "$type": "BeerDashboard.Common.Models.MeadModels.Mead, BeerDashboard.Common", # noqa "BeverageName": "Passion Fruit Nectar", "Meadery": { "MeaderyName": "Redstone", "MeaderyUrl": "http://www.redstonemeadery.com/", "CultureSpecificMeaderyNames": {}, "CultureSpecificLocationNames": {}, "ProducerName": "Redstone", "SimplifiedProducerName": "redstone", "CultureAwareMeaderyName": "Redstone", "CultureAwareLocationName": "Boulder, CO", "Id": "52d89988fb890c01246b7835", "FullProducerName": None, "Location": "Boulder, CO", "ProducersUrl": None, "LogoImageUrl": "https://s3.amazonaws.com/digitalpourproducerlogos/52d89988fb890c01246b7835.png", # noqa "TwitterName": "@RedstoneMeadery", "Latitude": 0.0, "Longitude": 0.0, "DefaultKegSize": 1984.0, "DefaultKegCoupler": "US Sankey (D)", "CompanyId": None, "IsAmateur": False, "AlternateLocations": [], }, "Collaborators": [], "MeadName": "Passion Fruit Nectar", "MeadStyle": { "Id": "52d70daffb890c0f449213d0", "StyleName": "Session Mead", "ParentId": None, "ParentIds": ["52d5e81cfb890c047453c782"], "Color": 15586620, "RecommendedCO2Mix": None, "RecommendedNitroMix": None, "RecommendedPSI": None, "RecommendedCO2ContentLow": None, "RecommendedCO2ContentHigh": None, "CultureSpecificStyleNames": {}, "CultureAwareStyleName": "Session Mead", }, "StyleVariation": "w/ Passionfruit", "StyleVariationPrefix": None, "Dryness": None, "BarrelAging": None, "HoneyUsed": None, "HopsUsed": None, "Abv": 8.0, "OriginalGravity": None, "FinalGravity": None, "Attributes": None, "MeadUrl": None, "CultureSpecificMeadNames": {}, "RateBeerUrl": None, "BeerAdvocateUrl": None, "UntappdUrl": None, "CollaboratorList": "", "BeverageProducer": { "$type": "BeerDashboard.Common.Models.MeadModels.Meadery, BeerDashboard.Common", # noqa "MeaderyName": "Redstone", "MeaderyUrl": "http://www.redstonemeadery.com/", "CultureSpecificMeaderyNames": {}, "CultureSpecificLocationNames": {}, "ProducerName": "Redstone", "SimplifiedProducerName": "redstone", "CultureAwareMeaderyName": "Redstone", "CultureAwareLocationName": "Boulder, CO", "Id": "52d89988fb890c01246b7835", "FullProducerName": None, "Location": "Boulder, CO", "ProducersUrl": None, "LogoImageUrl": "https://s3.amazonaws.com/digitalpourproducerlogos/52d89988fb890c01246b7835.png", # noqa "TwitterName": "@RedstoneMeadery", "Latitude": 0.0, "Longitude": 0.0, "DefaultKegSize": 1984.0, "DefaultKegCoupler": "US Sankey (D)", "CompanyId": None, "IsAmateur": False, "AlternateLocations": [], }, "BeverageStyle": { "$type": "BeerDashboard.Common.Models.MeadModels.MeadStyle, BeerDashboard.Common", # noqa "Id": "52d70daffb890c0f449213d0", "StyleName": "Session Mead", "ParentId": None, "ParentIds": ["52d5e81cfb890c047453c782"], "Color": 15586620, "RecommendedCO2Mix": None, "RecommendedNitroMix": None, "RecommendedPSI": None, "RecommendedCO2ContentLow": None, "RecommendedCO2ContentHigh": None, "CultureSpecificStyleNames": {}, "CultureAwareStyleName": "Session Mead", }, "FullMeaderyList": "Redstone", "ResolvedLogoImageUrl": "https://s3.amazonaws.com/digitalpourproducerlogos/52d89988fb890c01246b7835.png", # noqa "FullStyleName": "Session Mead w/ Passionfruit", "ExpandedStyleName": "Session Mead w/ Passionfruit", "StyleColor": 15586620, "CultureAwareBeverageName": "Passion Fruit Nectar", "FullProducerList": "Redstone", "Id": "55c10a285e002c0bd4aa38d7", "LogoImageUrl": None, "CO2Content": None, "CaloriesPerOz": None, "CustomDescription": None, "CustomStyle": None, }, "DateProduced": "0001-01-01T00:00:00Z", "Year": 2019, "BeverageCategory": "Craft", "BeverageCategoryLogoUrl": None, "Attributes": [], "CustomBeverageIcon": None, "HasVintage": False, "Prices": [ { "Id": "T", "Size": 5.0, "Price": 4.5, "DisplayName": "5oz", "DisplaySize": 5.0, "PosModifier": "AH4XB7W61363G", "SizeInPos": None, "UPCCode": None, "CostCenter": None, "Glassware": "Taster", "DisplayOnMenu": True, "Deactivated": False, }, { "Id": "B", "Size": 9.5, "Price": 8.0, "DisplayName": "10oz", "DisplaySize": 10.0, "PosModifier": "0VP4K444GFZV4", "SizeInPos": None, "UPCCode": None, "CostCenter": None, "Glassware": "Half Snifter", "DisplayOnMenu": True, "Deactivated": False, }, { "Id": "C", "Size": 35.2, "Price": 20.0, "DisplayName": "32oz", "DisplaySize": 32.0, "PosModifier": "HSA294Z3N388A", "SizeInPos": None, "UPCCode": None, "CostCenter": None, "Glassware": "Growler (Small)", "DisplayOnMenu": False, "Deactivated": False, }, { "Id": "D", "Size": 70.4, "Price": 40.0, "DisplayName": "64oz", "DisplaySize": 64.0, "PosModifier": "W517XXS16C6JT", "SizeInPos": None, "UPCCode": None, "CostCenter": None, "Glassware": "Growler", "DisplayOnMenu": True, "Deactivated": False, }, ], "EventPrices": [ { "Id": "T", "Size": 5.0, "Price": 4.5, "DisplayName": "5oz", "DisplaySize": 5.0, "PosModifier": "AH4XB7W61363G", "SizeInPos": None, "UPCCode": None, "CostCenter": None, "Glassware": "Taster", "DisplayOnMenu": True, "Deactivated": False, }, { "Id": "B", "Size": 9.5, "Price": 7.0, "DisplayName": "10oz", "DisplaySize": 10.0, "PosModifier": "0VP4K444GFZV4", "SizeInPos": None, "UPCCode": None, "CostCenter": None, "Glassware": "Half Snifter", "DisplayOnMenu": True, "Deactivated": False, }, { "Id": "C", "Size": 35.2, "Price": 18.5, "DisplayName": "32oz", "DisplaySize": 32.0, "PosModifier": "HSA294Z3N388A", "SizeInPos": None, "UPCCode": None, "CostCenter": None, "Glassware": "Growler (Small)", "DisplayOnMenu": False, "Deactivated": False, }, { "Id": "D", "Size": 70.4, "Price": 37.0, "DisplayName": "64oz", "DisplaySize": 64.0, "PosModifier": "W517XXS16C6JT", "SizeInPos": None, "UPCCode": None, "CostCenter": None, "Glassware": "Growler", "DisplayOnMenu": True, "Deactivated": False, }, ], "EventPricesActive": False, "EventId": None, "EventName": None, "DateAdded": "2019-03-30T17:25:53.579Z", "DoNotUse": False, "ProductFinished": False, "ReplacesBeverageIds": [], "BeverageNameWithVintage": "Passion Fruit Nectar", "FullBeverageName": "Redstone Passion Fruit Nectar", "FullProducerList": "Redstone", "FullStyleName": "Session Mead w/ Passionfruit", "OverrideableFullStyleName": "Session Mead w/ Passionfruit", "EventItem": False, "ReplaceableItem": False, }, "Active": True, "EstimatedDatePutOn": None, "DatePutOn": "2019-03-29T17:23:35.219Z", "DatePulledOff": None, "QuantityOnTap": 0, "LastRefreshDateTime": "2019-04-04T00:00:15.523Z", } parser = DigitalPourParser() producer = parser.parse_manufacturer(tap) self.assertEqual(producer["name"], "Redstone", producer) beer = parser.parse_beer(tap) self.assertEqual(beer["name"], "Passion Fruit Nectar", beer)