def test_date_check(self): data = FIXTURES['sitting_245_1'] dt = datetime.datetime(2015, 5, 14, 15, 4, 3) title = ( 'Kūno kultūros ir sporto įstatymo Nr. I-1151 41 straipsnio ' 'pakeitimo įstatymo projektas Nr. XIIP-2468(2) (svarstymas ir ' 'priėmimas)') votings = [ models.Voting().update_from_item( dict(data, _id='a', datetime='2015-05-14 15:00:00')), models.Voting().update_from_item( dict(data, _id='b', datetime='2015-05-14 15:30:00')), models.Voting().update_from_item( dict(data, _id='c', datetime='2015-05-14 14:00:00')), ] docs = stenogram_helpers.get_voting_for_stenogram(votings, title, dt) ids = [d.key for d in docs] self.assertEqual(ids, ['a', 'b']) votings = [ models.Voting().update_from_item( dict(data, _id='a', datetime='2015-05-14 13:00:00')), models.Voting().update_from_item( dict(data, _id='b', datetime='2015-05-14 15:10:00')), models.Voting().update_from_item( dict(data, _id='c', datetime='2015-05-14 14:00:00')), ] docs = stenogram_helpers.get_voting_for_stenogram(votings, title, dt) ids = [d.key for d in docs] self.assertEqual(ids, ['b'])
def test_single_documents(self): votings = [ models.Voting().update_from_item(FIXTURES['sitting_245_1']), models.Voting().update_from_item(FIXTURES['sitting_245_2']), ] dt = datetime.datetime(2015, 5, 14, 15, 4, 3) title = ( 'Kūno kultūros ir sporto įstatymo Nr. I-1151 41 straipsnio ' 'pakeitimo įstatymo projektas Nr. XIIP-2468(2) (svarstymas ir ' 'priėmimas)') docs = stenogram_helpers.get_voting_for_stenogram(votings, title, dt) ids = [d.key for d in docs] self.assertEqual(ids, ['000oz6'])
def test_get_votings_by_date(self): save_item(FIXTURES['sitting_245_1']) save_item(FIXTURES['sitting_245_2']) docs = stenogram_helpers.get_votings_by_date(datetime.date( 2015, 5, 14)) ids = [d.key for d in docs] self.assertEqual(ids, ['000oz6', '000oz7']) dt = datetime.datetime(2015, 5, 14, 15, 4, 3) title = ( 'Kūno kultūros ir sporto įstatymo Nr. I-1151 41 straipsnio ' 'pakeitimo įstatymo projektas Nr. XIIP-2468(2) (svarstymas ir ' 'priėmimas)') docs = stenogram_helpers.get_voting_for_stenogram(docs, title, dt) ids = [d.key for d in docs] self.assertEqual(ids, ['000oz6'])
def test_many_documents(self): votings = [ models.Voting().update_from_item(FIXTURES['sitting_245_1']), models.Voting().update_from_item(FIXTURES['sitting_245_2']), ] dt = datetime.datetime(2015, 5, 14, 15, 51, 20) title = ( 'Seimo nutarimo „Dėl teismų reorganizavimo“ projektas Nr. ' 'XIIP-3010, Teismų reorganizavimo įstatymo projektas Nr. ' 'XIIP-3011, Teismų įstatymo Nr. I-480 14, 28, 34, 36, 41, 45, ' '55 1 , 56, 63, 65, 70, 80, 101, 107, 114, 120 straipsnių, ' 'trečiojo skirsnio pavadinimo pakeitimo ir Įstatymo papildymo ' '114 1 straipsniu įstatymo projektas Nr. XIIP-3012, Apylinkių ' 'teismų įsteigimo įstatymo Nr. I-2375 pakeitimo įstatymo ' 'projektas Nr. XIIP-3013, Į statymo „Dėl Lietuvos Aukščiausiojo ' 'Teismo, Lietuvos apeliacinio teismo, apygardų teismų įsteigimo, ' 'apygardų ir apylinkių teismų veiklos teritorijų nustatymo bei ' 'Lietuvos Respublikos prokuratūros reformavimo“ Nr. I-497 ' 'pavadinimo ir 6 straipsnio pakeitimo bei 7 straipsnio ' 'pripažinimo netekusiu galios įstatymo projektas Nr. XIIP-3014, ' 'Administracinių teismų įsteigimo įstatymo Nr. VIII-1030 2 ' 'straipsnio pakeitimo ir 3 straipsnio pripažinimo netekusiu ' 'galios įstatymo projektas Nr. XIIP-3015, Civilinio proceso ' 'kodekso 34, 62, 111, 130, 134, 154, 220 1 , 220 2 , 258, 268, ' '269, 325 ir 590 straipsnių pakeitimo įstatymo projektas Nr. ' 'XIIP-3016, Administracinių bylų teisenos įstatymo Nr. VIII-1029 ' '17, 34, 35, 46, 64, 69, 70, 78, 73, 74, 85 ir 139 straipsnių ' 'pakeitimo įstatymo projektas Nr. XIIP-3017, Baudžiamojo proceso ' 'kodekso 40, 59, 60, 123, 124 ir 221 straipsnių pakeitimo ir ' 'Kodekso papildymo 11 1 straipsniu įstatymo projektas Nr. ' 'XIIP-3018, Administracinių teisės pažeidimų kodekso 21, 29, ' '29 1 , 37, 216, 217, 224, 255, 261, 271, 282, 288, 292, 300, ' '302 4 , 302 9 , 314, 337 ir 338 1 straipsnių pakeitimo įstatymo ' 'projektas Nr. XIIP-3019, Antstolių įstatymo Nr. IX-876 20 ir 26 ' 'straipsnių pakeitimo įstatymo projektas Nr. XIIP-3020 ' '( pateikimas )') docs = stenogram_helpers.get_voting_for_stenogram(votings, title, dt) ids = [d.key for d in docs] self.assertEqual(ids, ['000oz7'])
def process_stenogram_topic(self, item, spider): source_url = item['source']['url'] stenogram, created = Stenogram.objects.get_or_create( source_id=item['_id'], defaults={ 'date': item['date'], 'sitting_no': item['sitting_no'], 'sitting_name': item.get('sitting_name'), 'session': item.get('session'), 'source': source_url, } ) if not created and not stenogram.session and item.get('session'): stenogram.session = item['session'] stenogram.save() # TODO: need a robust mechanism to uniquely identify topics # inside a stenogam. Or maybe just drop it entirely topic, created = StenogramTopicModel.objects.get_or_create( stenogram=stenogram, title=item['title'], defaults={ 'source': source_url, 'timestamp': item['date'], } ) if not created: topic.votings.all().delete() # Find voting for this stenogram topic votings = get_votings_by_date(item['date'].date()) docs = get_voting_for_stenogram(votings, item['title'], item['date']) presenter_names = set() for doc in docs: for document in doc.value.get('documents', []): for speaker in document.get('speakers', []): presenter_names.add(speaker['name']) Voting.objects.create(stenogram_topic=topic, voting=doc, timestamp=doc.timestamp) presenters = filter(bool, map(self.mp_matcher.get_mp_by_name, list(presenter_names))) topic.presenters = presenters topic.save() # Recreate all the statements since we can't reliably # identify statements in the database now topic.statements.all().delete() for statement in item['statements']: speaker = self.mp_matcher.get_mp_by_name(statement['speaker']) text = u' '.join(statement['statement']) statement = StenogramStatement( topic=topic, speaker=speaker, speaker_name=statement['speaker'], text=text, source=source_url, as_chairperson=statement['as_chair'], word_count=words_utils.get_word_count(text) ) statement.save() return item