Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
122 ashish 1
'''
2
Created on 27-Apr-2010
3
 
4
@author: ashish
5
'''
6
from shop2020.model.v1.catalog.impl import DataService
7
from shop2020.utils.Utils import log_entry
8
from shop2020.model.v1.catalog.impl.DataAcessors import add_item, add_warehouse,\
9
    update_inventory, retire_warehouse, retire_item, change_item_status,\
635 rajveer 10
    get_item, get_all_items, get_all_items_by_status, get_item_inventoy,\
643 chandransh 11
    get_item_availability_for_warehouse, get_item_availability_for_location, get_all_warehouses_by_status,\
122 ashish 12
    get_Warehouse, get_all_warehouses_for_item, get_all_items_for_warehouse,\
766 rajveer 13
    update_item, start_item_on, close_session, \
635 rajveer 14
    retire_item_on, get_item_inventory_by_item_id, get_items_by_catalog_id,\
1308 chandransh 15
    get_best_deals, get_best_deals_catalog_ids, get_best_deals_count, get_best_sellers, get_latest_arrivals, get_latest_arrivals_catalog_ids, get_latest_arrivals_count,\
635 rajveer 16
    is_active, get_best_sellers_catalog_ids, get_best_sellers_count, put_category_object,\
871 chandransh 17
    get_category_object, mark_item_as_content_complete,\
1341 chandransh 18
    reserve_item_in_warehouse, reduce_reservation_count, generate_new_entity_id,\
2116 ankur.sing 19
    get_all_item_pricing, add_vendor_pricing, \
2035 rajveer 20
    get_item_pricing, get_category, get_all_categories, add_category,\
2116 ankur.sing 21
    get_item_status_description, get_all_vendors, check_vendor_item_mapping,\
2286 ankur.sing 22
    get_item_mappings, add_vendor_item_mapping, check_similar_item,\
2809 rajveer 23
    change_risky_flag, get_items_by_vendor_category, get_risky_items,\
3086 rajveer 24
    get_similar_items_catalog_ids, add_product_notification,\
3348 varun.gupt 25
    send_product_notifications, update_inventory_history,\
26
    get_all_brands_by_category
122 ashish 27
from shop2020.model.v1.catalog.impl.Convertors import to_t_item,\
2065 ankur.sing 28
    to_t_item_inventory, to_t_warehouse, to_t_vendor_item_pricing, to_t_category,\
2116 ankur.sing 29
    to_t_vendor, to_t_vendor_item_mapping
122 ashish 30
from shop2020.thriftpy.model.v1.catalog.ttypes import status,\
31
    InventoryServiceException
599 chandransh 32
from shop2020.config.client.ConfigClient import ConfigClient
122 ashish 33
 
34
 
35
class InventoryServiceHandler:
36
    '''
37
    classdocs
38
    '''
599 chandransh 39
 
3187 rajveer 40
    def __init__(self, dbname='catalog', db_hostname='localhost'):
122 ashish 41
        '''
42
        Constructor
43
        '''
3187 rajveer 44
        DataService.initialize(dbname, db_hostname)
599 chandransh 45
        try:
621 chandransh 46
            config_client = ConfigClient()
47
            self.latest_arrivals_limit = int(config_client.get_property("LATEST_ARRIVALS_LIMIT"));
48
            self.best_sellers_limit = int(config_client.get_property("BEST_SELLERS_LIMIT"))
599 chandransh 49
        except:
621 chandransh 50
            self.latest_arrivals_limit = 50
51
            self.best_sellers_limit = 50
122 ashish 52
 
53
    #DONE
54
    def addItem(self, item):
55
        """
56
        Availability and inventory attributes
57
 
58
        Parameters:
59
         - item
60
        """
61
        log_entry(self, "addItem called")
785 rajveer 62
        try:
63
            return add_item(item)
64
        finally:
65
            close_session()
122 ashish 66
 
67
    def addWarehouse(self, warehouse):
68
        """
69
        Parameters:
70
         - warehouse
71
        """
72
        log_entry(self, "addWarehouse called")
785 rajveer 73
        try:
74
            return add_warehouse(warehouse)
75
        finally:
76
            close_session()
122 ashish 77
 
3325 chandransh 78
    def updateInventoryHistory(self, warehouse_id, timestamp, availability):
