def post(action): ks = kintoneInterface() app = ks.service.app(action.order.app_id) app_index = ks.get_application_index(app.app_id) letter = action.order.letter() analyzer = TextAnalyzer() # get form structure layouts = app.administration().form().get_layout(app.app_id).layouts fields = [] for ly in layouts: fields += ly.fields data = analyzer.map_letter_to_field(letter, fields) # file field file_field = [f for f in fields if f.field_type == "FILE"] if len(file_field) > 0 and len(letter.attached_files) > 0: from pykintone.structure_field import File at = letter.attached_files[0] f = File.upload(at["content"], app, file_name=at["filename"]) data[file_field[0].code] = { "value": [{ "fileKey": f.file_key }] } result = app.create(data) return result, app_index
def test_map_letter_to_field(self): from kanaria.core.model.letter import Letter import pykintone.application_settings.form_field as ff body = """ 本日のお仕事 11/21 今日もひたすらPythonのコードを書いた。やれやれだぜ。 もし障害が起きたら以下に連絡をください。 [email protected] 09012221312 """ letter = Letter("", body) fields = [ ff.BaseFormField.create("SINGLE_LINE_TEXT", "title", "タイトル"), ff.BaseFormField.create("MULTI_LINE_TEXT", "description", "報告内容"), ff.BaseFormField.create("DATE", "reported_date", "報告日時"), ff.BaseFormField.create("SINGLE_LINE_TEXT", "mail_address", "メールアドレス"), ff.BaseFormField.create("SINGLE_LINE_TEXT", "telephone", "電話番号"), ff.BaseFormField.create("MULTI_LINE_TEXT", "comment", "コメント") ] separator = TextAnalyzer() data = separator.map_letter_to_field(letter, fields) print(data) for n in [f.code for f in fields if f.code != "comment"]: self.assertTrue(n in data) self.assertTrue(data[n])
def test_map_letter_to_field(self): from kanaria.core.model.letter import Letter import pykintone.application_settings.form_field as ff body = """ 本日のお仕事 11/21 今日もひたすらPythonのコードを書いた。やれやれだぜ。 もし障害が起きたら以下に連絡をください。 [email protected] 09012221312 """ letter = Letter("", body) fields = [ ff.BaseFormField.create("SINGLE_LINE_TEXT", "title", "タイトル"), ff.BaseFormField.create("MULTI_LINE_TEXT", "description", "報告内容"), ff.BaseFormField.create("DATE", "reported_date", "報告日時"), ff.BaseFormField.create("SINGLE_LINE_TEXT", "mail_address", "メールアドレス"), ff.BaseFormField.create("SINGLE_LINE_TEXT", "telephone", "電話番号"), ff.BaseFormField.create("MULTI_LINE_TEXT", "comment", "コメント") ] separator = TextAnalyzer() data = separator.map_letter_to_field(letter, fields) print(data) for n in [f.code for f in fields if f.code != "comment"]: self.assertTrue(n in data) self.assertTrue(data[n])
def update_application(action): from kanaria.core.environment import Environment kintone = kintoneInterface() order_type = action.order.order_type() field_name = action.order.target app = kintone.service.app(action.order.app_id) app_index = kintone.get_application_index(app.app_id) result = None with app.administration().form() as admin: if order_type == OrderType.ADD_ITEM: import pykintone.application_settings.form_field as ff analyzer = TextAnalyzer() field_type = analyzer.estimate_field_type(field_name) field_code = Environment.get_translator(kintone._env).translate(field_name, "en").replace(" ", "_") f = ff.BaseFormField.create(field_type, field_code, field_name) result = admin.add(f) else: fields = admin.get().fields target = [f for f in fields if f.label == field_name] if len(target) > 0: result = admin.delete(target[0]) return result, app_index
def update_application(action): from kanaria.core.environment import Environment kintone = kintoneInterface() order_type = action.order.order_type() field_name = action.order.target app = kintone.service.app(action.order.app_id) app_index = kintone.get_application_index(app.app_id) result = None with app.administration().form() as admin: if order_type == OrderType.ADD_ITEM: import pykintone.application_settings.form_field as ff analyzer = TextAnalyzer() field_type = analyzer.estimate_field_type(field_name) field_code = Environment.get_translator(kintone._env).translate( field_name, "en").replace(" ", "_") f = ff.BaseFormField.create(field_type, field_code, field_name) result = admin.add(f) else: fields = admin.get().fields target = [f for f in fields if f.label == field_name] if len(target) > 0: result = admin.delete(target[0]) return result, app_index
def test_split_by_data_type(self): separator = TextAnalyzer() text = """ 11/1 お客様より連絡あり。 [email protected] 090-1111-1234 折り返し連絡してほしいとのことです。 """ fields = separator.split_by_data_type(text) self.assertEqual(4, len(fields)) self.assertEqual(DataType.DATE, fields[0].data_type)
def test_split_by_blank_line(self): separator = TextAnalyzer() text = """ 今日はとてもいい天気でした。 報告事項は特にありません。 2015/11/2 """ fields = separator.split_by_blank_line(text) self.assertEqual(3, len(fields)) self.assertEqual(DataType.DATE, fields[2].data_type)
def test_split_by_data_type(self): separator = TextAnalyzer() text = """ 11/1 お客様より連絡あり。 [email protected] 090-1111-1234 折り返し連絡してほしいとのことです。 """ fields = separator.split_by_data_type(text) self.assertEqual(4, len(fields)) self.assertEqual(DataType.DATE, fields[0].data_type)
def test_split_by_blank_line(self): separator = TextAnalyzer() text = """ 今日はとてもいい天気でした。 報告事項は特にありません。 2015/11/2 """ fields = separator.split_by_blank_line(text) self.assertEqual(3, len(fields)) self.assertEqual(DataType.DATE, fields[2].data_type)
def test_separator_pattern(self): separator = TextAnalyzer() def confirm(vs, ms): i = 0 for m in ms: s = m.group() self.assertEqual(vs[i], s) # print(s) i += 1 self.assertEqual(i, len(vs)) # mail address mails = [ "*****@*****.**", "*****@*****.**", "*****@*****.**" ] matched = separator.pattern_mail.finditer( "私のメールアドレスは{0}です。彼のは{1}、彼女のは{2}です。".format(*mails)) confirm(mails, matched) # date dates = ["11/21", "1/1", "2015/01/10"] matched = separator.pattern_date.finditer( "今日は{0}、お正月は{1}、会議の日付は{2}です。".format(*dates)) confirm(dates, matched) # phone number phones = ["09099999999", "090-9999-9999", "03-1111-1111", "0311111111"] matched = separator.pattern_phone.finditer( "私の携帯は{0}か{1}、会社の連絡先は{2}か{3}です。".format(*phones)) confirm(phones, matched)
def post(action): ks = kintoneInterface() app = ks.service.app(action.order.app_id) app_index = ks.get_application_index(app.app_id) letter = action.order.letter() analyzer = TextAnalyzer() # get form structure layouts = app.administration().form().get_layout(app.app_id).layouts fields = [] for ly in layouts: fields += ly.fields data = analyzer.map_letter_to_field(letter, fields) # file field file_field = [f for f in fields if f.field_type == "FILE"] if len(file_field) > 0 and len(letter.attached_files) > 0: from pykintone.structure_field import File at = letter.attached_files[0] f = File.upload(at["content"], app, file_name=at["filename"]) data[file_field[0].code] = {"value": [{"fileKey": f.file_key}]} result = app.create(data) return result, app_index