pointblank 0.8.3__py3-none-any.whl → 0.8.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1543,3 +1543,547 @@ VALIDATION_REPORT_TEXT = {
1543
1543
  "el": "ΤΥΠΟΙ SQL",
1544
1544
  },
1545
1545
  }
1546
+
1547
+
1548
+ STEP_REPORT_TEXT = {
1549
+ "column_matches_regex": {
1550
+ "en": "{column} matches regex {values}",
1551
+ "fr": "{column} correspond à l'expression régulière {values}",
1552
+ "de": "{column} stimmt mit regulärem Ausdruck {values} überein",
1553
+ "it": "{column} corrisponde all'espressione regolare {values}",
1554
+ "es": "{column} coincide con la expresión regular {values}",
1555
+ "pt": "{column} corresponde à expressão regular {values}",
1556
+ "ro": "{column} se potrivește cu expresia regulată {values}",
1557
+ "tr": "{column} düzenli ifade {values} ile eşleşiyor",
1558
+ "zh-Hans": "{column} 匹配正则表达式 {values}",
1559
+ "zh-Hant": "{column} 匹配正則表達式 {values}",
1560
+ "ja": "{column} が正規表現 {values} に一致",
1561
+ "ko": "{column}이(가) 정규식 {values}와(과) 일치",
1562
+ "vi": "{column} khớp với biểu thức chính quy {values}",
1563
+ "ru": "{column} соответствует регулярному выражению {values}",
1564
+ "cs": "{column} odpovídá regulárnímu výrazu {values}",
1565
+ "pl": "{column} pasuje do wyrażenia regularnego {values}",
1566
+ "da": "{column} matcher regulært udtryk {values}",
1567
+ "sv": "{column} matchar reguljärt uttryck {values}",
1568
+ "nb": "{column} samsvarer med regulæruttrykk {values}",
1569
+ "nl": "{column} komt overeen met reguliere expressie {values}",
1570
+ "fi": "{column} vastaa säännöllistä lauseketta {values}",
1571
+ "is": "{column} passar við reglulega segðina {values}",
1572
+ "ar": "{column} يتطابق مع التعبير المنتظم {values}",
1573
+ "hi": "{column} नियमित अभिव्यक्ति {values} से मेल खाता है",
1574
+ "el": "{column} ταιριάζει με την κανονική έκφραση {values}",
1575
+ },
1576
+ "column_is_null": {
1577
+ "en": "{column} is Null",
1578
+ "fr": "{column} est Null",
1579
+ "de": "{column} ist Null",
1580
+ "it": "{column} è Null",
1581
+ "es": "{column} es Null",
1582
+ "pt": "{column} é Null",
1583
+ "ro": "{column} este Null",
1584
+ "tr": "{column} Null değerine sahip",
1585
+ "zh-Hans": "{column} 为 Null",
1586
+ "zh-Hant": "{column} 為 Null",
1587
+ "ja": "{column} は Null",
1588
+ "ko": "{column}이(가) Null임",
1589
+ "vi": "{column} là Null",
1590
+ "ru": "{column} равно Null",
1591
+ "cs": "{column} je Null",
1592
+ "pl": "{column} jest Null",
1593
+ "da": "{column} er Null",
1594
+ "sv": "{column} är Null",
1595
+ "nb": "{column} er Null",
1596
+ "nl": "{column} is Null",
1597
+ "fi": "{column} on Null",
1598
+ "is": "{column} er Null",
1599
+ "ar": "{column} خالي",
1600
+ "hi": "{column} Null है",
1601
+ "el": "{column} είναι Null",
1602
+ },
1603
+ "column_is_not_null": {
1604
+ "en": "{column} is Not Null",
1605
+ "fr": "{column} n'est pas Null",
1606
+ "de": "{column} ist nicht Null",
1607
+ "it": "{column} non è Null",
1608
+ "es": "{column} no es Null",
1609
+ "pt": "{column} não é Null",
1610
+ "ro": "{column} nu este Null",
1611
+ "tr": "{column} Null değerine sahip değil",
1612
+ "zh-Hans": "{column} 不为 Null",
1613
+ "zh-Hant": "{column} 不為 Null",
1614
+ "ja": "{column} は Null ではない",
1615
+ "ko": "{column}이(가) Null이 아님",
1616
+ "vi": "{column} không phải Null",
1617
+ "ru": "{column} не равно Null",
1618
+ "cs": "{column} není Null",
1619
+ "pl": "{column} nie jest Null",
1620
+ "da": "{column} er ikke Null",
1621
+ "sv": "{column} är inte Null",
1622
+ "nb": "{column} er ikke Null",
1623
+ "nl": "{column} is niet Null",
1624
+ "fi": "{column} ei ole Null",
1625
+ "is": "{column} er ekki Null",
1626
+ "ar": "{column} غير خالي",
1627
+ "hi": "{column} Null नहीं है",
1628
+ "el": "{column} δεν είναι Null",
1629
+ },
1630
+ "report_for_step_i": {
1631
+ "en": "Report for Validation Step {i}",
1632
+ "fr": "Rapport pour l'étape de validation {i}",
1633
+ "de": "Bericht für Validierungsschritt {i}",
1634
+ "it": "Rapporto per la fase di convalida {i}",
1635
+ "es": "Informe para el paso de validación {i}",
1636
+ "pt": "Relatório para a etapa de validação {i}",
1637
+ "ro": "Raport pentru pasul de validare {i}",
1638
+ "tr": "Doğrulama Adımı {i} için Rapor",
1639
+ "zh-Hans": "验证步骤 {i} 的报告",
1640
+ "zh-Hant": "驗證步驟 {i} 的報告",
1641
+ "ja": "検証ステップ {i} のレポート",
1642
+ "ko": "검증 단계 {i}에 대한 보고서",
1643
+ "vi": "Báo cáo cho bước kiểm định {i}",
1644
+ "ru": "Отчет для шага проверки {i}",
1645
+ "cs": "Zpráva pro validační krok {i}",
1646
+ "pl": "Raport dla kroku walidacji {i}",
1647
+ "da": "Rapport for valideringstrin {i}",
1648
+ "sv": "Rapport för valideringssteg {i}",
1649
+ "nb": "Rapport for valideringstrinn {i}",
1650
+ "nl": "Rapport voor validatiestap {i}",
1651
+ "fi": "Raportti validointivaiheelle {i}",
1652
+ "is": "Skýrsla fyrir gildisstaðfestingarskref {i}",
1653
+ "ar": "تقرير لخطوة التحقق {i}",
1654
+ "hi": "सत्यापन चरण {i} के लिए रिपोर्ट",
1655
+ "el": "Αναφορά για το βήμα επικύρωσης {i}",
1656
+ },
1657
+ "assertion_header_text": {
1658
+ "en": "ASSERTION",
1659
+ "fr": "ASSERTION",
1660
+ "de": "BEHAUPTUNG",
1661
+ "it": "ASSERZIONE",
1662
+ "es": "ASERCIÓN",
1663
+ "pt": "ASSERÇÃO",
1664
+ "ro": "AFIRMAȚIE",
1665
+ "tr": "İDDİA",
1666
+ "zh-Hans": "断言",
1667
+ "zh-Hant": "斷言",
1668
+ "ja": "アサーション",
1669
+ "ko": "어설션",
1670
+ "vi": "KHẲNG ĐỊNH",
1671
+ "ru": "УТВЕРЖДЕНИЕ",
1672
+ "cs": "TVRZENÍ",
1673
+ "pl": "ASERCJA",
1674
+ "da": "PÅSTAND",
1675
+ "sv": "PÅSTÅENDE",
1676
+ "nb": "PÅSTAND",
1677
+ "nl": "BEWERING",
1678
+ "fi": "VÄITTÄMÄ",
1679
+ "is": "STAÐHÆFING",
1680
+ "ar": "تأكيد",
1681
+ "hi": "कथन",
1682
+ "el": "ΙΣΧΥΡΙΣΜΟΣ",
1683
+ },
1684
+ "failure_rate_summary": {
1685
+ "en": "{failure_rate} TEST UNIT FAILURES IN COLUMN <strong>{column_position}</strong>",
1686
+ "fr": "{failure_rate} ÉCHECS D'UNITÉS DE TEST DANS LA COLONNE <strong>{column_position}</strong>",
1687
+ "de": "{failure_rate} TESTEINHEITENFEHLER IN SPALTE <strong>{column_position}</strong>",
1688
+ "it": "{failure_rate} FALLIMENTI DI UNITÀ DI TEST NELLA COLONNA <strong>{column_position}</strong>",
1689
+ "es": "{failure_rate} FALLOS DE UNIDAD DE PRUEBA EN LA COLUMNA <strong>{column_position}</strong>",
1690
+ "pt": "{failure_rate} FALHAS DE UNIDADE DE TESTE NA COLUNA <strong>{column_position}</strong>",
1691
+ "ro": "{failure_rate} EȘECURI ALE UNITĂȚILOR DE TEST ÎN COLOANA <strong>{column_position}</strong>",
1692
+ "tr": "{failure_rate} <strong>{column_position}</strong> SÜTUNUNDA TEST BİRİMİ HATALARI",
1693
+ "zh-Hans": "列 <strong>{column_position}</strong> 中有 {failure_rate} 个测试单元失败",
1694
+ "zh-Hant": "欄位 <strong>{column_position}</strong> 中有 {failure_rate} 個測試單元失敗",
1695
+ "ja": "列 <strong>{column_position}</strong> で {failure_rate} テストユニットの失敗",
1696
+ "ko": "<strong>{column_position}</strong> 열에서 {failure_rate} 테스트 단위 실패",
1697
+ "vi": "{failure_rate} LỖI ĐƠN VỊ KIỂM TRA TRONG CỘT <strong>{column_position}</strong>",
1698
+ "ru": "{failure_rate} СБОЕВ ТЕСТОВЫХ ЕДИНИЦ В СТОЛБЦЕ <strong>{column_position}</strong>",
1699
+ "cs": "{failure_rate} SELHÁNÍ TESTOVACÍCH JEDNOTEK VE SLOUPCI <strong>{column_position}</strong>",
1700
+ "pl": "{failure_rate} NIEPOWODZEŃ JEDNOSTEK TESTOWYCH W KOLUMNIE <strong>{column_position}</strong>",
1701
+ "da": "{failure_rate} TEST ENHED FEJL I KOLONNE <strong>{column_position}</strong>",
1702
+ "sv": "{failure_rate} TESTENHETSFEL I KOLUMN <strong>{column_position}</strong>",
1703
+ "nb": "{failure_rate} TESTENHETSFEIL I KOLONNE <strong>{column_position}</strong>",
1704
+ "nl": "{failure_rate} TESTEENHEID FOUTEN IN KOLOM <strong>{column_position}</strong>",
1705
+ "fi": "{failure_rate} TESTIYKSIKÖN VIRHEITÄ SARAKKEESSA <strong>{column_position}</strong>",
1706
+ "is": "{failure_rate} PRÓFUNAREININGAR VILLUR Í DÁLKI <strong>{column_position}</strong>",
1707
+ "ar": "{failure_rate} فشل وحدات الاختبار في العمود <strong>{column_position}</strong>",
1708
+ "hi": "कॉलम <strong>{column_position}</strong> में {failure_rate} परीक्षण इकाई विफलताएँ",
1709
+ "el": "{failure_rate} ΑΠΟΤΥΧΙΕΣ ΜΟΝΑΔΩΝ ΔΟΚΙΜΗΣ ΣΤΗ ΣΤΗΛΗ <strong>{column_position}</strong>",
1710
+ },
1711
+ "not_shown": {
1712
+ "en": "(NOT SHOWN)",
1713
+ "fr": "(NON AFFICHÉ)",
1714
+ "de": "(NICHT ANGEZEIGT)",
1715
+ "it": "(NON MOSTRATO)",
1716
+ "es": "(NO MOSTRADO)",
1717
+ "pt": "(NÃO MOSTRADO)",
1718
+ "ro": "(NEAFIȘAT)",
1719
+ "tr": "(GÖSTERİLMİYOR)",
1720
+ "zh-Hans": "(未显示)",
1721
+ "zh-Hant": "(未顯示)",
1722
+ "ja": "(表示されていません)",
1723
+ "ko": "(표시되지 않음)",
1724
+ "vi": "(KHÔNG HIỂN THỊ)",
1725
+ "ru": "(НЕ ПОКАЗАНО)",
1726
+ "cs": "(NEZOBRAZENO)",
1727
+ "pl": "(NIE POKAZANO)",
1728
+ "da": "(IKKE VIST)",
1729
+ "sv": "(VISAS INTE)",
1730
+ "nb": "(IKKE VIST)",
1731
+ "nl": "(NIET GETOOND)",
1732
+ "fi": "(EI NÄYTETTY)",
1733
+ "is": "(EKKI SÝNT)",
1734
+ "ar": "(غير معروض)",
1735
+ "hi": "(नहीं दिखाया गया)",
1736
+ "el": "(ΔΕΝ ΕΜΦΑΝΙΖΕΤΑΙ)",
1737
+ },
1738
+ "extract_text_first": {
1739
+ "en": "<div>EXTRACT OF FIRST <strong>{extract_length_resolved}</strong> ROWS {shown_failures}:</div>",
1740
+ "fr": "<div>EXTRAIT DES PREMIÈRES <strong>{extract_length_resolved}</strong> LIGNES {shown_failures}:</div>",
1741
+ "de": "<div>AUSZUG DER ERSTEN <strong>{extract_length_resolved}</strong> ZEILEN {shown_failures}:</div>",
1742
+ "it": "<div>ESTRATTO DELLE PRIME <strong>{extract_length_resolved}</strong> RIGHE {shown_failures}:</div>",
1743
+ "es": "<div>EXTRACTO DE LAS PRIMERAS <strong>{extract_length_resolved}</strong> FILAS {shown_failures}:</div>",
1744
+ "pt": "<div>EXTRATO DAS PRIMEIRAS <strong>{extract_length_resolved}</strong> LINHAS {shown_failures}:</div>",
1745
+ "ro": "<div>EXTRAS DIN PRIMELE <strong>{extract_length_resolved}</strong> RÂNDURI {shown_failures}:</div>",
1746
+ "tr": "<div>İLK <strong>{extract_length_resolved}</strong> SATIRIN ÇIKARIMI {shown_failures}:</div>",
1747
+ "zh-Hans": "<div>前 <strong>{extract_length_resolved}</strong> 行提取数据 {shown_failures}:</div>",
1748
+ "zh-Hant": "<div>前 <strong>{extract_length_resolved}</strong> 行提取資料 {shown_failures}:</div>",
1749
+ "ja": "<div>最初の <strong>{extract_length_resolved}</strong> 行の抽出 {shown_failures}:</div>",
1750
+ "ko": "<div>첫 <strong>{extract_length_resolved}</strong>행 추출 {shown_failures}:</div>",
1751
+ "vi": "<div>TRÍCH XUẤT <strong>{extract_length_resolved}</strong> HÀNG ĐẦU TIÊN {shown_failures}:</div>",
1752
+ "ru": "<div>ВЫДЕРЖКА ПЕРВЫХ <strong>{extract_length_resolved}</strong> СТРОК {shown_failures}:</div>",
1753
+ "cs": "<div>VÝPIS PRVNÍCH <strong>{extract_length_resolved}</strong> ŘÁDKŮ {shown_failures}:</div>",
1754
+ "pl": "<div>WYCIĄG Z PIERWSZYCH <strong>{extract_length_resolved}</strong> WIERSZY {shown_failures}:</div>",
1755
+ "da": "<div>UDDRAG AF FØRSTE <strong>{extract_length_resolved}</strong> RÆKKER {shown_failures}:</div>",
1756
+ "sv": "<div>UTDRAG AV FÖRSTA <strong>{extract_length_resolved}</strong> RADERNA {shown_failures}:</div>",
1757
+ "nb": "<div>UTDRAG AV FØRSTE <strong>{extract_length_resolved}</strong> RADER {shown_failures}:</div>",
1758
+ "nl": "<div>EXTRACT VAN EERSTE <strong>{extract_length_resolved}</strong> RIJEN {shown_failures}:</div>",
1759
+ "fi": "<div>OTE ENSIMMÄISISTÄ <strong>{extract_length_resolved}</strong> RIVISTÄ {shown_failures}:</div>",
1760
+ "is": "<div>ÚTDRÁTTUR AF FYRSTU <strong>{extract_length_resolved}</strong> RÖÐUM {shown_failures}:</div>",
1761
+ "ar": "<div>مقتطف من أول <strong>{extract_length_resolved}</strong> صفوف {shown_failures}:</div>",
1762
+ "hi": "<div>पहली <strong>{extract_length_resolved}</strong> पंक्तियों का निष्कर्ष {shown_failures}:</div>",
1763
+ "el": "<div>ΕΞΑΓΩΓΗ ΤΩΝ ΠΡΩΤΩΝ <strong>{extract_length_resolved}</strong> ΓΡΑΜΜΩΝ {shown_failures}:</div>",
1764
+ },
1765
+ "extract_text_all": {
1766
+ "en": "<div>EXTRACT OF ALL <strong>{extract_length_resolved}</strong> ROWS {shown_failures}:</div>",
1767
+ "fr": "<div>EXTRAIT DE TOUTES LES <strong>{extract_length_resolved}</strong> LIGNES {shown_failures}:</div>",
1768
+ "de": "<div>AUSZUG ALLER <strong>{extract_length_resolved}</strong> ZEILEN {shown_failures}:</div>",
1769
+ "it": "<div>ESTRATTO DI TUTTE LE <strong>{extract_length_resolved}</strong> RIGHE {shown_failures}:</div>",
1770
+ "es": "<div>EXTRACTO DE TODAS LAS <strong>{extract_length_resolved}</strong> FILAS {shown_failures}:</div>",
1771
+ "pt": "<div>EXTRATO DE TODAS AS <strong>{extract_length_resolved}</strong> LINHAS {shown_failures}:</div>",
1772
+ "ro": "<div>EXTRAS DIN TOATE CELE <strong>{extract_length_resolved}</strong> RÂNDURI {shown_failures}:</div>",
1773
+ "tr": "<div>TÜM <strong>{extract_length_resolved}</strong> SATIRIN ÇIKARIMI {shown_failures}:</div>",
1774
+ "zh-Hans": "<div>所有 <strong>{extract_length_resolved}</strong> 行提取数据 {shown_failures}:</div>",
1775
+ "zh-Hant": "<div>所有 <strong>{extract_length_resolved}</strong> 行提取資料 {shown_failures}:</div>",
1776
+ "ja": "<div>すべての <strong>{extract_length_resolved}</strong> 行の抽出 {shown_failures}:</div>",
1777
+ "ko": "<div>모든 <strong>{extract_length_resolved}</strong>행 추출 {shown_failures}:</div>",
1778
+ "vi": "<div>TRÍCH XUẤT TẤT CẢ <strong>{extract_length_resolved}</strong> HÀNG {shown_failures}:</div>",
1779
+ "ru": "<div>ВЫДЕРЖКА ВСЕХ <strong>{extract_length_resolved}</strong> СТРОК {shown_failures}:</div>",
1780
+ "cs": "<div>VÝPIS VŠECH <strong>{extract_length_resolved}</strong> ŘÁDKŮ {shown_failures}:</div>",
1781
+ "pl": "<div>WYCIĄG ZE WSZYSTKICH <strong>{extract_length_resolved}</strong> WIERSZY {shown_failures}:</div>",
1782
+ "da": "<div>UDDRAG AF ALLE <strong>{extract_length_resolved}</strong> RÆKKER {shown_failures}:</div>",
1783
+ "sv": "<div>UTDRAG AV ALLA <strong>{extract_length_resolved}</strong> RADERNA {shown_failures}:</div>",
1784
+ "nb": "<div>UTDRAG AV ALLE <strong>{extract_length_resolved}</strong> RADER {shown_failures}:</div>",
1785
+ "nl": "<div>EXTRACT VAN ALLE <strong>{extract_length_resolved}</strong> RIJEN {shown_failures}:</div>",
1786
+ "fi": "<div>OTE KAIKISTA <strong>{extract_length_resolved}</strong> RIVISTÄ {shown_failures}:</div>",
1787
+ "is": "<div>ÚTDRÁTTUR AF ÖLLUM <strong>{extract_length_resolved}</strong> RÖÐUM {shown_failures}:</div>",
1788
+ "ar": "<div>مقتطف من جميع <strong>{extract_length_resolved}</strong> صفوف {shown_failures}:</div>",
1789
+ "hi": "<div>सभी <strong>{extract_length_resolved}</strong> पंक्तियों का निष्कर्ष {shown_failures}:</div>",
1790
+ "el": "<div>ΕΞΑΓΩΓΗ ΟΛΩΝ ΤΩΝ <strong>{extract_length_resolved}</strong> ΓΡΑΜΜΩΝ {shown_failures}:</div>",
1791
+ },
1792
+ "shown_failures": {
1793
+ "en": "(WITH <span style='color: #B22222;'>TEST UNIT FAILURES IN RED</span>)",
1794
+ "fr": "(AVEC <span style='color: #B22222;'>ÉCHECS D'UNITÉS DE TEST EN ROUGE</span>)",
1795
+ "de": "(MIT <span style='color: #B22222;'>TESTEINHEITENFEHLERN IN ROT</span>)",
1796
+ "it": "(CON <span style='color: #B22222;'>FALLIMENTI DI UNITÀ DI TEST IN ROSSO</span>)",
1797
+ "es": "(CON <span style='color: #B22222;'>FALLOS DE UNIDAD DE PRUEBA EN ROJO</span>)",
1798
+ "pt": "(COM <span style='color: #B22222;'>FALHAS DE UNIDADE DE TESTE EM VERMELHO</span>)",
1799
+ "ro": "(CU <span style='color: #B22222;'>EȘECURI ALE UNITĂȚILOR DE TEST ÎN ROȘU</span>)",
1800
+ "tr": "(<span style='color: #B22222;'>KIRMIZI RENKLİ</span> TEST BİRİMİ HATALARI İLE)",
1801
+ "zh-Hans": "(<span style='color: #B22222;'>测试单元失败以红色显示</span>)",
1802
+ "zh-Hant": "(<span style='color: #B22222;'>測試單元失敗以紅色顯示</span>)",
1803
+ "ja": "(<span style='color: #B22222;'>赤色で表示されるテスト失敗</span>)",
1804
+ "ko": "(<span style='color: #B22222;'>빨간색으로 표시된 테스트 단위 실패</span>)",
1805
+ "vi": "(VỚI <span style='color: #B22222;'>LỖI ĐƠN VỊ KIỂM TRA HIỂN THỊ MÀU ĐỎ</span>)",
1806
+ "ru": "(С <span style='color: #B22222;'>СБОЯМИ ТЕСТОВЫХ ЕДИНИЦ, ВЫДЕЛЕННЫМИ КРАСНЫМ</span>)",
1807
+ "cs": "(SE <span style='color: #B22222;'>SELHÁNÍMI TESTOVACÍCH JEDNOTEK ČERVENĚ</span>)",
1808
+ "pl": "(Z <span style='color: #B22222;'>NIEPOWODZENIAMI JEDNOSTEK TESTOWYCH NA CZERWONO</span>)",
1809
+ "da": "(MED <span style='color: #B22222;'>TEST ENHED FEJL I RØD</span>)",
1810
+ "sv": "(MED <span style='color: #B22222;'>TESTENHETSFEL I RÖTT</span>)",
1811
+ "nb": "(MED <span style='color: #B22222;'>TESTENHETSFEIL I RØDT</span>)",
1812
+ "nl": "(MET <span style='color: #B22222;'>TESTEENHEID FOUTEN IN ROOD</span>)",
1813
+ "fi": "(<span style='color: #B22222;'>PUNAISELLA MERKITYT</span> TESTIYKSIKÖN VIRHEET)",
1814
+ "is": "(MEÐ <span style='color: #B22222;'>PRÓFUNAREININGAR VILLUR Í RAUÐU</span>)",
1815
+ "ar": "(مع <span style='color: #B22222;'>فشل وحدات الاختبار باللون الأحمر</span>)",
1816
+ "hi": "(<span style='color: #B22222;'>लाल रंग में</span> परीक्षण इकाई विफलताओं के साथ)",
1817
+ "el": "(ΜΕ <span style='color: #B22222;'>ΑΠΟΤΥΧΙΕΣ ΜΟΝΑΔΩΝ ΔΟΚΙΜΗΣ ΜΕ ΚΟΚΚΙΝΟ</span>)",
1818
+ },
1819
+ "success_statement": {
1820
+ "en": "<strong>{n}</strong> TEST UNITS <em>ALL PASSED</em> IN COLUMN <strong>{column_position}</strong>",
1821
+ "fr": "<strong>{n}</strong> UNITÉS DE TEST <em>TOUTES RÉUSSIES</em> DANS LA COLONNE <strong>{column_position}</strong>",
1822
+ "de": "<strong>{n}</strong> TESTEINHEITEN <em>ALLE BESTANDEN</em> IN SPALTE <strong>{column_position}</strong>",
1823
+ "it": "<strong>{n}</strong> UNITÀ DI TEST <em>TUTTE SUPERATE</em> NELLA COLONNA <strong>{column_position}</strong>",
1824
+ "es": "<strong>{n}</strong> UNIDADES DE PRUEBA <em>TODAS APROBADAS</em> EN LA COLUMNA <strong>{column_position}</strong>",
1825
+ "pt": "<strong>{n}</strong> UNIDADES DE TESTE <em>TODAS APROVADAS</em> NA COLUNA <strong>{column_position}</strong>",
1826
+ "ro": "<strong>{n}</strong> UNITĂȚI DE TEST <em>TOATE TRECUTE</em> ÎN COLOANA <strong>{column_position}</strong>",
1827
+ "tr": "<strong>{column_position}</strong> SÜTUNUNDA <strong>{n}</strong> TEST BİRİMİNİN <em>TÜMÜ GEÇTİ</em>",
1828
+ "zh-Hans": "列 <strong>{column_position}</strong> 中的 <strong>{n}</strong> 个测试单元<em>全部通过</em>",
1829
+ "zh-Hant": "欄位 <strong>{column_position}</strong> 中的 <strong>{n}</strong> 個測試單元<em>全部通過</em>",
1830
+ "ja": "列 <strong>{column_position}</strong> で <strong>{n}</strong> のテストユニットが<em>すべて合格</em>",
1831
+ "ko": "<strong>{column_position}</strong> 열에서 <strong>{n}</strong> 테스트 단위 <em>모두 통과</em>",
1832
+ "vi": "<strong>{n}</strong> ĐƠN VỊ KIỂM TRA <em>ĐỀU ĐẠT</em> TRONG CỘT <strong>{column_position}</strong>",
1833
+ "ru": "<strong>{n}</strong> ТЕСТОВЫХ ЕДИНИЦ <em>ВСЕ ПРОШЛИ</em> В СТОЛБЦЕ <strong>{column_position}</strong>",
1834
+ "cs": "<strong>{n}</strong> TESTOVACÍCH JEDNOTEK <em>VŠECHNY PROŠLY</em> VE SLOUPCI <strong>{column_position}</strong>",
1835
+ "pl": "<strong>{n}</strong> JEDNOSTEK TESTOWYCH <em>WSZYSTKIE ZALICZONE</em> W KOLUMNIE <strong>{column_position}</strong>",
1836
+ "da": "<strong>{n}</strong> TEST ENHEDER <em>ALLE BESTÅET</em> I KOLONNE <strong>{column_position}</strong>",
1837
+ "sv": "<strong>{n}</strong> TESTENHETER <em>ALLA GODKÄNDA</em> I KOLUMN <strong>{column_position}</strong>",
1838
+ "nb": "<strong>{n}</strong> TESTENHETER <em>ALLE BESTÅTT</em> I KOLONNE <strong>{column_position}</strong>",
1839
+ "nl": "<strong>{n}</strong> TESTEENHEDEN <em>ALLEMAAL GESLAAGD</em> IN KOLOM <strong>{column_position}</strong>",
1840
+ "fi": "<strong>{n}</strong> TESTIYKSIKKÖÄ <em>KAIKKI LÄPÄISTY</em> SARAKKEESSA <strong>{column_position}</strong>",
1841
+ "is": "<strong>{n}</strong> PRÓFUNAREININGAR <em>ALLAR STAÐIST</em> Í DÁLKI <strong>{column_position}</strong>",
1842
+ "ar": "<strong>{n}</strong> وحدات اختبار <em>جميعها نجحت</em> في العمود <strong>{column_position}</strong>",
1843
+ "hi": "कॉलम <strong>{column_position}</strong> में <strong>{n}</strong> परीक्षण इकाइयाँ <em>सभी सफल</em>",
1844
+ "el": "<strong>{n}</strong> ΜΟΝΑΔΕΣ ΔΟΚΙΜΗΣ <em>ΟΛΕΣ ΕΠΙΤΥΧΕΙΣ</em> ΣΤΗ ΣΤΗΛΗ <strong>{column_position}</strong>",
1845
+ },
1846
+ "preview_statement": {
1847
+ "en": "<div>PREVIEW OF TARGET TABLE:</div>",
1848
+ "fr": "<div>APERÇU DE LA TABLE CIBLE :</div>",
1849
+ "de": "<div>VORSCHAU DER ZIELTABELLE:</div>",
1850
+ "it": "<div>ANTEPRIMA DELLA TABELLA DI DESTINAZIONE:</div>",
1851
+ "es": "<div>VISTA PREVIA DE LA TABLA OBJETIVO:</div>",
1852
+ "pt": "<div>PRÉ-VISUALIZAÇÃO DA TABELA ALVO:</div>",
1853
+ "ro": "<div>PREVIZUALIZARE A TABELULUI ȚINTĂ:</div>",
1854
+ "tr": "<div>HEDEF TABLONUN ÖNİZLEMESİ:</div>",
1855
+ "zh-Hans": "<div>目标数据表预览:</div>",
1856
+ "zh-Hant": "<div>目標資料表預覽:</div>",
1857
+ "ja": "<div>ターゲットテーブルのプレビュー:</div>",
1858
+ "ko": "<div>대상 테이블 미리보기:</div>",
1859
+ "vi": "<div>XEM TRƯỚC BẢNG MỤC TIÊU:</div>",
1860
+ "ru": "<div>ПРЕДВАРИТЕЛЬНЫЙ ПРОСМОТР ЦЕЛЕВОЙ ТАБЛИЦЫ:</div>",
1861
+ "cs": "<div>NÁHLED CÍLOVÉ TABULKY:</div>",
1862
+ "pl": "<div>PODGLĄD TABELI DOCELOWEJ:</div>",
1863
+ "da": "<div>FORHÅNDSVISNING AF MÅLTABEL:</div>",
1864
+ "sv": "<div>FÖRHANDSGRANSKNING AV MÅLTABELL:</div>",
1865
+ "nb": "<div>FORHÅNDSVISNING AV MÅLTABELL:</div>",
1866
+ "nl": "<div>VOORBEELD VAN DOELTABEL:</div>",
1867
+ "fi": "<div>KOHDETAULUKON ESIKATSELU:</div>",
1868
+ "is": "<div>FORSKOÐUN Á MARKMIÐSTÖFLU:</div>",
1869
+ "ar": "<div>معاينة الجدول المستهدف:</div>",
1870
+ "hi": "<div>लक्ष्य तालिका का पूर्वावलोकन:</div>",
1871
+ "el": "<div>ΠΡΟΕΠΙΣΚΟΠΗΣΗ ΠΙΝΑΚΑ ΣΤΟΧΟΥ:</div>",
1872
+ },
1873
+ "schema_complete": {
1874
+ "en": "COMPLETE",
1875
+ "fr": "COMPLET",
1876
+ "de": "VOLLSTÄNDIG",
1877
+ "it": "COMPLETO",
1878
+ "es": "COMPLETO",
1879
+ "pt": "COMPLETO",
1880
+ "ro": "COMPLET",
1881
+ "tr": "TAM",
1882
+ "zh-Hans": "完整",
1883
+ "zh-Hant": "完整",
1884
+ "ja": "完全",
1885
+ "ko": "완전",
1886
+ "vi": "ĐẦY ĐỦ",
1887
+ "ru": "ПОЛНЫЙ",
1888
+ "cs": "ÚPLNÝ",
1889
+ "pl": "KOMPLETNY",
1890
+ "da": "KOMPLET",
1891
+ "sv": "KOMPLETT",
1892
+ "nb": "KOMPLETT",
1893
+ "nl": "VOLLEDIG",
1894
+ "fi": "TÄYDELLINEN",
1895
+ "is": "ALLT",
1896
+ "ar": "كامل",
1897
+ "hi": "पूर्ण",
1898
+ "el": "ΠΛΗΡΗΣ",
1899
+ },
1900
+ "schema_in_order": {
1901
+ "en": "IN ORDER",
1902
+ "fr": "EN ORDRE",
1903
+ "de": "IN REIHENFOLGE",
1904
+ "it": "IN ORDINE",
1905
+ "es": "EN ORDEN",
1906
+ "pt": "EM ORDEM",
1907
+ "ro": "ÎN ORDINE",
1908
+ "tr": "SIRALI",
1909
+ "zh-Hans": "有序",
1910
+ "zh-Hant": "有序",
1911
+ "ja": "順序通り",
1912
+ "ko": "순서대로",
1913
+ "vi": "ĐÚNG THỨ TỰ",
1914
+ "ru": "ПО ПОРЯДКУ",
1915
+ "cs": "V POŘADÍ",
1916
+ "pl": "W KOLEJNOŚCI",
1917
+ "da": "I RÆKKEFØLGE",
1918
+ "sv": "I ORDNING",
1919
+ "nb": "I REKKEFØLGE",
1920
+ "nl": "IN VOLGORDE",
1921
+ "fi": "JÄRJESTYKSESSÄ",
1922
+ "is": "Í RÖÐINNI",
1923
+ "ar": "بالترتيب",
1924
+ "hi": "क्रम में",
1925
+ "el": "ΜΕ ΣΕΙΡΑ",
1926
+ },
1927
+ "schema_target": {
1928
+ "en": "TARGET",
1929
+ "fr": "CIBLE",
1930
+ "de": "ZIEL",
1931
+ "it": "OBIETTIVO",
1932
+ "es": "OBJETIVO",
1933
+ "pt": "ALVO",
1934
+ "ro": "ȚINTĂ",
1935
+ "tr": "HEDEF",
1936
+ "zh-Hans": "目标",
1937
+ "zh-Hant": "目標",
1938
+ "ja": "ターゲット",
1939
+ "ko": "대상",
1940
+ "vi": "MỤC TIÊU",
1941
+ "ru": "ЦЕЛЬ",
1942
+ "cs": "CÍL",
1943
+ "pl": "CEL",
1944
+ "da": "MÅL",
1945
+ "sv": "MÅL",
1946
+ "nb": "MÅL",
1947
+ "nl": "DOEL",
1948
+ "fi": "KOHDE",
1949
+ "is": "MARKMIÐ",
1950
+ "ar": "هدف",
1951
+ "hi": "लक्ष्य",
1952
+ "el": "ΣΤΟΧΟΣ",
1953
+ },
1954
+ "schema_column": {
1955
+ "en": "COLUMN",
1956
+ "fr": "COLONNE",
1957
+ "de": "SPALTE",
1958
+ "it": "COLONNA",
1959
+ "es": "COLUMNA",
1960
+ "pt": "COLUNA",
1961
+ "ro": "COLOANĂ",
1962
+ "tr": "SÜTUN",
1963
+ "zh-Hans": "列",
1964
+ "zh-Hant": "欄位",
1965
+ "ja": "列",
1966
+ "ko": "열",
1967
+ "vi": "CỘT",
1968
+ "ru": "СТОЛБЕЦ",
1969
+ "cs": "SLOUPEC",
1970
+ "pl": "KOLUMNA",
1971
+ "da": "KOLONNE",
1972
+ "sv": "KOLUMN",
1973
+ "nb": "KOLONNE",
1974
+ "nl": "KOLOM",
1975
+ "fi": "SARAKE",
1976
+ "is": "DÁLKUR",
1977
+ "ar": "عمود",
1978
+ "hi": "स्तंभ",
1979
+ "el": "ΣΤΗΛΗ",
1980
+ },
1981
+ "schema_data_type": {
1982
+ "en": "DATA TYPE",
1983
+ "fr": "TYPE DE DONNÉES",
1984
+ "de": "DATENTYP",
1985
+ "it": "TIPO DI DATI",
1986
+ "es": "TIPO DE DATO",
1987
+ "pt": "TIPO DE DADOS",
1988
+ "ro": "TIP DE DATE",
1989
+ "tr": "VERİ TİPİ",
1990
+ "zh-Hans": "数据类型",
1991
+ "zh-Hant": "資料類型",
1992
+ "ja": "データ型",
1993
+ "ko": "데이터 유형",
1994
+ "vi": "KIỂU DỮ LIỆU",
1995
+ "ru": "ТИП ДАННЫХ",
1996
+ "cs": "DATOVÝ TYP",
1997
+ "pl": "TYP DANYCH",
1998
+ "da": "DATATYPE",
1999
+ "sv": "DATATYP",
2000
+ "nb": "DATATYPE",
2001
+ "nl": "GEGEVENSTYPE",
2002
+ "fi": "TIETOTYYPPI",
2003
+ "is": "GAGNATAG",
2004
+ "ar": "نوع البيانات",
2005
+ "hi": "डेटा प्रकार",
2006
+ "el": "ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ",
2007
+ },
2008
+ "schema_expected": {
2009
+ "en": "EXPECTED",
2010
+ "fr": "ATTENDU",
2011
+ "de": "ERWARTET",
2012
+ "it": "PREVISTO",
2013
+ "es": "ESPERADO",
2014
+ "pt": "ESPERADO",
2015
+ "ro": "AȘTEPTAT",
2016
+ "tr": "BEKLENEN",
2017
+ "zh-Hans": "预期",
2018
+ "zh-Hant": "預期",
2019
+ "ja": "予想",
2020
+ "ko": "예상",
2021
+ "vi": "KỲ VỌNG",
2022
+ "ru": "ОЖИДАЕМОЕ",
2023
+ "cs": "OČEKÁVANÝ",
2024
+ "pl": "OCZEKIWANY",
2025
+ "da": "FORVENTET",
2026
+ "sv": "FÖRVÄNTAT",
2027
+ "nb": "FORVENTET",
2028
+ "nl": "VERWACHT",
2029
+ "fi": "ODOTETTU",
2030
+ "is": "VÆNTANLEGT",
2031
+ "ar": "متوقع",
2032
+ "hi": "अपेक्षित",
2033
+ "el": "ΑΝΑΜΕΝΟΜΕΝΟ",
2034
+ },
2035
+ "column_schema_match_str": {
2036
+ "en": "COLUMN SCHEMA MATCH",
2037
+ "fr": "CORRESPONDANCE DU SCHÉMA DE COLONNE",
2038
+ "de": "ÜBEREINSTIMMUNG DES SPALTENSCHEMAS",
2039
+ "it": "CORRISPONDENZA DELLO SCHEMA DI COLONNA",
2040
+ "es": "COINCIDENCIA DEL ESQUEMA DE COLUMNA",
2041
+ "pt": "CORRESPONDÊNCIA DO ESQUEMA DE COLUNA",
2042
+ "ro": "POTRIVIRE A SCHEMEI DE COLOANĂ",
2043
+ "tr": "SÜTUN ŞEMASI EŞLEŞMESI",
2044
+ "zh-Hans": "列模式匹配",
2045
+ "zh-Hant": "欄位綱要匹配",
2046
+ "ja": "列スキーマ一致",
2047
+ "ko": "열 스키마 일치",
2048
+ "vi": "KHỚP LƯỢC ĐỒ CỘT",
2049
+ "ru": "СООТВЕТСТВИЕ СХЕМЫ СТОЛБЦА",
2050
+ "cs": "SHODA SCHÉMATU SLOUPCE",
2051
+ "pl": "ZGODNOŚĆ SCHEMATU KOLUMNY",
2052
+ "da": "KOLONNESKEM MATCH",
2053
+ "sv": "KOLUMNSCHEMA MATCHNING",
2054
+ "nb": "KOLONNESKJEMA SAMSVAR",
2055
+ "nl": "KOLOMSCHEMA OVEREENKOMST",
2056
+ "fi": "SARAKESKEEMAN VASTAAVUUS",
2057
+ "is": "DÁLKASKEMA SAMSVÖRUN",
2058
+ "ar": "تطابق مخطط العمود",
2059
+ "hi": "स्तंभ स्कीमा मिलान",
2060
+ "el": "ΑΝΤΙΣΤΟΙΧΙΑ ΣΧΗΜΑΤΟΣ ΣΤΗΛΗΣ",
2061
+ },
2062
+ "supplied_column_schema": {
2063
+ "en": "Supplied Column Schema:",
2064
+ "fr": "Schéma de Colonne Fourni :",
2065
+ "de": "Bereitgestelltes Spaltenschema:",
2066
+ "it": "Schema di Colonna Fornito:",
2067
+ "es": "Esquema de Columna Suministrado:",
2068
+ "pt": "Esquema de Coluna Fornecido:",
2069
+ "ro": "Schema de Coloană Furnizată:",
2070
+ "tr": "Sağlanan Sütun Şeması:",
2071
+ "zh-Hans": "提供的列模式:",
2072
+ "zh-Hant": "提供的欄位綱要:",
2073
+ "ja": "提供された列スキーマ:",
2074
+ "ko": "제공된 열 스키마:",
2075
+ "vi": "Lược Đồ Cột Được Cung Cấp:",
2076
+ "ru": "Предоставленная Схема Столбца:",
2077
+ "cs": "Dodané Schéma Sloupce:",
2078
+ "pl": "Dostarczony Schemat Kolumny:",
2079
+ "da": "Angivet Kolonneskema:",
2080
+ "sv": "Tillhandahållet Kolumnschema:",
2081
+ "nb": "Angitt Kolonneskjema:",
2082
+ "nl": "Geleverd Kolomschema:",
2083
+ "fi": "Annettu Sarakeskeema:",
2084
+ "is": "Uppgefið Dálkaskema:",
2085
+ "ar": "مخطط العمود المقدم:",
2086
+ "hi": "प्रदान किया गया स्तंभ स्कीमा:",
2087
+ "el": "Παρεχόμενο Σχήμα Στήλης:",
2088
+ },
2089
+ }
pointblank/validate.py CHANGED
@@ -38,7 +38,11 @@ from pointblank._constants import (
38
38
  SVG_ICONS_FOR_TBL_STATUS,
39
39
  VALIDATION_REPORT_FIELDS,
40
40
  )
