pub-analyzer 0.3.0__py3-none-any.whl → 0.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pub-analyzer might be problematic. Click here for more details.

@@ -19,20 +19,26 @@ Body {
19
19
  Footer {
20
20
  dock: bottom;
21
21
  background: $primary-color;
22
- }
23
-
24
- Footer > .footer--highlight {
25
- background: $primary-color-accent;
26
- }
27
-
28
- Footer > .footer--highlight-key {
29
- background: $primary-color-highlight;
30
- text-style: bold;
31
- }
32
22
 
33
- Footer > .footer--key {
34
- text-style: bold;
35
- background: $primary-color-accent
23
+ FooterKey {
24
+ background: $primary-color;
25
+ color: white;
26
+
27
+ .footer-key--key {
28
+ text-style: bold;
29
+ color: white;
30
+ background: $primary-color-accent;
31
+ }
32
+
33
+ &:hover {
34
+ background: $primary-color-highlight;
35
+ color: white;
36
+ text-style: bold;
37
+ .footer-key--key {
38
+ background: $primary-color-accent;
39
+ }
40
+ }
41
+ }
36
42
  }
37
43
 
38
44
  LoadingIndicator {
@@ -1,97 +1,112 @@
1
1
  // Author Summary
2
2
  = Author.
3
3
 
4
+ #let summary-card(title: "Title", body) = {
5
+ return block(
6
+ width: 100%,
7
+ height: 150pt,
8
+ fill: rgb("e5e7eb"),
9
+ stroke: 1pt,
10
+ radius: 2pt,
11
+ )[
12
+ #v(20pt)
13
+ #align(center)[#text(size: 12pt)[#title]]
14
+ #v(5pt)
15
+ #block(width: 100%, inset: (x: 20pt))[#body]
16
+ ]
17
+ }
18
+
4
19
  // Cards
5
20
  #grid(
6
21
  columns: (1fr, 1fr, 1fr),
7
22
  column-gutter: 15pt,
8
23
  [
9
- // Card
10
- #rect(
11
- width: 100%,
12
- height: 150pt,
13
- fill: rgb("e5e7eb"),
14
- stroke: 1pt,
15
- radius: 2pt,
16
- [#linebreak()
17
- #grid(
18
- columns: 1fr,
19
- row-gutter: (15pt, 12pt),
20
-
21
- // Card Title
22
- [#align(center)[#text(size: 12pt)[Last institution:]]],
24
+ // Last institution.
25
+ #summary-card(title:"Last institution:")[
26
+ {% if report.author.last_known_institutions%}
27
+ {% set last_known_institution = report.author.last_known_institutions[0] %}
28
+ #grid(
29
+ rows: auto, row-gutter: 10pt,
23
30
 
24
- // Card content
25
- {% if report.author.last_known_institutions%}
26
- {% set last_known_institution = report.author.last_known_institutions[0] %}
27
- [#align(left)[#text(size: 10pt)[- *Name:* {{ last_known_institution.display_name }}]]],
28
- [#align(left)[#text(size: 10pt)[- *Country:* MX]]],
29
- [#align(left)[#text(size: 10pt)[- *Type:* education]]],
30
- {% endif %}
31
- )]
32
- )
31
+ [*Name:* {{ last_known_institution.display_name }}],
32
+ [*Country:* {{ last_known_institution.country_code }}],
33
+ [*Type:* {{ last_known_institution.type.value|capitalize }}],
34
+ )
35
+ {% endif %}
36
+ ]
33
37
  ],
34
38
  [
35
- // Card
36
- #rect(
37
- width: 100%,
38
- height: 150pt,
39
- fill: rgb("e5e7eb"),
40
- stroke: 1pt,
41
- radius: 2pt,
42
- [#linebreak()
43
- #grid(
44
- columns: 1fr,
45
- row-gutter: (15pt, 12pt),
46
-
47
- // Card Title
48
- [#align(center)[#text(size: 12pt)[Identifiers:]]],
49
-
50
- // Card content
39
+ // Author identifiers.
40
+ #summary-card(title:"Identifiers:")[
41
+ #grid(
42
+ rows: auto, row-gutter: 10pt,
51
43
  {% for key, value in report.author.ids.model_dump().items() %}
52
- {% if value %}
53
- [#align(left)[#text(size: 10pt)[- #underline( [#link("{{ value }}")[{{ key }}]] )]]],
54
- {% endif %}
44
+ {% if value %}
45
+ [- #underline( [#link("{{ value }}")[{{ key }}]] )],
46
+ {% endif %}
55
47
  {% endfor %}
56
- )]
57
- )
48
+ )
49
+ ]
58
50
  ],
