11"""Submission model."""
22
33import pprint
4- from dataclasses import dataclass , fields
54from uuid import uuid4
6- from urllib .parse import urlparse
75
86from .julia import JuliaData
97from .serializable import JsonSerializable , parse_datetime
108from .github import GitHubData
119from .pypi import PyPIData
10+ from .request import URL
1211
1312
14- @dataclass
15- class Member (JsonSerializable ):
13+ class Member (JsonSerializable ): # pylint: disable=too-many-instance-attributes
1614 """main Members class that represent a single entry in the Ecosystem."""
1715
18- # pylint: disable=too-many-instance-attributes
19- name : str
20- url : str | None = None
21- description : str | None = None
22- licence : str | None = None
23- contact_info : str | None = None
24- affiliations : str | None = None
25- labels : list [str ] | None = None
26- ibm_maintained : bool = False
27- created_at : int | None = None
28- updated_at : int | None = None
29- website : str | None = None
30- group : str | None = None
31- category : str | None = None
32- reference_paper : str | None = None
33- documentation : str | None = None
34- packages : list [str ] | None = None
35- uuid : str | None = None
36- github : GitHubData | None = None
37- pypi : dict [str , PyPIData ] | None = None
38- julia : JuliaData | None = None
39-
40- def __post_init__ (self ):
16+ def __init__ ( # pylint: disable=too-many-arguments, too-many-locals
17+ self ,
18+ name : str ,
19+ url : str | URL | None = None ,
20+ description : str | None = None ,
21+ licence : str | None = None ,
22+ contact_info : str | None = None ,
23+ affiliations : str | None = None ,
24+ labels : list [str ] | None = None ,
25+ ibm_maintained : bool = False ,
26+ created_at : int | None = None ,
27+ updated_at : int | None = None ,
28+ website : str | None = None ,
29+ group : str | None = None ,
30+ category : str | None = None ,
31+ reference_paper : URL | None = None ,
32+ documentation : URL | None = None ,
33+ packages : list [URL ] | None = None ,
34+ uuid : str | None = None ,
35+ github : GitHubData | None = None ,
36+ pypi : dict [str , PyPIData ] | None = None ,
37+ julia : JuliaData | None = None ,
38+ ):
39+ self .name = name
40+ self .url = URL (url ) if isinstance (url , str ) else url
41+ self .description = description
42+ self .licence = licence
43+ self .contact_info = contact_info
44+ self .affiliations = affiliations
45+ self .labels = labels
46+ self .ibm_maintained = ibm_maintained
47+ self .created_at = created_at
48+ self .updated_at = updated_at
49+ self .website = website
50+ self .group = group
51+ self .category = category
52+ self .reference_paper = reference_paper
53+ self .documentation = documentation
54+ self .packages = packages
55+ self .uuid = uuid
56+ self .github = github
57+ self .pypi = pypi
58+ self .julia = julia
59+
4160 self .__dict__ .setdefault ("created_at" , parse_datetime ("now" ))
4261 self .__dict__ .setdefault ("updated_at" , parse_datetime ("now" ))
4362 if self .github is None :
44- self .github = GitHubData .from_url (urlparse ( self .url ) )
63+ self .github = GitHubData .from_url (self .url )
4564 if self .uuid is None :
4665 self .uuid = str (uuid4 ())
4766 if self .labels is None :
@@ -63,7 +82,7 @@ def from_dict(cls, dictionary: dict):
6382
6483 Return: Member
6584 """
66- submission_fields = [ f . name for f in fields (Member )]
85+ submission_fields = vars (Member )[ "__static_attributes__" ]
6786 filtered_dict = {k : v for k , v in dictionary .items () if k in submission_fields }
6887 if "julia" in filtered_dict :
6988 filtered_dict ["julia" ] = JuliaData .from_dict (filtered_dict ["julia" ])
@@ -108,7 +127,7 @@ def name_id(self):
108127 It is used to create the TOML file name
109128 """
110129 # TODO: it is not uniq tho. Maybe add a random number at the end? pylint: disable=W0511
111- repo_dir = self .url .strip ("/" ).split ("/" )[- 1 ]
130+ repo_dir = self .url .path . rstrip ("/" ).split ("/" )[- 1 ]
112131 return repo_dir .lower ().replace ("." , "_" )
113132
114133 def update_github (self ):
@@ -137,26 +156,17 @@ def from_submission(cls, submission):
137156 """
138157 Takes a submission object and creates a very basic Member object
139158 """
140- # TODO? licence
141-
142- url = submission .source_url .geturl () if submission .source_url else None
143- website = submission .home_url .geturl () if submission .home_url else None
144- reference_paper = (
145- submission .paper_url .geturl () if submission .paper_url else None
146- )
147- documentation = submission .docs_url .geturl () if submission .docs_url else None
148-
149159 return Member (
150160 name = submission .name ,
151- url = url ,
161+ url = submission . source_url ,
152162 description = submission .description ,
153163 contact_info = submission .contact_info ,
154164 labels = submission .labels ,
155165 ibm_maintained = submission .is_ibm_maintained ,
156- website = website ,
166+ website = submission . home_url ,
157167 group = submission .category ,
158- reference_paper = reference_paper ,
159- documentation = documentation ,
168+ reference_paper = submission . paper_url ,
169+ documentation = submission . docs_url ,
160170 github = GitHubData .from_url (submission .source_url ),
161171 packages = submission .package_urls ,
162172 )
0 commit comments