fix guide

This commit is contained in:
Anatoly 2020-02-04 18:41:55 +03:00
parent 49d6a983d9
commit 68ceb44acf
2 changed files with 67 additions and 49 deletions

View File

@ -866,19 +866,22 @@ class GuideElementManager(models.Manager):
city=city_qs.first())
return None, False
def get_or_create_establishment_section_node(self, city_node: int, establishment_node_name: str):
def get_or_create_establishment_section_node(self, city_node_id: int, establishment_node_name: str,
guide_id: int):
"""Get or Create (Restaurant|Shop...)SectionNode."""
parent_node_qs = GuideElement.objects.filter(id=city_node)
parent_node_qs = GuideElement.objects.filter(id=city_node_id)
guide_element_type_qs = GuideElementType.objects.filter(name__iexact=establishment_node_name)
guide_qs = Guide.objects.filter(id=guide_id)
if parent_node_qs.exists() and guide_element_type_qs.exists():
if parent_node_qs.exists() and guide_element_type_qs.exists() and guide_qs.exists():
parent_node = parent_node_qs.first()
return self.get_or_create(guide_element_type=guide_element_type_qs.first(),
parent=parent_node,
guide=parent_node.parent.guide)
guide=guide_qs.first())
return None, False
def get_or_create_establishment_node(self, restaurant_section_node_id: int,
def get_or_create_establishment_node(self, restaurant_section_node_id: int, guide_id: int,
establishment_id: int, review_id: int = None):
"""Get or Create EstablishmentNode."""
from establishment.models import Establishment
@ -887,14 +890,16 @@ class GuideElementManager(models.Manager):
guide_element_type_qs = GuideElementType.objects.filter(name='EstablishmentNode')
parent_node_qs = GuideElement.objects.filter(id=restaurant_section_node_id)
establishment_qs = Establishment.objects.filter(id=establishment_id)
guide_qs = Guide.objects.filter(id=guide_id)
if parent_node_qs.exists() and establishment_qs.exists() and guide_element_type_qs.exists():
if (parent_node_qs.exists() and establishment_qs.exists()
and guide_element_type_qs.exists() and guide_qs.exists()):
establishment = establishment_qs.first()
parent_node = parent_node_qs.first()
data.update({
'guide_element_type': guide_element_type_qs.first(),
'parent': parent_node,
'guide': parent_node.get_root().guide,
'guide': guide_qs.first(),
'establishment': establishment
})
if review_id:
@ -903,44 +908,47 @@ class GuideElementManager(models.Manager):
return self.get_or_create(**data)
return None, False
def get_or_create_wine_region_node(self, root_node_id: int, wine_region_id: int):
def get_or_create_wine_region_node(self, root_node_id: int, wine_region_id: int, guide_id: int):
"""Get or Create WineRegionNode."""
guide_element_type_qs = GuideElementType.objects.filter(name='RegionNode')
parent_node_qs = GuideElement.objects.filter(id=root_node_id)
wine_region_qs = WineRegion.objects.filter(id=wine_region_id)
guide_qs = Guide.objects.filter(id=guide_id)
if parent_node_qs.exists() and parent_node_qs.first().guide and wine_region_qs.exists() and guide_element_type_qs.exists():
if (parent_node_qs.exists() and parent_node_qs.first().guide and
wine_region_qs.exists() and guide_element_type_qs.exists() and
guide_qs.exists()):
root_node = parent_node_qs.first()
return self.get_or_create(guide_element_type=guide_element_type_qs.first(),
parent=root_node,
guide=root_node.guide,
guide=guide_qs.first(),
wine_region=wine_region_qs.first())
return None, False
def get_or_create_yard_node(self, product_id: int, wine_region_node_id: int):
def get_or_create_yard_node(self, product_id: int, wine_region_node_id: int, guide_id: int):
"""Make YardNode."""
from establishment.models import Establishment
guide_element_type_qs = GuideElementType.objects.filter(name='YardNode')
wine_region_node_qs = GuideElement.objects.filter(id=wine_region_node_id)
product_qs = Product.objects.filter(id=product_id)
guide_qs = Guide.objects.filter(id=guide_id)
if product_qs.exists() and wine_region_node_qs.exists():
if product_qs.exists() and wine_region_node_qs.exists() and guide_qs.exists():
wine_region_node = wine_region_node_qs.first()
root_node = wine_region_node.get_root()
product = product_qs.first()
if product.establishment:
return self.get_or_create(guide_element_type=guide_element_type_qs.first(),
parent=wine_region_node,
guide=root_node.guide,
establishment=product.establishment)
return self.get_or_create(guide_element_type=guide_element_type_qs.first(),
parent=wine_region_node,
guide=guide_qs.first(),
establishment=product.establishment)
return None, False
def get_or_create_color_wine_section_node(self, wine_color_name: str, yard_node_id: int):
def get_or_create_color_wine_section_node(self, wine_color_name: str,
yard_node_id: int, guide_id: int):
"""Get or Create WineSectionNode."""
guide_element_type_qs = GuideElementType.objects.filter(name='ColorWineSectionNode')
parent_node_qs = GuideElement.objects.filter(id=yard_node_id)
guide_qs = Guide.objects.filter(id=guide_id)
if not wine_color_name.endswith('SectionNode'):
wine_color_name = transform_into_section_name(wine_color_name)
@ -951,27 +959,30 @@ class GuideElementManager(models.Manager):
'name': wine_color_name
})
if parent_node_qs.exists() and guide_element_type_qs.exists():
if parent_node_qs.exists() and guide_element_type_qs.exists() and guide_qs.exists():
root_node = parent_node_qs.first()
return self.get_or_create(guide_element_type=guide_element_type_qs.first(),
parent=root_node,
wine_color_section=wine_color_section,
guide=root_node.guide)
guide=guide_qs.first())
return None, False
def get_or_create_wine_node(self, color_wine_section_node_id: int, wine_id: int, review_id: int):
def get_or_create_wine_node(self, color_wine_section_node_id: int,
wine_id: int, review_id: int, guide_id: int):
"""Get or Create WineNode."""
guide_element_type_qs = GuideElementType.objects.filter(name='WineNode')
parent_node_qs = GuideElement.objects.filter(id=color_wine_section_node_id)
wine_qs = Product.objects.wines().filter(id=wine_id)
review_qs = Review.objects.filter(id=review_id)
guide_qs = Guide.objects.filter(id=guide_id)
if parent_node_qs.exists() and wine_qs.exists() and review_qs.exists() and guide_element_type_qs.exists():
if (parent_node_qs.exists() and wine_qs.exists() and
review_qs.exists() and guide_element_type_qs.exists() and guide_qs.exists()):
root_node = parent_node_qs.first()
return self.get_or_create(guide_element_type=guide_element_type_qs.first(),
parent=root_node,
product=wine_qs.first(),
guide=root_node.guide,
guide=guide_qs.first(),
review=review_qs.first())
return None, False

