@@ -50,6 +50,46 @@ def maximum_number_of_messages(filenames, max_messages=10000, quiet=False):
5050 return exitcode
5151
5252
53+ def maximum_number_of_lines (filenames , max_lines = 10000 , quiet = False ):
54+ """Check if a set of PO files has more lines than allowed.
55+
56+ Parameters
57+ ----------
58+
59+ filenames : list
60+ Set of file names to check.
61+
62+ max_lines : int, optional
63+ Maximum number of lines in each PO file.
64+
65+ quiet : bool, optional
66+ Enabled, don't print output to stderr when more lines than allowed
67+ are found.
68+
69+ Returns
70+ -------
71+
72+ int: 0 if no more than ``max_lines`` lines found for each file,
73+ 1 otherwise.
74+ """
75+ exitcode = 0
76+
77+ for filename in filenames :
78+ with open (filename ) as f :
79+ content_lines = f .readlines ()
80+
81+ number_of_lines = len (content_lines )
82+ if number_of_lines > max_lines :
83+ exitcode = 1
84+ if not quiet :
85+ sys .stderr .write (
86+ f"More lines ({ number_of_lines } ) than allowed ({ max_lines } )"
87+ f" at file { os .path .abspath (filename )} \n "
88+ )
89+
90+ return exitcode
91+
92+
5393def main ():
5494 parser = argparse .ArgumentParser ()
5595 parser .add_argument (
@@ -63,20 +103,41 @@ def main():
63103 metavar = "NUMBER" ,
64104 required = False ,
65105 default = None ,
106+ dest = "max_messages" ,
66107 help = (
67108 "Check the maximum number of messages in each PO file "
68109 "is not greater than the number passed in this parameter."
69110 ),
70111 )
112+ parser .add_argument (
113+ "--max-lines" ,
114+ type = int ,
115+ metavar = "NUMBER" ,
116+ required = False ,
117+ default = None ,
118+ dest = "max_lines" ,
119+ help = (
120+ "Check the maximum number of lines in each PO file is not"
121+ "greater than the number passed in this parameter."
122+ ),
123+ )
71124 args = parser .parse_args ()
72- if args .max_messages is not None :
73- return maximum_number_of_messages (
74- args .filenames , args .max_messages , quiet = args .quiet
75- )
76- else :
125+
126+ if not any ([args .max_messages , args .max_lines ]):
77127 parser .print_help ()
78128 return 1
79129
130+ returncodes = [
131+ maximum_number_of_messages (args .filenames , args .max_messages , quiet = args .quiet )
132+ if args .max_messages is not None
133+ else 0 ,
134+ maximum_number_of_lines (args .filenames , args .max_lines , quiet = args .quiet )
135+ if args .max_lines is not None
136+ else 0 ,
137+ ]
138+
139+ return 1 if any (returncodes ) else 0
140+
80141
81142if __name__ == "__main__" :
82143 exit (main ())
0 commit comments