Esempio n. 1
0
	def testFunctions( self ):
		from openfish import functions
		result = functions.convertFromSnakeCaseToCamelCase( "search_history" )
		self.assertEqual( result, "SearchHistory" )

		result = functions.convertFromSnakeCaseToCamelCase( "entry" )
		self.assertEqual( result, "Entry" )
Esempio n. 2
0
    def show(self, class_name):
        id = self.request.get("id", None)
        if id is None:
            out = {
                "meta": functions.createMetaData(
                    status="fail", code=400, method_name="showObjects", message="parameter missing"
                )
            }
            self.response.out.write(json.encode(out))
            return

            # 文字列からモデルクラス取得
        classPath_str = "models." + functions.convertFromSnakeCaseToCamelCase(class_name)
        klass = webapp2.import_string(classPath_str)
        obj = klass.get_by_id(int(id))

        if obj and obj.is_deleted == False:
            out = {
                "meta": functions.createMetaData(status="ok", code=200, method_name="showObjects"),
                "response": {"objects": [obj.toDict(full=True)]},
            }
        else:
            out = {
                "meta": functions.createMetaData(
                    status="fail", code=400, method_name="showObjects", message="object not found"
                )
            }

        self.response.out.write(json.encode(out))
Esempio n. 3
0
    def create(self, class_name):
        logging.info(self.request.arguments())
        if self.checkModel(class_name) == False:
            return

        if models.BlackList.checkBanned():
            return

            # 文字列からモデルクラス、エンティティ取得
        classPath_str = "models." + functions.convertFromSnakeCaseToCamelCase(class_name)
        klass = webapp2.import_string(classPath_str)

        # マスタデータかどうかチェック & マスターデータだったら管理者以外は作成できないように。
        if klass.isMasterData == True and users.is_current_user_admin() == False:
            logging.warn("管理者以外がマスタデータを作成しようとしました")
            return False

            # 保存開始
        entity = klass()
        self.setPropertyFromRequestData(entity, self.request)
        entity.put()

        # 出力
        out = {
            "meta": functions.createMetaData(status="ok", code=200, method_name="createCustomObject"),
            "response": {"objects": [entity.toDict()]},
        }
        self.response.out.write(json.encode(out))
Esempio n. 4
0
    def query(self, class_name):
        if self.checkModel(class_name) == False:
            return

        page = self.request.get("page", 1)
        per_page = self.request.get("per_page", 10)
        limit = self.request.get("limit", 100)
        skip = self.request.get("skip", 0)
        where = self.request.get("where")
        order = self.request.get("order")
        mine = self.request.get("mine", None)
        response_json_depth = self.request.get("response_json_depth", 3)

        # 出力ひな形作成
        out = {
            "meta": functions.createMetaData(status="ok", code=200, method_name="queryCustomObjects"),
            "response": {"objects": []},
        }

        # 文字列からモデルクラス取得
        classPath_str = "models." + functions.convertFromSnakeCaseToCamelCase(class_name)
        klass = webapp2.import_string(classPath_str)

        gql_str = ""
        if where:
            gql_str = "WHERE " + where + " AND"
        else:
            gql_str = "WHERE"
        gql_str += " is_deleted=False"

        # モデルに is_public プロパティがあれば、それを暗黙で考慮する
        if hasattr(klass, "is_public") == True:
            gql_str += " AND is_public=True"

            # mine フラグがあったら自分の投稿したエントリーをフィルタ
        if (mine == "true") and (self.user is not None):
            gql_str += " AND user_key=" + self.user.key.id()

        if order:
            gql_str = gql_str + " ORDER BY " + order

        q = klass.gql(gql_str)
        results = q.fetch(int(limit))
        klass.prefetchReferences(results)

        for result in results:
            out["response"]["objects"].append(result.toDict(full=False))

        self.response.out.write(json.encode(out))
Esempio n. 5
0
    def addTag(self, class_name):
        if self.checkModel(class_name) == False:
            return

        id = self.request.get("id", None)
        tag = self.request.get("tag", None)

        # パラメータチェック
        if id is None or tag is None:
            message = "パラメータが不正です"
            logging.warn(message)
            out = {"meta": functions.createMetaData(status="fail", code=401, method_name="addTag", message=message)}
            self.response.out.write(json.encode(out))
            return

            # 文字列からモデルクラス、エンティティ取得
        classPath_str = "models." + functions.convertFromSnakeCaseToCamelCase(class_name)
        klass = webapp2.import_string(classPath_str)
        entity = klass.get_by_id(int(id))
        if entity is None:
            message = "エンティティが見つかりません"
            logging.warn(message)
            out = {"meta": functions.createMetaData(status="fail", code=401, method_name="addTag", message=message)}
            self.response.out.write(json.encode(out))
            return

        currentTag = entity.tags
        currentTag.append(tag)
        entity.put()

        # 出力
        out = {
            "meta": functions.createMetaData(status="ok", code=200, method_name="addTag"),
            "response": {"objects": [entity.toDict()]},
        }
        self.response.out.write(json.encode(out))
