Skip to content

Commit

Permalink
RequirementsInfoExtractor.py: Extract Project Info
Browse files Browse the repository at this point in the history
Extract Project Dependency Info
from requirements.txt.

Closes #154
  • Loading branch information
Wert1996 authored and jayvdb committed Aug 17, 2018
1 parent 4e80186 commit bcd5bf9
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .moban.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ dependencies:
- coala_utils~=0.6.6
- gemfileparser~=0.6.2
- pyjsparser~=2.4.5

- requirements-parser~=0.1.0

configuration:
template_dir:
Expand Down
34 changes: 34 additions & 0 deletions coala_quickstart/info_extractors/RequirementsInfoExtractor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from requirements import parse

from coala_quickstart.info_extraction.InfoExtractor import InfoExtractor
from coala_quickstart.info_extraction.Information import (
ProjectDependencyInfo, VersionInfo)


class RequirementsInfoExtractor(InfoExtractor):
supported_file_globs = ("requirements.txt",)

supported_information_kinds = (
ProjectDependencyInfo, VersionInfo)

def parse_file(self, fname, file_content):
parsed_file = []
with open(fname, 'r') as f:
parsed_file = parse(f)
return parsed_file

def find_information(self, fname, parsed_file):
results = []
for dependency in parsed_file:
results.append(
ProjectDependencyInfo(
fname,
dependency.name,
# FIXME: VersionInfo is a string, that stores only the
# first version.
version=VersionInfo(fname,
''.join(''.join(dependency.specs[0])))
)
)

return results
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ coala_bears~=0.12.0.dev20170722110839
coala_utils~=0.6.6
gemfileparser~=0.6.2
pyjsparser~=2.4.5
requirements-parser~=0.1.0
57 changes: 57 additions & 0 deletions tests/info_extractors/RequirementsInfoExtractorTest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import os
import unittest

from coala_quickstart.info_extractors.RequirementsInfoExtractor import (
RequirementsInfoExtractor)
from coala_quickstart.info_extraction.Information import (
ProjectDependencyInfo, VersionInfo)
from tests.TestUtilities import generate_files


test_file = """
# This is the file to test requirements extractor.
# It should not parse this line.
Babel<=2.3.4
Flask==0.11.1 # Everything after # must be ignored.
Django>=1.5 # This is a comment.
Django<1.4
Jinja~2.9.6
# Neither this.
"""


class RequirementsInfoExtractorTest(unittest.TestCase):

def setUp(self):
self.current_dir = os.getcwd()

def test_extracted_information(self):

with generate_files(
['requirements'],
[test_file],
self.current_dir) as gen_file:

self.uut = RequirementsInfoExtractor(
['requirements'],
self.current_dir)
extracted_info = self.uut.extract_information()
extracted_info = extracted_info[
os.path.normcase('requirements')
]

information_types = extracted_info.keys()
self.assertIn("ProjectDependencyInfo", information_types)
dep_info = extracted_info['ProjectDependencyInfo']
self.assertEqual(len(dep_info), 4)

requirements_list = [('Babel', '<=2.3.4'),
('Flask', '==0.11.1'),
('Django', '>=1.5'),
('Jinja', '~2.9.6'), ]

deps = [(dep.value, dep.version.value) for dep in dep_info]
self.assertNotIn(('ignore_this', '<=2.4'), deps)

for requirement in requirements_list:
self.assertIn(requirement, deps)

0 comments on commit bcd5bf9

Please sign in to comment.