59
51
  [
60
- // Card
61
- #rect(
62
- width: 100%,
63
- height: 150pt,
64
- fill: rgb("e5e7eb"),
65
- stroke: 1pt,
66
- radius: 2pt,
67
- [#linebreak()
68
- #grid(
69
- columns: 1fr,
70
- row-gutter: (15pt, 12pt),
71
-
72
- // Card Title
73
- [#align(center)[#text(size: 12pt)[Citation metrics:]]],
52
+ // Citation metrics.
53
+ #summary-card(title: "Citation metrics:")[
54
+ #grid(
55
+ rows: auto, row-gutter: 10pt,
74
56
 
75
- // Card content
76
- [#align(left)[#text(size: 10pt)[- *2-year mean:* {{ report.author.summary_stats.two_yr_mean_citedness|round(5) }}]]],
77
- [#align(left)[#text(size: 10pt)[- *h-index:* {{ report.author.summary_stats.h_index }}]]],
78
- [#align(left)[#text(size: 10pt)[- *i10 index:* {{ report.author.summary_stats.i10_index }}]]],
79
- )]
80
- )
57
+ [*2-year mean:* {{ report.author.summary_stats.two_yr_mean_citedness|round(5) }}],
58
+ [*h-index:* {{ report.author.summary_stats.h_index }}],
59
+ [*i10 index:* {{ report.author.summary_stats.i10_index }}]
60
+ )
61
+ ]
81
62
  ],
82
63
  )
83
64
 
65
+ #v(10pt)
84
66
  #align(center, text(11pt)[_Counts by year_])
85
- #table(
86
- columns: (1fr, 2fr, 2fr),
87
- inset: 8pt,
88
- align: horizon,
89
- // Headers
90
- [*Year*], [*Works count*], [*Cited by count*],
67
+ #grid(
68
+ columns: (1fr, 1fr),
69
+ column-gutter: 15pt,
70
+ align: (auto, horizon),
91
71
 
92
- // Content
93
- {% for year_count in report.author.counts_by_year[:8] %}
94
- [{{ year_count.year }}], [{{ year_count.works_count }}], [{{ year_count.cited_by_count }}],
95
- {% endfor %}
72
+ [
73
+ #table(
74
+ columns: (1fr, 2fr, 2fr),
75
+ inset: 8pt,
76
+ align: horizon,
77
+ // Headers
78
+ [*Year*], [*Works count*], [*Cited by count*],
79
+
80
+ // Content
81
+ {% set max_year_count = 0 %}
82
+ {% for year_count in report.author.counts_by_year[:8] %}
83
+ [{{ year_count.year }}], [{{ year_count.works_count }}], [{{ year_count.cited_by_count }}],
84
+ {% set max_year_count = year_count %}
85
+ {% endfor %}
86
+ )
87
+ ],
88
+ grid.cell(
89
+ inset: (x: 10pt, bottom: 10pt, top: 2.5pt),
90
+ stroke: 1pt
91
+ )[
92
+ #align(center, text(10pt)[Cites by year])
93
+ #v(5pt)
94
+ #canvas(length: 100%, {
95
+ plot.plot(
96
+ size: (0.90, 0.48),
97
+ axis-style: "scientific-auto",
98
+ plot-style: (stroke: (1pt + BLUE),),
99
+ x-min: auto, x-max: auto,
100
+ x-tick-step: 1, y-tick-step: auto,
101
+ x-label: none, y-label: none,
102
+ {
103
+ plot.add((
104
+ {% for year_count in report.author.counts_by_year[:8] %}
105
+ ({{ year_count.year }}, {{ year_count.cited_by_count }}),
106
+ {% endfor %}
107
+ ))
108
+ })
109
+ })
110
+ ]
96
111
  )
97
112
  #pagebreak()
@@ -1,6 +1,18 @@
1
1
  // This document was generated using Pub Analyzer.
2
2
  // https://pub-analyzer.com
3
3
 