79
        """
80
        Stores the incremental warehouse updates of items.
81
 
82
        Parameters:
83
         - warehouse_id
84
         - timestamp
85
         - availability
86
        """
87
        try:
88
            return update_inventory_history(warehouse_id, timestamp, availability)
89
        finally:
90
            close_session()
483 rajveer 91
 
92
    def updateInventory(self, warehouse_id, timestamp, availability):
122 ashish 93
        """
94
        Parameters:
95
         - warehouse_id
96
         - timestamp
483 rajveer 97
         - availability
122 ashish 98
        """
99
        log_entry(self, "update Inventory called")
785 rajveer 100
        try:
101
            return update_inventory(warehouse_id, timestamp, availability)
102
        finally:
103
            close_session()
104
 
105
 
635 rajveer 106
    def isActive(self, item_id):
563 chandransh 107
        """
108
        Parameters:
635 rajveer 109
         - item_id
563 chandransh 110
        """
785 rajveer 111
        try:
112
            return is_active(item_id)
113
        finally:
114
            close_session()
122 ashish 115
 
2035 rajveer 116
    def getItemStatusDescription(self, itemId):
117
        """
118
        Parameters:
119
         - itemId
120
        """
121
        try:
122
            return get_item_status_description(itemId)
123
        finally:
124
            close_session()
125
 
122 ashish 126
    def retireWarehouse(self, warehouse_id):
127
        """
128
        Parameters:
129
         - warehouse_id
130
        """
131
        log_entry(self, "retire warehouse called")
785 rajveer 132
        try:
133
            return retire_warehouse(warehouse_id)
134
        finally:
135
            close_session()
136
 
122 ashish 137
 
138
    def retireItem(self, item_id):
139
        """
140
        Parameters:
141
        - item_id
142
        """
143
        log_entry(self, "retire item called")
785 rajveer 144
        try:
145
            return retire_item(item_id)
146
        finally:
147
            close_session()
122 ashish 148
 
149
    def startItemOn(self, item_id, timestamp):
150
        """
151
        Parameters:
152
         - item_id
153
         - timestamp
154
        """
785 rajveer 155
        try:
156
            start_item_on(item_id, timestamp)
157
        finally:
158
            close_session()
122 ashish 159
 
160
    def retireItemOn(self, item_id, timestamp):
161
        """
162
        Parameters:
163
         - item_id
164
         - timestamp
165
        """
785 rajveer 166
        try:
167
            retire_item_on(item_id, timestamp)
168
        finally:
169
            close_session()
122 ashish 170
 
171
    def changeItemStatus(self, item_id, timestamp, newstatus):
172
        """
173
        Parameters:
174
         - item_id
175
         - timestamp
176
         - newstatus
177
        """
178
        log_entry(self, "change item status called")
785 rajveer 179
        try:
180
            return change_item_status(item_id, newstatus)
181
        finally:
182
            close_session()
122 ashish 183
 
785 rajveer 184
 
122 ashish 185
    def getItem(self, item_id):
186
        """
187
        Parameters:
188
         - item_id
189
        """
190
        log_entry(self, "item requested")
785 rajveer 191
        try:
2065 ankur.sing 192
            item = to_t_item( get_item(item_id))
193
            return item
785 rajveer 194
        finally:
195
            close_session()
379 ashish 196
 
635 rajveer 197
    def getItemsByCatalogId(self, catalog_item_id):
379 ashish 198
        """
199
        Parameters:
200
        - catalog_item_id
201
        """
386 ashish 202
        log_entry(self, "item requested")
766 rajveer 203
        try:
204
            return get_items_by_catalog_id(catalog_item_id)
205
        finally:
206
            close_session()
122 ashish 207
 
483 rajveer 208
 
122 ashish 209
    def getAllItems(self, isActive):
210
        """
211
        Parameters:
212
         - isActive
213
        """
214
        log_entry(self, "all items requested")
766 rajveer 215
        try:
216
            items = get_all_items(isActive)
217
            ret_items = []
218
            for item in items:
219
                if item:
220
                    ret_items.append(to_t_item(item))
221
            return ret_items
222
        finally:
223
            close_session()
224
 
122 ashish 225
    def getAllItemsByStatus(self, itemStatus):
226
        """
227
        Parameters:
228
         - itemStatus
229
        """
230
        log_entry(self, "all items requested")