41
- from pointblank._constants_translations import EXPECT_FAIL_TEXT, VALIDATION_REPORT_TEXT
41
+ from pointblank._constants_translations import (
42
+ EXPECT_FAIL_TEXT,
43
+ STEP_REPORT_TEXT,
44
+ VALIDATION_REPORT_TEXT,
45
+ )
42
46
  from pointblank._interrogation import (
43
47
  ColCountMatch,
44
48
  ColExistsHasType,
@@ -9250,6 +9254,10 @@ class Validate:
9250
9254
  # Convert the `validation_info` object to a dictionary
9251
9255
  validation_info_dict = _validation_info_as_dict(validation_info=self.validation_info)
9252
9256
 
9257
+ # Obtain the language and locale
9258
+ lang = self.lang
9259
+ locale = self.locale
9260
+
9253
9261
  # Filter the dictionary to include only the information for the selected step
9254
9262
  validation_step = {
9255
9263
  key: value[i - 1] for key, value in validation_info_dict.items() if key != "i"
@@ -9319,6 +9327,7 @@ class Validate:
9319
9327
  tbl_preview=tbl_preview,
9320
9328
  header=header,
9321
9329
  limit=limit,
9330
+ lang=lang,
9322
9331
  )
9323
9332
 
9324
9333
  elif assertion_type == "col_schema_match":
@@ -9331,13 +9340,21 @@ class Validate:
9331
9340
  # CASE I: where ordering of columns is required (`in_order=True`)
9332
9341
  if in_order:
9333
9342
  step_report = _step_report_schema_in_order(
9334
- step=i, schema_info=val_info, header=header, debug_return_df=debug_return_df
9343
+ step=i,
9344
+ schema_info=val_info,
9345
+ header=header,
9346
+ lang=lang,
9347
+ debug_return_df=debug_return_df,
9335
9348
  )
9336
9349
 
9337
9350
  # CASE II: where ordering of columns is not required (`in_order=False`)
9338
9351
  if not in_order:
9339
9352
  step_report = _step_report_schema_any_order(
9340
- step=i, schema_info=val_info, header=header, debug_return_df=debug_return_df
9353
+ step=i,
9354
+ schema_info=val_info,
9355
+ header=header,
9356
+ lang=lang,
9357
+ debug_return_df=debug_return_df,
9341
9358
  )
9342
9359
 
9343
9360
  else:
@@ -10654,43 +10671,53 @@ def _step_report_row_based(
10654
10671
  tbl_preview: GT,
10655
10672
  header: str,
10656
10673
  limit: int | None,
10674
+ lang: str,
10657
10675
  ):
10658
10676
  # Get the length of the extracted data for the step
10659
10677
  extract_length = get_row_count(extract)
10660
10678
 
10661
- # Generate explantory text for the validation step
10679
+ # Determine whether the `lang` value represents a right-to-left language
10680
+ is_rtl_lang = lang in RTL_LANGUAGES
10681
+ direction_rtl = " direction: rtl;" if is_rtl_lang else ""
10682
+
10683
+ # Generate text that indicates the assertion for the validation step
10662
10684
  if assertion_type == "col_vals_gt":
10663
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column} > {values}</code>"
10685
+ text = f"{column} > {values}"
10664
10686
  elif assertion_type == "col_vals_lt":