4
+ // Packages
5
+ #import "@preview/cetz:0.2.2": canvas, plot, chart, palette
6
+
7
+ // Colors
8
+ #let BLUE = rgb("#42a2f8")
9
+ #let GREEN = rgb("#82d452")
10
+ #let GRAY = rgb("#929292")
11
+ #let YELLOW = rgb("#f0bb40")
12
+ #let RED = rgb("#eb4025")
13
+ #let PURPLE = rgb("#c33375")
14
+
15
+ #let colors = (BLUE, GREEN, GRAY, YELLOW, RED, PURPLE)
4
16
 
5
17
  // Page Layoput
6
18
  #set page("us-letter")
@@ -10,7 +10,7 @@
10
10
 
11
11
  // Content
12
12
  {% for source in report.sources_summary.sources %}
13
- [#underline[3.{{ loop.index }}. #label("source_{{ source.id.path.rpartition("/")[2] }}")]],
13
+ [3.{{ loop.index }}. #label("source_{{ source.id.path.rpartition("/")[2] }}")],
14
14
  [#underline([#link("{{ source.homepage_url }}")[#"{{ source.display_name }}"]])],
15
15
  [{{ source.host_organization_name or "-" }}],
16
16
  [{{source.type }}],
@@ -1,46 +1,133 @@
1
1
  // Works
2
2
  = Works.
3
3
 
4
- #linebreak()
4
+ #let works_metrics_card(title: "Title", graph, body) = {
5
+ grid(
6
+ rows: (18pt, 175pt, 60pt),
7
+ columns: 100%,
8
+
9
+ [
10
+ #block(width: 100%, height: 100%)[
11
+ #align(center + horizon)[#text(style: "italic")[#title]]
12
+ ]
13
+ ],
14
+ [
15
+ #block(width: 100%, height: 100%)[
16
+ #align(center + horizon)[#graph]
17
+ ]
18
+ ],
19
+ [
20
+ #block(width: 100%, height: 100%, inset: (x: 5pt, y: 10pt))[#body]
21
+ ],
22
+ )
23
+ }
5
24
 
6
25
  #grid(
7
26
  columns: (1fr, 1fr, 1fr),
8
- column-gutter: 30pt,
27
+ column-gutter: 15pt,
9
28
  [
10
- #align(center)[_Citation metrics_]
11
- #parbreak()
12
- - *Count:* {{ report.citation_summary.type_a_count + report.citation_summary.type_b_count }}
13
- - *Type A:* {{ report.citation_summary.type_a_count }}
14
- - *Type B:* {{ report.citation_summary.type_b_count }}
29
+ #let graph = {
30
+ canvas(length: 35%, {
31
+ chart.piechart(
32
+ (
33
+ {{ report.citation_summary.type_a_count }}, // Type A
34
+ {{ report.citation_summary.type_b_count }} // Type B
35
+ ),
36
+ radius: 1,
37
+ slice-style: (BLUE, GREEN),
38
+ outer-label: (content: "%", radius: 115%),
39
+ )
40
+ })
41
+ }
42
+
43
+ #works_metrics_card(title: "Citation metrics", graph)[
44
+ #grid(
45
+ rows: auto, row-gutter: 10pt,
46
+ columns: (1fr, 1fr),
47
+
48
+ grid.cell(colspan: 2)[
49
+ *Count:* {{ report.citation_summary.type_a_count + report.citation_summary.type_b_count }}
50
+ ],
51
+ [#box(height: 7pt, width: 7pt, fill: BLUE) *Type A:* {{ report.citation_summary.type_a_count }}],
52
+ [#box(height: 7pt, width: 7pt, fill: GREEN) *Type B:* {{ report.citation_summary.type_b_count }}],
53
+ )
54
+ ]
15
55
  ],
