- Python
requirements.txtgeneric iterator parser for Nim. - No Regex used in the making of this film!
for it in requirements(readFile("requirements.txt")):
echo it
for it in requirements(staticRead("requirements.txt")):
echo it
for it in requirements(readFile("requirements.txt"), [("*", "0")]): ## "1.*.*" becomes "1.0.0", uses multiReplace
echo it1 Input argument can be filename: string. Based from the official spec: https://pip.readthedocs.io/en/1.1/requirements.html
Yields 1 tuple per parsed line:
lineCurrent line being parsed (42, etc).editableBoolean whether this requirement is "editable".specifierString version specifier (For"flask>=1.5"is>=)vcsDistributed version control system used ("git","hg", etc).protocolNetwork protocol for transports ("http","https","ssh", etc)namePackage name parsed ("pytest", etc).versionPackage version string ("1.2.9", etc).uriURL if this requirement ofUritype ("https://github.com/user/repo.git", etc).extrasSequence of strings with a list of extras ("flask[extra1, extra2]"is@["extra1", "extra2"])blanksCurrent count of comments, blank lines, empty lines, etc (42, etc).privateCurrent count of Private custom repositories (Not PYPI).nestedCurrent count of recursively Nested requirements.txt files (42, etc).
Example Output:
(line: 9, editable: false, specifier: true, vcs: "git", protocol: "https", version: "1.6.0", name: "numpy", url: "https://github.com/user/repo.git", blanks: 1, nested: 0, private: 0, extras: @["full", "pdf"])If you need a seq of tuple use sequtils.toSeq. It uses Effects Tags ReadIOEffect, WriteIOEffect.
nimble install requirementstxt
$ nimble test
[Suite] Requirements.txt generic parser tests
[OK] Big requirements.txt parsing
[OK] Empty requirements.txt parsing
[OK] Empty requirements.txt parsing 2
Success: Execution finished
Success: All tests passed
Test is using a big and complex requirements.txt.
runnableExamplesincluded.
nim doc requirementstxt.nim
- git
- git+https
- git+ssh
- git+git
- hg+http
- hg+https
- hg+static-http
- hg+ssh
- svn
- svn+svn
- svn+http
- svn+https
- svn+ssh
- bzr+http
- bzr+https
- bzr+ssh
- bzr+sftp
- bzr+ftp
- bzr+lp
- No DVCS
- None.
- None.
- Why a generic iterator ?.
Generic so you can use string or StringStream or File.
iterator because requirements.txt are meant to have 1 dependency per line.
If you are familiar with Python, Nim iterator is like Python generator, Nim tuple is like Python NamedTuple.
