예제 #1
0
 def test_attending_members_invalid_data(self):
     # file does not exist
     with CommitteeMeetingProtocol.get_from_filename('/foo/bar/baz') as protocol:
         with self.assertRaises(IOError): protocol.find_attending_members([])
     # no text
     with CommitteeMeetingProtocol.get_from_text(None) as protocol:
         self.assertEqual([], protocol.find_attending_members([]))
 def test_missing_member_issue132(self):
     # TODO: switch to env_conditional_mock function when PR #9 is merged
     if os.environ.get("NO_MOCKS", "") == "1":
         all_mk_names = get_all_mk_names()
     else:
         all_mk_names = MOCK_OPEN_KNESSET_GET_ALL_MK_NAMES_RESPONSE
     mks, mk_names = all_mk_names
     with CommitteeMeetingProtocol.get_from_filename(
             os.path.join(os.path.dirname(__file__),
                          '20_ptv_367393.doc')) as protocol:
         attending_members = protocol.find_attending_members(mk_names)
         self.assertEqual(
             attending_members,
             [
                 u"אוסאמה סעדי",
                 u"אורי מקלב",
                 u"זאב בנימין בגין",
                 u"יוליה מלינובסקי",
                 # this MK has extra space which caused him not to be found
                 # now we search the stripped name
                 # but the return value still has the extra space (as provided)
                 u"מיכאל מלכיאלי ",
                 u"רויטל סויד",
                 u"בנימין בגין",
             ])
 def test_attending_members_invalid_data(self):
     # file does not exist
     with CommitteeMeetingProtocol.get_from_filename('/foo/bar/baz') as protocol:
         with self.assertRaises(IOError): protocol.find_attending_members([])
     # no text
     with CommitteeMeetingProtocol.get_from_text(None) as protocol:
         self.assertEqual([], protocol.find_attending_members([]))
 def test_docx_protocol_attendees(self):
     source_doc_file_name = os.path.join(os.path.dirname(__file__), '20_ptv_502208.doc')
     protocol_generator = CommitteeMeetingProtocol.get_from_filename(source_doc_file_name)
     with protocol_generator as protocol:
         self.assertEqual(['איתן כבל', 'יצחק וקנין', "עבד אל חכים חאג' יחיא",
                           'איתן ברושי', 'שרן השכל'],
                          protocol.find_attending_members([u"איתן כבל", u"יצחק וקנין",
                                                           u"עבד אל חכים חאג' יחיא",
                                                           u"איתן ברושי", u"שרן השכל"]))
         self.assertEqual({'mks': ['איתן ברושי', 'שרן השכל', 'איתן כבל – היו"ר',
                                   'יצחק וקנין', "עבד אל חכים חאג' יחיא"],
                           'invitees': [
                               {'name': 'צביקה כהן', 'role': 'סמנכ"ל בכיר למימון והשקעות, משרד החקלאות ופיתוח הכפר'},
                               {'name': 'אורי צוק-בר',
                                'role': 'סמנכ"ל מחקר כלכלה ואסטרטגיה, משרד החקלאות ופיתוח הכפר'},
                               {'name': 'אסף לוי', 'role': 'סמנכ"ל גורמי יצור, משרד החקלאות ופיתוח הכפר'},
                               {'name': 'דפנה טיש'}, {'name': 'עמרי איתן בן צבי'},
                               {'name': 'עדי טל נוסבוים'},
                               {'name': 'ליאורה עופרי'},
                               {'name': 'עו"ד, משרד החקלאות ופיתוח הכפר'},
                               {'name': 'עו"ד, מח\' יעוץ וחקיקה, משרד המשפטים'},
                               {'name': 'יועמ"ש, המשרד לביטחון פנים'},
                               {'name': 'עו"ד, המשרד להגנת הסביבה'},
                               {'name': 'צבי אלון', 'role': 'מנכ"ל, מועצת הצמחים'},
                               {'name': 'אמיר שניידר'},
                               {'name': 'ירון סולומון'},
                               {'name': 'יועמ"ש, התאחדות האיכרים והחקלאים בישראל'},
                               {'name': 'מנהל המחלקה להתיישבות, האיחוד החקלאי'},
                               {'name': 'אריאל ארליך', 'role': 'ראש מחלקת ליטיגציה, פורום קהלת'},
                               {'name': 'מיכל זליקוביץ', 'role': 'נציגה, פורום קהלת'},
                               {'name': 'יעל שביט', 'role': 'שדלן/ית'}],
                           'legal_advisors': ['איתי עצמון'],
                           'manager': ['לאה ורון']},
                          protocol.attendees)