10665
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column} < {values}</code>"
10687
+ text = f"{column} < {values}"
10666
10688
  elif assertion_type == "col_vals_eq":
10667
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column} = {values}</code>"
10689
+ text = f"{column} = {values}"
10668
10690
  elif assertion_type == "col_vals_ne":
10669
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column} &ne; {values}</code>"
10691
+ text = f"{column} &ne; {values}"
10670
10692
  elif assertion_type == "col_vals_ge":
10671
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column} &ge; {values}</code>"
10693
+ text = f"{column} &ge; {values}"
10672
10694
  elif assertion_type == "col_vals_le":
10673
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column} &le; {values}</code>"
10695
+ text = f"{column} &le; {values}"
10674
10696
  elif assertion_type == "col_vals_between":
10675
10697
  symbol_left = "&le;" if inclusive[0] else "&lt;"
10676
10698
  symbol_right = "&le;" if inclusive[1] else "&lt;"
10677
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{values[0]} {symbol_left} {column} {symbol_right} {values[1]}</code>"
10699
+ text = f"{values[0]} {symbol_left} {column} {symbol_right} {values[1]}"
10678
10700
  elif assertion_type == "col_vals_outside":
10679
10701
  symbol_left = "&lt;" if inclusive[0] else "&le;"
10680
10702
  symbol_right = "&gt;" if inclusive[1] else "&ge;"