View File

@ -9,23 +9,25 @@ logging.basicConfig(format='[%(levelname)s] %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
def get_additional_establishment_data(section_node, establishment):
data = [
section_node.id,
establishment.id,
]
def get_additional_establishment_data(section_node, establishment, guide):
data = {
'restaurant_section_node_id': section_node.id,
'guide_id': guide.id,
'establishment_id': establishment.id,
}
if establishment.last_published_review:
data.append(establishment.last_published_review.id)
data.update({'review_id': establishment.last_published_review.id})
return data
def get_additional_product_data(section_node, product):
data = [
section_node.id,
product.id,
]
def get_additional_product_data(section_node, product, guide):
data = {
'color_wine_section_node_id': section_node.id,
'wine_id': product.id,
'guide_id': guide.id,
}
if product.last_published_review:
data.append(product.last_published_review.id)
data.update({'review_id': product.last_published_review.id})
return data
@ -70,11 +72,13 @@ def populate_establishment_guide(guide_id: int, establishment_id: int):
section_node, _ = GuideElement.objects.get_or_create_establishment_section_node(
city_node.id,
transform_into_section_name(establishment.establishment_type.index_name),
guide_id,
)
if section_node:
GuideElement.objects.get_or_create_establishment_node(
*get_additional_establishment_data(section_node=section_node,
establishment=establishment))
**get_additional_establishment_data(section_node=section_node,
establishment=establishment,
guide=guide))
else:
logger.error(
f'METHOD_NAME: {generate_establishment_guide_elements.__name__}\n'
@ -87,7 +91,7 @@ def populate_establishment_guide(guide_id: int, establishment_id: int):
f'DETAIL: Guide ID {guide_id} - RootNode is not exists.')
else:
logger.error(f'METHOD_NAME: {generate_establishment_guide_elements.__name__}\n'
f'DETAIL: Guide ID {guide_id} - Establishment {establishment_id} id is not exists.')
f'DETAIL: Guide ID {guide_id} - Establishment {establishment_id} id is not exists.')
except Exception as e:
guide.change_state(Guide.WAITING)
logger.error(f'METHOD_NAME: {generate_establishment_guide_elements.__name__}\n'
@ -152,24 +156,27 @@ def generate_product_guide_elements(guide_id: int, filter_set: dict):
if root_node:
wine_region_node, _ = GuideElement.objects.get_or_create_wine_region_node(
root_node.id,
wine.wine_region.id)
wine.wine_region.id,
guide_id)
if wine_region_node:
yard_node, _ = GuideElement.objects.get_or_create_yard_node(
product_id=wine.id,
wine_region_node_id=wine_region_node.id
)
wine.id,
wine_region_node.id,
guide_id)
if yard_node:
wine_color_qs = wine.wine_colors
if wine_color_qs.exists():
wine_color_section, _ = GuideElement.objects.get_or_create_color_wine_section_node(
wine_color_name=wine_color_qs.first().value,
yard_node_id=yard_node.id
wine_color_qs.first().value,
yard_node.id,
guide_id
)
if wine_color_section:
GuideElement.objects.get_or_create_wine_node(
*get_additional_product_data(
section_node=wine_color_section,
product=wine))
**get_additional_product_data(
wine_color_section,
wine,
guide))
else:
logger.error(
f'METHOD_NAME: {generate_product_guide_elements.__name__}\n'