766 rajveer 231
        try:
232
            items = get_all_items_by_status(itemStatus)
233
            ret_items = []
234
            for item in items:
235
                if item:
236
                    ret_items.append(to_t_item(item))
237
            return ret_items
238
        finally:
239
            close_session()
122 ashish 240
 
241
    def getItemInventory(self, item_id):
242
        """
243
        Parameters:
244
        - item_id
245
        """
246
        log_entry(self, "item inventory requested")
766 rajveer 247
        try:
248
            inventory = get_item_inventoy(item_id)
249
            return to_t_item_inventory(inventory, item_id)
250
        finally:
251
            close_session()
122 ashish 252
 
635 rajveer 253
    def getItemInventoryByItemId(self, item_id):
254
        """
255
        Parameters:
256
         - item_id
257
        """
258
        log_entry(self, "item inventory requested")
766 rajveer 259
        try:
260
            inventory = get_item_inventory_by_item_id(item_id)
261
            return to_t_item_inventory(inventory, item_id)
262
        finally:
263
            close_session()
635 rajveer 264
 
3348 varun.gupt 265
    def getAllBrandsByCategory(self, categoryId):
266
        """
267
        Parameters:
268
         - categoryId
269
        """
270
        try:
271
            return get_all_brands_by_category(categoryId)
272
        finally:
273
            close_session()
274
 
635 rajveer 275
    '''
379 ashish 276
    def getItemInventoryByCatalogId(self, item_id):
277
        """
278
        Parameters:
279
         - item_id
280
        """
383 ashish 281
        log_entry(self, "item inventory requested")
282
        inventory = get_item_inventory_by_catalog_id(item_id)
283
        return to_t_item_inventory(inventory, item_id)
635 rajveer 284
    '''
285
 
379 ashish 286
 
643 chandransh 287
    def getItemAvailabilityAtLocation(self, warehouse_loc, item_id):
288
        """
289
        Returns the id of the warehouse with the largest inventory of the item and the inventory size. The size of list will always be 2.
290
 
291
        Parameters:
292
         - warehouse_loc
293
         - item_id
294
        """
766 rajveer 295
        try:
296
            return get_item_availability_for_location(warehouse_loc, item_id)
297
        finally:
298
            close_session()
299
 
122 ashish 300
    def getItemAvailibilityAtWarehouse(self, warehouse_id, item_id):
301
        """
302
        Parameters:
303
         - warehouse_id
304
         - item_id
305
        """
306
        log_entry(self, "item availability at warehouse requested")
766 rajveer 307
        try:
308
            return get_item_availability_for_warehouse(warehouse_id, item_id)
309
        finally:
310
            close_session()
311
 
2080 rajveer 312
    def markItemAsContentComplete(self, entityId, category, brand, modelName, modelNumber):
313
        """
314
        Parameters:
315
         - entityId
316
         - category
317
         - brand
318
         - modelName
319
         - modelNumber
320
        """
321
        try:
322
            return mark_item_as_content_complete(entityId, category, brand, modelName, modelNumber)
323
        finally:
324
            close_session()
2075 rajveer 325
 
326
 
122 ashish 327
    def getItemInventoryHistory(self, id, item_id, warehouse_id, from_date, to_date):
328
        """
329
        Parameters:
330
         - id
331
         - item_id
332
         - warehouse_id
333
         - from_date
334
         - to_date
335
        """
336
        pass
337
 
338
    def getAllWarehouses(self, isActive):
339
        """
340
        Parameters:
341
        - isActive
342
        """
766 rajveer 343
        try:
344
            if isActive:
345
                warehouses = get_all_warehouses_by_status(status.ACTIVE)
346
            else:
347
                warehouses = get_all_warehouses_by_status(None)
348
 
349
            ret_warehouses = []
350
 
351
            for warehouse in warehouses:
352
                ret_warehouses.append(to_t_warehouse(warehouse))
353
            return ret_warehouses
354
        finally:
355
            close_session()
356
 
122 ashish 357
    def getWarehouse(self, warehouse_id):
358
        """
359
        Parameters:
360
         - warehouse_id
361
        """
362
        log_entry(self, "get warehouse call")
766 rajveer 363
        try:
364
            warehouse = get_Warehouse(warehouse_id)
365
            if warehouse:
366
                return to_t_warehouse(warehouse)
