Skip to content

Commit

Permalink
LITE-28160 Regenerate ppr when product version change
Browse files Browse the repository at this point in the history
  • Loading branch information
jonatrios committed Jul 25, 2023
1 parent 29b7c48 commit 332ad82
Show file tree
Hide file tree
Showing 15 changed files with 13,980 additions and 50 deletions.
9 changes: 7 additions & 2 deletions connect_ext_ppr/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from connect.eaas.core.responses import BackgroundResponse
from sqlalchemy.exc import DBAPIError

from connect_ext_ppr.service import add_deployments, update_product
from connect_ext_ppr.service import add_deployments, process_ppr_from_product_update
from connect_ext_ppr.utils import get_all_info, get_marketplaces, get_products


Expand Down Expand Up @@ -74,7 +74,12 @@ def handle_product_changed(self, request):
db, create a new one.
'''
self.logger.info(f"Product {request['id']} changed.")
update_product(request, self.config, self.logger)
try:
process_ppr_from_product_update(
request, self.config, self.context, self.installation_client, self.logger,
)
except (ClientError, DBAPIError):
return BackgroundResponse.reschedule()
return BackgroundResponse.done()

@event(
Expand Down
50 changes: 31 additions & 19 deletions connect_ext_ppr/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from connect_ext_ppr.models.file import File
from connect_ext_ppr.models.ppr import PPRVersion
from connect_ext_ppr.models.replicas import Product
from connect_ext_ppr.schemas import FileSchema
from connect_ext_ppr.schemas import FileSchema, PPRCreateSchema
from connect_ext_ppr.utils import (
create_ppr_to_media,
get_base_workbook,
Expand Down Expand Up @@ -85,18 +85,27 @@ def add_deployments(installation, listings, config, logger):
logger.info(f"The following Deployments have been created: {dep_ids}.")


def update_product(data, config, logger):
product_id = data['id']
def process_ppr_from_product_update(data, config, context, client, logger):
with get_db_ctx_manager(config) as db:
q = db.query(Product).filter_by(id=product_id)
q = db.query(Deployment).filter_by(product_id=data['id'])
if db.query(q.exists()).scalar():
logger.info(f"Updating product: {product_id}.")
product = q.first()
product.name = data['name']
product.logo = data.get('icon')
product.version = data['version']
db.add(product)
db.commit()
deployment = q.first()
product = deployment.product
older_version = product.version
update_product(data, db, product, logger)
if data['version'] > older_version:
ppr = PPRCreateSchema()
logger.info(f"Product version changed: {older_version} -> {data['version']}.")
create_ppr(ppr, context, deployment, db, client, logger)


def update_product(data, db, product, logger):
logger.info(f"Updating product: {product.id}.")
product.name = data['name']
product.logo = data.get('icon')
product.version = data['version']
db.add(product)
db.commit()


def get_ppr_new_version(db, deployment):
Expand All @@ -116,6 +125,7 @@ def create_ppr(ppr, context, deployment, db, client, logger):
file_data = ppr.file
new_version = get_ppr_new_version(db, deployment)
config_kwargs = {}
config_json = {}
status = PPRVersion.STATUS.ready
if not file_data:
active_configuration = (
Expand All @@ -125,11 +135,11 @@ def create_ppr(ppr, context, deployment, db, client, logger):
state=Configuration.STATE.active,
).one_or_none()
)
if not active_configuration:
raise ExtensionHttpError.EXT_006(
format_kwargs={'deployment_id': deployment.id},
if active_configuration:
config_kwargs.update({'configuration': active_configuration.id})
config_json = get_configuration_from_media(
client, deployment.account_id, deployment.id, active_configuration.file,
)
config_kwargs.update({'configuration': active_configuration.id})
previous_ppr = (
db.query(PPRVersion)
.filter_by(
Expand All @@ -140,9 +150,6 @@ def create_ppr(ppr, context, deployment, db, client, logger):
.first()
)
data = None
config_json = get_configuration_from_media(
client, deployment.account_id, deployment.id, active_configuration.file,
)
product_info = (
f"(product_id={deployment.product_id}, "
f"product_version={deployment.product.version})"
Expand All @@ -158,7 +165,7 @@ def create_ppr(ppr, context, deployment, db, client, logger):
else:
logger.info(
f"Start creation of PPR version {product_info}"
f" based on previous product information.",
f" based on product information.",
)
items = list(get_product_items(client, deployment.product.id))

Expand Down Expand Up @@ -223,6 +230,11 @@ def create_ppr(ppr, context, deployment, db, client, logger):
)
db.set_verbose(new_ppr)
db.commit()

logger.info(
f"New PPR version created: (id={new_ppr.id}, version={new_ppr.version}"
f", product_version={new_ppr.product_version}, file={new_ppr.file}).",
)
return new_ppr

except DBAPIError as ex:
Expand Down
29 changes: 29 additions & 0 deletions connect_ext_ppr/static/deployment-details.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/stylus-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./ui/src/components/GridItem.vue?vue&type=style&index=0&id=292fb55a&lang=stylus& ***!
\*****************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.item-row {
display: grid;
grid-template-columns: var(--grid-item-first-col, 60px) 1fr;
grid-column-gap: 16px;
align-items: start;
}
.item-row + .item-row {
margin-top: var(--grid-item-row-offset, 12px);
}
.item-label {
font-weight: 500;
font-size: 14px;
line-height: 20px;
color: #212121;
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/stylus-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./ui/src/pages/DeploymentDetails.vue?vue&type=style&index=0&id=2ceadcfa&lang=stylus& ***!
\*********************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.deployment-details .info-container {
display: grid;
grid-template-columns: minmax(auto, 376px) minmax(auto, 376px) minmax(auto, 376px);
grid-column-gap: 48px;
margin-bottom: 32px;
}

Loading

0 comments on commit 332ad82

Please sign in to comment.