• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

feihoo87 / waveforms / 7442221979

08 Jan 2024 01:47AM UTC coverage: 33.345% (-0.05%) from 33.393%
7442221979

push

github

feihoo87
update

0 of 15 new or added lines in 1 file covered. (0.0%)

24 existing lines in 2 files now uncovered.

2795 of 8382 relevant lines covered (33.35%)

2.98 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/waveforms/loader.py
1
import importlib
×
2
import io
×
3
import logging
×
4
import sys
×
5

6
import git
×
7

8
log = logging.getLogger(__name__)
×
9

10

11
class GitFinder(importlib.abc.MetaPathFinder):
×
12
    def __init__(self, path, name='HEAD'):
×
13
        self.path = path
×
14
        self.name = name
×
15

16
    def find_spec(self, fullname, path=None, target=None):
×
17
        log.debug("find_spec: fullname=%r, path=%r, target=%r", fullname, path,
×
18
                  target)
19
        loader = GitModuleLoader(self.path, self.name, fullname)
×
20
        if loader.blob is not None:
×
21
            log.debug("find_spec: module %r found", fullname)
×
22
            return importlib.util.spec_from_loader(fullname, loader)
×
23
        else:
24
            log.debug("find_spec: module %r not found", fullname)
×
25
            return None
×
26

27

28
class GitModuleLoader(importlib.abc.FileLoader, importlib.abc.SourceLoader):
×
NEW
29
    def __init__(self, repo_path, revision, fullname):
×
30
        self.repo_path = repo_path
×
NEW
31
        self.hexsha = git.Repo(self.repo_path).commit(revision).hexsha
×
32

33
        self.blob, self.filepath, self._is_package = self._find_blob(
×
34
            repo_path, revision, '/'.join(fullname.split('.')))
35
        
NEW
36
    def get_blob(self, revision, filepath):
×
NEW
37
        try:
×
38
            # find a module
NEW
39
            blob = git.Repo(self.repo_path).commit(revision).tree[filepath + '.py']
×
NEW
40
            return blob, filepath + '.py'
×
NEW
41
        except KeyError:
×
NEW
42
            try:
×
NEW
43
                blob = git.Repo(self.repo_path).commit(revision).tree[filepath + '.pyc']
×
NEW
44
                return blob, filepath + '.pyc'
×
NEW
45
            except KeyError:
×
NEW
46
                return None, None
×
47

NEW
48
    def _find_blob(self, repo_path, revision, filepath):
×
49
        try:
×
50
            # find a module
NEW
51
            blob = git.Repo(repo_path).commit(revision).tree[filepath + '.py']
×
52
            return blob, filepath + '.py', False
×
53
        except KeyError:
×
54
            pass
×
55
        try:
×
56
            # find a package
NEW
57
            blob = git.Repo(repo_path).commit(revision).tree[filepath +
×
58
                                                         '/__init__.py']
59
            return blob, filepath + '/__init__.py', True
×
60
        except KeyError:
×
61
            pass
×
62
        return None, None, False
×
63

64
    def is_package(self, fullname):
×
65
        return self._is_package
×
66

67
    def get_filename(self, fullname):
×
68
        return f"git://{self.hexsha}@{self.repo_path}|{self.filepath}"
×
69

70
    def get_data(self, path):
×
71
        buf = io.BytesIO()
×
72
        self.blob.stream_data(buf)
×
73
        buf.seek(0)
×
74
        return buf.read()
×
75

76

77
_installed_meta_cache = {}
×
78

79

80
def install_meta(path, name='HEAD'):
×
81
    if (path, name) not in _installed_meta_cache:
×
82
        finder = GitFinder(path, name)
×
83
        _installed_meta_cache[(path, name)] = finder
×
84
        for i, v in enumerate(sys.meta_path):
×
85
            if isinstance(v, GitFinder):
×
86
                sys.meta_path.insert(i, finder)
×
87
                break
×
88
        else:
89
            sys.meta_path.append(finder)
×
90
        log.debug('%r installed on sys.meta_path', finder)
×
91

92

93
def remove_meta(path, name='HEAD'):
×
94
    if (path, name) in _installed_meta_cache:
×
95
        finder = _installed_meta_cache.pop((path, name))
×
96
        sys.meta_path.remove(finder)
×
97
        log.debug('%r removed from sys.meta_path', finder)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc