def update(self, request, pk=None): event = self.get_object() event.categories.clear() old_event = models.Event(start=event.start, end=event.end, location=event.location) # now we trying to add relationship with categories categories = [ t.strip() for t in request.data.get('categories', '').split(',') ] for cate_name in categories: category = models.Category.objects.filter(name=cate_name) if category.count() == 0: new_category = models.Category(name=cate_name) new_category.save() new_category.events.add(event) else: category = models.Category.objects.get(name=cate_name) category.events.add(event) serializer = self.get_serializer(event, data=request.data, partial=False) serializer.is_valid(raise_exception=True) self.perform_update(serializer) # now we are sending email if location or time range changed. try: if old_event.start != event.start or old_event.end != event.end or old_event.location != event.location: print("Datetime or location has changed!") participants = models.Participate.objects.filter(event=event) helpers.SendEmailThread(participants, old_event, event, helpers.EVENT_CHANGE).start() except expression as identifier: print(identifier) pass return Response(serializer.data, HTTP_200_OK)
def create(self, request): data = request.data new_event = models.Event(title=data.get('title', ''), description=data.get('description', ''), location=data.get('location', ''), start=data.get('start', ''), end=data.get('end', '')) if new_event.start > new_event.end: return Response( data={'message': 'Start date must be smaller than end date.'}, status=HTTP_400_BAD_REQUEST) new_event.save() # now we trying to add relationship with categories categories = [ t.strip() for t in request.data.get('categories', '').split(',') ] for cate_name in categories: category = models.Category.objects.filter(name=cate_name) if category.count() == 0: new_category = models.Category(name=cate_name) new_category.save() new_category.events.add(new_event) else: category = models.Category.objects.get(name=cate_name) category.events.add(new_event) # now we uploading file for file in request.FILES: file_extension = os.path.splitext(request.FILES[file].name)[1] print(file_extension) if file_extension not in helpers.valid_file_extension: continue image = models.Image(event=new_event) image.image.save(f'{uuid.uuid4()}{file_extension}', request.FILES[file]) image.save() serializer = serializers.EventSerializer(new_event) return Response(serializer.data, status=HTTP_200_OK)
def _initialize(self): print('loading data') dataframes = self._load_dataframes() print('Done') print('initialize models') models.Location.objects.all().delete() models.CategoryGroup.objects.all().delete() models.Category.objects.all().delete() categorygroups = dataframes['categorygroups'] categorys = dataframes['categorys'] locations = dataframes['locations'] categorygroup_bulk = [ models.CategoryGroup(id=categorygroup.id, name=categorygroup.name) for categorygroup in categorygroups.itertuples() ] models.CategoryGroup.objects.bulk_create(categorygroup_bulk) print('categorygroup_done') category_bulk = [ models.Category( id=category.id, name=category.name, categorygroup_id=category.categorygroup, ) for category in categorys.itertuples() ] models.Category.objects.bulk_create(category_bulk) print('category_done') location_bulk = [ models.Location(id=location.id, name=location.name, address=location.address, tel=location.tel, latitude=location.latitude, longitude=location.longitude, category_id=location.category, rank=location.rank) for location in locations.itertuples() ] models.Location.objects.bulk_create(location_bulk) print('done')
def _initialize(self): ''' 기존의 dataframe pkl파일을 읽어와서 DB에 저장합니다. ''' print("Loading part data") cur_file = Path(settings.BASE_DIR) / "crawling" / "data" / "part.p" with open(cur_file, 'rb') as f: part_list = pickle.load(f) print("complete") print("Loading set data") cur_file = Path(settings.BASE_DIR) / "crawling" / "data" / "set.p" with open(cur_file, 'rb') as f: set_list = pickle.load(f) cur_file = Path(settings.BASE_DIR) / "crawling" / "data" / "set2.p" with open(cur_file, 'rb') as f: set_list2 = pickle.load(f) print("complete") print("Loading color data") cur_file = Path(settings.BASE_DIR) / "crawling" / "data" / "color.p" with open(cur_file, 'rb') as f: color_list = pickle.load(f)["results"] print("complete") print("Loading part_categories data") cur_file = Path( settings.BASE_DIR) / "crawling" / "data" / "part_categories.p" with open(cur_file, 'rb') as f: part_categories_list = pickle.load(f)["results"] print("complete") print("Loading theme data") cur_file = Path(settings.BASE_DIR) / "crawling" / "data" / "theme.p" with open(cur_file, 'rb') as f: theme_list = pickle.load(f) print("complete") print("Loading setpart data") cur_file = Path(settings.BASE_DIR) / "crawling" / "data" / "setpart.p" with open(cur_file, 'rb') as f: setpart_list = pickle.load(f) print("complete") print("Loading user data") cur_file = Path(settings.BASE_DIR) / "crawling" / "data" / "user.p" with open(cur_file, 'rb') as f: user_list = pickle.load(f) print("complete") print("Loading review data") cur_file = Path(settings.BASE_DIR) / "crawling" / "data" / "review.p" with open(cur_file, 'rb') as f: review_list = pickle.load(f) print("complete") print("[*] Delete all data...") # DB에 저장된 정보를 모두 지워 초기화해 줍니다. models.CustomUser.objects.all().delete() models.Theme.objects.all().delete() models.LegoSet.objects.all().delete() models.OfficialMapping.objects.all().delete() models.Category.objects.all().delete() models.Review.objects.all().delete() models.LegoPart.objects.all().delete() models.Color.objects.all().delete() models.UserPart.objects.all().delete() models.SetPart.objects.all().delete() print("[+] Done") print("[*] Initializing categories...") categories_bulk = [ models.Category(id=category["id"], name=category["name"], part_count=category["part_count"]) for category in part_categories_list ] models.Category.objects.bulk_create(categories_bulk) print("[+] Done") print("[*] Initializing colors...") colors_bulk = [ models.Color( id=color["id"], name=color["name"], rgb=color["rgb"], bricklink_ids="|".join( map(str, color["external_ids"]["BrickLink"]["ext_ids"])) if color["external_ids"].get("BrickLink") and color["external_ids"]["BrickLink"].get("ext_ids") else "", bricklink_descrs="|".join( color["external_ids"]["BrickLink"]["ext_descrs"][0]) if color["external_ids"].get("BrickLink") and color["external_ids"]["BrickLink"].get("ext_descrs") else "", official_ids="|".join( map(str, color["external_ids"]["LEGO"]["ext_ids"])) if color["external_ids"].get("LEGO") and color["external_ids"]["LEGO"].get("ext_ids") else "", official_descrs="|".join( color["external_ids"]["LEGO"]["ext_descrs"][0]) if color["external_ids"].get("LEGO") and color["external_ids"]["LEGO"].get("ext_descrs") else "", ) for color in color_list ] models.Color.objects.bulk_create(colors_bulk) models.Color.objects.create(id=9999, name="not a color", rgb="000000") models.Color.objects.create(id=-1, name="Unknown", rgb="0033B2") print("[+] Done") print("[*] Initializing themes...") themes_bulk = [ models.Theme(id=theme["id"], parent_id=theme["parent_id"], name=theme["name"], root_id=theme["root_id"]) for theme in theme_list ] models.Theme.objects.bulk_create(themes_bulk) print("[+] Done") print("[*] Initializing sets...") # theme name n um_parts images review_count sets_bulk = [ models.LegoSet( theme_id=legoset[0], name=legoset[1], num_parts=legoset[2], images=legoset[3], review_count=legoset[4], ) for legoset in set_list ] models.LegoSet.objects.bulk_create(sets_bulk) print("[+] Done") print("[*] Initializing official mapping table...") mapping_table = [ models.OfficialMapping(id=v["set_num"], lego_set_id=i) for i, v in enumerate(set_list2, 1) ] models.OfficialMapping.objects.bulk_create(mapping_table) print("[+] Done") print("[*] Initializing lego parts...") lego_part_bulk = [ models.LegoPart( id=part["part_num"], name=part["name"], category_id=part["part_cat_id"], image=part["part_img_url"] if part["part_img_url"] else "", bricklink_ids="|".join(part["external_ids"]["BrickLink"]) if part["external_ids"].get("BrickLink") else "", official_ids="|".join(part["external_ids"]["LEGO"]) if part["external_ids"].get("LEGO") else "") for part in part_list ] models.LegoPart.objects.bulk_create(lego_part_bulk) print("[+] Done") print("[*] Initializing setparts...") # inventory_id part_num color_id quantity setpart_bulk = [ models.SetPart(lego_set_id=part[0], quantity=part[3], color_id=part[2], part_id=part[1]) for part in setpart_list ] models.SetPart.objects.bulk_create(setpart_bulk) print("[+] Done") print("[*] Initializing users...") # id username nickname age gender review_count user_bulk = [ models.CustomUser(id=user[0], username=user[1], nickname=user[1], age=user[3], gender=user[4], review_count=user[5]) for user in user_list ] models.CustomUser.objects.bulk_create(user_bulk) print("[+] Done") print("[*] Initializing reviews...") # score user_id lego_set_id review_bulk = [ models.Review(score=review[0], user_id=review[1], lego_set_id=review[2]) for review in review_list ] models.Review.objects.bulk_create(review_bulk) print("[+] Done")
z_matrix = marketshare @ supply_demand sectors = list(zip(sectors, added_value[len(added_value) - 2][1:])) I = np.eye(z_matrix.shape[0]) va = np.repeat(np.array([added_value[-2][1:]]), z_matrix.shape[0], axis=0) a_matrix = z_matrix / va l_matrix = np.linalg.inv(I - a_matrix) cats = ["Importação", "Impostos indiretos líquidos de Subsídios"] + list( map(lambda a: a[0].strip(), added_value)) cats_val = np.array([imports.tolist(), taxes.tolist()] + list(map(lambda a: a[1:], added_value))) cats_val /= np.repeat(np.array([added_value[-2][1:]]), len(cats), axis=0) nmodel = models.Model(name=f"IBGE {year}", economic_matrix=a_matrix, leontief_matrix=l_matrix, catimpct_matrix=cats_val) # noinspection PyUnresolvedReferences nmodel.sectors.extend( models.Sector(name=x[1][0], pos=x[0], value_added=x[1][1]) for x in enumerate(sectors)) # noinspection PyUnresolvedReferences nmodel.categories.extend( models.Category(name=x[1], pos=x[0], description=x[1], unit='none') for x in enumerate(cats)) db.add(nmodel) db.commit() db.flush()