16
56
  [
17
- #align(center)[_Work Type_]
18
- #parbreak()
19
- {% for work_type in report.works_type_summary %}
20
- - *{{ work_type.type_name }}:* {{ work_type.count }}
21
- {% endfor %}
57
+ #let graph = {
58
+ canvas(length: 35%, {
59
+ chart.columnchart(
60
+ size: (2.45, 2.0),
61
+ y-grid: false,
62
+ bar-style: palette.new(
63
+ base: (stroke: none, fill: none),
64
+ colors: colors
65
+ ),
66
+ (
67
+ {% for work_type in report.works_type_summary[:4] %}
68
+ ("{{ work_type.type_name[:2]|capitalize }}", {{ work_type.count }}),
69
+ {% endfor %}
70
+ )
71
+ )
72
+ })
73
+ }
74
+ #works_metrics_card(title: "Work Type", graph)[
75
+ #grid(
76
+ rows: auto, row-gutter: 10pt,
77
+ columns: (1fr, 1fr),
78
+ column-gutter: 5pt,
79
+
80
+ grid.cell(colspan: 2)[
81
+ *Count:* {{ report.open_access_summary.model_dump().items()|sum(attribute="1") }}
82
+ ],
83
+
84
+ {% for work_type in report.works_type_summary[:4] %}
85
+ [
86
+ #box(height: 7pt, width: 7pt, fill: colors.at({{ loop.index0 }})) *{{ work_type.type_name|capitalize }}:* {{ work_type.count }}
87
+ ],
88
+ {% endfor %}
89
+ )
90
+ ]
22
91
  ],
