Beispiel #1
0
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])
Beispiel #4
0
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
Beispiel #5
0
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)
Beispiel #11
0
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