Initial commit

This commit is contained in:
2025-07-04 19:26:39 +02:00
commit c8682d4801
248 changed files with 12519 additions and 0 deletions

View File

@ -0,0 +1 @@
lxml

View File

@ -0,0 +1,211 @@
<?xml version="1.0" encoding="UTF-8"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
<CD>
<TITLE>Greatest Hits</TITLE>
<ARTIST>Dolly Parton</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>RCA</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1982</YEAR>
</CD>
<CD>
<TITLE>Still got the blues</TITLE>
<ARTIST>Gary Moore</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Virgin records</COMPANY>
<PRICE>10.20</PRICE>
<YEAR>1990</YEAR>
</CD>
<CD>
<TITLE>Eros</TITLE>
<ARTIST>Eros Ramazzotti</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>BMG</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1997</YEAR>
</CD>
<CD>
<TITLE>One night only</TITLE>
<ARTIST>Bee Gees</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Polydor</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1998</YEAR>
</CD>
<CD>
<TITLE>Sylvias Mother</TITLE>
<ARTIST>Dr.Hook</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS</COMPANY>
<PRICE>8.10</PRICE>
<YEAR>1973</YEAR>
</CD>
<CD>
<TITLE>Maggie May</TITLE>
<ARTIST>Rod Stewart</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Pickwick</COMPANY>
<PRICE>8.50</PRICE>
<YEAR>1990</YEAR>
</CD>
<CD>
<TITLE>Romanza</TITLE>
<ARTIST>Andrea Bocelli</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>Polydor</COMPANY>
<PRICE>10.80</PRICE>
<YEAR>1996</YEAR>
</CD>
<CD>
<TITLE>When a man loves a woman</TITLE>
<ARTIST>Percy Sledge</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Atlantic</COMPANY>
<PRICE>8.70</PRICE>
<YEAR>1987</YEAR>
</CD>
<CD>
<TITLE>Black angel</TITLE>
<ARTIST>Savage Rose</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>Mega</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1995</YEAR>
</CD>
<CD>
<TITLE>1999 Grammy Nominees</TITLE>
<ARTIST>Many</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Grammy</COMPANY>
<PRICE>10.20</PRICE>
<YEAR>1999</YEAR>
</CD>
<CD>
<TITLE>For the good times</TITLE>
<ARTIST>Kenny Rogers</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Mucik Master</COMPANY>
<PRICE>8.70</PRICE>
<YEAR>1995</YEAR>
</CD>
<CD>
<TITLE>Big Willie style</TITLE>
<ARTIST>Will Smith</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1997</YEAR>
</CD>
<CD>
<TITLE>Tupelo Honey</TITLE>
<ARTIST>Van Morrison</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Polydor</COMPANY>
<PRICE>8.20</PRICE>
<YEAR>1971</YEAR>
</CD>
<CD>
<TITLE>Soulsville</TITLE>
<ARTIST>Jorn Hoel</ARTIST>
<COUNTRY>Norway</COUNTRY>
<COMPANY>WEA</COMPANY>
<PRICE>7.90</PRICE>
<YEAR>1996</YEAR>
</CD>
<CD>
<TITLE>The very best of</TITLE>
<ARTIST>Cat Stevens</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Island</COMPANY>
<PRICE>8.90</PRICE>
<YEAR>1990</YEAR>
</CD>
<CD>
<TITLE>Stop</TITLE>
<ARTIST>Sam Brown</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>A and M</COMPANY>
<PRICE>8.90</PRICE>
<YEAR>1988</YEAR>
</CD>
<CD>
<TITLE>Bridge of Spies</TITLE>
<ARTIST>T'Pau</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Siren</COMPANY>
<PRICE>7.90</PRICE>
<YEAR>1987</YEAR>
</CD>
<CD>
<TITLE>Private Dancer</TITLE>
<ARTIST>Tina Turner</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Capitol</COMPANY>
<PRICE>8.90</PRICE>
<YEAR>1983</YEAR>
</CD>
<CD>
<TITLE>Midt om natten</TITLE>
<ARTIST>Kim Larsen</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>Medley</COMPANY>
<PRICE>7.80</PRICE>
<YEAR>1983</YEAR>
</CD>
<CD>
<TITLE>Pavarotti Gala Concert</TITLE>
<ARTIST>Luciano Pavarotti</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>DECCA</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1991</YEAR>
</CD>
<CD>
<TITLE>The dock of the bay</TITLE>
<ARTIST>Otis Redding</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Stax Records</COMPANY>
<PRICE>7.90</PRICE>
<YEAR>1968</YEAR>
</CD>
<CD>
<TITLE>Picture book</TITLE>
<ARTIST>Simply Red</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>Elektra</COMPANY>
<PRICE>7.20</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Red</TITLE>
<ARTIST>The Communards</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>London</COMPANY>
<PRICE>7.80</PRICE>
<YEAR>1987</YEAR>
</CD>
<CD>
<TITLE>Unchain my heart</TITLE>
<ARTIST>Joe Cocker</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>EMI</COMPANY>
<PRICE>8.20</PRICE>
<YEAR>1987</YEAR>
</CD>
</CATALOG>

View File

@ -0,0 +1,12 @@
"""XML demo to parse a simple ctalog file."""
from lxml import etree
tree = etree.parse(r"files/catalog.xml") # Get the whole document as the root element
# Récupérer les éléments de la racine CATALOG qui ont le nom CD
items = tree.xpath("//CATALOG/CD")
for cd in items:
for attribute in cd:
print(attribute.tag, attribute.attrib) # afficher le nom et les attributs
print(attribute.text)

View File

@ -0,0 +1,2 @@
pandas==1.2.5
xlrd>=1.0.0

View File

@ -0,0 +1,26 @@
"""
Pandas getting started script.
Pandas introduction demo script for Python beginners.
Makes a few calls taken from the official docs to see what can be done
with Pandas.
See Also:
https://pandas.pydata.org/docs/getting_started/comparison/comparison_with_sql.html
"""
import pandas as pd
if __name__ == "__main__":
# Read dataframe from CSV file
frame: pd.DataFrame = pd.read_csv("files/demo-file-985.csv")
# Get basic information on data
print(frame.dtypes)
# Access, within column zero, to all rows
for row in frame.street:
print(row)
# Make the equivalent to a SELECT WHERE query
# Get a frame where the price column is > 100,000
print(frame[frame["price"] > 100000])

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,26 @@
"""
Pandas getting started script.
Pandas introduction demo script for Python beginners.
Makes a few calls taken from the official docs to see what can be done
with Pandas.
See Also:
https://pandas.pydata.org/docs/getting_started/comparison/comparison_with_sql.html
"""
import pandas as pd
if __name__ == "__main__":
# Read dataframe from CSV file
frame: pd.DataFrame = pd.read_excel("files/demo-file-1000.xls")
# Get basic information on data
print(frame.dtypes)
# Access, within column zero, to all rows
for row in frame["First Name"]:
print(row)
# Make the equivalent to a SELECT WHERE query
# Get a frame where the age column is >= 40
print(frame[frame["Age"] >= 40])

View File

@ -0,0 +1,4 @@
# Simple ORM demo with Peewee
Peewee simple definition of a model and simple code to
take advantage of the tool.

View File

@ -0,0 +1 @@
peewee

View File

@ -0,0 +1,27 @@
"""
Simple demo application to showcase Peewee.
Simple script with model definition to showcase the
use of ORMs and Peewee for beginners in database usage.
"""
import peewee as pw # pip install peewee
from models import Person
if __name__ == "__main__": # Only True if current script is executed manually.
# Initialize a Peewee database for SQLite
db = pw.SqliteDatabase("database/demo-file.sqlite3")
# Make the Person model use the database.
Person.bind(db)
# Query the `person` table.
query = Person.select().where(Person.age > 50)
# Display the results with a friendly formatting.
print(f"List of people older than 50 years old:\n{'' * 80}")
for person in query: # type: Person
print(f"{person.id:02d}. {person.get_full_name():<30}: {person.age} years old.")
# Exemple pour créer un nouvel objet Person dans ma table
# nouvelle_personne = Person(first_name="Bob", last_name="Bob", age=90)
# nouvelle_personne.save()

View File

@ -0,0 +1 @@
import demo_app

View File

@ -0,0 +1,3 @@
from .person import Person
__all__ = ["Person"]

View File

@ -0,0 +1,32 @@
import peewee as pw
class Person(pw.Model):
"""
Model class for the Person table.
Simple representation as a class of the Person
table columns. Each object of a Person can be persisted or
retrieved from the database.
Attributes:
Person.id: identifier column. Primary key.
Person.last_name: N/A
Person.first_name: N/A
Person.age: Age of the person in years.
"""
id = pw.BigAutoField(primary_key=True)
last_name = pw.CharField(column_name="nom", max_length=30, null=False)
first_name = pw.CharField(column_name="prenom", max_length=20, null=False)
age = pw.IntegerField(null=False)
class Meta:
indexes = (
# Make a UNIQUE index with the two following columns
(("last_name", "first_name"), True),
)
def get_full_name(self) -> str:
"""Get the full name of the person."""
return f"{self.first_name} {self.last_name}"

View File

