def put(self, stack_name):
        data = StackScrap.parser.parse_args()
        stack = StackModel.find_by_stack_name(stack_name)
        if stack:
            stack.stack_name = data['stack_name']
        else:
            stack = StackModel(stack_name)

        stack.save_to_db()
        return {'stack': stack}
    def post(self):
        data = StackScrap.parser.parse_args()
        url_name = data['stack_name']
        page = requests.get('https://stackshare.io/' + url_name)
        soup = BeautifulSoup(page.content, 'html.parser')

        similars = []
        stack_name = soup.find("meta", attrs={"name": "keywords"})['content']
        stack_home_url = soup.select('.sp-service-logo > a')[0].get('href')
        stack_home_img_src = soup.select('.sp-service-logo > a > img')[0].get(
            'src')

        if stack_name != url_name:
            stack_name = url_name

        if soup is None:
            return {"message": "There is no name"}, 400

        for similar in soup.select(
                '.stack-logo > .similar-services-items > a'):
            stack_similar_name = similar.get('href')[1:]
            similars.append(stack_similar_name)

        stack = StackModel.find_by_stack_name(stack_name)
        if stack is not None:
            return {"message": "A stack with that name already exists"}, 400

        # Create Stack and Set value Getting from Stack.IO
        stack = StackModel(stack_name)
        stack.stack_home_url = stack_home_url
        for name in similars:
            similar_stack = SimilarStackModel.find_by_stack_name(name)
            if similar_stack is None:
                similar_stack = SimilarStackModel(name)
                similar_stack.save_to_db()

            stack.similars.append(similar_stack)

        # Need to save file path and Must be Created Database
        img_file_path = get_stack_img(stack_home_img_src, stack_name)
        stack.save_to_db()

        return {
            "message": "Stack created successfully.",
            'stack_name': stack_name,
            'similars': similars
        }, 201
 def delete(self, stack_name):
     stack = StackModel.find_by_stack_name(stack_name)
     if stack:
         stack.delete_from_db()
     return {'message': 'stack deleted'}
 def get(self, stack_name):
     stack = StackModel.find_by_stack_name(stack_name)
     if stack:
         return stack.json()
     return {'message': 'stack not found'}, 404