367
            else:
368
                raise InventoryServiceException(101, "no such warehouse")
369
        finally:
370
            close_session()
371
 
122 ashish 372
    def getAllWarehousesForItem(self, item_id):
373
        """
374
        Parameters:
375
         - item_id
376
        """
377
        log_entry(self, "getting all warehouses for item")
766 rajveer 378
        try:
379
            all_warehouses = get_all_warehouses_for_item(item_id)
380
            t_warehouses = []
381
            for warehouse in all_warehouses:
382
                t_warehouses.append(to_t_warehouse(warehouse))
383
            return t_warehouses
384
        finally:
385
            close_session()
386
 
122 ashish 387
    def getAllItemsForWarehouse(self, warehouse_id):
388
        """
389
        Parameters:
390
         - warehouse_id
391
        """
392
        log_entry(self, "getting all items for warehouse")
766 rajveer 393
        try:
394
            all_items = get_all_items_for_warehouse(warehouse_id)
395
            t_items = []
396
            for item in all_items:
397
                t_items.append(to_t_item(item))
398
            return t_items
399
        finally:
400
            close_session()
871 chandransh 401
 
402
    def reserveItemInWarehouse(self, itemId, warehouseId, quantity):
403
        """
404
        Increases the reservation count for an item in a warehouse. Should always succeed normally.
405
 
406
        Parameters:
407
         - itemId
408
         - warehouseId
409
        """
410
        log_entry(self, "reserveItemInWarehouse called")
411
        try:
412
            return reserve_item_in_warehouse(itemId, warehouseId, quantity)
413
        finally:
414
            close_session()
415
 
416
    def reduceReservationCount(self, itemId, warehouseId, quantity):
417
        """
418
        Decreases the reservation count for an item in a warehouse. Should always succeed normally.
419
 
420
        Parameters:
421
         - itemId
422
         - warehouseId
423
        """
424
        log_entry(self, "reduceReservationCount called")
425
        try:
426
            return reduce_reservation_count(itemId, warehouseId, quantity)
427
        finally:
428
            close_session()
766 rajveer 429
 
122 ashish 430
    def updateItem(self, item):
431
        """
432
        Parameters:
433
         - item
434
        """
435
        log_entry(self, "addItem called")
766 rajveer 436
        try:
437
            return update_item(item)
438
        finally:
439
            close_session()
440
 
626 chandransh 441
    def getBestSellers(self, start_index=0, total_items=None, category=-1):
766 rajveer 442
        try:
443
            if total_items is None:
444
                total_items = self.best_sellers_limit
445
            stop_index = start_index + total_items
446
            return get_best_sellers(start_index, stop_index, category)
447
        finally:
448
            close_session()
449
 
1926 rajveer 450
    def getBestSellersCatalogIds(self, start_index, total_items, brand, category=-1):
548 rajveer 451
        """
452
        Parameters:
453
         - beginIndex
454
         - totalItems
455
        """
766 rajveer 456
        try:
457
            if total_items is None:
458
                total_items = self.best_sellers_limit
459
            stop_index = start_index + total_items
1926 rajveer 460
            return get_best_sellers_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 461
        finally:
462
            close_session()
463
 
591 chandransh 464
    def getBestSellersCount(self, ):
766 rajveer 465
        try:
2093 chandransh 466
            return get_best_sellers_count()
766 rajveer 467
        finally:
468
            close_session()
469
 
591 chandransh 470
    def getBestDeals(self,):
766 rajveer 471
        try:
472
            return get_best_deals()
473
        finally:
474
            close_session()
475
 
1926 rajveer 476
    def getBestDealsCatalogIds(self, start_index, total_items, brand,category=-1):
548 rajveer 477
        """
478
        Parameters:
479
         - beginIndex
480
         - totalItems
481
        """
766 rajveer 482
        try:
483
            stop_index = start_index + total_items
1926 rajveer 484
            return get_best_deals_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 485
        finally:
486
            close_session()
487
 
591 chandransh 488
    def getBestDealsCount(self, ):
766 rajveer 489
        try:
490
            return get_best_deals_count()
491
        finally:
492
            close_session()
493
 
591 chandransh 494
    def getLatestArrivals(self,):
766 rajveer 495
        try:
496
            return get_latest_arrivals(self.latest_arrivals_limit)