예제 #5
0
 def _filter_row(self, meeting_protocol, **kwargs):
     parts_relpath = os.path.join(
         str(meeting_protocol["committee_id"]),
         "{}.csv".format(meeting_protocol["meeting_id"]))
     text_relpath = os.path.join(
         str(meeting_protocol["committee_id"]),
         "{}.txt".format(meeting_protocol["meeting_id"]))
     parts_filename = self._get_filename(parts_relpath)
     text_filename = self._get_filename(text_relpath)
     protocol_filename = meeting_protocol["protocol_file"]
     protocol_ext = protocol_filename.strip()[-4:]
     if protocol_ext == ".doc":
         # for now, only doc files are being parsed and should be added to all_filenames
         if parts_relpath not in self._all_filenames:
             self._all_filenames += [parts_relpath, text_relpath]
             os.makedirs(os.path.dirname(parts_filename), exist_ok=True)
     if not os.path.exists(parts_filename):
         if protocol_ext == ".doc":
             with CommitteeMeetingProtocol.get_from_filename(
                     protocol_filename) as protocol:
                 with open(text_filename, "w") as f:
                     f.write(protocol.text)
                     logging.info(
                         "parsed doc to text -> {}".format(text_filename))
                 with open(parts_filename, "w") as f:
                     csv_writer = csv.writer(f)
                     csv_writer.writerow(["header", "body"])
                     for part in protocol.parts:
                         csv_writer.writerow([part.header, part.body])
                     logging.info(
                         "parsed parts file -> {}".format(parts_filename))
         elif protocol_ext == ".rtf":
             # rtf parsing proved difficult, skipping for now
             text_filename = None
             parts_filename = None
             # rtf_to_txt_filename = self._rtf_to_txt(protocol_filename)
             # shutil.copyfile(rtf_to_txt_filename, text_filename)
             # os.unlink(rtf_to_txt_filename)
             # logging.info("parsed rtf to text -> {}".format(text_filename))
             # with open(text_filename) as f:
             #     with CommitteeMeetingProtocol.get_from_text(f.read()) as protocol:
             #         with open(parts_filename, "w") as f:
             #             csv_writer = csv.writer(f)
             #             csv_writer.writerow(["header", "body"])
             #             for part in protocol.parts:
             #                 csv_writer.writerow([part.header, part.body])
             #             logging.info("parsed parts file -> {}".format(parts_filename))
         else:
             raise Exception("unknown extension: {}".format(protocol_ext))
     yield {
         "committee_id": meeting_protocol["committee_id"],
         "meeting_id": meeting_protocol["meeting_id"],
         "protocol_file": protocol_filename,
         "text_file": text_filename,
         "parts_file": parts_filename
     }
 def test_protocol_attendenace_strange_title(self):
     source_doc_file_name = os.path.join(os.path.dirname(__file__),
                                         '20_ptv_321195.doc')
     protocol_generator = CommitteeMeetingProtocol.get_from_filename(
         source_doc_file_name)
     with protocol_generator as protocol:
         self.assertEqual([u"קארין אלהרר", u"דוד אמסלם", u"אוסאמה סעדי"],
                          protocol.find_attending_members([
                              u"קארין אלהרר", u"דוד אמסלם", u"אוסאמה סעדי"
                          ]))
예제 #7
0
 def _parse_doc_protocol(self, committee_id, meeting_id, protocol_filename, parts_filename, text_filename):
     try:
         with CommitteeMeetingProtocol.get_from_filename(protocol_filename) as protocol:
             with open(text_filename, "w") as f:
                 f.write(protocol.text)
                 logging.info("parsed doc to text -> {}".format(text_filename))
             self._parse_protocol_parts(parts_filename, protocol)
     except (AntiwordException, subprocess.SubprocessError):
         logging.exception("committee {} meeting {}: failed to parse doc file, skipping".format(committee_id,
                                                                                                meeting_id))
         return False
     return True
 def _parse_doc_protocol(self, committee_id, meeting_id, bucket, protocol_object_name, parts_object_name, text_object_name):
     logging.info("parsing doc protocol {} --> {}, {}".format(protocol_object_name, parts_object_name, text_object_name))
     with object_storage.temp_download(self.s3, bucket, protocol_object_name) as protocol_filename:
         try:
             with CommitteeMeetingProtocol.get_from_filename(protocol_filename) as protocol:
                 object_storage.write(self.s3, bucket, text_object_name, protocol.text, public_bucket=True)
                 self._parse_protocol_parts(bucket, parts_object_name, protocol)
         except (
                 AntiwordException,  # see https://github.com/hasadna/knesset-data-pipelines/issues/15
                 subprocess.SubprocessError,
                 xml.etree.ElementTree.ParseError  # see https://github.com/hasadna/knesset-data-pipelines/issues/32
         ):
             logging.exception("committee {} meeting {}: failed to parse doc file, skipping".format(committee_id, meeting_id))
             return False
     return True