23
92
  [
24
- #align(center)[_Open Access_]
25
- #parbreak()
26
- #grid(
27
- columns: (1fr, 1fr),
28
- column-gutter: 15pt,
29
- [
30
- - *gold:* {{report.open_access_summary.gold}}
31
- - *green:* {{report.open_access_summary.green}}
32
- - *hybrid:* {{report.open_access_summary.hybrid}}
33
- ],
34
- [
35
- - *bronze:* {{report.open_access_summary.bronze}}
36
- - *closed:* {{report.open_access_summary.closed}}
37
- ],
38
- )
93
+ #let graph = {
94
+ canvas(length: 35%, {
95
+ chart.piechart(
96
+ (
97
+ {{report.open_access_summary.gold}}, // Gold
98
+ {{report.open_access_summary.green}}, // Green
99
+ {{report.open_access_summary.hybrid}}, // Hybrid
100
+ {{report.open_access_summary.bronze}}, // Bronze
101
+ {{report.open_access_summary.closed}}, // Closed
102
+ ),
103
+ radius: 1,
104
+ inner-radius: .4,
105
+ slice-style: (YELLOW, GREEN, RED, BLUE, GRAY),
106
+ outer-label: (content: "%", radius: 115%),
107
+ )
108
+ })
109
+ }
110
+ #works_metrics_card(title: "Open Access", graph)[
111
+ #grid(
112
+ rows: auto, row-gutter: 10pt,
113
+ columns: (1fr, 1fr, 1fr),
114
+ column-gutter: 5pt,
115
+
116
+ grid.cell(colspan: 3)[
117
+ *Count:* {{ report.open_access_summary.model_dump().items()|sum(attribute="1") }}
118
+ ],
119
+
120
+ [#box(height: 7pt, width: 7pt, fill: YELLOW) *Gold:* {{report.open_access_summary.gold}}],
121
+ [#box(height: 7pt, width: 7pt, fill: GREEN) *Green:* {{report.open_access_summary.green}}],
122
+ [#box(height: 7pt, width: 7pt, fill: BLUE) *Bronze:* {{report.open_access_summary.bronze}}],
123
+
124
+ [#box(height: 7pt, width: 7pt, fill: GRAY) *Closed:* {{report.open_access_summary.closed}}],
125
+ [#box(height: 7pt, width: 7pt, fill: RED) *Hybrid:* {{report.open_access_summary.hybrid}}],
126
+ )
127
+ ]
39
128
  ],
40
129
  )
41
130
 
42
- #linebreak()
43
-
44
131
  #align(center, text(11pt)[Works from {{ report.works[0].work.publication_year }} to {{ report.works[-1].work.publication_year }}])
45
132
  #table(
46
133
  columns: (auto, 3fr, auto, auto, auto, auto, auto, auto, auto),
@@ -1,11 +1,10 @@
1
- == Extended info.
2
1
  {% for work in report.works %}
3
2
 
4
3
  {% if not loop.first %}
5
4
  #pagebreak()
6
5
  {% endif %}
7
6
 
8
- === #text()[#"{{ work.work.title.replace('"', '\\"') }}"] <work_{{ loop.index }}>
7
+ == #text()[#"{{ work.work.title.replace('"', '\\"') }}"] <work_{{ loop.index }}>
9
8
 
10
9
  #linebreak()
11
10
 
pub_analyzer/main.py CHANGED
@@ -43,8 +43,12 @@ class PubAnalyzerApp(App[DOMNode]):
43
43
 
44
44
  def compose(self) -> ComposeResult:
45
45
  """Create child widgets for the app."""
46
+ footer = Footer()
47
+ footer.upper_case_keys = True
48
+ footer.ctrl_to_caret = False
49
+
46
50
  yield Body()
47
- yield Footer()
51
+ yield footer
48
52
 
49
53
  def action_toggle_dark(self) -> None:
50
54
  """Toggle dark mode."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pub-analyzer
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: A text user interface, written in python, which automates the generation of scientific production reports using OpenAlex
5
5
  Home-page: https://github.com/alejandrgaspar/pub-analyzer
6
6
  License: MIT
@@ -23,10 +23,10 @@ Classifier: Programming Language :: Python :: 3.11
23
23
  Classifier: Programming Language :: Python :: 3.12
24
24
  Classifier: Typing :: Typed
25
25
  Requires-Dist: httpx (==0.27.0)
26
- Requires-Dist: jinja2 (==3.1.3)
27
- Requires-Dist: pydantic (==2.7.1)
28
- Requires-Dist: textual (==0.58.0)
29
- Requires-Dist: typst (==0.11.0)
26
+ Requires-Dist: jinja2 (==3.1.4)
27
+ Requires-Dist: pydantic (==2.7.4)
28
+ Requires-Dist: textual (==0.70.0)
29
+ Requires-Dist: typst (==0.11.1)
30
30
  Project-URL: Documentation, https://pub-analyzer.com/
31
31
  Project-URL: Repository, https://github.com/alejandrgaspar/pub-analyzer
32
32
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ pub_analyzer/css/buttons.tcss,sha256=FruJ39dXmKnZm3_y0CxAJByKHrbmt6RQky0T0uM906g
4
4
  pub_analyzer/css/checkbox.tcss,sha256=FblyIHns-r1K0ikOnSJtoTMz57C6iDEcscdFAsJ7s48,506
5
5
  pub_analyzer/css/collapsible.tcss,sha256=Rh-L5PcIMhnZ7RhY1udd_BcYC1mfCMew2m6o6ty3juE,605
6
6
  pub_analyzer/css/datatable.tcss,sha256=JgdMUPc4fYmZlXi_FxbuD88pegK6Pi4FgDHIfA_TKxo,994
7
- pub_analyzer/css/main.tcss,sha256=wL8KD2gwRDrE_u0EbZrvu5s3eTFwWLtbP8RMLgCv2Sk,834
7
+ pub_analyzer/css/main.tcss,sha256=rtHLKCVZaBuJ83dAg840cetzVtEy8Rjbw1UKxgafeE8,1027
8
8
  pub_analyzer/css/report.tcss,sha256=5v-h4Y5gUdonLQTVkVm-HYrYT1xDS-4NYHVZDYghVEs,2066
9
9
  pub_analyzer/css/search.tcss,sha256=rovbWjp4pYfCF_OyAC_QrV_0WdMUlsYoQ3vbs9pGw7g,1326
10
10
  pub_analyzer/css/summary.tcss,sha256=i4ixICwoQFj2BToW9NVmJGUIYk5upbukbTCnDgT40ds,1350
@@ -14,12 +14,12 @@ pub_analyzer/internal/__init__.py,sha256=9aqrBJDedUiBO5kEO81kSAuPbOSFoaDZZK8w5Ny
14
14
  pub_analyzer/internal/identifier.py,sha256=LDYew25TLuwqJHmLg9iRNTURWynN27ZbTxTVGbuOUD0,2939
15
15
  pub_analyzer/internal/render.py,sha256=gq5dScWs507tne3glJbTQ-PekmALvtcZPB1p_mVAkE0,2144
16
16
  pub_analyzer/internal/report.py,sha256=zeDn4mR8G7-NA0SxelIhanZ2e4mLecbiuVqlv2_hMb8,16320
17
- pub_analyzer/internal/templates/author/author_summary.typ,sha256=0qyS2C075wpj3mOxY4Ka5-aNjQ5RAjoJskkIb8tnLFE,2478
18
- pub_analyzer/internal/templates/author/report.typ,sha256=izdq5Z-504hkLwI_C47RsqDDu_K8N74h_3KCetzSies,1444
19
- pub_analyzer/internal/templates/author/sources.typ,sha256=_yFNDuYPu1casCy73JVL7l9qZ_YYRqTGLLgr5tnQW5A,814
20
- pub_analyzer/internal/templates/author/works.typ,sha256=wKgg4EoPYLzY2q3UBsBKZADOmTy4-1r8CD1pt8A3VYo,1980
21
- pub_analyzer/internal/templates/author/works_extended.typ,sha256=B38IHOwlBuPzUA6SewoHEp5eU-9kEH3yH5KvK7Nm7a0,3527
22
- pub_analyzer/main.py,sha256=-yv34eVkLT8cyJ-wCl3vuoprMmqpsMhc3arGAnytCuY,2201
17
+ pub_analyzer/internal/templates/author/author_summary.typ,sha256=HtKVteroNhDIDu83vH3ZESm7VMmU8eMx7Wd-gqBXbHg,2827
18
+ pub_analyzer/internal/templates/author/report.typ,sha256=Pq7AxT425Buz4a2NFSIoNwp4FozwuHWALzNxe0fsTwA,1749
19
+ pub_analyzer/internal/templates/author/sources.typ,sha256=vY9qUEl_HbxgYl4NWR8yH0oQ5TzaYIxk3p9IsSprFBM,802
20
+ pub_analyzer/internal/templates/author/works.typ,sha256=zPIzuUDJ3tL7Nf6Mt2t8W-RRQYSgWKVh4cx47APGSGs,4803
21
+ pub_analyzer/internal/templates/author/works_extended.typ,sha256=kzk8gpGEqj1J-U1OrmGBGZ63N17wBwFjR1XDW6dFyWo,3508
22
+ pub_analyzer/main.py,sha256=0vCh_eaPc4uaGI2WsyTp7JYc9CL5gANCaa4PZhB8Dvc,2301
23
23
  pub_analyzer/models/__init__.py,sha256=hvR6m379slQw7gSwnl_OFY21Ytv90mmmOe7bp8vZYkk,59
24
24
  pub_analyzer/models/author.py,sha256=9DzBQY4JoDv5ilBNOLyquOqnlwbXCTpmZq25cQLCgYU,1900
25
25
  pub_analyzer/models/concept.py,sha256=yNvajKWTn6uBalNoJmlobitvbFBOjF80jlZnjKjwDRw,677
@@ -62,8 +62,8 @@ pub_analyzer/widgets/search/__init__.py,sha256=8C3IQtFkiIL8hlQbhJ_fAHM59-TAoe29w
62
62
  pub_analyzer/widgets/search/core.py,sha256=4NvowtBcrH1fmob9kuF7v9Tq3Nd99jzB2S7xaD8OYeI,3861
63
63
  pub_analyzer/widgets/search/results.py,sha256=6Sl-shkGCf-jcMmalXpk1n8oBHk1aZNzFPJfHSRP1gA,3702
64
64
  pub_analyzer/widgets/sidebar.py,sha256=XlIshlCVW5Bb3MXFPnU9is0qQrUrGdT6xlkKiYNEcAM,2704
65
- pub_analyzer-0.3.0.dist-info/LICENSE,sha256=OPopoEowTMKqIea8Kbxk3TKdCQ97YkLvIknjTHE5oCI,1080
66
- pub_analyzer-0.3.0.dist-info/METADATA,sha256=sMpAloa5JJUR1k3N7lgpLATfrn4Q8lZqERK5_NBYPaE,4508
67
- pub_analyzer-0.3.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
68
- pub_analyzer-0.3.0.dist-info/entry_points.txt,sha256=mVb_gUNX_-aVWHlNKLjcMAS8YLgNnSq9JLRXVJGIF2c,54
69
- pub_analyzer-0.3.0.dist-info/RECORD,,
65
+ pub_analyzer-0.4.0.dist-info/LICENSE,sha256=OPopoEowTMKqIea8Kbxk3TKdCQ97YkLvIknjTHE5oCI,1080
66
+ pub_analyzer-0.4.0.dist-info/METADATA,sha256=J0vtkBiJ_KBkDg5r525pSArh9XflnHHo8FzU5gPMoyw,4508
67
+ pub_analyzer-0.4.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
68
+ pub_analyzer-0.4.0.dist-info/entry_points.txt,sha256=mVb_gUNX_-aVWHlNKLjcMAS8YLgNnSq9JLRXVJGIF2c,54
69
+ pub_analyzer-0.4.0.dist-info/RECORD,,