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

askomics / flaskomics / 8143972779

04 Mar 2024 04:54PM UTC coverage: 83.219%. Remained the same
8143972779

Pull #449

github

web-flow
Merge 6d2bc1d30 into 91939bc97
Pull Request #449: Bump xml2js and parse-bmfont-xml

6283 of 7550 relevant lines covered (83.22%)

0.83 hits per line

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

41.43
/askomics/libaskomics/RdfFile.py
1
from askomics.libaskomics.File import File
1✔
2
from askomics.libaskomics.RdfGraph import RdfGraph
1✔
3
from askomics.libaskomics.SparqlQueryLauncher import SparqlQueryLauncher
1✔
4
from askomics.libaskomics.TriplestoreExplorer import TriplestoreExplorer
1✔
5
from askomics.libaskomics.Utils import Utils
1✔
6

7

8
class RdfFile(File):
1✔
9
    """RDF (turtle) File
10

11
    Attributes
12
    ----------
13
    public : bool
14
        Public or private dataset
15
    """
16

17
    def __init__(self, app, session, file_info, host_url=None, external_endpoint=None, custom_uri=None, external_graph=None):
1✔
18
        """init
19

20
        Parameters
21
        ----------
22
        app : Flask
23
            Flask app
24
        session :
25
            AskOmics session
26
        file_info : dict
27
            file info
28
        host_url : None, optional
29
            AskOmics url
30
        """
31
        File.__init__(self, app, session, file_info, host_url, external_endpoint=external_endpoint, custom_uri=custom_uri, external_graph=external_graph)
1✔
32

33
        self.type_dict = {
1✔
34
            "rdf/ttl": "turtle",
35
            "rdf/xml": "xml",
36
            "rdf/nt": "nt"
37
        }
38

39
    def set_preview(self):
1✔
40
        """Summary"""
41
        pass
×
42

43
    def save_preview(self):
1✔
44
        """Save location and endpoint in preview"""
45
        data = None
×
46
        error = None
×
47
        try:
×
48
            location, remote_graph = self.get_location_and_remote_graph()
×
49
            data = {"location": location, "remote_graph": remote_graph}
×
50
        except Exception as e:
×
51
            error = str(e)
×
52
        self.save_preview_in_db(data, error)
×
53

54
    def get_location_and_remote_graph(self):
1✔
55
        """Get location of data if specified
56

57
        Returns
58
        -------
59
        str
60
            Location
61
        """
62

63
        if self.settings.get('askomics', 'skip_rdf_preview', fallback=False):
×
64
            return "", ""
×
65

66
        graph = RdfGraph(self.app, self.session)
×
67
        graph.parse(self.path, format=self.type_dict[self.type])
×
68
        triple_loc = (None, self.prov.atLocation, None)
×
69
        triple_graph = (None, self.dcat.Dataset, None)
×
70
        loc = None
×
71
        remote_graph = None
×
72
        for s, p, o in graph.graph.triples(triple_loc):
×
73
            loc = str(o)
×
74
            break
×
75

76
        for s, p, o in graph.graph.triples(triple_graph):
×
77
            remote_graph = str(o)
×
78
            break
×
79

80
        return loc, remote_graph
×
81

82
    def get_preview(self):
1✔
83
        """Get a preview of the frist 100 lines of a ttl file
84

85
        Returns
86
        -------
87
        TYPE
88
            Description
89
        """
90
        with open(self.path) as ttl_file:
×
91
            # Read 100 lines
92
            head = ''
×
93
            for x in range(1, 100):
×
94
                head += ttl_file.readline()
×
95

96
        location = None
×
97
        remote_graph = None
×
98
        try:
×
99
            if self.preview:
×
100
                location = self.preview['location']
×
101
                remote_graph = self.preview['remote_graph']
×
102
            else:
103
                location, remote_graph = self.get_location_and_remote_graph()
×
104
        except Exception as e:
×
105
            self.error_message = str(e)
×
106
            # Todo: Better error management
107
            raise e
×
108

109
        return {
×
110
            'type': self.type,
111
            'id': self.id,
112
            'name': self.human_name,
113
            'error': self.error,
114
            'error_message': self.error_message,
115
            'data': {
116
                'preview': head,
117
                'location': location,
118
                'remote_graph': remote_graph
119
            }
120
        }
121

122
    def delete_metadata_location(self):
1✔
123
        """Delete metadata from data"""
124
        self.graph_chunk.remove((None, self.prov.atLocation, None))
1✔
125
        self.graph_chunk.remove((None, self.dcat.Dataset, None))
1✔
126

127
    def integrate(self, public=False):
1✔
128
        """Integrate the file into the triplestore
129

130
        Parameters
131
        ----------
132
        public : bool, optional
133
            Integrate in private or public graph
134
        """
135
        sparql = SparqlQueryLauncher(self.app, self.session)
1✔
136
        tse = TriplestoreExplorer(self.app, self.session)
1✔
137

138
        self.public = public
1✔
139

140
        method = self.settings.get('triplestore', 'upload_method')
1✔
141

142
        # Load file into a RDF graph
143
        self.graph_chunk.parse(self.path, format=self.type_dict[self.type])
1✔
144

145
        # get metadata
146
        self.set_metadata()
1✔
147

148
        # Remove metadata from data
149
        self.delete_metadata_location()
1✔
150

151
        # insert metadata
152
        sparql.insert_data(self.graph_metadata, self.file_graph, metadata=True)
1✔
153

154
        if method == "load":
1✔
155
            # write rdf into a tmpfile and load it
156
            temp_file_name = 'tmp_{}_{}.{}'.format(
×
157
                Utils.get_random_string(5),
158
                self.name,
159
                self.rdf_extention
160
            )
161

162
            # Try to load data. if failure, wait 5 sec and retry 5 time
163
            Utils.redo_if_failure(self.log, 5, 5, self.load_graph, self.graph_chunk, temp_file_name)
×
164

165
        else:
166
            # Insert
167
            # Try to insert data. if failure, wait 5 sec and retry 5 time
168
            Utils.redo_if_failure(self.log, 5, 5, sparql.insert_data, self.graph_chunk, self.file_graph)
1✔
169

170
        # Remove chached abstraction
171
        tse.uncache_abstraction(public=self.public)
1✔
172

173
        self.set_triples_number()
1✔
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

© 2025 Coveralls, Inc