예제 #9
0
 def setUp(self):
     source_doc_file_name = os.path.join(os.path.dirname(__file__), '20_ptv_317899.doc')
     self.protocol_generator = CommitteeMeetingProtocol.get_from_filename(source_doc_file_name)
예제 #10
0
 def test_protocol_attendenace_strange_title(self):
     source_doc_file_name = os.path.join(os.path.dirname(__file__), '20_ptv_321195.doc')
     protocol_generator = CommitteeMeetingProtocol.get_from_filename(source_doc_file_name)
     with protocol_generator as protocol:
         self.assertEqual([u"קארין אלהרר", u"דוד אמסלם", u"אוסאמה סעדי"],
                          protocol.find_attending_members([u"קארין אלהרר", u"דוד אמסלם", u"אוסאמה סעדי"]))
    def test_docx_protocol_parts(self):
        source_doc_file_name = os.path.join(os.path.dirname(__file__),
                                            '20_ptv_502208.doc')
        protocol_generator = CommitteeMeetingProtocol.get_from_filename(
            source_doc_file_name)
        with protocol_generator as protocol:
            self.assertProtocolPartEquals(
                protocol.parts[0], '', u"""פרוטוקול של ישיבת ועדה

הכנסת העשרים

הכנסת



12
ועדת הכלכלה
27/06/2018


מושב רביעי



פרוטוקול מס' 800
מישיבת ועדת הכלכלה
יום רביעי, י"ד בתמוז התשע"ח (27 ביוני 2018), שעה 9:00""")
            self.assertProtocolPartEquals(
                protocol.parts[1], u"""סדר היום""",
                u"""הצעת חוק מועצת הצמחים (ייצור ושיווק) (תיקון מס' 10), התשע"ד-2014"""
            )
            self.assertProtocolPartEquals(protocol.parts[2], u"""נכחו""",
                                          u"""""")
            self.assertProtocolPartEquals(
                protocol.parts[3], u"""חברי הוועדה:""", u"""איתן כבל – היו"ר
יצחק וקנין
עבד אל חכים חאג' יחיא""")
            self.assertProtocolPartEquals(protocol.parts[4], u"""חברי הכנסת""",
                                          u"""איתן ברושי
שרן השכל""")
            self.assertProtocolPartEquals(protocol.parts[5], u"""נכחו:""",
                                          u"""""")
            self.assertProtocolPartEquals(
                protocol.parts[6], u"""מוזמנים:""",
                u"""צביקה כהן - סמנכ"ל בכיר למימון והשקעות, משרד החקלאות ופיתוח הכפר

אורי צוק-בר - סמנכ"ל מחקר כלכלה ואסטרטגיה, משרד החקלאות ופיתוח הכפר

אסף לוי - סמנכ"ל גורמי יצור, משרד החקלאות ופיתוח הכפר

דפנה טיש
עמרי איתן בן צבי
עדי טל נוסבוים
ליאורה עופרי
	–
–
–
–
	עו"ד, משרד החקלאות ופיתוח הכפר
עו"ד, מח' יעוץ וחקיקה, משרד המשפטים
יועמ"ש, המשרד לביטחון פנים
עו"ד, המשרד להגנת הסביבה

צבי אלון - מנכ"ל, מועצת הצמחים

אמיר שניידר
ירון סולומון
	–
–
	יועמ"ש, התאחדות האיכרים והחקלאים בישראל
מנהל המחלקה להתיישבות, האיחוד החקלאי

אריאל ארליך - ראש מחלקת ליטיגציה, פורום קהלת

מיכל זליקוביץ - נציגה, פורום קהלת

יעל שביט - שדלן/ית""")
 def setUp(self):
     source_doc_file_name = os.path.join(os.path.dirname(__file__),
                                         '20_ptv_317899.doc')
     self.protocol_generator = CommitteeMeetingProtocol.get_from_filename(
         source_doc_file_name)