Esempio n. 6
0
    def update(self, class_name):
        if self.checkModel(class_name) == False:
            return

            # logging.info( self.request.arguments() )
        id = self.request.get("id", None)

        # パラメータチェック
        if id is None:
            message = "パラメータが不正です"
            logging.warn(message)
            out = {
                "meta": functions.createMetaData(status="fail", code=401, method_name="updateObject", message=message)
            }
            self.response.out.write(json.encode(out))
            return

            # 文字列からモデルクラス、エンティティ取得
        classPath_str = "models." + functions.convertFromSnakeCaseToCamelCase(class_name)
        klass = webapp2.import_string(classPath_str)
        entity = klass.get_by_id(int(id))
        if entity is None:
            message = u"エンティティが見つかりません id=" + id
            logging.warn(message)
            out = {
                "meta": functions.createMetaData(status="fail", code=401, method_name="updateObject", message=message)
            }
            self.response.out.write(json.encode(out))
            return

            # マスタデータかどうかチェック & マスターデータだったら管理者以外は更新できないように。
        if hasattr(klass, "isMasterData") and klass.isMasterData and users.is_current_user_admin() == False:
            logging.warn("管理者以外がマスタデータを更新しようとしました")
            return False

            # ログインチェック
        if hasattr(entity, "user_key") == True and entity.user_key and users.is_current_user_admin() == False:
            if self.user is None:
                message = "ログインが必要です。"
                logging.warn(message)
                out = {
                    "meta": functions.createMetaData(
                        status="fail", code=401, method_name="updateObject", message=message
                    )
                }
                self.response.out.write(json.encode(out))
                return

                # 投稿ユーザーチェック
            if entity.user_key != self.user.key:
                message = "あなたの投稿したエンティティではありません"
                logging.warn(message)
                out = {
                    "meta": functions.createMetaData(
                        status="fail", code=401, method_name="updateObject", message=message
                    )
                }
                self.response.out.write(json.encode(out))
                return

                # --- 各種チェック終了 ---

                # 更新して保存
        self.setPropertyFromRequestData(entity, self.request)
        entity.put()

        # 出力
        out = {
            "meta": functions.createMetaData(status="ok", code=200, method_name="updateObject"),
            "response": {"objects": [entity.toDict()]},
        }
        self.response.out.write(json.encode(out))
Esempio n. 7
0
    def delete(self, class_name):
        if self.checkModel(class_name) == False:
            return

        id = self.request.get("id", None)

        # パラメータチェック
        if id is None:
            message = "parameter missing"
            logging.error(message)
            out = {
                "meta": functions.createMetaData(status="fail", code=401, method_name="deleteObject", message=message)
            }
            self.response.out.write(json.encode(out))
            return

            # 文字列からモデルクラス、エンティティ取得
        classPath_str = "models." + functions.convertFromSnakeCaseToCamelCase(class_name)
        klass = webapp2.import_string(classPath_str)
        entity = klass.get_by_id(int(id))
        if entity is None:
            message = "エンティティが見つかりません"
            logging.error(message)
            out = {
                "meta": functions.createMetaData(status="fail", code=401, method_name="deleteObject", message=message)
            }
            self.response.out.write(json.encode(out))
            return

        if users.is_current_user_admin() == False:
            # マスターデータだったら管理者以外は削除できない。
            if klass.isMasterData == True:
                logging.error("管理者以外がマスタデータを削除しようとしました")
                return False

            if self.user is None:
                message = "ログインが必要です。"
                logging.error(message)
                out = {
                    "meta": functions.createMetaData(
                        status="fail", code=401, method_name="deleteObject", message=message
                    )
                }
                self.response.out.write(json.encode(out))
                return

                # 投稿ユーザーチェック
            if entity.user_key != self.user.key:
                message = "あなたの投稿したエンティティではありません。"
                logging.error(message)
                out = {
                    "meta": functions.createMetaData(
                        status="fail", code=401, method_name="deleteObject", message=message
                    )
                }
                self.response.out.write(json.encode(out))
                return

        entity.is_deleted = True
        entity.put()

        # 出力
        out = {"meta": functions.createMetaData(status="ok", code=200, method_name="deleteObject")}
        self.response.out.write(json.encode(out))