def testFunctions( self ): from openfish import functions result = functions.convertFromSnakeCaseToCamelCase( "search_history" ) self.assertEqual( result, "SearchHistory" ) result = functions.convertFromSnakeCaseToCamelCase( "entry" ) self.assertEqual( result, "Entry" )
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))
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))
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))
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))
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))
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))