@ -0,0 +1,102 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.2" />
<title>data-conversion.application API documentation</title>
<meta name="description" content="Entry point for our demo application …" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>data-conversion.application</code></h1>
</header>
<section id="section-intro">
<p>Entry point for our demo application.</p>
<p>Uses a "WindowManager" class holding the main window and the
CSV data manager used in it.</p>
<h2 id="configuring-your-project-for-the-application">Configuring your project for the application</h2>
<p>You will need to associate the code to a project if not
already done. If you don't have a project, just opening the folder
with PyCharm should suffice.</p>
<p>However, you need to have a <code>virtualenv</code> for your project (for good
practice), that uses Python 3.6+.</p>
<p>In this virtualenv, you'll have to install :</p>
<ul>
<li><code>pyside6</code></li>
</ul>
<p>Note that Qt has issues with theming; if PySide6 is installed, using <code>pip</code> or
another medium, it won't follow the system theme. However, if PySide2 is
installed globally on the system (via <code>apt-get</code> or <code>pacman</code>), programs seem to
follow the system theme. One would then have to revert to importing from
<code>PySide2</code> instead of <code>PySide6</code> (with no other changes).</p>
<h2 id="how-to-run-the-application">How to run the application</h2>
<p>The application is very simple to run in PyCharm.
To do it, right-click on the source file content pane, somewhere where
there is an empty space.</p>
<p>Then, click the <code>Run &lt;application&gt;...</code>.</p>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">&#34;&#34;&#34;
Entry point for our demo application.
Uses a &#34;WindowManager&#34; class holding the main window and the
CSV data manager used in it.
.. include:: documentation/includes/application.md
&#34;&#34;&#34;
from PySide6.QtWidgets import QApplication
from interface import WindowManager # look at interface/__init__.py
if __name__ == &#34;__main__&#34;:
application = QApplication()
window_manager = WindowManager()
window_manager.show()
application.exec()</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul>
<li><a href="#configuring-your-project-for-the-application">Configuring your project for the application</a></li>
<li><a href="#how-to-run-the-application">How to run the application</a></li>
</ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="data-conversion" href="index.html">data-conversion</a></code></li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,70 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.2" />
<title>data-conversion API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Namespace <code>data-conversion</code></h1>
</header>
<section id="section-intro">
</section>
<section>
<h2 class="section-title" id="header-submodules">Sub-modules</h2>
<dl>
<dt><code class="name"><a title="data-conversion.application" href="application.html">data-conversion.application</a></code></dt>
<dd>
<div class="desc"><p>Entry point for our demo application …</p></div>
</dd>
<dt><code class="name"><a title="data-conversion.interface" href="interface/index.html">data-conversion.interface</a></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt><code class="name"><a title="data-conversion.loaders" href="loaders/index.html">data-conversion.loaders</a></code></dt>
<dd>
<div class="desc"></div>
</dd>
</dl>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3><a href="#header-submodules">Sub-modules</a></h3>
<ul>
<li><code><a title="data-conversion.application" href="application.html">data-conversion.application</a></code></li>
<li><code><a title="data-conversion.interface" href="interface/index.html">data-conversion.interface</a></code></li>
<li><code><a title="data-conversion.loaders" href="loaders/index.html">data-conversion.loaders</a></code></li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,76 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.2" />
<title>data-conversion.interface API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>data-conversion.interface</code></h1>
</header>
<section id="section-intro">
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">from .windowmanager import WindowManager</code></pre>
</details>
</section>
<section>
<h2 class="section-title" id="header-submodules">Sub-modules</h2>
<dl>
<dt><code class="name"><a title="data-conversion.interface.mainwindow" href="mainwindow.html">data-conversion.interface.mainwindow</a></code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt><code class="name"><a title="data-conversion.interface.windowmanager" href="windowmanager.html">data-conversion.interface.windowmanager</a></code></dt>
<dd>
<div class="desc"></div>
</dd>
</dl>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="data-conversion" href="../index.html">data-conversion</a></code></li>
</ul>
</li>
<li><h3><a href="#header-submodules">Sub-modules</a></h3>
<ul>
<li><code><a title="data-conversion.interface.mainwindow" href="mainwindow.html">data-conversion.interface.mainwindow</a></code></li>
<li><code><a title="data-conversion.interface.windowmanager" href="windowmanager.html">data-conversion.interface.windowmanager</a></code></li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,161 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.2" />
<title>data-conversion.interface.mainwindow API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>data-conversion.interface.mainwindow</code></h1>
</header>
<section id="section-intro">
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">from PySide6.QtWidgets import QMainWindow, QPushButton, QListWidget
class MainWindow(QMainWindow):
&#34;&#34;&#34;
Class written just for autocompletion and type hinting.
Lists dynamic attributes of the loaded window
so that PyCharm can know that the following attributes
exist in the loaded file.
The class is then used for type hinting in the
`WindowManager` class.
&#34;&#34;&#34;
file_button: QPushButton
button_csv_export: QPushButton
button_txt_export: QPushButton
list_widget: QListWidget</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="data-conversion.interface.mainwindow.MainWindow"><code class="flex name class">
<span>class <span class="ident">MainWindow</span></span>
<span>(</span><span>parent: Optional[PySide6.QtWidgets.QWidget] = None, flags: PySide6.QtCore.Qt.WindowFlags = Default(Qt.WindowFlags))</span>
</code></dt>
<dd>
<div class="desc"><p>Class written just for autocompletion and type hinting.</p>
<p>Lists dynamic attributes of the loaded window
so that PyCharm can know that the following attributes
exist in the loaded file.</p>
<p>The class is then used for type hinting in the
<code>WindowManager</code> class.</p>
<p><strong>init</strong>(self, parent: Optional[PySide6.QtWidgets.QWidget] = None, flags: PySide6.QtCore.Qt.WindowFlags = Default(Qt.WindowFlags)) -&gt; None</p>
<p>Initialize self.
See help(type(self)) for accurate signature.</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class MainWindow(QMainWindow):
&#34;&#34;&#34;
Class written just for autocompletion and type hinting.
Lists dynamic attributes of the loaded window
so that PyCharm can know that the following attributes
exist in the loaded file.
The class is then used for type hinting in the
`WindowManager` class.
&#34;&#34;&#34;
file_button: QPushButton
button_csv_export: QPushButton
button_txt_export: QPushButton
list_widget: QListWidget</code></pre>
</details>
<h3>Ancestors</h3>
<ul class="hlist">
<li>PySide6.QtWidgets.QMainWindow</li>
<li>PySide6.QtWidgets.QWidget</li>
<li>PySide6.QtCore.QObject</li>
<li>PySide6.QtGui.QPaintDevice</li>
<li>Shiboken.Object</li>
</ul>
<h3>Class variables</h3>
<dl>
<dt id="data-conversion.interface.mainwindow.MainWindow.button_csv_export"><code class="name">var <span class="ident">button_csv_export</span> : PySide6.QtWidgets.QPushButton</code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="data-conversion.interface.mainwindow.MainWindow.button_txt_export"><code class="name">var <span class="ident">button_txt_export</span> : PySide6.QtWidgets.QPushButton</code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="data-conversion.interface.mainwindow.MainWindow.file_button"><code class="name">var <span class="ident">file_button</span> : PySide6.QtWidgets.QPushButton</code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="data-conversion.interface.mainwindow.MainWindow.list_widget"><code class="name">var <span class="ident">list_widget</span> : PySide6.QtWidgets.QListWidget</code></dt>
<dd>
<div class="desc"></div>
</dd>
<dt id="data-conversion.interface.mainwindow.MainWindow.staticMetaObject"><code class="name">var <span class="ident">staticMetaObject</span></code></dt>
<dd>
<div class="desc"></div>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="data-conversion.interface" href="index.html">data-conversion.interface</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="data-conversion.interface.mainwindow.MainWindow" href="#data-conversion.interface.mainwindow.MainWindow">MainWindow</a></code></h4>
<ul class="">
<li><code><a title="data-conversion.interface.mainwindow.MainWindow.button_csv_export" href="#data-conversion.interface.mainwindow.MainWindow.button_csv_export">button_csv_export</a></code></li>
<li><code><a title="data-conversion.interface.mainwindow.MainWindow.button_txt_export" href="#data-conversion.interface.mainwindow.MainWindow.button_txt_export">button_txt_export</a></code></li>
<li><code><a title="data-conversion.interface.mainwindow.MainWindow.file_button" href="#data-conversion.interface.mainwindow.MainWindow.file_button">file_button</a></code></li>
<li><code><a title="data-conversion.interface.mainwindow.MainWindow.list_widget" href="#data-conversion.interface.mainwindow.MainWindow.list_widget">list_widget</a></code></li>
<li><code><a title="data-conversion.interface.mainwindow.MainWindow.staticMetaObject" href="#data-conversion.interface.mainwindow.MainWindow.staticMetaObject">staticMetaObject</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,343 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.2" />
<title>data-conversion.interface.windowmanager API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>data-conversion.interface.windowmanager</code></h1>
</header>
<section id="section-intro">
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">from typing import Union
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QFileDialog, QWidget, QListWidgetItem
from interface.mainwindow import MainWindow
from loaders import CSVManager
class WindowManager:
&#34;&#34;&#34;
Class used to manage the Qt window and its associated data.
Attributes:
_window: Private, contains the main window.
_csv_manager: Private, holds a CSV manager.
&#34;&#34;&#34;
_window: Union[QWidget, MainWindow] = None # Qt window managed by this class
_csv_manager: CSVManager = None # Object used to manage CSV data
def __init__(self):
&#34;&#34;&#34;
Initialize our window manager.
&#34;&#34;&#34;
loader = QUiLoader()
self._window = loader.load(&#34;files/designer/demo-dialog.ui&#34;)
# Once the window is loaded, connect actions to code
self.setup_actions()
def setup_actions(self):
&#34;&#34;&#34;Connect actions of controls to methods.&#34;&#34;&#34;
self._window.file_button.clicked.connect(self.on_file_select)
self._window.button_csv_export.clicked.connect(self.on_export_csv)
def on_file_select(self):
&#34;&#34;&#34;
Action when the file button is clicked.
Shows a file select dialog to pick a CSV
and loads the CSV file in the CSVManager instance of the object.
&#34;&#34;&#34;
filter_text = &#34;CSV File (*.csv)&#34;
selection: tuple = QFileDialog.getOpenFileName(self._window, &#34;CSV File&#34;, &#34;&#34;, filter_text)
path: str = selection[0]
if path:
self._csv_manager = CSVManager(path)
self._window.button_csv_export.setEnabled(True)
# Empty and enable the list widget
self._window.list_widget.clear()
self._window.list_widget.setEnabled(True)
for row in self._csv_manager.data:
item = QListWidgetItem(&#34;;&#34;.join(row))
self._window.list_widget.addItem(item)
def on_export_csv(self):
&#34;&#34;&#34;
Action when the export to CSV button is clicked.
Shows a file select dialog to select a file destination.
The output file is then saved to the selected path.
&#34;&#34;&#34;
filter_text = &#34;Text File (*.txt)&#34;
selection: tuple = QFileDialog.getSaveFileName(self._window, &#34;Text File&#34;, &#34;&#34;, filter_text)
path: str = selection[0]
if path:
self._csv_manager.export_text(selection[0])
def show(self):
&#34;&#34;&#34;
Public method to show our window.
The window is loaded automatically at instanciation
in the `__init__` method.
&#34;&#34;&#34;
self._window.show()</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="data-conversion.interface.windowmanager.WindowManager"><code class="flex name class">
<span>class <span class="ident">WindowManager</span></span>
</code></dt>
<dd>
<div class="desc"><p>Class used to manage the Qt window and its associated data.</p>
<h2 id="attributes">Attributes</h2>
<dl>
<dt><strong><code>_window</code></strong></dt>
<dd>Private, contains the main window.</dd>
<dt><strong><code>_csv_manager</code></strong></dt>
<dd>Private, holds a CSV manager.</dd>
</dl>
<p>Initialize our window manager.</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class WindowManager:
&#34;&#34;&#34;
Class used to manage the Qt window and its associated data.
Attributes:
_window: Private, contains the main window.
_csv_manager: Private, holds a CSV manager.
&#34;&#34;&#34;
_window: Union[QWidget, MainWindow] = None # Qt window managed by this class
_csv_manager: CSVManager = None # Object used to manage CSV data
def __init__(self):
&#34;&#34;&#34;
Initialize our window manager.
&#34;&#34;&#34;
loader = QUiLoader()
self._window = loader.load(&#34;files/designer/demo-dialog.ui&#34;)
# Once the window is loaded, connect actions to code
self.setup_actions()
def setup_actions(self):
&#34;&#34;&#34;Connect actions of controls to methods.&#34;&#34;&#34;
self._window.file_button.clicked.connect(self.on_file_select)
self._window.button_csv_export.clicked.connect(self.on_export_csv)
def on_file_select(self):
&#34;&#34;&#34;
Action when the file button is clicked.
Shows a file select dialog to pick a CSV
and loads the CSV file in the CSVManager instance of the object.
&#34;&#34;&#34;
filter_text = &#34;CSV File (*.csv)&#34;
selection: tuple = QFileDialog.getOpenFileName(self._window, &#34;CSV File&#34;, &#34;&#34;, filter_text)
path: str = selection[0]
if path:
self._csv_manager = CSVManager(path)
self._window.button_csv_export.setEnabled(True)
# Empty and enable the list widget
self._window.list_widget.clear()
self._window.list_widget.setEnabled(True)
for row in self._csv_manager.data:
item = QListWidgetItem(&#34;;&#34;.join(row))
self._window.list_widget.addItem(item)
def on_export_csv(self):
&#34;&#34;&#34;
Action when the export to CSV button is clicked.
Shows a file select dialog to select a file destination.
The output file is then saved to the selected path.
&#34;&#34;&#34;
filter_text = &#34;Text File (*.txt)&#34;
selection: tuple = QFileDialog.getSaveFileName(self._window, &#34;Text File&#34;, &#34;&#34;, filter_text)
path: str = selection[0]
if path:
self._csv_manager.export_text(selection[0])
def show(self):
&#34;&#34;&#34;
Public method to show our window.
The window is loaded automatically at instanciation
in the `__init__` method.
&#34;&#34;&#34;
self._window.show()</code></pre>
</details>
<h3>Methods</h3>
<dl>
<dt id="data-conversion.interface.windowmanager.WindowManager.on_export_csv"><code class="name flex">
<span>def <span class="ident">on_export_csv</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Action when the export to CSV button is clicked.</p>
<p>Shows a file select dialog to select a file destination.
The output file is then saved to the selected path.</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def on_export_csv(self):
&#34;&#34;&#34;
Action when the export to CSV button is clicked.
Shows a file select dialog to select a file destination.
The output file is then saved to the selected path.
&#34;&#34;&#34;
filter_text = &#34;Text File (*.txt)&#34;
selection: tuple = QFileDialog.getSaveFileName(self._window, &#34;Text File&#34;, &#34;&#34;, filter_text)
path: str = selection[0]
if path:
self._csv_manager.export_text(selection[0])</code></pre>
</details>
</dd>
<dt id="data-conversion.interface.windowmanager.WindowManager.on_file_select"><code class="name flex">
<span>def <span class="ident">on_file_select</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Action when the file button is clicked.</p>
<p>Shows a file select dialog to pick a CSV
and loads the CSV file in the CSVManager instance of the object.</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def on_file_select(self):
&#34;&#34;&#34;
Action when the file button is clicked.
Shows a file select dialog to pick a CSV
and loads the CSV file in the CSVManager instance of the object.
&#34;&#34;&#34;
filter_text = &#34;CSV File (*.csv)&#34;
selection: tuple = QFileDialog.getOpenFileName(self._window, &#34;CSV File&#34;, &#34;&#34;, filter_text)
path: str = selection[0]
if path:
self._csv_manager = CSVManager(path)
self._window.button_csv_export.setEnabled(True)
# Empty and enable the list widget
self._window.list_widget.clear()
self._window.list_widget.setEnabled(True)
for row in self._csv_manager.data:
item = QListWidgetItem(&#34;;&#34;.join(row))
self._window.list_widget.addItem(item)</code></pre>
</details>
</dd>
<dt id="data-conversion.interface.windowmanager.WindowManager.setup_actions"><code class="name flex">
<span>def <span class="ident">setup_actions</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Connect actions of controls to methods.</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def setup_actions(self):
&#34;&#34;&#34;Connect actions of controls to methods.&#34;&#34;&#34;
self._window.file_button.clicked.connect(self.on_file_select)
self._window.button_csv_export.clicked.connect(self.on_export_csv)</code></pre>
</details>
</dd>
<dt id="data-conversion.interface.windowmanager.WindowManager.show"><code class="name flex">
<span>def <span class="ident">show</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Public method to show our window.</p>
<p>The window is loaded automatically at instanciation
in the <code>__init__</code> method.</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def show(self):
&#34;&#34;&#34;
Public method to show our window.
The window is loaded automatically at instanciation
in the `__init__` method.
&#34;&#34;&#34;
self._window.show()</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="data-conversion.interface" href="index.html">data-conversion.interface</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="data-conversion.interface.windowmanager.WindowManager" href="#data-conversion.interface.windowmanager.WindowManager">WindowManager</a></code></h4>
<ul class="">
<li><code><a title="data-conversion.interface.windowmanager.WindowManager.on_export_csv" href="#data-conversion.interface.windowmanager.WindowManager.on_export_csv">on_export_csv</a></code></li>
<li><code><a title="data-conversion.interface.windowmanager.WindowManager.on_file_select" href="#data-conversion.interface.windowmanager.WindowManager.on_file_select">on_file_select</a></code></li>
<li><code><a title="data-conversion.interface.windowmanager.WindowManager.setup_actions" href="#data-conversion.interface.windowmanager.WindowManager.setup_actions">setup_actions</a></code></li>
<li><code><a title="data-conversion.interface.windowmanager.WindowManager.show" href="#data-conversion.interface.windowmanager.WindowManager.show">show</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,327 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.2" />
<title>data-conversion.loaders.csvmanager API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>data-conversion.loaders.csvmanager</code></h1>
</header>
<section id="section-intro">
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">import csv
class CSVManager:
&#34;&#34;&#34;
Utility class to keep CSV data for export in other formats.
Attributes:
data: Contains loaded file data as a list of lists.
&#34;&#34;&#34;
data: list = None
def __init__(self, url: str):
&#34;&#34;&#34;
Initialize the object with a URL.
Args:
url: CSV URL to load from.
&#34;&#34;&#34;
self.load(url)
def load(self, url: str, encoding: str = &#34;iso8859-1&#34;):
&#34;&#34;&#34;
Load a CSV given its file path.
Args:
url: Path of the CSV file.
encoding: Codepage name of the text file.
&#34;&#34;&#34;
with open(url, &#34;r&#34;, encoding=encoding) as f:
reader = csv.reader(f, delimiter=&#34;,&#34;)
if self.data is None:
self.data = []
for row in reader:
self.data.append(row)
def export_text(self, url: str):
&#34;&#34;&#34;
Save data as a text file.
Every column is save in its own line as an example.
Args:
url: Output file path.
&#34;&#34;&#34;
with open(url, &#34;w&#34;, encoding=&#34;utf-8&#34;) as file:
for row in self.data:
file.write(&#34;\n&#34;.join(row))
def export_csv(self, url: str):
&#34;&#34;&#34;
Save data as a CSV file with semicolons.
Args:
url: Output file path.
&#34;&#34;&#34;
with open(url, &#34;w&#34;, encoding=&#34;utf-8&#34;) as file:
writer = csv.writer(file, delimiter=&#34;;&#34;)
for row in self.data:
writer.writerow(row)</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="data-conversion.loaders.csvmanager.CSVManager"><code class="flex name class">
<span>class <span class="ident">CSVManager</span></span>
<span>(</span><span>url: str)</span>
</code></dt>
<dd>
<div class="desc"><p>Utility class to keep CSV data for export in other formats.</p>
<h2 id="attributes">Attributes</h2>
<dl>
<dt><strong><code>data</code></strong></dt>
<dd>Contains loaded file data as a list of lists.</dd>
</dl>
<p>Initialize the object with a URL.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>url</code></strong></dt>
<dd>CSV URL to load from.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class CSVManager:
&#34;&#34;&#34;
Utility class to keep CSV data for export in other formats.
Attributes:
data: Contains loaded file data as a list of lists.
&#34;&#34;&#34;
data: list = None
def __init__(self, url: str):
&#34;&#34;&#34;
Initialize the object with a URL.
Args:
url: CSV URL to load from.
&#34;&#34;&#34;
self.load(url)
def load(self, url: str, encoding: str = &#34;iso8859-1&#34;):
&#34;&#34;&#34;
Load a CSV given its file path.
Args:
url: Path of the CSV file.
encoding: Codepage name of the text file.
&#34;&#34;&#34;
with open(url, &#34;r&#34;, encoding=encoding) as f:
reader = csv.reader(f, delimiter=&#34;,&#34;)
if self.data is None:
self.data = []
for row in reader:
self.data.append(row)
def export_text(self, url: str):
&#34;&#34;&#34;
Save data as a text file.
Every column is save in its own line as an example.
Args:
url: Output file path.
&#34;&#34;&#34;
with open(url, &#34;w&#34;, encoding=&#34;utf-8&#34;) as file:
for row in self.data:
file.write(&#34;\n&#34;.join(row))
def export_csv(self, url: str):
&#34;&#34;&#34;
Save data as a CSV file with semicolons.
Args:
url: Output file path.
&#34;&#34;&#34;
with open(url, &#34;w&#34;, encoding=&#34;utf-8&#34;) as file:
writer = csv.writer(file, delimiter=&#34;;&#34;)
for row in self.data:
writer.writerow(row)</code></pre>
</details>
<h3>Class variables</h3>
<dl>
<dt id="data-conversion.loaders.csvmanager.CSVManager.data"><code class="name">var <span class="ident">data</span> : list</code></dt>
<dd>
<div class="desc"></div>
</dd>
</dl>
<h3>Methods</h3>
<dl>
<dt id="data-conversion.loaders.csvmanager.CSVManager.export_csv"><code class="name flex">
<span>def <span class="ident">export_csv</span></span>(<span>self, url: str)</span>
</code></dt>
<dd>
<div class="desc"><p>Save data as a CSV file with semicolons.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>url</code></strong></dt>
<dd>Output file path.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def export_csv(self, url: str):
&#34;&#34;&#34;
Save data as a CSV file with semicolons.
Args:
url: Output file path.
&#34;&#34;&#34;
with open(url, &#34;w&#34;, encoding=&#34;utf-8&#34;) as file:
writer = csv.writer(file, delimiter=&#34;;&#34;)
for row in self.data:
writer.writerow(row)</code></pre>
</details>
</dd>
<dt id="data-conversion.loaders.csvmanager.CSVManager.export_text"><code class="name flex">
<span>def <span class="ident">export_text</span></span>(<span>self, url: str)</span>
</code></dt>
<dd>
<div class="desc"><p>Save data as a text file.</p>
<p>Every column is save in its own line as an example.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>url</code></strong></dt>
<dd>Output file path.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def export_text(self, url: str):
&#34;&#34;&#34;
Save data as a text file.
Every column is save in its own line as an example.
Args:
url: Output file path.
&#34;&#34;&#34;
with open(url, &#34;w&#34;, encoding=&#34;utf-8&#34;) as file:
for row in self.data:
file.write(&#34;\n&#34;.join(row))</code></pre>
</details>
</dd>
<dt id="data-conversion.loaders.csvmanager.CSVManager.load"><code class="name flex">
<span>def <span class="ident">load</span></span>(<span>self, url: str, encoding: str = 'iso8859-1')</span>
</code></dt>
<dd>
<div class="desc"><p>Load a CSV given its file path.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>url</code></strong></dt>
<dd>Path of the CSV file.</dd>
<dt><strong><code>encoding</code></strong></dt>
<dd>Codepage name of the text file.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def load(self, url: str, encoding: str = &#34;iso8859-1&#34;):
&#34;&#34;&#34;
Load a CSV given its file path.
Args:
url: Path of the CSV file.
encoding: Codepage name of the text file.
&#34;&#34;&#34;
with open(url, &#34;r&#34;, encoding=encoding) as f:
reader = csv.reader(f, delimiter=&#34;,&#34;)
if self.data is None:
self.data = []
for row in reader:
self.data.append(row)</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="data-conversion.loaders" href="index.html">data-conversion.loaders</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="data-conversion.loaders.csvmanager.CSVManager" href="#data-conversion.loaders.csvmanager.CSVManager">CSVManager</a></code></h4>
<ul class="">
<li><code><a title="data-conversion.loaders.csvmanager.CSVManager.data" href="#data-conversion.loaders.csvmanager.CSVManager.data">data</a></code></li>
<li><code><a title="data-conversion.loaders.csvmanager.CSVManager.export_csv" href="#data-conversion.loaders.csvmanager.CSVManager.export_csv">export_csv</a></code></li>
<li><code><a title="data-conversion.loaders.csvmanager.CSVManager.export_text" href="#data-conversion.loaders.csvmanager.CSVManager.export_text">export_text</a></code></li>
<li><code><a title="data-conversion.loaders.csvmanager.CSVManager.load" href="#data-conversion.loaders.csvmanager.CSVManager.load">load</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,71 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.2" />
<title>data-conversion.loaders API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>data-conversion.loaders</code></h1>
</header>
<section id="section-intro">
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">from .csvmanager import CSVManager # Imports in the package so it can be imported from the package too</code></pre>
</details>
</section>
<section>
<h2 class="section-title" id="header-submodules">Sub-modules</h2>
<dl>
<dt><code class="name"><a title="data-conversion.loaders.csvmanager" href="csvmanager.html">data-conversion.loaders.csvmanager</a></code></dt>
<dd>
<div class="desc"></div>
</dd>
</dl>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="data-conversion" href="../index.html">data-conversion</a></code></li>
</ul>
</li>
<li><h3><a href="#header-submodules">Sub-modules</a></h3>
<ul>
<li><code><a title="data-conversion.loaders.csvmanager" href="csvmanager.html">data-conversion.loaders.csvmanager</a></code></li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,26 @@
## Configuring your project for the application
You will need to associate the code to a project if not
already done. If you don't have a project, just opening the folder
with PyCharm should suffice.
However, you need to have a `virtualenv` for your project (for good
practice), that uses Python 3.6+.
In this virtualenv, you'll have to install :
- `pyside6`
Note that Qt has issues with theming; if PySide6 is installed, using `pip` or
another medium, it won't follow the system theme. However, if PySide2 is
installed globally on the system (via `apt-get` or `pacman`), programs seem to
follow the system theme. One would then have to revert to importing from
`PySide2` instead of `PySide6` (with no other changes).
## How to run the application
The application is very simple to run in PyCharm.
To do it, right-click on the source file content pane, somewhere where
there is an empty space.
Then, click the `Run <application>...`.

View File

@ -0,0 +1 @@
pyside6

View File

@ -0,0 +1,18 @@
"""
Entry point for our demo application.
Uses a "WindowManager" class holding the main window and the
CSV data manager used in it.
.. include:: documentation/includes/application.md
"""
from PySide6.QtWidgets import QApplication
from interface import WindowManager # look at interface/__init__.py
if __name__ == "__main__":
application = QApplication()
window_manager = WindowManager()
window_manager.show()
application.exec()

View File

@ -0,0 +1,100 @@
1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94,35,Nunavut,Storage & Organization,0.8
2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16,68.02,Nunavut,Appliances,0.58
3,"Cardinal Slant-D<> Ring Binder, Heavy Gauge Vinyl",Barry French,293,46.71,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39
4,R380,Clay Rozendal,483,1198.97,195.99,3.99,Nunavut,Telephones and Communication,0.58
5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5
6,G.E. Longer-Life Indoor Recessed Floodlight Bulbs,Carlos Soltero,515,4.43,6.64,4.95,Nunavut,Office Furnishings,0.37
7,"Angle-D Binders with Locking Rings, Label Holders",Carl Jackson,613,-54.04,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38
8,"SAFCO Mobile Desk Side File, Wire Frame",Carl Jackson,613,127.70,42.76,6.22,Nunavut,Storage & Organization,
9,"SAFCO Commercial Wire Shelving, Black",Monica Federle,643,-695.26,138.14,35,Nunavut,Storage & Organization,
10,Xerox 198,Dorothy Badders,678,-226.36,4.98,8.33,Nunavut,Paper,0.38
11,Xerox 1980,Neola Schneider,807,-166.85,4.28,6.18,Nunavut,Paper,0.4
12,Advantus Map Pennant Flags and Round Head Tacks,Neola Schneider,807,-14.33,3.95,2,Nunavut,Rubber Bands,0.53
13,Holmes HEPA Air Purifier,Carlos Daly,868,134.72,21.78,5.94,Nunavut,Appliances,0.5
14,"DS/HD IBM Formatted Diskettes, 200/Pack - Staples",Carlos Daly,868,114.46,47.98,3.61,Nunavut,Computer Peripherals,0.71
15,"Wilson Jones 1"" Hanging DublLock<63> Ring Binders",Claudia Miner,933,-4.72,5.28,2.99,Nunavut,Binders and Binder Accessories,0.37
16,Ultra Commercial Grade Dual Valve Door Closer,Neola Schneider,995,782.91,39.89,3.04,Nunavut,Office Furnishings,0.53
17,"#10-4 1/8"" x 9 1/2"" Premium Diagonal Seam Envelopes",Allen Rosenblatt,998,93.80,15.74,1.39,Nunavut,Envelopes,0.4
18,Hon 4-Shelf Metal Bookcases,Sylvia Foulston,1154,440.72,100.98,26.22,Nunavut,Bookcases,0.6
19,"Lesro Sheffield Collection Coffee Table, End Table, Center Table, Corner Table",Sylvia Foulston,1154,-481.04,71.37,69,Nunavut,Tables,0.68
20,g520,Jim Radford,1344,-11.68,65.99,5.26,Nunavut,Telephones and Communication,0.59
21,LX 788,Jim Radford,1344,313.58,155.99,8.99,Nunavut,Telephones and Communication,0.58
22,Avery 52,Carlos Soltero,1412,26.92,3.69,0.5,Nunavut,Labels,0.38
23,Plymouth Boxed Rubber Bands by Plymouth,Carlos Soltero,1412,-5.77,4.71,0.7,Nunavut,Rubber Bands,0.8
24,"GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2"" x 11""",Carl Ludwig,1539,-172.88,15.99,13.18,Nunavut,Binders and Binder Accessories,0.37
25,"Maxell 3.5"" DS/HD IBM-Formatted Diskettes, 10/Pack",Carl Ludwig,1539,-144.55,4.89,4.93,Nunavut,Computer Peripherals,0.66
26,Newell 335,Don Miller,1540,5.76,2.88,0.7,Nunavut,Pens & Art Supplies,0.56
27,SANFORD Liquid Accent<6E> Tank-Style Highlighters,Annie Cyprus,1702,4.90,2.84,0.93,Nunavut,Pens & Art Supplies,0.54
28,Canon PC940 Copier,Carl Ludwig,1761,-547.61,449.99,49,Nunavut,Copiers and Fax,0.38
29,"Tenex Personal Project File with Scoop Front Design, Black",Carlos Soltero,1792,-5.45,13.48,4.51,Nunavut,Storage & Organization,0.59
30,Col-Erase<73> Pencils with Erasers,Grant Carroll,2275,41.67,6.08,1.17,Nunavut,Pens & Art Supplies,0.56
31,"Imation 3.5"" DS/HD IBM Formatted Diskettes, 10/Pack",Don Miller,2277,-46.03,5.98,4.38,Nunavut,Computer Peripherals,0.75
32,"White Dual Perf Computer Printout Paper, 2700 Sheets, 1 Part, Heavyweight, 20 lbs., 14 7/8 x 11",Don Miller,2277,33.67,40.99,19.99,Nunavut,Paper,0.36
33,Self-Adhesive Address Labels for Typewriters by Universal,Alan Barnes,2532,140.01,7.31,0.49,Nunavut,Labels,0.38
34,Accessory37,Alan Barnes,2532,-78.96,20.99,2.5,Nunavut,Telephones and Communication,0.81
35,Fuji 5.2GB DVD-RAM,Jack Garza,2631,252.66,40.96,1.99,Nunavut,Computer Peripherals,0.55
36,Bevis Steel Folding Chairs,Julia West,2757,-1766.01,95.95,74.35,Nunavut,Chairs & Chairmats,0.57
37,Avery Binder Labels,Eugene Barchas,2791,-236.27,3.89,7.01,Nunavut,Binders and Binder Accessories,0.37
38,Hon Every-Day<61> Chair Series Swivel Task Chairs,Eugene Barchas,2791,80.44,120.98,30,Nunavut,Chairs & Chairmats,0.64
39,"IBM Multi-Purpose Copy Paper, 8 1/2 x 11"", Case",Eugene Barchas,2791,118.94,30.98,5.76,Nunavut,Paper,0.4
40,Global Troy<6F> Executive Leather Low-Back Tilter,Edward Hooks,2976,3424.22,500.98,26,Nunavut,Chairs & Chairmats,0.6
41,XtraLife<EFBFBD> ClearVue<75> Slant-D<> Ring Binders by Cardinal,Brad Eason,3232,-11.83,7.84,4.71,Nunavut,Binders and Binder Accessories,0.35
42,Computer Printout Paper with Letter-Trim Perforations,Nicole Hansen,3524,52.35,18.97,9.03,Nunavut,Paper,0.37
43,6160,Dorothy Wardle,3908,-180.20,115.99,2.5,Nunavut,Telephones and Communication,0.57
44,Avery 49,Aaron Bergman,4132,1.32,2.88,0.5,Nunavut,Labels,0.36
45,Hoover Portapower<65> Portable Vacuum,Jim Radford,4612,-375.64,4.48,49,Nunavut,Appliances,0.6
46,Timeport L7089,Annie Cyprus,4676,-104.25,125.99,7.69,Nunavut,Telephones and Communication,0.58
47,Avery 510,Annie Cyprus,4676,85.96,3.75,0.5,Nunavut,Labels,0.37
48,Xerox 1881,Annie Cyprus,4676,-8.38,12.28,6.47,Nunavut,Paper,0.38
49,LX 788,Annie Cyprus,4676,1115.69,155.99,8.99,Nunavut,Telephones and Communication,0.58
50,"Cardinal Slant-D<> Ring Binder, Heavy Gauge Vinyl",Annie Cyprus,5284,-3.05,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39
51,"Memorex 4.7GB DVD-RAM, 3/Pack",Clay Rozendal,5316,514.07,31.78,1.99,Nunavut,Computer Peripherals,0.42
52,Unpadded Memo Slips,Don Jones,5409,-7.04,3.98,2.97,Nunavut,Paper,0.35
53,"Adams Telephone Message Book W/Dividers/Space For Phone Numbers, 5 1/4""X8 1/2"", 300/Messages",Beth Thompson,5506,4.41,5.88,3.04,Nunavut,Paper,0.36
54,"Eldon Expressions<6E> Desk Accessory, Wood Pencil Holder, Oak",Frank Price,5569,-0.06,9.65,6.22,Nunavut,Office Furnishings,0.55
55,Bell Sonecor JB700 Caller ID,Michelle Lonsdale,5607,-50.33,7.99,5.03,Nunavut,Telephones and Communication,0.6
56,Avery Arch Ring Binders,Ann Chong,5894,87.68,58.1,1.49,Nunavut,Binders and Binder Accessories,0.38
57,APC 7 Outlet Network SurgeArrest Surge Protector,Ann Chong,5894,-68.22,80.48,4.5,Nunavut,Appliances,0.55
58,"Deflect-o RollaMat Studded, Beveled Mat for Medium Pile Carpeting",Joy Bell,5925,-354.90,92.23,39.61,Nunavut,Office Furnishings,0.67
59,Accessory4,Joy Bell,5925,-267.01,85.99,0.99,Nunavut,Telephones and Communication,0.85
60,Personal Creations<6E> Ink Jet Cards and Labels,Skye Norling,6016,3.63,11.48,5.43,Nunavut,Paper,0.36
61,High Speed Automatic Electric Letter Opener,Barry Weirich,6116,-1759.58,1637.53,24.49,Nunavut,"Scissors, Rulers and Trimmers",0.81
62,Xerox 1966,Grant Carroll,6182,-116.79,6.48,6.65,Nunavut,Paper,0.36
63,Xerox 213,Grant Carroll,6182,-67.28,6.48,7.86,Nunavut,Paper,0.37
64,"Boston Electric Pencil Sharpener, Model 1818, Charcoal Black",Adrian Hane,6535,-19.33,28.15,8.99,Nunavut,Pens & Art Supplies,0.57
65,Hammermill CopyPlus Copy Paper (20Lb. and 84 Bright),Skye Norling,6884,-61.21,4.98,4.75,Nunavut,Paper,0.36
66,"Telephone Message Books with Fax/Mobile Section, 5 1/2"" x 3 3/16""",Skye Norling,6884,119.09,6.35,1.02,Nunavut,Paper,0.39
67,Crate-A-Files<65>,Andrew Gjertsen,6916,-141.27,10.9,7.46,Nunavut,Storage & Organization,0.59
68,"Angle-D Binders with Locking Rings, Label Holders",Ralph Knight,6980,-77.28,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38
69,"80 Minute CD-R Spindle, 100/Pack - Staples",Dorothy Wardle,6982,407.44,39.48,1.99,Nunavut,Computer Peripherals,0.54
70,"Bush Westfield Collection Bookcases, Dark Cherry Finish, Fully Assembled",Dorothy Wardle,6982,-338.27,100.98,57.38,Nunavut,Bookcases,0.78
71,12-1/2 Diameter Round Wall Clock,Dorothy Wardle,6982,52.56,19.98,10.49,Nunavut,Office Furnishings,0.49
72,SAFCO Arco Folding Chair,Grant Carroll,7110,1902.24,276.2,24.49,Nunavut,Chairs & Chairmats,
73,"#10 White Business Envelopes,4 1/8 x 9 1/2",Barry Weirich,7430,353.20,15.67,1.39,Nunavut,Envelopes,0.38
74,3M Office Air Cleaner,Beth Paige,7906,271.78,25.98,5.37,Nunavut,Appliances,0.5
75,"Global Leather and Oak Executive Chair, Black",Sylvia Foulston,8391,-268.36,300.98,64.73,Nunavut,Chairs & Chairmats,0.56
76,Xerox 1936,Nicole Hansen,8419,70.39,19.98,5.97,Nunavut,Paper,0.38
77,Xerox 214,Nicole Hansen,8419,-86.62,6.48,7.03,Nunavut,Paper,0.37
78,Carina Double Wide Media Storage Towers in Natural & Black,Nicole Hansen,8833,-846.73,80.98,35,Nunavut,Storage & Organization,0.81
79,Staples<EFBFBD> General Use 3-Ring Binders,Beth Paige,8995,8.05,1.88,1.49,Nunavut,Binders and Binder Accessories,0.37
80,Xerox 1904,Beth Paige,8995,-78.02,6.48,5.86,Northwest Territories,Paper,0.36
81,Luxo Professional Combination Clamp-On Lamps,Beth Paige,8995,737.94,102.3,21.26,Northwest Territories,Office Furnishings,0.59
82,Xerox 217,Beth Paige,8995,-191.28,6.48,8.19,Northwest Territories,Paper,0.37
83,Revere Boxed Rubber Bands by Revere,Beth Paige,8995,-21.49,1.89,0.76,Northwest Territories,Rubber Bands,0.83
84,"Acco Smartsocket<65> Table Surge Protector, 6 Color-Coded Adapter Outlets",Sylvia Foulston,9126,884.08,62.05,3.99,Northwest Territories,Appliances,0.55
85,"Tennsco Snap-Together Open Shelving Units, Starter Sets and Add-On Units",Bryan Davis,9127,-329.49,279.48,35,Northwest Territories,Storage & Organization,0.8
86,Hon 4070 Series Pagoda<64> Round Back Stacking Chairs,Joy Bell,9509,2825.15,320.98,58.95,Northwest Territories,Chairs & Chairmats,0.57
87,Xerox 1887,Joy Bell,9509,2.13,18.97,5.21,Northwest Territories,Paper,0.37
88,Xerox 1891,Joy Bell,9509,707.15,48.91,5.81,Northwest Territories,Paper,0.38
89,Avery 506,Alan Barnes,9763,75.13,4.13,0.5,Northwest Territories,Labels,0.39
90,"Bush Heritage Pine Collection 5-Shelf Bookcase, Albany Pine Finish, *Special Order",Grant Carroll,9927,-270.63,140.98,53.48,Northwest Territories,Bookcases,0.65
91,"Lifetime Advantage<67> Folding Chairs, 4/Carton",Grant Carroll,9927,3387.35,218.08,18.06,Northwest Territories,Chairs & Chairmats,0.57
92,Microsoft Natural Multimedia Keyboard,Grant Carroll,9927,-82.16,50.98,6.5,Northwest Territories,Computer Peripherals,0.73
93,"Staples Wirebound Steno Books, 6"" x 9"", 12/Pack",Delfina Latchford,10022,-3.88,10.14,2.27,Northwest Territories,Paper,0.36
94,"GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2"" x 11""",Don Jones,10437,-191.22,15.99,13.18,Northwest Territories,Binders and Binder Accessories,0.37
95,Bevis Boat-Shaped Conference Table,Doug Bickford,10499,31.21,262.11,62.74,Northwest Territories,Tables,0.75
96,"Linden<EFBFBD> 12"" Wall Clock With Oak Frame",Doug Bickford,10535,-44.14,33.98,19.99,Northwest Territories,Office Furnishings,0.55
97,Newell 326,Doug Bickford,10535,-0.79,1.76,0.7,Northwest Territories,Pens & Art Supplies,0.56
98,Prismacolor Color Pencil Set,Jamie Kunitz,10789,76.42,19.84,4.1,Northwest Territories,Pens & Art Supplies,0.44
99,Xerox Blank Computer Paper,Anthony Johnson,10791,93.36,19.98,5.77,Northwest Territories,Paper,0.38
100,600 Series Flip,Ralph Knight,10945,4.22,95.99,8.99,Northwest Territories,Telephones and Communication,0.57
1 1 Eldon Base for stackable storage shelf, platinum Muhammed MacIntyre 3 -213.25 38.94 35 Nunavut Storage & Organization 0.8
2 2 1.7 Cubic Foot Compact "Cube" Office Refrigerators Barry French 293 457.81 208.16 68.02 Nunavut Appliances 0.58
3 3 Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl Barry French 293 46.71 8.69 2.99 Nunavut Binders and Binder Accessories 0.39
4 4 R380 Clay Rozendal 483 1198.97 195.99 3.99 Nunavut Telephones and Communication 0.58
5 5 Holmes HEPA Air Purifier Carlos Soltero 515 30.94 21.78 5.94 Nunavut Appliances 0.5
6 6 G.E. Longer-Life Indoor Recessed Floodlight Bulbs Carlos Soltero 515 4.43 6.64 4.95 Nunavut Office Furnishings 0.37
7 7 Angle-D Binders with Locking Rings, Label Holders Carl Jackson 613 -54.04 7.3 7.72 Nunavut Binders and Binder Accessories 0.38
8 8 SAFCO Mobile Desk Side File, Wire Frame Carl Jackson 613 127.70 42.76 6.22 Nunavut Storage & Organization
9 9 SAFCO Commercial Wire Shelving, Black Monica Federle 643 -695.26 138.14 35 Nunavut Storage & Organization
10 10 Xerox 198 Dorothy Badders 678 -226.36 4.98 8.33 Nunavut Paper 0.38
11 11 Xerox 1980 Neola Schneider 807 -166.85 4.28 6.18 Nunavut Paper 0.4
12 12 Advantus Map Pennant Flags and Round Head Tacks Neola Schneider 807 -14.33 3.95 2 Nunavut Rubber Bands 0.53
13 13 Holmes HEPA Air Purifier Carlos Daly 868 134.72 21.78 5.94 Nunavut Appliances 0.5
14 14 DS/HD IBM Formatted Diskettes, 200/Pack - Staples Carlos Daly 868 114.46 47.98 3.61 Nunavut Computer Peripherals 0.71
15 15 Wilson Jones 1" Hanging DublLock® Ring Binders Claudia Miner 933 -4.72 5.28 2.99 Nunavut Binders and Binder Accessories 0.37
16 16 Ultra Commercial Grade Dual Valve Door Closer Neola Schneider 995 782.91 39.89 3.04 Nunavut Office Furnishings 0.53
17 17 #10-4 1/8" x 9 1/2" Premium Diagonal Seam Envelopes Allen Rosenblatt 998 93.80 15.74 1.39 Nunavut Envelopes 0.4
18 18 Hon 4-Shelf Metal Bookcases Sylvia Foulston 1154 440.72 100.98 26.22 Nunavut Bookcases 0.6
19 19 Lesro Sheffield Collection Coffee Table, End Table, Center Table, Corner Table Sylvia Foulston 1154 -481.04 71.37 69 Nunavut Tables 0.68
20 20 g520 Jim Radford 1344 -11.68 65.99 5.26 Nunavut Telephones and Communication 0.59
21 21 LX 788 Jim Radford 1344 313.58 155.99 8.99 Nunavut Telephones and Communication 0.58
22 22 Avery 52 Carlos Soltero 1412 26.92 3.69 0.5 Nunavut Labels 0.38
23 23 Plymouth Boxed Rubber Bands by Plymouth Carlos Soltero 1412 -5.77 4.71 0.7 Nunavut Rubber Bands 0.8
24 24 GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2" x 11" Carl Ludwig 1539 -172.88 15.99 13.18 Nunavut Binders and Binder Accessories 0.37
25 25 Maxell 3.5" DS/HD IBM-Formatted Diskettes, 10/Pack Carl Ludwig 1539 -144.55 4.89 4.93 Nunavut Computer Peripherals 0.66
26 26 Newell 335 Don Miller 1540 5.76 2.88 0.7 Nunavut Pens & Art Supplies 0.56
27 27 SANFORD Liquid Accent™ Tank-Style Highlighters Annie Cyprus 1702 4.90 2.84 0.93 Nunavut Pens & Art Supplies 0.54
28 28 Canon PC940 Copier Carl Ludwig 1761 -547.61 449.99 49 Nunavut Copiers and Fax 0.38
29 29 Tenex Personal Project File with Scoop Front Design, Black Carlos Soltero 1792 -5.45 13.48 4.51 Nunavut Storage & Organization 0.59
30 30 Col-Erase® Pencils with Erasers Grant Carroll 2275 41.67 6.08 1.17 Nunavut Pens & Art Supplies 0.56
31 31 Imation 3.5" DS/HD IBM Formatted Diskettes, 10/Pack Don Miller 2277 -46.03 5.98 4.38 Nunavut Computer Peripherals 0.75
32 32 White Dual Perf Computer Printout Paper, 2700 Sheets, 1 Part, Heavyweight, 20 lbs., 14 7/8 x 11 Don Miller 2277 33.67 40.99 19.99 Nunavut Paper 0.36
33 33 Self-Adhesive Address Labels for Typewriters by Universal Alan Barnes 2532 140.01 7.31 0.49 Nunavut Labels 0.38
34 34 Accessory37 Alan Barnes 2532 -78.96 20.99 2.5 Nunavut Telephones and Communication 0.81
35 35 Fuji 5.2GB DVD-RAM Jack Garza 2631 252.66 40.96 1.99 Nunavut Computer Peripherals 0.55
36 36 Bevis Steel Folding Chairs Julia West 2757 -1766.01 95.95 74.35 Nunavut Chairs & Chairmats 0.57
37 37 Avery Binder Labels Eugene Barchas 2791 -236.27 3.89 7.01 Nunavut Binders and Binder Accessories 0.37
38 38 Hon Every-Day® Chair Series Swivel Task Chairs Eugene Barchas 2791 80.44 120.98 30 Nunavut Chairs & Chairmats 0.64
39 39 IBM Multi-Purpose Copy Paper, 8 1/2 x 11", Case Eugene Barchas 2791 118.94 30.98 5.76 Nunavut Paper 0.4
40 40 Global Troy™ Executive Leather Low-Back Tilter Edward Hooks 2976 3424.22 500.98 26 Nunavut Chairs & Chairmats 0.6
41 41 XtraLife® ClearVue™ Slant-D® Ring Binders by Cardinal Brad Eason 3232 -11.83 7.84 4.71 Nunavut Binders and Binder Accessories 0.35
42 42 Computer Printout Paper with Letter-Trim Perforations Nicole Hansen 3524 52.35 18.97 9.03 Nunavut Paper 0.37
43 43 6160 Dorothy Wardle 3908 -180.20 115.99 2.5 Nunavut Telephones and Communication 0.57
44 44 Avery 49 Aaron Bergman 4132 1.32 2.88 0.5 Nunavut Labels 0.36
45 45 Hoover Portapower™ Portable Vacuum Jim Radford 4612 -375.64 4.48 49 Nunavut Appliances 0.6
46 46 Timeport L7089 Annie Cyprus 4676 -104.25 125.99 7.69 Nunavut Telephones and Communication 0.58
47 47 Avery 510 Annie Cyprus 4676 85.96 3.75 0.5 Nunavut Labels 0.37
48 48 Xerox 1881 Annie Cyprus 4676 -8.38 12.28 6.47 Nunavut Paper 0.38
49 49 LX 788 Annie Cyprus 4676 1115.69 155.99 8.99 Nunavut Telephones and Communication 0.58
50 50 Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl Annie Cyprus 5284 -3.05 8.69 2.99 Nunavut Binders and Binder Accessories 0.39
51 51 Memorex 4.7GB DVD-RAM, 3/Pack Clay Rozendal 5316 514.07 31.78 1.99 Nunavut Computer Peripherals 0.42
52 52 Unpadded Memo Slips Don Jones 5409 -7.04 3.98 2.97 Nunavut Paper 0.35
53 53 Adams Telephone Message Book W/Dividers/Space For Phone Numbers, 5 1/4"X8 1/2", 300/Messages Beth Thompson 5506 4.41 5.88 3.04 Nunavut Paper 0.36
54 54 Eldon Expressions™ Desk Accessory, Wood Pencil Holder, Oak Frank Price 5569 -0.06 9.65 6.22 Nunavut Office Furnishings 0.55
55 55 Bell Sonecor JB700 Caller ID Michelle Lonsdale 5607 -50.33 7.99 5.03 Nunavut Telephones and Communication 0.6
56 56 Avery Arch Ring Binders Ann Chong 5894 87.68 58.1 1.49 Nunavut Binders and Binder Accessories 0.38
57 57 APC 7 Outlet Network SurgeArrest Surge Protector Ann Chong 5894 -68.22 80.48 4.5 Nunavut Appliances 0.55
58 58 Deflect-o RollaMat Studded, Beveled Mat for Medium Pile Carpeting Joy Bell 5925 -354.90 92.23 39.61 Nunavut Office Furnishings 0.67
59 59 Accessory4 Joy Bell 5925 -267.01 85.99 0.99 Nunavut Telephones and Communication 0.85
60 60 Personal Creations™ Ink Jet Cards and Labels Skye Norling 6016 3.63 11.48 5.43 Nunavut Paper 0.36
61 61 High Speed Automatic Electric Letter Opener Barry Weirich 6116 -1759.58 1637.53 24.49 Nunavut Scissors, Rulers and Trimmers 0.81
62 62 Xerox 1966 Grant Carroll 6182 -116.79 6.48 6.65 Nunavut Paper 0.36
63 63 Xerox 213 Grant Carroll 6182 -67.28 6.48 7.86 Nunavut Paper 0.37
64 64 Boston Electric Pencil Sharpener, Model 1818, Charcoal Black Adrian Hane 6535 -19.33 28.15 8.99 Nunavut Pens & Art Supplies 0.57
65 65 Hammermill CopyPlus Copy Paper (20Lb. and 84 Bright) Skye Norling 6884 -61.21 4.98 4.75 Nunavut Paper 0.36
66 66 Telephone Message Books with Fax/Mobile Section, 5 1/2" x 3 3/16" Skye Norling 6884 119.09 6.35 1.02 Nunavut Paper 0.39
67 67 Crate-A-Files™ Andrew Gjertsen 6916 -141.27 10.9 7.46 Nunavut Storage & Organization 0.59
68 68 Angle-D Binders with Locking Rings, Label Holders Ralph Knight 6980 -77.28 7.3 7.72 Nunavut Binders and Binder Accessories 0.38
69 69 80 Minute CD-R Spindle, 100/Pack - Staples Dorothy Wardle 6982 407.44 39.48 1.99 Nunavut Computer Peripherals 0.54
70 70 Bush Westfield Collection Bookcases, Dark Cherry Finish, Fully Assembled Dorothy Wardle 6982 -338.27 100.98 57.38 Nunavut Bookcases 0.78
71 71 12-1/2 Diameter Round Wall Clock Dorothy Wardle 6982 52.56 19.98 10.49 Nunavut Office Furnishings 0.49
72 72 SAFCO Arco Folding Chair Grant Carroll 7110 1902.24 276.2 24.49 Nunavut Chairs & Chairmats
73 73 #10 White Business Envelopes,4 1/8 x 9 1/2 Barry Weirich 7430 353.20 15.67 1.39 Nunavut Envelopes 0.38
74 74 3M Office Air Cleaner Beth Paige 7906 271.78 25.98 5.37 Nunavut Appliances 0.5
75 75 Global Leather and Oak Executive Chair, Black Sylvia Foulston 8391 -268.36 300.98 64.73 Nunavut Chairs & Chairmats 0.56
76 76 Xerox 1936 Nicole Hansen 8419 70.39 19.98 5.97 Nunavut Paper 0.38
77 77 Xerox 214 Nicole Hansen 8419 -86.62 6.48 7.03 Nunavut Paper 0.37
78 78 Carina Double Wide Media Storage Towers in Natural & Black Nicole Hansen 8833 -846.73 80.98 35 Nunavut Storage & Organization 0.81
79 79 Staples® General Use 3-Ring Binders Beth Paige 8995 8.05 1.88 1.49 Nunavut Binders and Binder Accessories 0.37
80 80 Xerox 1904 Beth Paige 8995 -78.02 6.48 5.86 Northwest Territories Paper 0.36
81 81 Luxo Professional Combination Clamp-On Lamps Beth Paige 8995 737.94 102.3 21.26 Northwest Territories Office Furnishings 0.59
82 82 Xerox 217 Beth Paige 8995 -191.28 6.48 8.19 Northwest Territories Paper 0.37
83 83 Revere Boxed Rubber Bands by Revere Beth Paige 8995 -21.49 1.89 0.76 Northwest Territories Rubber Bands 0.83
84 84 Acco Smartsocket™ Table Surge Protector, 6 Color-Coded Adapter Outlets Sylvia Foulston 9126 884.08 62.05 3.99 Northwest Territories Appliances 0.55
85 85 Tennsco Snap-Together Open Shelving Units, Starter Sets and Add-On Units Bryan Davis 9127 -329.49 279.48 35 Northwest Territories Storage & Organization 0.8
86 86 Hon 4070 Series Pagoda™ Round Back Stacking Chairs Joy Bell 9509 2825.15 320.98 58.95 Northwest Territories Chairs & Chairmats 0.57
87 87 Xerox 1887 Joy Bell 9509 2.13 18.97 5.21 Northwest Territories Paper 0.37
88 88 Xerox 1891 Joy Bell 9509 707.15 48.91 5.81 Northwest Territories Paper 0.38
89 89 Avery 506 Alan Barnes 9763 75.13 4.13 0.5 Northwest Territories Labels 0.39
90 90 Bush Heritage Pine Collection 5-Shelf Bookcase, Albany Pine Finish, *Special Order Grant Carroll 9927 -270.63 140.98 53.48 Northwest Territories Bookcases 0.65
91 91 Lifetime Advantage™ Folding Chairs, 4/Carton Grant Carroll 9927 3387.35 218.08 18.06 Northwest Territories Chairs & Chairmats 0.57
92 92 Microsoft Natural Multimedia Keyboard Grant Carroll 9927 -82.16 50.98 6.5 Northwest Territories Computer Peripherals 0.73
93 93 Staples Wirebound Steno Books, 6" x 9", 12/Pack Delfina Latchford 10022 -3.88 10.14 2.27 Northwest Territories Paper 0.36
94 94 GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2" x 11" Don Jones 10437 -191.22 15.99 13.18 Northwest Territories Binders and Binder Accessories 0.37
95 95 Bevis Boat-Shaped Conference Table Doug Bickford 10499 31.21 262.11 62.74 Northwest Territories Tables 0.75
96 96 Linden® 12" Wall Clock With Oak Frame Doug Bickford 10535 -44.14 33.98 19.99 Northwest Territories Office Furnishings 0.55
97 97 Newell 326 Doug Bickford 10535 -0.79 1.76 0.7 Northwest Territories Pens & Art Supplies 0.56
98 98 Prismacolor Color Pencil Set Jamie Kunitz 10789 76.42 19.84 4.1 Northwest Territories Pens & Art Supplies 0.44
99 99 Xerox Blank Computer Paper Anthony Johnson 10791 93.36 19.98 5.77 Northwest Territories Paper 0.38
100 100 600 Series Flip Ralph Knight 10945 4.22 95.99 8.99 Northwest Territories Telephones and Communication 0.57

View File

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>625</width>
<height>438</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Conversion de données CSV</string>
</property>
<property name="windowIcon">
<iconset theme="application-excel">
<normaloff>../../../../../../../../../.designer/backup</normaloff>../../../../../../../../../.designer/backup</iconset>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Sélectionnez un CSV</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="file_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Cliquez pour sélectionner</string>
</property>
<property name="icon">
<iconset theme="fileopen">
<normaloff>../../../../../../../../../.designer/backup</normaloff>../../../../../../../../../.designer/backup</iconset>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="info_label">
<property name="text">
<string>Veuillez sélectionner un fichier CSV valide pour continuer...</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="list_widget">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout" rowstretch="0" columnstretch="1,2,1">
<item row="0" column="0">
<widget class="QPushButton" name="button_csv_export">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Exporter en CSV</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="button_txt_export">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Exporter en texte</string>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>625</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1 @@
from .windowmanager import WindowManager

View File

@ -0,0 +1,19 @@
from PySide6.QtWidgets import QMainWindow, QPushButton, QListWidget
class MainWindow(QMainWindow):
"""
Class written just for autocompletion and type hinting.
Lists dynamic attributes of the loaded window
so that PyCharm can know that the following attributes
exist in the loaded file.
The class is then used for type hinting in the
`WindowManager` class.
"""
file_button: QPushButton
button_csv_export: QPushButton
button_txt_export: QPushButton
list_widget: QListWidget

View File

@ -0,0 +1,81 @@
from typing import Union
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QFileDialog, QWidget, QListWidgetItem
from interface.mainwindow import MainWindow
from loaders import CSVManager
class WindowManager:
"""
Class used to manage the Qt window and its associated data.
Attributes:
_window: Private, contains the main window.
_csv_manager: Private, holds a CSV manager.
"""
_window: Union[QWidget, MainWindow] = None # Qt window managed by this class
_csv_manager: CSVManager = None # Object used to manage CSV data
def __init__(self):
"""
Initialize our window manager.
"""
loader = QUiLoader()
self._window = loader.load("files/designer/demo-dialog.ui")
# Once the window is loaded, connect actions to code
self.setup_actions()
def setup_actions(self):
"""Connect actions of controls to methods."""
self._window.file_button.clicked.connect(self.on_file_select)
self._window.button_csv_export.clicked.connect(self.on_export_csv)
def on_file_select(self):
"""
Action when the file button is clicked.
Shows a file select dialog to pick a CSV
and loads the CSV file in the CSVManager instance of the object.
"""
filter_text = "CSV File (*.csv)"
selection: tuple = QFileDialog.getOpenFileName(self._window, "CSV File", "", filter_text)
path: str = selection[0]
if path:
self._csv_manager = CSVManager(path)
self._window.button_csv_export.setEnabled(True)
# Empty list items and enable the list widget
self._window.list_widget.clear()
self._window.list_widget.setEnabled(True)
# Add rows in the list widget containing CSV rows
for row in self._csv_manager.data:
item = QListWidgetItem(";".join(row))
self._window.list_widget.addItem(item)
def on_export_csv(self):
"""
Action when the export to CSV button is clicked.
Shows a file select dialog to select a file destination.
The output file is then saved to the selected path.
"""
filter_text = "Text File (*.txt)"
selection: tuple = QFileDialog.getSaveFileName(self._window, "Text File", "", filter_text)
path: str = selection[0]
if path:
self._csv_manager.export_text(selection[0])
def show(self):
"""
Public method to show our window.
The window is loaded automatically at instanciation
in the `__init__` method.
"""
self._window.show()

View File

@ -0,0 +1 @@
from .csvmanager import CSVManager # Imports in the package so it can be imported from the package too

View File

@ -0,0 +1,16 @@
from abc import ABC, abstractmethod
from loaders.formats import DataFormat
class BaseDataManager(ABC):
"""Base class for data managers."""
@abstractmethod
def load(self, url: str, encoding: str = "iso8859-1"):
"""Load data for the manager."""
pass
@abstractmethod
def export(self, url: str, fmt: DataFormat):
"""Export data in a specific format."""
pass

View File

@ -0,0 +1,78 @@
import csv
from loaders.basemanager import BaseDataManager
from loaders.formats import DataFormat
class CSVManager(BaseDataManager):
"""
Utility class to keep CSV data for export in other formats.
Attributes:
data: Contains loaded file data as a list of lists.
"""
data: list = None
def __init__(self, url: str):
"""
Initialize the object with a URL.
Args:
url: CSV URL to load from.
"""
self.load(url)
def load(self, url: str, encoding: str = "iso8859-1"):
"""
Load a CSV given its file path.
Args:
url: Path of the CSV file.
encoding: Codepage name of the text file.
"""
with open(url, "r", encoding=encoding) as f:
reader = csv.reader(f, delimiter=",")
if self.data is None:
self.data = []
for row in reader:
self.data.append(row)
def export(self, url: str, fmt: DataFormat):
"""Official method to export data."""
if fmt is DataFormat.TEXT:
self.export_text(url)
elif fmt is DataFormat.CSV:
self.export_csv(url)
else:
raise ValueError(f"{fmt}: unsupported format.")
def export_text(self, url: str):
"""
Save data as a text file.
Every column is save in its own line as an example.
Args:
url: Output file path.
"""
with open(url, "w", encoding="utf-8") as file:
for row in self.data:
file.write("\n".join(row))
def export_csv(self, url: str):
"""
Save data as a CSV file with semicolons.
Args:
url: Output file path.
"""
with open(url, "w", encoding="utf-8") as file:
writer = csv.writer(file, delimiter=";")
for row in self.data:
writer.writerow(row)

View File

@ -0,0 +1,7 @@
from enum import IntEnum
class DataFormat(IntEnum):
"""Supported formats enumeration."""
CSV = 0
TEXT = 1

View File

@ -0,0 +1 @@
pyside6

View File

@ -0,0 +1,21 @@
from PySide6.QtGui import QIcon
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication, QListWidget, QListWidgetItem, QMainWindow
if __name__ == "__main__":
application = QApplication()
# Load main window with list widget from Designer file
window: QMainWindow = QUiLoader().load("files/list-widget.ui")
list1: QListWidget = window.list1
# Add icon
sleep_icon = QIcon.fromTheme("text-x-python")
for i in range(20):
item = QListWidgetItem(sleep_icon, f"Élément {i}")
list1.addItem(item)
def on_clicked(list_item: QListWidgetItem):
print(list_item.text())
list1.itemClicked.connect(on_clicked)
window.show()
application.exec()

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>List widget demonstration</string>
</property>
<property name="windowIcon">
<iconset theme="emblem-favorite"/>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QListWidget" name="list1"/>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,10 @@
from data.csvmanager import CSVManager
from data.basemanager import BaseManager
if __name__ == '__main__':
csv1 = CSVManager("files/demo-csv.csv")
csv2 = CSVManager("files/demo-csv-incorrect.csv")
base1 = BaseManager("files/demo-csv.csv")
print(csv1.get_info())
print(csv2.get_info())

View File

@ -0,0 +1,14 @@
import logging
import sys
logger = logging.getLogger("data")
# Configure the main logger for the data package
if not logger.handlers:
handler = logging.StreamHandler(sys.stdout)
formatting = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
handler.setFormatter(formatting)
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.debug("Data logger registered.")

View File

@ -0,0 +1,24 @@
import logging
from os.path import getsize
logger = logging.getLogger("data.basemanager")
class BaseManager:
"""Base data file manager."""
def __init__(self, path: str):
self._path = path
logger.info(f"New file manager initialized for file {path}")
def get_info(self) -> dict:
"""Get basic information about the file."""
try:
data = {"size": getsize(self._path)}
return data
except IOError:
logger.error("Could not get file size.")
return {"size": -1}

View File

@ -0,0 +1,28 @@
import csv
import logging
from data.basemanager import BaseManager
logger = logging.getLogger("data.csvmanager")
class CSVManager(BaseManager):
"""Data manager for CSV files."""
def get_info(self) -> dict:
data = super().get_info()
try:
with open(self._path, "r", encoding="utf-8") as file:
reader = csv.reader(file)
for idx, _ in enumerate(reader):
pass
data["rows"] = idx
return data
except IOError:
logger.error("Could not decode CSV, IO error occurred.")
return data
except UnicodeDecodeError:
logger.error("CSV is not encoded in UTF8, skipping.")
return data

View File

@ -0,0 +1,100 @@
1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94,35,Nunavut,Storage & Organization,0.8
2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16,68.02,Nunavut,Appliances,0.58
3,"Cardinal Slant-D<> Ring Binder, Heavy Gauge Vinyl",Barry French,293,46.71,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39
4,R380,Clay Rozendal,483,1198.97,195.99,3.99,Nunavut,Telephones and Communication,0.58
5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5
6,G.E. Longer-Life Indoor Recessed Floodlight Bulbs,Carlos Soltero,515,4.43,6.64,4.95,Nunavut,Office Furnishings,0.37
7,"Angle-D Binders with Locking Rings, Label Holders",Carl Jackson,613,-54.04,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38
8,"SAFCO Mobile Desk Side File, Wire Frame",Carl Jackson,613,127.70,42.76,6.22,Nunavut,Storage & Organization,
9,"SAFCO Commercial Wire Shelving, Black",Monica Federle,643,-695.26,138.14,35,Nunavut,Storage & Organization,
10,Xerox 198,Dorothy Badders,678,-226.36,4.98,8.33,Nunavut,Paper,0.38
11,Xerox 1980,Neola Schneider,807,-166.85,4.28,6.18,Nunavut,Paper,0.4
12,Advantus Map Pennant Flags and Round Head Tacks,Neola Schneider,807,-14.33,3.95,2,Nunavut,Rubber Bands,0.53
13,Holmes HEPA Air Purifier,Carlos Daly,868,134.72,21.78,5.94,Nunavut,Appliances,0.5
14,"DS/HD IBM Formatted Diskettes, 200/Pack - Staples",Carlos Daly,868,114.46,47.98,3.61,Nunavut,Computer Peripherals,0.71
15,"Wilson Jones 1"" Hanging DublLock<63> Ring Binders",Claudia Miner,933,-4.72,5.28,2.99,Nunavut,Binders and Binder Accessories,0.37
16,Ultra Commercial Grade Dual Valve Door Closer,Neola Schneider,995,782.91,39.89,3.04,Nunavut,Office Furnishings,0.53
17,"#10-4 1/8"" x 9 1/2"" Premium Diagonal Seam Envelopes",Allen Rosenblatt,998,93.80,15.74,1.39,Nunavut,Envelopes,0.4
18,Hon 4-Shelf Metal Bookcases,Sylvia Foulston,1154,440.72,100.98,26.22,Nunavut,Bookcases,0.6
19,"Lesro Sheffield Collection Coffee Table, End Table, Center Table, Corner Table",Sylvia Foulston,1154,-481.04,71.37,69,Nunavut,Tables,0.68
20,g520,Jim Radford,1344,-11.68,65.99,5.26,Nunavut,Telephones and Communication,0.59
21,LX 788,Jim Radford,1344,313.58,155.99,8.99,Nunavut,Telephones and Communication,0.58
22,Avery 52,Carlos Soltero,1412,26.92,3.69,0.5,Nunavut,Labels,0.38
23,Plymouth Boxed Rubber Bands by Plymouth,Carlos Soltero,1412,-5.77,4.71,0.7,Nunavut,Rubber Bands,0.8
24,"GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2"" x 11""",Carl Ludwig,1539,-172.88,15.99,13.18,Nunavut,Binders and Binder Accessories,0.37
25,"Maxell 3.5"" DS/HD IBM-Formatted Diskettes, 10/Pack",Carl Ludwig,1539,-144.55,4.89,4.93,Nunavut,Computer Peripherals,0.66
26,Newell 335,Don Miller,1540,5.76,2.88,0.7,Nunavut,Pens & Art Supplies,0.56
27,SANFORD Liquid Accent<6E> Tank-Style Highlighters,Annie Cyprus,1702,4.90,2.84,0.93,Nunavut,Pens & Art Supplies,0.54
28,Canon PC940 Copier,Carl Ludwig,1761,-547.61,449.99,49,Nunavut,Copiers and Fax,0.38
29,"Tenex Personal Project File with Scoop Front Design, Black",Carlos Soltero,1792,-5.45,13.48,4.51,Nunavut,Storage & Organization,0.59
30,Col-Erase<73> Pencils with Erasers,Grant Carroll,2275,41.67,6.08,1.17,Nunavut,Pens & Art Supplies,0.56
31,"Imation 3.5"" DS/HD IBM Formatted Diskettes, 10/Pack",Don Miller,2277,-46.03,5.98,4.38,Nunavut,Computer Peripherals,0.75
32,"White Dual Perf Computer Printout Paper, 2700 Sheets, 1 Part, Heavyweight, 20 lbs., 14 7/8 x 11",Don Miller,2277,33.67,40.99,19.99,Nunavut,Paper,0.36
33,Self-Adhesive Address Labels for Typewriters by Universal,Alan Barnes,2532,140.01,7.31,0.49,Nunavut,Labels,0.38
34,Accessory37,Alan Barnes,2532,-78.96,20.99,2.5,Nunavut,Telephones and Communication,0.81
35,Fuji 5.2GB DVD-RAM,Jack Garza,2631,252.66,40.96,1.99,Nunavut,Computer Peripherals,0.55
36,Bevis Steel Folding Chairs,Julia West,2757,-1766.01,95.95,74.35,Nunavut,Chairs & Chairmats,0.57
37,Avery Binder Labels,Eugene Barchas,2791,-236.27,3.89,7.01,Nunavut,Binders and Binder Accessories,0.37
38,Hon Every-Day<61> Chair Series Swivel Task Chairs,Eugene Barchas,2791,80.44,120.98,30,Nunavut,Chairs & Chairmats,0.64
39,"IBM Multi-Purpose Copy Paper, 8 1/2 x 11"", Case",Eugene Barchas,2791,118.94,30.98,5.76,Nunavut,Paper,0.4
40,Global Troy<6F> Executive Leather Low-Back Tilter,Edward Hooks,2976,3424.22,500.98,26,Nunavut,Chairs & Chairmats,0.6
41,XtraLife<EFBFBD> ClearVue<75> Slant-D<> Ring Binders by Cardinal,Brad Eason,3232,-11.83,7.84,4.71,Nunavut,Binders and Binder Accessories,0.35
42,Computer Printout Paper with Letter-Trim Perforations,Nicole Hansen,3524,52.35,18.97,9.03,Nunavut,Paper,0.37
43,6160,Dorothy Wardle,3908,-180.20,115.99,2.5,Nunavut,Telephones and Communication,0.57
44,Avery 49,Aaron Bergman,4132,1.32,2.88,0.5,Nunavut,Labels,0.36
45,Hoover Portapower<65> Portable Vacuum,Jim Radford,4612,-375.64,4.48,49,Nunavut,Appliances,0.6
46,Timeport L7089,Annie Cyprus,4676,-104.25,125.99,7.69,Nunavut,Telephones and Communication,0.58
47,Avery 510,Annie Cyprus,4676,85.96,3.75,0.5,Nunavut,Labels,0.37
48,Xerox 1881,Annie Cyprus,4676,-8.38,12.28,6.47,Nunavut,Paper,0.38
49,LX 788,Annie Cyprus,4676,1115.69,155.99,8.99,Nunavut,Telephones and Communication,0.58
50,"Cardinal Slant-D<> Ring Binder, Heavy Gauge Vinyl",Annie Cyprus,5284,-3.05,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39
51,"Memorex 4.7GB DVD-RAM, 3/Pack",Clay Rozendal,5316,514.07,31.78,1.99,Nunavut,Computer Peripherals,0.42
52,Unpadded Memo Slips,Don Jones,5409,-7.04,3.98,2.97,Nunavut,Paper,0.35
53,"Adams Telephone Message Book W/Dividers/Space For Phone Numbers, 5 1/4""X8 1/2"", 300/Messages",Beth Thompson,5506,4.41,5.88,3.04,Nunavut,Paper,0.36
54,"Eldon Expressions<6E> Desk Accessory, Wood Pencil Holder, Oak",Frank Price,5569,-0.06,9.65,6.22,Nunavut,Office Furnishings,0.55
55,Bell Sonecor JB700 Caller ID,Michelle Lonsdale,5607,-50.33,7.99,5.03,Nunavut,Telephones and Communication,0.6
56,Avery Arch Ring Binders,Ann Chong,5894,87.68,58.1,1.49,Nunavut,Binders and Binder Accessories,0.38
57,APC 7 Outlet Network SurgeArrest Surge Protector,Ann Chong,5894,-68.22,80.48,4.5,Nunavut,Appliances,0.55
58,"Deflect-o RollaMat Studded, Beveled Mat for Medium Pile Carpeting",Joy Bell,5925,-354.90,92.23,39.61,Nunavut,Office Furnishings,0.67
59,Accessory4,Joy Bell,5925,-267.01,85.99,0.99,Nunavut,Telephones and Communication,0.85
60,Personal Creations<6E> Ink Jet Cards and Labels,Skye Norling,6016,3.63,11.48,5.43,Nunavut,Paper,0.36
61,High Speed Automatic Electric Letter Opener,Barry Weirich,6116,-1759.58,1637.53,24.49,Nunavut,"Scissors, Rulers and Trimmers",0.81
62,Xerox 1966,Grant Carroll,6182,-116.79,6.48,6.65,Nunavut,Paper,0.36
63,Xerox 213,Grant Carroll,6182,-67.28,6.48,7.86,Nunavut,Paper,0.37
64,"Boston Electric Pencil Sharpener, Model 1818, Charcoal Black",Adrian Hane,6535,-19.33,28.15,8.99,Nunavut,Pens & Art Supplies,0.57
65,Hammermill CopyPlus Copy Paper (20Lb. and 84 Bright),Skye Norling,6884,-61.21,4.98,4.75,Nunavut,Paper,0.36
66,"Telephone Message Books with Fax/Mobile Section, 5 1/2"" x 3 3/16""",Skye Norling,6884,119.09,6.35,1.02,Nunavut,Paper,0.39
67,Crate-A-Files<65>,Andrew Gjertsen,6916,-141.27,10.9,7.46,Nunavut,Storage & Organization,0.59
68,"Angle-D Binders with Locking Rings, Label Holders",Ralph Knight,6980,-77.28,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38
69,"80 Minute CD-R Spindle, 100/Pack - Staples",Dorothy Wardle,6982,407.44,39.48,1.99,Nunavut,Computer Peripherals,0.54
70,"Bush Westfield Collection Bookcases, Dark Cherry Finish, Fully Assembled",Dorothy Wardle,6982,-338.27,100.98,57.38,Nunavut,Bookcases,0.78
71,12-1/2 Diameter Round Wall Clock,Dorothy Wardle,6982,52.56,19.98,10.49,Nunavut,Office Furnishings,0.49
72,SAFCO Arco Folding Chair,Grant Carroll,7110,1902.24,276.2,24.49,Nunavut,Chairs & Chairmats,
73,"#10 White Business Envelopes,4 1/8 x 9 1/2",Barry Weirich,7430,353.20,15.67,1.39,Nunavut,Envelopes,0.38
74,3M Office Air Cleaner,Beth Paige,7906,271.78,25.98,5.37,Nunavut,Appliances,0.5
75,"Global Leather and Oak Executive Chair, Black",Sylvia Foulston,8391,-268.36,300.98,64.73,Nunavut,Chairs & Chairmats,0.56
76,Xerox 1936,Nicole Hansen,8419,70.39,19.98,5.97,Nunavut,Paper,0.38
77,Xerox 214,Nicole Hansen,8419,-86.62,6.48,7.03,Nunavut,Paper,0.37
78,Carina Double Wide Media Storage Towers in Natural & Black,Nicole Hansen,8833,-846.73,80.98,35,Nunavut,Storage & Organization,0.81
79,Staples<EFBFBD> General Use 3-Ring Binders,Beth Paige,8995,8.05,1.88,1.49,Nunavut,Binders and Binder Accessories,0.37
80,Xerox 1904,Beth Paige,8995,-78.02,6.48,5.86,Northwest Territories,Paper,0.36
81,Luxo Professional Combination Clamp-On Lamps,Beth Paige,8995,737.94,102.3,21.26,Northwest Territories,Office Furnishings,0.59
82,Xerox 217,Beth Paige,8995,-191.28,6.48,8.19,Northwest Territories,Paper,0.37
83,Revere Boxed Rubber Bands by Revere,Beth Paige,8995,-21.49,1.89,0.76,Northwest Territories,Rubber Bands,0.83
84,"Acco Smartsocket<65> Table Surge Protector, 6 Color-Coded Adapter Outlets",Sylvia Foulston,9126,884.08,62.05,3.99,Northwest Territories,Appliances,0.55
85,"Tennsco Snap-Together Open Shelving Units, Starter Sets and Add-On Units",Bryan Davis,9127,-329.49,279.48,35,Northwest Territories,Storage & Organization,0.8
86,Hon 4070 Series Pagoda<64> Round Back Stacking Chairs,Joy Bell,9509,2825.15,320.98,58.95,Northwest Territories,Chairs & Chairmats,0.57
87,Xerox 1887,Joy Bell,9509,2.13,18.97,5.21,Northwest Territories,Paper,0.37
88,Xerox 1891,Joy Bell,9509,707.15,48.91,5.81,Northwest Territories,Paper,0.38
89,Avery 506,Alan Barnes,9763,75.13,4.13,0.5,Northwest Territories,Labels,0.39
90,"Bush Heritage Pine Collection 5-Shelf Bookcase, Albany Pine Finish, *Special Order",Grant Carroll,9927,-270.63,140.98,53.48,Northwest Territories,Bookcases,0.65
91,"Lifetime Advantage<67> Folding Chairs, 4/Carton",Grant Carroll,9927,3387.35,218.08,18.06,Northwest Territories,Chairs & Chairmats,0.57
92,Microsoft Natural Multimedia Keyboard,Grant Carroll,9927,-82.16,50.98,6.5,Northwest Territories,Computer Peripherals,0.73
93,"Staples Wirebound Steno Books, 6"" x 9"", 12/Pack",Delfina Latchford,10022,-3.88,10.14,2.27,Northwest Territories,Paper,0.36
94,"GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2"" x 11""",Don Jones,10437,-191.22,15.99,13.18,Northwest Territories,Binders and Binder Accessories,0.37
95,Bevis Boat-Shaped Conference Table,Doug Bickford,10499,31.21,262.11,62.74,Northwest Territories,Tables,0.75
96,"Linden<EFBFBD> 12"" Wall Clock With Oak Frame",Doug Bickford,10535,-44.14,33.98,19.99,Northwest Territories,Office Furnishings,0.55
97,Newell 326,Doug Bickford,10535,-0.79,1.76,0.7,Northwest Territories,Pens & Art Supplies,0.56
98,Prismacolor Color Pencil Set,Jamie Kunitz,10789,76.42,19.84,4.1,Northwest Territories,Pens & Art Supplies,0.44
99,Xerox Blank Computer Paper,Anthony Johnson,10791,93.36,19.98,5.77,Northwest Territories,Paper,0.38
100,600 Series Flip,Ralph Knight,10945,4.22,95.99,8.99,Northwest Territories,Telephones and Communication,0.57
1 1 Eldon Base for stackable storage shelf, platinum Muhammed MacIntyre 3 -213.25 38.94 35 Nunavut Storage & Organization 0.8
2 2 1.7 Cubic Foot Compact "Cube" Office Refrigerators Barry French 293 457.81 208.16 68.02 Nunavut Appliances 0.58
3 3 Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl Barry French 293 46.71 8.69 2.99 Nunavut Binders and Binder Accessories 0.39
4 4 R380 Clay Rozendal 483 1198.97 195.99 3.99 Nunavut Telephones and Communication 0.58
5 5 Holmes HEPA Air Purifier Carlos Soltero 515 30.94 21.78 5.94 Nunavut Appliances 0.5
6 6 G.E. Longer-Life Indoor Recessed Floodlight Bulbs Carlos Soltero 515 4.43 6.64 4.95 Nunavut Office Furnishings 0.37
7 7 Angle-D Binders with Locking Rings, Label Holders Carl Jackson 613 -54.04 7.3 7.72 Nunavut Binders and Binder Accessories 0.38
8 8 SAFCO Mobile Desk Side File, Wire Frame Carl Jackson 613 127.70 42.76 6.22 Nunavut Storage & Organization
9 9 SAFCO Commercial Wire Shelving, Black Monica Federle 643 -695.26 138.14 35 Nunavut Storage & Organization
10 10 Xerox 198 Dorothy Badders 678 -226.36 4.98 8.33 Nunavut Paper 0.38
11 11 Xerox 1980 Neola Schneider 807 -166.85 4.28 6.18 Nunavut Paper 0.4
12 12 Advantus Map Pennant Flags and Round Head Tacks Neola Schneider 807 -14.33 3.95 2 Nunavut Rubber Bands 0.53
13 13 Holmes HEPA Air Purifier Carlos Daly 868 134.72 21.78 5.94 Nunavut Appliances 0.5
14 14 DS/HD IBM Formatted Diskettes, 200/Pack - Staples Carlos Daly 868 114.46 47.98 3.61 Nunavut Computer Peripherals 0.71
15 15 Wilson Jones 1" Hanging DublLock® Ring Binders Claudia Miner 933 -4.72 5.28 2.99 Nunavut Binders and Binder Accessories 0.37
16 16 Ultra Commercial Grade Dual Valve Door Closer Neola Schneider 995 782.91 39.89 3.04 Nunavut Office Furnishings 0.53
17 17 #10-4 1/8" x 9 1/2" Premium Diagonal Seam Envelopes Allen Rosenblatt 998 93.80 15.74 1.39 Nunavut Envelopes 0.4
18 18 Hon 4-Shelf Metal Bookcases Sylvia Foulston 1154 440.72 100.98 26.22 Nunavut Bookcases 0.6
19 19 Lesro Sheffield Collection Coffee Table, End Table, Center Table, Corner Table Sylvia Foulston 1154 -481.04 71.37 69 Nunavut Tables 0.68
20 20 g520 Jim Radford 1344 -11.68 65.99 5.26 Nunavut Telephones and Communication 0.59
21 21 LX 788 Jim Radford 1344 313.58 155.99 8.99 Nunavut Telephones and Communication 0.58
22 22 Avery 52 Carlos Soltero 1412 26.92 3.69 0.5 Nunavut Labels 0.38
23 23 Plymouth Boxed Rubber Bands by Plymouth Carlos Soltero 1412 -5.77 4.71 0.7 Nunavut Rubber Bands 0.8
24 24 GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2" x 11" Carl Ludwig 1539 -172.88 15.99 13.18 Nunavut Binders and Binder Accessories 0.37
25 25 Maxell 3.5" DS/HD IBM-Formatted Diskettes, 10/Pack Carl Ludwig 1539 -144.55 4.89 4.93 Nunavut Computer Peripherals 0.66
26 26 Newell 335 Don Miller 1540 5.76 2.88 0.7 Nunavut Pens & Art Supplies 0.56
27 27 SANFORD Liquid Accent™ Tank-Style Highlighters Annie Cyprus 1702 4.90 2.84 0.93 Nunavut Pens & Art Supplies 0.54
28 28 Canon PC940 Copier Carl Ludwig 1761 -547.61 449.99 49 Nunavut Copiers and Fax 0.38
29 29 Tenex Personal Project File with Scoop Front Design, Black Carlos Soltero 1792 -5.45 13.48 4.51 Nunavut Storage & Organization 0.59
30 30 Col-Erase® Pencils with Erasers Grant Carroll 2275 41.67 6.08 1.17 Nunavut Pens & Art Supplies 0.56
31 31 Imation 3.5" DS/HD IBM Formatted Diskettes, 10/Pack Don Miller 2277 -46.03 5.98 4.38 Nunavut Computer Peripherals 0.75
32 32 White Dual Perf Computer Printout Paper, 2700 Sheets, 1 Part, Heavyweight, 20 lbs., 14 7/8 x 11 Don Miller 2277 33.67 40.99 19.99 Nunavut Paper 0.36
33 33 Self-Adhesive Address Labels for Typewriters by Universal Alan Barnes 2532 140.01 7.31 0.49 Nunavut Labels 0.38
34 34 Accessory37 Alan Barnes 2532 -78.96 20.99 2.5 Nunavut Telephones and Communication 0.81
35 35 Fuji 5.2GB DVD-RAM Jack Garza 2631 252.66 40.96 1.99 Nunavut Computer Peripherals 0.55
36 36 Bevis Steel Folding Chairs Julia West 2757 -1766.01 95.95 74.35 Nunavut Chairs & Chairmats 0.57
37 37 Avery Binder Labels Eugene Barchas 2791 -236.27 3.89 7.01 Nunavut Binders and Binder Accessories 0.37
38 38 Hon Every-Day® Chair Series Swivel Task Chairs Eugene Barchas 2791 80.44 120.98 30 Nunavut Chairs & Chairmats 0.64
39 39 IBM Multi-Purpose Copy Paper, 8 1/2 x 11", Case Eugene Barchas 2791 118.94 30.98 5.76 Nunavut Paper 0.4
40 40 Global Troy™ Executive Leather Low-Back Tilter Edward Hooks 2976 3424.22 500.98 26 Nunavut Chairs & Chairmats 0.6
41 41 XtraLife® ClearVue™ Slant-D® Ring Binders by Cardinal Brad Eason 3232 -11.83 7.84 4.71 Nunavut Binders and Binder Accessories 0.35
42 42 Computer Printout Paper with Letter-Trim Perforations Nicole Hansen 3524 52.35 18.97 9.03 Nunavut Paper 0.37
43 43 6160 Dorothy Wardle 3908 -180.20 115.99 2.5 Nunavut Telephones and Communication 0.57
44 44 Avery 49 Aaron Bergman 4132 1.32 2.88 0.5 Nunavut Labels 0.36
45 45 Hoover Portapower™ Portable Vacuum Jim Radford 4612 -375.64 4.48 49 Nunavut Appliances 0.6
46 46 Timeport L7089 Annie Cyprus 4676 -104.25 125.99 7.69 Nunavut Telephones and Communication 0.58
47 47 Avery 510 Annie Cyprus 4676 85.96 3.75 0.5 Nunavut Labels 0.37
48 48 Xerox 1881 Annie Cyprus 4676 -8.38 12.28 6.47 Nunavut Paper 0.38
49 49 LX 788 Annie Cyprus 4676 1115.69 155.99 8.99 Nunavut Telephones and Communication 0.58
50 50 Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl Annie Cyprus 5284 -3.05 8.69 2.99 Nunavut Binders and Binder Accessories 0.39
51 51 Memorex 4.7GB DVD-RAM, 3/Pack Clay Rozendal 5316 514.07 31.78 1.99 Nunavut Computer Peripherals 0.42
52 52 Unpadded Memo Slips Don Jones 5409 -7.04 3.98 2.97 Nunavut Paper 0.35
53 53 Adams Telephone Message Book W/Dividers/Space For Phone Numbers, 5 1/4"X8 1/2", 300/Messages Beth Thompson 5506 4.41 5.88 3.04 Nunavut Paper 0.36
54 54 Eldon Expressions™ Desk Accessory, Wood Pencil Holder, Oak Frank Price 5569 -0.06 9.65 6.22 Nunavut Office Furnishings 0.55
55 55 Bell Sonecor JB700 Caller ID Michelle Lonsdale 5607 -50.33 7.99 5.03 Nunavut Telephones and Communication 0.6
56 56 Avery Arch Ring Binders Ann Chong 5894 87.68 58.1 1.49 Nunavut Binders and Binder Accessories 0.38
57 57 APC 7 Outlet Network SurgeArrest Surge Protector Ann Chong 5894 -68.22 80.48 4.5 Nunavut Appliances 0.55
58 58 Deflect-o RollaMat Studded, Beveled Mat for Medium Pile Carpeting Joy Bell 5925 -354.90 92.23 39.61 Nunavut Office Furnishings 0.67
59 59 Accessory4 Joy Bell 5925 -267.01 85.99 0.99 Nunavut Telephones and Communication 0.85
60 60 Personal Creations™ Ink Jet Cards and Labels Skye Norling 6016 3.63 11.48 5.43 Nunavut Paper 0.36
61 61 High Speed Automatic Electric Letter Opener Barry Weirich 6116 -1759.58 1637.53 24.49 Nunavut Scissors, Rulers and Trimmers 0.81
62 62 Xerox 1966 Grant Carroll 6182 -116.79 6.48 6.65 Nunavut Paper 0.36
63 63 Xerox 213 Grant Carroll 6182 -67.28 6.48 7.86 Nunavut Paper 0.37
64 64 Boston Electric Pencil Sharpener, Model 1818, Charcoal Black Adrian Hane 6535 -19.33 28.15 8.99 Nunavut Pens & Art Supplies 0.57
65 65 Hammermill CopyPlus Copy Paper (20Lb. and 84 Bright) Skye Norling 6884 -61.21 4.98 4.75 Nunavut Paper 0.36
66 66 Telephone Message Books with Fax/Mobile Section, 5 1/2" x 3 3/16" Skye Norling 6884 119.09 6.35 1.02 Nunavut Paper 0.39
67 67 Crate-A-Files™ Andrew Gjertsen 6916 -141.27 10.9 7.46 Nunavut Storage & Organization 0.59
68 68 Angle-D Binders with Locking Rings, Label Holders Ralph Knight 6980 -77.28 7.3 7.72 Nunavut Binders and Binder Accessories 0.38
69 69 80 Minute CD-R Spindle, 100/Pack - Staples Dorothy Wardle 6982 407.44 39.48 1.99 Nunavut Computer Peripherals 0.54
70 70 Bush Westfield Collection Bookcases, Dark Cherry Finish, Fully Assembled Dorothy Wardle 6982 -338.27 100.98 57.38 Nunavut Bookcases 0.78
71 71 12-1/2 Diameter Round Wall Clock Dorothy Wardle 6982 52.56 19.98 10.49 Nunavut Office Furnishings 0.49
72 72 SAFCO Arco Folding Chair Grant Carroll 7110 1902.24 276.2 24.49 Nunavut Chairs & Chairmats
73 73 #10 White Business Envelopes,4 1/8 x 9 1/2 Barry Weirich 7430 353.20 15.67 1.39 Nunavut Envelopes 0.38
74 74 3M Office Air Cleaner Beth Paige 7906 271.78 25.98 5.37 Nunavut Appliances 0.5
75 75 Global Leather and Oak Executive Chair, Black Sylvia Foulston 8391 -268.36 300.98 64.73 Nunavut Chairs & Chairmats 0.56
76 76 Xerox 1936 Nicole Hansen 8419 70.39 19.98 5.97 Nunavut Paper 0.38
77 77 Xerox 214 Nicole Hansen 8419 -86.62 6.48 7.03 Nunavut Paper 0.37
78 78 Carina Double Wide Media Storage Towers in Natural & Black Nicole Hansen 8833 -846.73 80.98 35 Nunavut Storage & Organization 0.81
79 79 Staples® General Use 3-Ring Binders Beth Paige 8995 8.05 1.88 1.49 Nunavut Binders and Binder Accessories 0.37
80 80 Xerox 1904 Beth Paige 8995 -78.02 6.48 5.86 Northwest Territories Paper 0.36
81 81 Luxo Professional Combination Clamp-On Lamps Beth Paige 8995 737.94 102.3 21.26 Northwest Territories Office Furnishings 0.59
82 82 Xerox 217 Beth Paige 8995 -191.28 6.48 8.19 Northwest Territories Paper 0.37
83 83 Revere Boxed Rubber Bands by Revere Beth Paige 8995 -21.49 1.89 0.76 Northwest Territories Rubber Bands 0.83
84 84 Acco Smartsocket™ Table Surge Protector, 6 Color-Coded Adapter Outlets Sylvia Foulston 9126 884.08 62.05 3.99 Northwest Territories Appliances 0.55
85 85 Tennsco Snap-Together Open Shelving Units, Starter Sets and Add-On Units Bryan Davis 9127 -329.49 279.48 35 Northwest Territories Storage & Organization 0.8
86 86 Hon 4070 Series Pagoda™ Round Back Stacking Chairs Joy Bell 9509 2825.15 320.98 58.95 Northwest Territories Chairs & Chairmats 0.57
87 87 Xerox 1887 Joy Bell 9509 2.13 18.97 5.21 Northwest Territories Paper 0.37
88 88 Xerox 1891 Joy Bell 9509 707.15 48.91 5.81 Northwest Territories Paper 0.38
89 89 Avery 506 Alan Barnes 9763 75.13 4.13 0.5 Northwest Territories Labels 0.39
90 90 Bush Heritage Pine Collection 5-Shelf Bookcase, Albany Pine Finish, *Special Order Grant Carroll 9927 -270.63 140.98 53.48 Northwest Territories Bookcases 0.65
91 91 Lifetime Advantage™ Folding Chairs, 4/Carton Grant Carroll 9927 3387.35 218.08 18.06 Northwest Territories Chairs & Chairmats 0.57
92 92 Microsoft Natural Multimedia Keyboard Grant Carroll 9927 -82.16 50.98 6.5 Northwest Territories Computer Peripherals 0.73
93 93 Staples Wirebound Steno Books, 6" x 9", 12/Pack Delfina Latchford 10022 -3.88 10.14 2.27 Northwest Territories Paper 0.36
94 94 GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2" x 11" Don Jones 10437 -191.22 15.99 13.18 Northwest Territories Binders and Binder Accessories 0.37
95 95 Bevis Boat-Shaped Conference Table Doug Bickford 10499 31.21 262.11 62.74 Northwest Territories Tables 0.75
96 96 Linden® 12" Wall Clock With Oak Frame Doug Bickford 10535 -44.14 33.98 19.99 Northwest Territories Office Furnishings 0.55
97 97 Newell 326 Doug Bickford 10535 -0.79 1.76 0.7 Northwest Territories Pens & Art Supplies 0.56
98 98 Prismacolor Color Pencil Set Jamie Kunitz 10789 76.42 19.84 4.1 Northwest Territories Pens & Art Supplies 0.44
99 99 Xerox Blank Computer Paper Anthony Johnson 10791 93.36 19.98 5.77 Northwest Territories Paper 0.38
100 100 600 Series Flip Ralph Knight 10945 4.22 95.99 8.99 Northwest Territories Telephones and Communication 0.57

View File

@ -0,0 +1,13 @@
import argparse
if __name__ == "__main__":
# Argparse demo: accept running this script with options like command tools.
parser = argparse.ArgumentParser(description="Demonstration argument parser")
parser.add_argument("--plop", required=True, help="Argument inutile", type=int)
parser.add_argument("--plip", required=False, default=None, help="Autre argument inutile", type=int)
options = parser.parse_args()
print(options)
print(options.plip)
print(options.plop)
print(options.__dict__)