10681
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column} {symbol_left} {values[0]}, {column} {symbol_right} {values[1]}</code>"
10703
+ text = f"{column} {symbol_left} {values[0]}, {column} {symbol_right} {values[1]}"
10682
10704
  elif assertion_type == "col_vals_in_set":
10683
10705
  elements = ", ".join(map(str, values))
10684
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column} &isinv; {{{elements}}}</code>"
10706
+ text = f"{column} &isinv; {{{elements}}}"
10685
10707
  elif assertion_type == "col_vals_not_in_set":
10686
10708
  elements = ", ".join(values)
10687
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column} &NotElement; {{{elements}}}</code>"
10709
+ text = f"{column} &NotElement; {{{elements}}}"
10688
10710
  elif assertion_type == "col_vals_regex":
10689
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column}</code> matches regex <code style='color: #303030; font-family: monospace; font-size: smaller;'>{values}</code>"
10711
+ text = STEP_REPORT_TEXT["column_matches_regex"][lang].format(column=column, values=values)
10690
10712
  elif assertion_type == "col_vals_null":
10691
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column}</code> is <code style='color: #303030; font-family: monospace; font-size: smaller;'>Null</code>"
10713
+ text = STEP_REPORT_TEXT["column_is_null"][lang].format(column=column)
10692
10714
  elif assertion_type == "col_vals_not_null":