497
        finally:
498
            close_session()
2975 chandransh 499
 
500
    def getLatestArrivalsCatalogIds(self, beginIndex, totalItems, brand, categories):
548 rajveer 501
        """
2975 chandransh 502
        Returns the list of catalog ids of latest arrivals in the given categories of the given brand.
503
        To ignore the categories, pass the list as empty. To ignore brand, pass it as null.
504
 
548 rajveer 505
        Parameters:
506
         - beginIndex
507
         - totalItems
2975 chandransh 508
         - brand
509
         - categories
548 rajveer 510
        """
766 rajveer 511
        try:
2975 chandransh 512
            if beginIndex > self.latest_arrivals_limit:
766 rajveer 513
                return []
2975 chandransh 514
            stopIndex = beginIndex + totalItems
515
            if stopIndex > self.latest_arrivals_limit:
516
                stopIndex = self.latest_arrivals_limit
517
            return get_latest_arrivals_catalog_ids(beginIndex, stopIndex, brand, categories)
766 rajveer 518
        finally:
519
            close_session()
520
 
591 chandransh 521
    def getLatestArrivalsCount(self, ):
766 rajveer 522
        try:
523
            return get_latest_arrivals_count(self.latest_arrivals_limit)
524
        finally:
525
            close_session()
591 chandransh 526
 
1334 chandransh 527
    def getItemPricing(self, itemId, warehouseId):
528
        """
529
        Returns the pricing information of an item associated with the vendor of the given warehouse.
530
        Raises an exception if either the item, vendor or the associated pricing information can't be found.
531
 
532
        Parameters:
533
         - itemId
534
         - warehouseId
535
        """
1341 chandransh 536
        try:
1347 chandransh 537
            return to_t_vendor_item_pricing(get_item_pricing(itemId, warehouseId))
1341 chandransh 538
        finally:
539
            close_session()
1991 ankur.sing 540
 
541
 
542
    def getAllItemPricing(self, itemId):
543
        """
544
        Returns list of the pricing information of an item associated an item.
545
        Raises an exception if the item can't be found.
546
 
547
        Parameters:
548
         - itemId
549
        """
550
        try:
551
            return [to_t_vendor_item_pricing(vid) for vid in get_all_item_pricing(itemId)]
552
        finally:
553
            close_session()
1334 chandransh 554
 
1155 rajveer 555
    def generateNewEntityID(self, ):
556
        try:
557
            return generate_new_entity_id()
558
        finally:
559
            close_session()
560
 
635 rajveer 561
    def putCategoryObject(self, object):
562
        """
563
        Parameters:
564
         - object
565
        """
766 rajveer 566
        try:
567
            return put_category_object(object)
568
        finally:
569
            close_session()
570
 
635 rajveer 571
    def getCategoryObject(self, ):
766 rajveer 572
        try:
573
            return get_category_object()
574
        finally:
575
            close_session()
1970 rajveer 576
 
577
    def addCategory(self, category):
578
        """
579
        Parameters:
580
         - category
581
        """
582
        try:
583
            return add_category(category)
584
        finally:
585
            close_session()
586
 
587
    def getCategory(self, id):
588
        """
589
        Parameters:
590
         - id
591
        """
592
        try:
593
            return to_t_category(get_category(id))
594
        finally:
595
            close_session()
596
 
597
    def getAllCategories(self, ):
598
        try:
599
            categories = get_all_categories()
600
            return [to_t_category(category) for category in categories]
601
        finally:
602
            close_session()
603
 
604
 
2116 ankur.sing 605
    def addVendorItemPricing(self, vendorItemPricing):
1991 ankur.sing 606
        """
2116 ankur.sing 607
        Adds vendor prices corresponding to the item. If pricing already exists then updates the prices. 
1991 ankur.sing 608
        Raises an exception if either the item or vendor can't be found corresponding to their ids.
609
 
610
        Parameters:
611
         - vendorItemPricing
612
        """
613
        log_entry(self, "updateVendorItemPricing called")
614
        try:
2116 ankur.sing 615
            return add_vendor_pricing(vendorItemPricing)
1991 ankur.sing 616
        finally:
617
            close_session()
618
 
2065 ankur.sing 619
    def getAllVendors(self, ):
620
        """
621
        Return list of all vendors
622
        """