10693
- text = f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{column}</code> is not <code style='color: #303030; font-family: monospace; font-size: smaller;'>Null</code>"
10715
+ text = STEP_REPORT_TEXT["column_is_not_null"][lang].format(column=column)
10716
+
10717
+ # Wrap assertion text in a <code> tag
10718
+ text = (
10719
+ f"<code style='color: #303030; font-family: monospace; font-size: smaller;'>{text}</code>"
10720
+ )
10694
10721
 
10695
10722
  if all_passed:
10696
10723
  # Style the target column in green and add borders but only if that column is present
@@ -10724,23 +10751,27 @@ def _step_report_row_based(
10724
10751
  if header is None:
10725
10752
  return step_report
10726
10753
 
10727
- # TODO: localize all text fragments according to `lang=` parameter
10754
+ title = STEP_REPORT_TEXT["report_for_step_i"][lang].format(i=i) + " " + CHECK_MARK_SPAN
10755
+ assertion_header_text = STEP_REPORT_TEXT["assertion_header_text"][lang]
10756
+
10757
+ success_stmt = STEP_REPORT_TEXT["success_statement"][lang].format(
10758
+ n=n,
10759
+ column_position=column_position,
10760
+ )
10761
+ preview_stmt = STEP_REPORT_TEXT["preview_statement"][lang]
10728
10762
 
10729
- title = f"Report for Validation Step {i} {CHECK_MARK_SPAN}"
10730
10763
  details = (
10731
- "<div style='font-size: 13.6px;'>"
10764
+ f"<div style='font-size: 13.6px; {direction_rtl}'>"
10732
10765
  "<div style='padding-top: 7px;'>"
10733
- "ASSERTION <span style='border-style: solid; border-width: thin; "
10766
+ f"{assertion_header_text} <span style='border-style: solid; border-width: thin; "
10734
10767
  "border-color: lightblue; padding-left: 2px; padding-right: 2px;'>"
10735
10768
  "<code style='color: #303030; background-color: transparent; "
10736
10769
  f"position: relative; bottom: 1px;'>{text}</code></span>"
10737
10770
  "</div>"
10738
10771
  "<div style='padding-top: 7px;'>"
10739
- f"<strong>{n}</strong> TEST UNITS <em>ALL PASSED</em> "
10740
- f"IN COLUMN <strong>{column_position}</strong>"
10741
- "</div>"
10742
- "<div>PREVIEW OF TARGET TABLE:"
10772
+ f"{success_stmt}"
10743
10773
  "</div>"
10774
+ f"{preview_stmt}"
10744
10775
  "</div>"
10745
10776
  )
10746
10777
 
@@ -10773,14 +10804,6 @@ def _step_report_row_based(
10773
10804
  mark_missing_values=False,
10774
10805
  )
10775
10806
 
10776
- if limit < extract_length:
10777
- extract_length_resolved = limit
10778
- extract_of_x_rows = "FIRST"
10779
-
10780
- else:
10781
- extract_length_resolved = extract_length
10782
- extract_of_x_rows = "ALL"
10783
-
10784
10807
  # Style the target column in green and add borders but only if that column is present
10785
10808
  # in the `extract_tbl` (i.e., it may not be present if `columns_subset=` didn't include it)
10786
10809
  extract_tbl_columns = extract_tbl._boxhead._get_columns()
@@ -10804,29 +10827,45 @@ def _step_report_row_based(
10804
10827
  )
10805
10828
 
10806
10829
  not_shown = ""
10807
- shown_failures = "WITH <span style='color: #B22222;'>TEST UNIT FAILURES IN RED</span>"
10830
+ shown_failures = STEP_REPORT_TEXT["shown_failures"][lang]
10808
10831
  else:
10809
10832
  step_report = extract_tbl
10810
- not_shown = " (NOT SHOWN)"
10833
+ not_shown = STEP_REPORT_TEXT["not_shown"][lang]
10811
10834
  shown_failures = ""
10812
10835
 
10813
- title = f"Report for Validation Step {i}"
10836
+ title = STEP_REPORT_TEXT["report_for_step_i"][lang].format(i=i)
10837
+ assertion_header_text = STEP_REPORT_TEXT["assertion_header_text"][lang]
10838
+ failure_rate_metrics = f"<strong>{n_failed}</strong> / <strong>{n}</strong>"
10839
+
10840
+ failure_rate_stmt = STEP_REPORT_TEXT["failure_rate_summary"][lang].format(
10841
+ failure_rate=failure_rate_metrics,
10842
+ column_position=column_position,
10843
+ )
10844
+
10845
+ if limit < extract_length:
10846
+ extract_length_resolved = limit
10847
+ extract_text = STEP_REPORT_TEXT["extract_text_first"][lang].format(
10848
+ extract_length_resolved=extract_length_resolved, shown_failures=shown_failures
10849
+ )
10850
+
10851
+ else:
10852
+ extract_length_resolved = extract_length
10853
+ extract_text = STEP_REPORT_TEXT["extract_text_all"][lang].format(
10854
+ extract_length_resolved=extract_length_resolved, shown_failures=shown_failures
10855
+ )
10856
+
10814
10857
  details = (
10815
- "<div style='font-size: 13.6px;'>"
10858
+ f"<div style='font-size: 13.6px; {direction_rtl}'>"
10816
10859
  "<div style='padding-top: 7px;'>"
10817
- "ASSERTION <span style='border-style: solid; border-width: thin; "
10860
+ f"{assertion_header_text} <span style='border-style: solid; border-width: thin; "
10818
10861
  "border-color: lightblue; padding-left: 2px; padding-right: 2px;'>"
10819
10862
  "<code style='color: #303030; background-color: transparent; "
10820
10863
  f"position: relative; bottom: 1px;'>{text}</code></span>"
10821
10864
  "</div>"
10822
10865
  "<div style='padding-top: 7px;'>"
10823
- f"<strong>{n_failed}</strong> / "
10824
- f"<strong>{n}</strong> TEST UNIT FAILURES "
10825
- f"IN COLUMN <strong>{column_position}</strong>{not_shown}"
10826
- "</div>"
10827
- f"<div>EXTRACT OF {extract_of_x_rows} "
10828
- f"<strong>{extract_length_resolved}</strong> ROWS {shown_failures}:"
10866
+ f"{failure_rate_stmt} {not_shown}"
10829
10867
  "</div>"
10868
+ f"{extract_text}"
10830
10869
  "</div>"
10831
10870
  )
10832
10871
 
@@ -10851,13 +10890,17 @@ def _step_report_row_based(
10851
10890
 
10852
10891
 
10853
10892
  def _step_report_schema_in_order(
10854
- step: int, schema_info: dict, header: str, debug_return_df: bool = False
10893
+ step: int, schema_info: dict, header: str, lang: str, debug_return_df: bool = False
10855
10894
  ) -> GT | any:
10856
10895
  """
10857
10896
  This is the case for schema validation where the schema is supposed to have the same column
10858
10897
  order as the target table.
10859
10898
  """
10860
10899
 
10900
+ # Determine whether the `lang` value represents a right-to-left language
10901
+ is_rtl_lang = lang in RTL_LANGUAGES
10902
+ direction_rtl = " direction: rtl;" if is_rtl_lang else ""
10903
+
10861
10904
  all_passed = schema_info["passed"]
10862
10905
  complete = schema_info["params"]["complete"]
10863
10906
 
@@ -11010,6 +11053,12 @@ def _step_report_schema_in_order(
11010
11053
  if debug_return_df:
11011
11054
  return schema_combined
11012
11055
 
11056
+ target_str = STEP_REPORT_TEXT["schema_target"][lang]
11057
+ expected_str = STEP_REPORT_TEXT["schema_expected"][lang]
11058
+ column_str = STEP_REPORT_TEXT["schema_column"][lang]
11059
+ data_type_str = STEP_REPORT_TEXT["schema_data_type"][lang]
11060
+ supplied_column_schema_str = STEP_REPORT_TEXT["supplied_column_schema"][lang]
11061
+
11013
11062
  step_report = (
11014
11063
  GT(schema_combined, id="pb_step_tbl")
11015
11064
  .fmt_markdown(columns=None)
@@ -11018,12 +11067,12 @@ def _step_report_schema_in_order(
11018
11067
  .cols_label(
11019
11068
  cases={
11020
11069
  "index_target": "",
11021
- "col_name_target": "COLUMN",
11022
- "dtype_target": "DTYPE",
11070
+ "col_name_target": column_str,
11071
+ "dtype_target": data_type_str,
11023
11072
  "index_exp": "",
11024
- "col_name_exp": "COLUMN",
11073
+ "col_name_exp": column_str,
11025
11074
  "col_name_exp_correct": "",
11026
- "dtype_exp": "DTYPE",
11075
+ "dtype_exp": data_type_str,
11027
11076
  "dtype_exp_correct": "",
11028
11077
  }
11029
11078
  )
@@ -11060,11 +11109,11 @@ def _step_report_schema_in_order(
11060
11109
  ),
11061
11110
  )
11062
11111
  .tab_spanner(
11063
- label="TARGET",
11112
+ label=target_str,
11064
11113
  columns=["index_target", "col_name_target", "dtype_target"],
11065
11114
  )
11066
11115
  .tab_spanner(
11067
- label="EXPECTED",
11116
+ label=expected_str,
11068
11117
  columns=[
11069
11118
  "index_exp",
11070
11119
  "col_name_exp",
@@ -11088,7 +11137,7 @@ def _step_report_schema_in_order(
11088
11137
  )
11089
11138
  .tab_source_note(
11090
11139
  source_note=html(
11091
- "<div style='padding-bottom: 2px;'>Supplied Column Schema:</div>"
11140
+ f"<div style='padding-bottom: 2px;'>{supplied_column_schema_str}</div>"
11092
11141
  "<div style='border-style: solid; border-width: thin; border-color: lightblue; "
11093
11142
  "padding-left: 2px; padding-right: 2px; padding-bottom: 3px;'><code "
11094
11143
  "style='color: #303030; font-family: monospace; font-size: 8px;'>"
@@ -11151,10 +11200,11 @@ def _step_report_schema_in_order(
11151
11200
  passing_symbol = CHECK_MARK_SPAN if all_passed else CROSS_MARK_SPAN
11152
11201
 
11153
11202
  # Generate the title for the step report
11154
- title = f"Report for Validation Step {step} {passing_symbol}"
11203
+ title = STEP_REPORT_TEXT["report_for_step_i"][lang].format(i=step) + " " + passing_symbol
11155
11204
 
11156
11205
  # Generate the details for the step report
11157
11206
  details = _create_col_schema_match_params_html(
11207
+ lang=lang,
11158
11208
  complete=complete,
11159
11209
  in_order=True,
11160
11210
  case_sensitive_colnames=case_sensitive_colnames,
@@ -11179,13 +11229,17 @@ def _step_report_schema_in_order(
11179
11229
 
11180
11230
 
11181
11231
  def _step_report_schema_any_order(
11182
- step: int, schema_info: dict, header: str, debug_return_df: bool = False
11232
+ step: int, schema_info: dict, header: str, lang: str, debug_return_df: bool = False
11183
11233
  ) -> GT | any:
11184
11234
  """
11185
11235
  This is the case for schema validation where the schema is permitted to not have to be in the
11186
11236
  same column order as the target table.
11187
11237
  """
11188
11238
 
11239
+ # Determine whether the `lang` value represents a right-to-left language
11240
+ is_rtl_lang = lang in RTL_LANGUAGES
11241
+ direction_rtl = " direction: rtl;" if is_rtl_lang else ""
11242
+
11189
11243
  all_passed = schema_info["passed"]
11190
11244
  complete = schema_info["params"]["complete"]
11191
11245
 
@@ -11440,6 +11494,12 @@ def _step_report_schema_any_order(
11440
11494
  if debug_return_df:
11441
11495
  return schema_combined
11442
11496
 
11497
+ target_str = STEP_REPORT_TEXT["schema_target"][lang]
11498
+ expected_str = STEP_REPORT_TEXT["schema_expected"][lang]
11499
+ column_str = STEP_REPORT_TEXT["schema_column"][lang]
11500
+ data_type_str = STEP_REPORT_TEXT["schema_data_type"][lang]
11501
+ supplied_column_schema_str = STEP_REPORT_TEXT["supplied_column_schema"][lang]
11502
+
11443
11503
  step_report = (
11444
11504
  GT(schema_combined, id="pb_step_tbl")
11445
11505
  .fmt_markdown(columns=None)
@@ -11448,12 +11508,12 @@ def _step_report_schema_any_order(
11448
11508
  .cols_label(
11449
11509
  cases={
11450
11510
  "index_target": "",
11451
- "col_name_target": "COLUMN",
11452
- "dtype_target": "DTYPE",
11511
+ "col_name_target": column_str,
11512
+ "dtype_target": data_type_str,
11453
11513
  "index_exp": "",
11454
- "col_name_exp": "COLUMN",
11514
+ "col_name_exp": column_str,
11455
11515
  "col_name_exp_correct": "",
11456
- "dtype_exp": "DTYPE",
11516
+ "dtype_exp": data_type_str,
11457
11517
  "dtype_exp_correct": "",
11458
11518
  }
11459
11519
  )
@@ -11491,11 +11551,11 @@ def _step_report_schema_any_order(
11491
11551
  ),
11492
11552
  )
11493
11553
  .tab_spanner(
11494
- label="TARGET",
11554
+ label=target_str,
11495
11555
  columns=["index_target", "col_name_target", "dtype_target"],
11496
11556
  )
11497
11557
  .tab_spanner(
11498
- label="EXPECTED",
11558
+ label=expected_str,
11499
11559
  columns=[
11500
11560
  "index_exp",
11501
11561
  "col_name_exp",
@@ -11519,7 +11579,7 @@ def _step_report_schema_any_order(
11519
11579
  )
11520
11580
  .tab_source_note(
11521
11581
  source_note=html(
11522
- "<div style='padding-bottom: 2px;'>Supplied Column Schema:</div>"
11582
+ f"<div style='padding-bottom: 2px;'>{supplied_column_schema_str}</div>"
11523
11583
  "<div style='border-style: solid; border-width: thin; border-color: lightblue; "
11524
11584
  "padding-left: 2px; padding-right: 2px; padding-bottom: 3px;'><code "
11525
11585
  "style='color: #303030; font-family: monospace; font-size: 8px;'>"
@@ -11560,10 +11620,11 @@ def _step_report_schema_any_order(
11560
11620
  passing_symbol = CHECK_MARK_SPAN if all_passed else CROSS_MARK_SPAN
11561
11621
 
11562
11622
  # Generate the title for the step report
11563
- title = f"Report for Validation Step {step} {passing_symbol}"
11623
+ title = STEP_REPORT_TEXT["report_for_step_i"][lang].format(i=step) + " " + passing_symbol
11564
11624
 
11565
11625
  # Generate the details for the step report
11566
11626
  details = _create_col_schema_match_params_html(
11627
+ lang=lang,
11567
11628
  complete=complete,
11568
11629
  in_order=False,
11569
11630
  case_sensitive_colnames=case_sensitive_colnames,
@@ -11613,20 +11674,25 @@ def _create_label_text_html(
11613
11674
 
11614
11675
 
11615
11676
  def _create_col_schema_match_params_html(
11677
+ lang: str,
11616
11678
  complete: bool = True,
11617
11679
  in_order: bool = True,
11618
11680
  case_sensitive_colnames: bool = True,
11619
11681
  case_sensitive_dtypes: bool = True,
11620
11682
  full_match_dtypes: bool = True,
11621
11683
  ) -> str:
11684
+ complete_str = STEP_REPORT_TEXT["schema_complete"][lang]
11685
+ in_order_str = STEP_REPORT_TEXT["schema_in_order"][lang]
11686
+ column_schema_match_str = STEP_REPORT_TEXT["column_schema_match_str"][lang]
11687
+
11622
11688
  complete_text = _create_label_text_html(
11623
- text="COMPLETE",
11689
+ text=complete_str,
11624
11690
  strikethrough=not complete,
11625
11691
  strikethrough_color="steelblue",
11626
11692
  )
11627
11693
 
11628
11694
  in_order_text = _create_label_text_html(
11629
- text="IN ORDER",
11695
+ text=in_order_str,
11630
11696
  strikethrough=not in_order,
11631
11697
  strikethrough_color="steelblue",
11632
11698
  )
@@ -11660,7 +11726,7 @@ def _create_col_schema_match_params_html(
11660
11726
 
11661
11727
  return (
11662
11728
  '<div style="display: flex; font-size: 13.7px; padding-top: 7px;">'
11663
- '<div style="margin-right: 5px;">COLUMN SCHEMA MATCH</div>'
11729
+ f'<div style="margin-right: 5px;">{column_schema_match_str}</div>'
11664
11730
  f"{complete_text}"
11665
11731
  f"{in_order_text}"
11666
11732
  f"{case_sensitive_colnames_text}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pointblank
3
- Version: 0.8.3
3
+ Version: 0.8.4
4
4
  Summary: Find out if your data is what you think it is.
5
5
  Author-email: Richard Iannone <riannone@me.com>
6
6
  License: MIT License
@@ -1,7 +1,7 @@
1
1
  pointblank/__init__.py,sha256=c1lZsS_xsMq3OfkCuYQPxDByK_IRLGTYtd5n6uIveks,1555
2
2
  pointblank/_constants.py,sha256=xbvHGDi5mt85FBnznXupwE79KttHFbORLVSQVXBKdXE,72533
3
3
  pointblank/_constants_docs.py,sha256=JBmtt16zTYQ-zaM4ElLExtKs-dKlnN553Ys2ML1Y1C8,2099
4
- pointblank/_constants_translations.py,sha256=ZyhYA3wJT7o4wDHhSFNe2NTqJSkKrWtD15jMHY4LmM8,118873
4
+ pointblank/_constants_translations.py,sha256=yTCwRQTB_a6h2fGnaM93K8aJ72KX74CANyJnil7req4,149024
5
5
  pointblank/_interrogation.py,sha256=AtygXSb5iaqUcobnfVF3HjO9mjrtPWkLJ8No9XFSvR8,73186
6
6
  pointblank/_typing.py,sha256=YQ6Bt-j-W6Cg91qXHHDzBM-ptc-IEvhMg6T5ugWnGwM,306
7
7
  pointblank/_utils.py,sha256=Loyu9qo_QR3lgtsWYmFsxfVQCxdU_GWOAk9LqrQq0Wo,24630
@@ -15,7 +15,7 @@ pointblank/draft.py,sha256=lIbSlY9Avi1GbRvJhqR-69sGWCfD11im3Go20XsX8L0,15783
15
15
  pointblank/schema.py,sha256=gzUCmtccO2v15MH2bo9uHUYjkKEEne1okQucxcH39pc,44291
16
16
  pointblank/tf.py,sha256=8o_8m4i01teulEe3-YYMotSNf3tImjBMInsvdjSAO5Q,8844
17
17
  pointblank/thresholds.py,sha256=C8_Rn2z3MVFu4UH5eaGRd7DkW3slgkWB3Hhim2h5CfU,25340
18
- pointblank/validate.py,sha256=9odETJ7IaBeOcgpNKl5GjnY7r-8RFlKhMrYmMF6jnCs,492582
18
+ pointblank/validate.py,sha256=tCFeGqlsy32R1KmHD3AMlXgeaHpfdrybeOZvCaQQsMs,494129
19
19
  pointblank/data/api-docs.txt,sha256=u9Q0eWlTLW396YSp2lY15bh_omw01XnGPF_jirODLCQ,397547
20
20
  pointblank/data/game_revenue-duckdb.zip,sha256=tKIVx48OGLYGsQPS3h5AjA2Nyq_rfEpLCjBiFUWhagU,35880
21
21
  pointblank/data/game_revenue.zip,sha256=7c9EvHLyi93CHUd4p3dM4CZ-GucFCtXKSPxgLojL32U,33749
@@ -24,8 +24,8 @@ pointblank/data/nycflights.zip,sha256=yVjbUaKUz2LydSdF9cABuir0VReHBBgV7shiNWSd0m
24
24
  pointblank/data/polars-api-docs.txt,sha256=KGcS-BOtUs9zgpkWfXD-GFdFh4O_zjdkpX7msHjztLg,198045
25
25
  pointblank/data/small_table-duckdb.zip,sha256=BhTaZ2CRS4-9Z1uVhOU6HggvW3XCar7etMznfENIcOc,2028
26
26
  pointblank/data/small_table.zip,sha256=lmFb90Nb-v5X559Ikjg31YLAXuRyMkD9yLRElkXPMzQ,472
27
- pointblank-0.8.3.dist-info/licenses/LICENSE,sha256=apLF-HWPNU7pT5bmf5KmZpD5Cklpy2u-BN_0xBoRMLY,1081
28
- pointblank-0.8.3.dist-info/METADATA,sha256=dMnXSbZg9A47ODzVzQfazPPzuxSmKvuZaiuCbpZ8wqc,12839
29
- pointblank-0.8.3.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
30
- pointblank-0.8.3.dist-info/top_level.txt,sha256=-wHrS1SvV8-nhvc3w-PPYs1C1WtEc1pK-eGjubbCCKc,11
31
- pointblank-0.8.3.dist-info/RECORD,,
27
+ pointblank-0.8.4.dist-info/licenses/LICENSE,sha256=apLF-HWPNU7pT5bmf5KmZpD5Cklpy2u-BN_0xBoRMLY,1081
28
+ pointblank-0.8.4.dist-info/METADATA,sha256=wKHY4KsQtVsroZ5aVzjnkamfNxzuVk2aW_lfK7ra8KY,12839
29
+ pointblank-0.8.4.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
30
+ pointblank-0.8.4.dist-info/top_level.txt,sha256=-wHrS1SvV8-nhvc3w-PPYs1C1WtEc1pK-eGjubbCCKc,11
31
+ pointblank-0.8.4.dist-info/RECORD,,