623
        return [to_t_vendor(v) for v in get_all_vendors()]
2116 ankur.sing 624
 
625
    def itemExists(self, productGroup, brand, modelNumber, color, vendorId, category):
626
        try:
627
            return check_vendor_item_mapping(productGroup, brand, modelNumber, color, vendorId, category)
628
        finally:
629
            close_session()
2065 ankur.sing 630
 
2358 ankur.sing 631
    def addVendorItemMapping(self, key, vendorItemMapping):
2116 ankur.sing 632
        """
2358 ankur.sing 633
        Adds VendorItemMapping. Updates VendorItemMapping if exists corresponding to the item key.
2116 ankur.sing 634
 
635
        Parameters:
2358 ankur.sing 636
         - key
2116 ankur.sing 637
         - vendorItemMapping
638
        """
639
        log_entry(self, "addVendorItemMapping called")
640
        try:
2358 ankur.sing 641
            return add_vendor_item_mapping(key, vendorItemMapping)
2116 ankur.sing 642
        finally:
643
            close_session()
644
 
645
    def getVendorItemMappings(self, itemId):
646
        """
647
        Returns the list of vendor item mapping corresponding to itemId passed as parameter.
648
        Raises an exception if item not found corresponding to itemId
649
 
650
        Parameters:
651
         - itemId
652
        """
653
        try:
2120 ankur.sing 654
            item_mappings = get_item_mappings(itemId)
655
            return [to_t_vendor_item_mapping(vim) for vim in item_mappings]
2116 ankur.sing 656
        finally:
657
            close_session()
658
 
659
    def checkSimilarItem(self, productGroup, brand, modelNumber, color):
660
        """
661
        Checks if similar item exists (with same ProductGroup, Brand, ModelNumber, Color)
662
        If yes, returns the itemId else returns 0
663
 
664
        Parameters:
665
         - productGroup
666
         - brand
667
         - modelNumber
668
         - color
669
        """
670
        try:
671
            return check_similar_item(productGroup, brand, modelNumber, color)
672
        finally:
673
            close_session()
674
 
2286 ankur.sing 675
    def changeItemRiskyFlag(self, itemId, risky):
676
        """
677
        Marks/Unmarks an item as risky. This flag is used for automatic marking of an item as INACTIVE in case of zero inventory.
678
 
679
        Parameters:
680
         - itemId
681
         - risky
682
        """
683
        try:
684
            change_risky_flag(itemId, risky)
685
        finally:
686
            close_session()
2116 ankur.sing 687
 
2358 ankur.sing 688
    def getItemsByVendorCategory(self, vendorCategory):
689
        """
690
        Return list of items filtered by vendor category.
691
        Raises exception if vendorCategory is null.
692
 
693
        Parameters:
694
         - vendorCategory
695
        """
696
        try:
697
            return [to_t_item(item) for item in get_items_by_vendor_category(vendorCategory)]
698
        finally:
699
            close_session()
700
 
701
    def getItemsByRiskyFlag(self, ):
702
        """
703
        Returns list of items marked as risky.
704
        """
705
        try:
706
            return [to_t_item(item) for item in get_risky_items()]
707
        finally:
708
            close_session()
2809 rajveer 709
 
710
    def getSimilarItemsCatalogIds(self, beginIndex, totalItems, itemId):
711
        """
712
        Returns list of catalog ids of items with same similarity index as of the given itemId
713
 
714
        Parameters:
715
         - beginIndex
716
         - totalItems
717
         - itemId
718
        """
719
        try:
720
            return get_similar_items_catalog_ids(beginIndex, beginIndex+totalItems, itemId)
721
        finally:
722
            close_session()
3079 rajveer 723
 
724
    def addProductNotification(self, itemId, email):
725
        """
726
        Add user requests for out of stock items. Once user will ask for notify me an entry will
727
 
728
        Parameters:
729
        - itemId
730
        - email
731
        """
732
        try:
733
            return add_product_notification(itemId, email)
734
        finally:
735
            close_session()
2358 ankur.sing 736
 
3086 rajveer 737
    def sendProductNotifications(self, ):
738
        """
739
        Send the product notifications to the users for items which has stock.
740
        """
741
        try:
742
            return send_product_notifications()
743
        finally:
744
            close_session()
766 rajveer 745
    def closeSession(self, ):
746
        close_session()