From f794c99384ef531d0be8ca06cff00b4841d038c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Myriam=20B=C3=A9gel?= Date: Thu, 2 Mar 2017 16:07:17 +0100 Subject: [PATCH] Finalisation du rendu --- README.md | 73 +- .../templates/common}/base.html | 0 common/templates/common/generate.html | 2 +- common/templates/common/home.html | 12 - donnees.csv | 65 - feuillederoute.md | 58 - data.csv => from_insee.csv | 0 general_needs.csv | 2 - import_organizations.py | 14 - init.sh | 16 + ...zations.csv => organizations_palaiseau.csv | 0 peupler.py | 43 - scripts/__init.py__ | 0 .../dummy_organizations.py | 9 +- scripts/import_organizations.py | 11 + singular_needs.csv | 7 - spending_generator/settings.py | 3 +- tree.jsonld | 1853 ----------------- v1/migrations/0002_remove_profile_people.py | 19 + v1/models.py | 1 - v1/views.py | 4 +- 21 files changed, 63 insertions(+), 2129 deletions(-) rename {templates => common/templates/common}/base.html (100%) delete mode 100644 common/templates/common/home.html delete mode 100644 donnees.csv delete mode 100644 feuillederoute.md rename data.csv => from_insee.csv (100%) delete mode 100644 general_needs.csv delete mode 100644 import_organizations.py create mode 100755 init.sh rename organizations.csv => organizations_palaiseau.csv (100%) delete mode 100644 peupler.py create mode 100644 scripts/__init.py__ rename dummy_organizations.py => scripts/dummy_organizations.py (75%) create mode 100644 scripts/import_organizations.py delete mode 100644 singular_needs.csv delete mode 100644 tree.jsonld create mode 100644 v1/migrations/0002_remove_profile_people.py diff --git a/README.md b/README.md index 1a0d978..fdfc882 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,19 @@ # Projet pour le cours Web Data Managment -Le projet va s'enrichir en fonctionalités au fur et à mesure - ## Installation +Pour mettre en place le virtualenv, la base de données et peupler la base de données, exécuter le fichier init.sh. -Dans le dossier cloné, créer un fichier secret.py contenant un champ SECRET_KEY puis exécuter : - -~~~~~ -virtualenv .env --python=python3 -source .env/bin/activate -pip install django -~~~~~ - -Ensuite, créez un fichier secret.py à la racine du projet, contenant la ligne: - -~~~~~ -SECRET_KEY='CE QUE VOUS VOULEZ' -~~~~~ - -Commentez les lignes 17 à 20 de generators/admin.py. QUi devraient ressembler à: ->try: - User.objects.get_by_natural_key('admin') -except User.DoesNotExist: - User.objects.create_superuser('admin', 'admin@example.io', '123456') - -Dans le terminal qui vous a servi a créer l'environement virtuel (avec virtualenv): - -~~~~~ -./manage.py migrate -~~~~~ - -Décommentez les lignes 17 à 20 de generatos/admin.py. -Enfin, dans le terminal qui vous a servi a créer l'environement virtuel (avec virtualenv): - -~~~~~ -./manage.py runserver -~~~~~ - -Pour quitter l'environnement de production, `deactivate`. Il faut activer la source à chaque fois qu'on travaille dans le dossier. +Avant chaque utilisation du projet, activer le virtualenv `source .env/bin/activate` à la racine. +Pour quitter l'environnement de production, `deactivate`. Pour lancer le serveur en local : `./manage.py runserver` ## But -Générer aléatoirement des données. Ces données seront une liste de dépenses mensuelles. - -## Concrètement -En paramètre, il nous faut: - - * le salaire du foyer - * (la composition du foyer) - * (le profil du foyer) - -TODO -Le profil du foyer permettra d'orienter les dépenses. On propose une échelle de 1 à 3 pour chaque caractéristique. Est-ce que le foyer est fan de: - - * voyage - * technologie - * voiture - * shopping - * sortie - -Les dépenses seront distribuées dans les domaines suivants: +Générer une liste de dépenses annuelles à partir d'un profil de foyer. - * alimentation (courses + restaurants) - * habitat (loyer, prêt ou 0 si déjà propriétaire) - * factures (eau, gaz, électricité, Internet, TV, assurance, téléphone) - * transport (essence, train, avion, ...) - * loisirs - * économies - * extra (selon paramètres) +## Utilisation +L'initialisation de la base de données crée suffisamment d'Organization et de GeoCoordinates pour lancer les générations. Mais vous pouvez en rajouter dans l'interface web. -## Site web +On crée un Profile dans la version du générateur que l'on souhaite tester. Pour la v2, il faut renseigner les Person du foyer que l'on veut utiliser (au moins 1 adulte). -Pour le projet, nous avons choisi de faire une interface Web en Django. Le backend est donc en python. -A partir de la page d'accueil, on pourra récupérer la personalisation du profil. On pourra ensuite calculer les dépenses et les afficher en HTML en utilisant des Microdata. On pourra aussi télécharger un fichier récapitulant les dépenses au format RDFa. +On coche ensuite le Profile et le menu déroulant propose l'option "Generate new spendings". diff --git a/templates/base.html b/common/templates/common/base.html similarity index 100% rename from templates/base.html rename to common/templates/common/base.html diff --git a/common/templates/common/generate.html b/common/templates/common/generate.html index 933b61d..8cec8dd 100644 --- a/common/templates/common/generate.html +++ b/common/templates/common/generate.html @@ -1,4 +1,4 @@ -{% extends 'base.html' %} +{% extends 'common/base.html' %} {% block title %} Générateur de dépenses {% endblock %} {% block body %}

Tableau des dépenses pour l'année 2017

diff --git a/common/templates/common/home.html b/common/templates/common/home.html deleted file mode 100644 index ece8a86..0000000 --- a/common/templates/common/home.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends 'base.html' %} -{% block title %} Accueil - Générateur de dépenses {% endblock %} -{% block body %} -

Générateur de budget

-

Bienvenue sur la page du projet du cours Web Data Managment du MPRI, fait par Myriam Bégel et Thomas Dupriez.

-

Donnez en entrée un revenu annuel et nous allons générer un historique de dépenses sur un an.

-
- {% csrf_token %} - {{ form }} - -
-{% endblock %} diff --git a/donnees.csv b/donnees.csv deleted file mode 100644 index 4d4e9fe..0000000 --- a/donnees.csv +++ /dev/null @@ -1,65 +0,0 @@ -;;Ensemble;Décile 1;Décile 2;Décile 3;Décile 4;Décile 5;Décile 6;Décile 7;Décile 8;Décile 9;Décile 10 -;;26 562;16 169;17 754;19 652;22 142;23 692;26 078;28 225;31 497;34 882;45 506 -;ENSEMBLE;100,000;100,000;100,000;100,000;100,000;100,000;100,000;100,000;100,000;100,000;100,000 -GroceryStore;01 - PRODUITS ALIMENTAIRES ET BOISSONS NON-ALCOOLISEES;16,418;17,818;18,486;18,527;17,781;17,770;17,179;16,510;16,192;15,131;13,480 -BarOrPub;02 - BOISSONS ALCOOLISEES ET TABAC;2,989;3,680;3,740;3,343;3,491;3,423;2,999;2,749;2,546;2,827;2,393 -;03 - ARTICLES D’HABILLEMENT ET CHAUSSURES;5,037;6,030;5,069;4,514;4,729;4,732;4,709;4,833;5,096;5,516;5,118 -ClothingStore;031 - Tissus et vêtements yc services;3,674;4,472;3,774;3,348;3,437;3,491;3,417;3,458;3,667;4,097;3,661 -ShoeStore;032 - Chaussures, yc location et réparation;0,919;1,175;1,048;0,875;0,863;0,861;0,920;0,893;0,940;0,886;0,868 -;04 - LOGEMENT, EAU, GAZ, ELECTRICITE ET AUTRES COMBUSTIBLES;15,710;20,632;20,514;20,313;18,372;17,664;16,224;15,136;13,033;12,949;11,834 -RealEstateAgent;041 - Loyers d habitation (nets des aides au logement) pour la résidence principale;6,972;10,768;9,710;10,248;9,118;8,543;7,405;6,852;5,499;4,937;3,698 -HomeAndConstructionBusiness;043 - Travaux courants d’entretien et de réparation du logement (hors gros travaux);0,591;0,204;0,501;0,524;0,443;0,684;0,771;0,641;0,625;0,760;0,541 -;044 - Autres services relatifs au logement (ordures, assainissement, eau, charges);3,012;4,057;3,977;3,628;3,369;2,963;2,799;2,668;2,581;2,457;2,910 -WaterSupplier;0443 - Factures d’eau;0,806;0,798;0,969;0,946;0,840;0,869;0,878;0,797;0,784;0,748;0,650 -RealEstateAgent;0444 - Charges collectives;2,210;3,259;3,013;2,682;2,529;2,094;1,921;1,871;1,800;1,711;2,259 -EnergySupplier;045 - Electricité, gaz et autres combustibles;4,830;5,412;6,246;5,755;5,293;5,230;4,931;4,804;4,115;4,363;4,050 -FurnitureRetailer;05 - MEUBLES, ARTICLES DE MENAGE ET ENTRETIEN COURANT DE LA MAISON;5,899;4,249;4,551;5,017;4,891;5,073;4,870;5,375;6,283;6,717;8,342 -;06 - SANTE;1,818;1,756;1,943;2,020;2,208;1,887;1,860;1,733;1,838;1,603;1,664 -Pharmacy;061 - Produits et appareils thérapeutiques, matériel médical;0,847;0,934;1,031;0,987;0,939;0,878;0,817;0,748;0,825;0,757;0,782 -MedicalBusiness;062 - Services de consultation externe;0,832;0,674;0,811;0,911;1,143;0,865;0,901;0,818;0,908;0,714;0,697 -Dentist;0622 - Soins dentaires;0,218;0,148;0,146;0,224;0,384;0,232;0,226;0,202;0,225;0,163;0,218 -MedicalBusiness;0623 - Services paramédicaux (labo, radio, soins des auxiliaires médicaux et paramédicaux…);0,230;0,179;0,248;0,234;0,312;0,177;0,242;0,234;0,295;0,155;0,229 -Hospital;063 - Services et soins hospitaliers;0,102;0,049;0,096;0,107;0,099;0,135;0,050;0,142;0,083;0,095;0,134 -;07 - TRANSPORTS;17,356;13,705;14,059;14,833;16,674;16,904;18,487;18,806;18,722;18,399;18,292 -;071 - Achats de véhicules;7,537;3,055;4,737;5,745;7,077;7,133;8,053;8,843;8,210;8,555;9,082 -AutoRental;0711 - Achats d automobiles;7,142;2,932;4,500;5,541;6,684;6,834;7,493;8,457;7,715;8,001;8,665 -MotorcycleDealer;0712 - Achats de motocycles;0,309;0,056;0,186;0,158;0,303;0,181;0,456;0,276;0,378;0,473;0,341 -BikeStore;0713 - Achats de cycles;0,090;0,074;0,045;0,046;0,090;0,118;0,104;0,110;0,121;0,080;0,075 -;072 - Frais d utilisation de véhicules personnels (entretien, essence, garagiste, parking, péage);6,829;5,981;6,759;6,783;7,136;7,745;8,030;7,118;7,578;6,743;5,239 -AutoPartsStore;0721 - Pièces détachées et accessoires pour les véhicules personnels (hors ceux installés par un professionnel);0,572;0,192;0,389;0,417;0,790;0,772;1,039;0,383;0,978;0,568;0,213 -GasStation;0722 - Carburants et lubrifiants, antigel…;4,793;4,527;4,912;4,926;4,927;5,555;5,472;5,244;5,080;4,707;3,518 -AutoRepair;0723 - Services d’entretien et réparation des véhicules personnels;1,039;0,841;1,115;1,109;1,070;0,992;1,104;1,155;1,124;0,969;0,934 -TransportOrganization;073 - Services de transport;1,822;3,321;1,718;1,501;1,513;1,207;1,288;1,701;1,737;1,835;2,365 -;08 - COMMUNICATIONS;3,290;4,564;4,179;3,933;3,676;3,503;3,386;3,313;3,067;2,738;2,430 -;081 - Communications et services postaux;3,290;4,564;4,179;3,933;3,676;3,503;3,386;3,313;3,067;2,738;2,430 -PostOffice;0811 - Services postaux;0,102;0,068;0,101;0,219;0,072;0,076;0,077;0,089;0,095;0,097;0,112 -InternetProvider;0813 - Services de téléphone, télégraphe et télécopie, internet, recharges téléphoniques;3,102;4,373;3,960;3,638;3,509;3,339;3,233;3,143;2,886;2,560;2,237 -SportsClub/ ComputerStore/ BookStore/ MobilePhoneStore/ ToyStore;09 - LOISIRS ET CULTURE;9,611;7,725;8,021;7,429;8,098;8,307;8,992;9,609;9,896;10,682;12,601 -;10 - ENSEIGNEMENT;0,663;1,682;0,755;0,402;0,565;0,460;0,487;0,528;0,543;0,674;0,778 -;101 - Frais d enseignement, services éducatifs;0,663;1,682;0,755;0,402;0,565;0,460;0,487;0,528;0,543;0,674;0,778 -ElementarySchool;1011 - Enseignement maternel et primaire;0,049;0,043;0,034;0,031;0,045;0,042;0,061;0,050;0,038;0,043;0,079 -HighSchool;1012 - Enseignement secondaire;0,143;0,198;0,152;0,148;0,230;0,144;0,111;0,074;0,137;0,118;0,156 -CollegeOrUniversity;1013 - Enseignement supérieur;0,294;1,317;0,428;0,107;0,167;0,198;0,161;0,283;0,251;0,267;0,207 -School;1014 - Enseignement ne correspondant à aucun niveau particulier;0,109;0,118;0,045;0,081;0,090;0,046;0,130;0,103;0,079;0,129;0,176 -;11 - RESTAURATION ET HÔTELS;6,551;6,036;4,286;4,712;5,081;5,255;5,825;6,498;6,807;7,978;8,981 -;111 - Restauration;5,463;5,214;3,847;4,122;4,408;4,478;4,924;5,456;5,664;6,273;7,344 -Restaurant;11111 - Repas pris dans un restaurant;1,897;1,416;0,958;1,262;1,066;1,342;1,407;1,679;2,003;2,500;3,294 -BarOrPub / FastFoodRestaurant;11112 - Repas pris dans un café, bars ou assimilé;1,446;1,645;1,312;1,267;1,373;1,313;1,388;1,555;1,486;1,482;1,523 -FoodEstablishment;1112 - Cantines;1,291;1,552;1,188;1,140;1,409;1,275;1,476;1,378;1,321;1,256;1,101 -Hotel;112 - Services d hébergement;1,088;0,823;0,445;0,590;0,673;0,772;0,905;1,042;1,143;1,706;1,637 -;12 - BIENS ET SERVICES DIVERS;14,656;12,122;14,402;14,955;14,430;15,026;14,982;14,916;15,979;14,784;14,088 -BeautySalon;121 - Services et produits de soins personnels;2,763;2,573;2,788;2,850;2,809;2,765;2,638;2,792;2,918;2,669;2,786 -JewelryStore;1231 - Articles de bijouterie de joaillerie et d’horlogerie;0,226;0,124;0,107;0,397;0,190;0,156;0,127;0,170;0,371;0,224;0,275 -LeatherGoods;1232 - Autres effets personnels : maroquinerie, accessoires (briquet, parapluie, lunettes de soleil…), équipements pour bébés, articles funéraires;0,248;0,284;0,304;0,285;0,176;0,211;0,219;0,202;0,241;0,330;0,251 -Store;1233 - Autres biens et services : cadeau offert (à des personnes extérieures au ménage);0,192;0,198;0,141;0,173;0,217;0,186;0,138;0,174;0,178;0,221;0,251 -InsuranceAgency;124 - Protection sociale;0,998;0,291;0,580;0,595;0,709;1,034;1,219;1,261;1,483;1,049;1,042 -InsuranceAgency;125 - Assurances;7,605;6,822;8,421;8,732;8,644;8,480;7,949;7,887;7,505;7,092;6,197 -FinancialService;126 - Services financiers;0,474;0,532;0,552;0,509;0,506;0,490;0,491;0,503;0,483;0,427;0,389 -;13 - HORS CHAMP DE LA CONSOMMATION FINALE (IMPOTS ET TAXES, GROS TRAVAUX, REMBOURSEMENT PRET, CADEAUX, PRELEVEMENT EMPLOYEUR, EPARGNE);32,814;36,663;14,988;15,927;19,027;21,497;26,743;31,345;33,543;36,188;59,564 -GovernmentOrganization;131 - Impôts et taxes;10,564;2,400;3,070;3,175;4,263;5,103;6,645;7,894;9,861;12,835;28,128 -GovernmentOrganization;1314 - Impôts sur le revenu;6,615;0,155;0,507;0,616;0,939;1,401;2,669;3,731;5,667;8,182;22,859 -GovernmentOrganization;131A - Impôts et taxes du logement;3,750;2,035;2,197;2,437;3,121;3,529;3,831;4,004;4,105;4,444;4,975 -BankOrCreditUnion;132 - Remboursements de prêts immobiliers;8,486;3,810;4,236;4,483;5,596;5,719;9,034;9,570;9,604;10,002;13,451 -Store;133 - Aides et dons en argent offerts par le ménage et pensions;2,937;1,453;1,780;2,117;2,511;2,756;1,971;2,668;3,048;3,500;4,777 -HomeAndConstructionBusiness;134 - Gros travaux dans le logement;7,112;26,823;2,805;2,687;3,085;4,347;4,609;6,895;6,870;6,522;9,300 -BankOrCreditUnion;135 - Remboursements de crédits à la consommation;3,712;2,177;3,092;3,470;3,572;3,571;4,483;4,315;4,162;3,328;3,907 diff --git a/feuillederoute.md b/feuillederoute.md deleted file mode 100644 index 4b84d21..0000000 --- a/feuillederoute.md +++ /dev/null @@ -1,58 +0,0 @@ -# Feuille de route - -Le but est d'avoir le plus rapidement possible quelque chose de fonctionnel avec lequel on a définit le formalisme, au moins au minimum. Ensuite, on pourra enrichir le modèle. - -## Programme - -- [x] Générer des dépenses avec un nombre très restreint de possibilités en prenant un pourcentage fixe -> fixer le formalisme -- [x] Répartir selon les catégories de revenue -- [x] Ajouter de l'aléatoire -- [ ] Répartir avec aléas périodiques (Noël, soldes hiver-été, vacances scolaires) -- [x] Certaines choses pas tous les mois -- [x] Etendre le modèle avec plus de postes de dépenses -- [x] Etendre avec plus de magasins -- [x] Etendre avec des paramètres personalisés -- [ ] Intégrer les données d'un calendrier (avec le groupe qui génère des rendez-vous) - -## Phase 1 - -### Postes de dépenses - -* Produits alimentaires (20%) -* Habillement (5%) -* Loyer ou prêt immobilier (25%) -* Factures (8%) -* Carburant (5%) -* Epargne (37%) - -### Formalisme - -On peut s'intéresser aux items suivant de http://schema.org - -* TradeAction (BuyAction and PayAction) -* PaymentMethod -* PriceSpecification -* LocalBusiness (trop de sous-items :/) -* Person -* Product - -### Schéma/propriétés à utiliser pour BuyAction (resp. PayAction) -BuyAction (resp. PayAction) - - * seller (resp. recipient) : Organization (the specific supermarket building for example, not the whole company, that could own multiple supermarkets) - * name: Text - * description: Text - * location: Place - * geo: GeoCoordinates - *latitude: Number - * longitude: Number - * priceSpecification: PriceSpecification - * price: Number (just the value, not the currency) - * priceCurrency: Text (the currency (in 3-letter ISO 4217 format)) - * agent : Person (la personne à qui on génère le profil, peut-être pas le préciser à chaque fois) - * name: Text - * object : Product - * category (l'un des "Postes de Dépenses"?) - * name: Text - * startTime : DateTime - diff --git a/data.csv b/from_insee.csv similarity index 100% rename from data.csv rename to from_insee.csv diff --git a/general_needs.csv b/general_needs.csv deleted file mode 100644 index 8f041bc..0000000 --- a/general_needs.csv +++ /dev/null @@ -1,2 +0,0 @@ -"Name","IsBuyAction","1DayYear","1DayMonth","1DayDay","1DayHour","PeriodDay","TimeRandomDay","TriggerRandom","Subcategory" -"Food","True",2017,1,3,19,7,1,5,"GroceryStore" diff --git a/import_organizations.py b/import_organizations.py deleted file mode 100644 index 53a3a4f..0000000 --- a/import_organizations.py +++ /dev/null @@ -1,14 +0,0 @@ -import csv -from common.models import GeoCoordinates, Organization - -with open('organizations.csv') as f: - r = csv.DictReader(f, delimiter=',') - print("before") - for p in r: - g = GeoCoordinates(latitude=p['Latitude'], longitude=p['Longitude']) - g.save() - print("Geo saved") - o = Organization(name=p['Name'], subcategory=p['Subcategory'], location=g) - o.save() - print("Orga saved") - print("after") diff --git a/init.sh b/init.sh new file mode 100755 index 0000000..540d00d --- /dev/null +++ b/init.sh @@ -0,0 +1,16 @@ +#!/bin/bash +echo '### Initialisation du projet' +echo '### Mise en place du virtualenv' +virtualenv .env --python=python3 +. .env/bin/activate +pip install django +pip install django-extensions + +echo '### Initialisation de la base de données' +sed -i -e ' 16,19 s/^/# /g' common/admin.py +./manage.py migrate +sed -i -e ' 16,19 s/^# //g' common/admin.py + +echo '### Remplissage de la base de données' +./manage.py runscript dummy_organizations +./manage.py runscript import_organizations diff --git a/organizations.csv b/organizations_palaiseau.csv similarity index 100% rename from organizations.csv rename to organizations_palaiseau.csv diff --git a/peupler.py b/peupler.py deleted file mode 100644 index c0fa6fa..0000000 --- a/peupler.py +++ /dev/null @@ -1,43 +0,0 @@ -import csv -import datetime as d -from generator.models import * - -def save_needs(): - ''' A partir de bases de données csv, on importe des GeneralNeed - et des SingularNeed. - Le séparateur est une virgule. - On suppose que les champs sont ceux du code suivant - ''' - with open('general_needs.csv') as f: - r = csv.DictReader(f, delimiter=',') - for p in r: - gn = GeneralNeed(name=p['Name']) - gn.is_buy_action = (p['IsBuyAction']=='True') - gn.firstDay = d.datetime(year=int(p['1DayYear']), month=int(p['1DayMonth']), day=int(p['1DayDay']), hour=int(p['1DayHour'])) - gn.period = int(p['PeriodDay']) - gn.timeRandomness = int(p['TimeRandomDay']) - gn.triggerRandomness = int(p['TriggerRandom']) - gn.subcategory = p['Subcategory'] - gn.save() - with open('singular_needs.csv') as fi: - re = csv.DictReader(fi, delimiter=',') - for p in re: - SingularNeed(setting=p['Setting'], amount=int(p['Amount']), hazard=int(p['Hazard'])).save() - -save_needs() - -# Organization -g = GeoCoordinates(latitude=48.70594, longitude=2.25371) -g.save() -o = Organization(name="Auchan", description='Supermarché', subcategory='GroceryStore', location=g) -o.save() - -# Gens -a = Person(name='Alice') -a.save() - -#Profile -p = Profile(salary=10000) -p.save() -p.people.add(a) -p.save() diff --git a/scripts/__init.py__ b/scripts/__init.py__ new file mode 100644 index 0000000..e69de29 diff --git a/dummy_organizations.py b/scripts/dummy_organizations.py similarity index 75% rename from dummy_organizations.py rename to scripts/dummy_organizations.py index 1cdea7f..ea91eb9 100644 --- a/dummy_organizations.py +++ b/scripts/dummy_organizations.py @@ -2,12 +2,12 @@ import csv import datetime as d from common.models import GeoCoordinates, Organization -def from_insee(): +def run(): g = GeoCoordinates() - g.longitude = 45.2 - g.latitude = 2.0 + g.longitude = 2.2935088 + g.latitude = 48.8583513 g.save() - with open('data.csv') as f: + with open('from_insee.csv') as f: r = csv.reader(f, delimiter=',') for p in r: o = Organization() @@ -15,4 +15,3 @@ def from_insee(): o.subcategory = p[0] o.name = p[0] o.save() - diff --git a/scripts/import_organizations.py b/scripts/import_organizations.py new file mode 100644 index 0000000..ee9d7c4 --- /dev/null +++ b/scripts/import_organizations.py @@ -0,0 +1,11 @@ +import csv +from common.models import GeoCoordinates, Organization + +def run(): + with open('organizations_palaiseau.csv') as f: + r = csv.DictReader(f, delimiter=',') + for p in r: + g = GeoCoordinates(latitude=p['Latitude'], longitude=p['Longitude']) + g.save() + o = Organization(name=p['Name'], subcategory=p['Subcategory'], location=g) + o.save() diff --git a/singular_needs.csv b/singular_needs.csv deleted file mode 100644 index d98edc6..0000000 --- a/singular_needs.csv +++ /dev/null @@ -1,7 +0,0 @@ -"Setting","Amount","Hazard" -"FoodM",15,5 -"FoodF",13,4 -"FoodElementary",17,4 -"FoodMiddle",15,4 -"FoodHigh",16,5 -"FoodCollege",17,6 diff --git a/spending_generator/settings.py b/spending_generator/settings.py index 08a7c36..be9ae6c 100644 --- a/spending_generator/settings.py +++ b/spending_generator/settings.py @@ -26,7 +26,7 @@ SECRET_KEY = secret.SECRET_KEY # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = ['perso.crans.org', 'localhost'] +ALLOWED_HOSTS = ['perso.crans.org', 'localhost', '127.0.0.1'] # Application definition @@ -38,6 +38,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django_extensions', 'common', 'v1', 'v2', diff --git a/tree.jsonld b/tree.jsonld deleted file mode 100644 index d0b706e..0000000 --- a/tree.jsonld +++ /dev/null @@ -1,1853 +0,0 @@ - -{ -"@context": { - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "schema": "http://schema.org/", - "rdfs:subClassOf": { "@type": "@id" }, - "name": "rdfs:label", - "description": "rdfs:comment", - "children": { "@reverse": "rdfs:subClassOf" } - }, - -"@type": "rdfs:Class", "description": "The most generic type of item.", -"name": "Thing", -"@id": "schema:Thing", -"layer": "core", -"children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Thing", "description": "An action performed by a direct agent and indirect participants upon a direct object...", - "name": "Action", - "@id": "schema:Action", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Action", "description": "The act of participating in an exchange of goods and services for monetary compensation...", - "name": "TradeAction", - "@id": "schema:TradeAction", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:TradeAction", "description": "The act of giving money to a seller in exchange for goods or services rendered...", - "name": "BuyAction", - "@id": "schema:BuyAction", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:TradeAction", "description": "The act of providing goods, services, or money without compensation, often for philanthropic reasons.", - "name": "DonateAction", - "@id": "schema:DonateAction", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:TradeAction", "description": "An agent orders an object/product/service to be delivered/sent.", - "name": "OrderAction", - "@id": "schema:OrderAction", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:TradeAction", "description": "An agent pays a price to a participant.", - "name": "PayAction", - "@id": "schema:PayAction", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:TradeAction", "description": "An agent orders a (not yet released) object/product/service to be delivered/sent.", - "name": "PreOrderAction", - "@id": "schema:PreOrderAction", - "layer": "pending" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:TradeAction", "description": "An agent quotes/estimates/appraises an object/product/service with a price at a location/store.", - "name": "QuoteAction", - "@id": "schema:QuoteAction", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:TradeAction", "description": "The act of giving money in return for temporary use, but not ownership, of an object such as a vehicle or property...", - "name": "RentAction", - "@id": "schema:RentAction", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:TradeAction", "description": "The act of taking money from a buyer in exchange for goods or services rendered...", - "name": "SellAction", - "@id": "schema:SellAction", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:TradeAction", "description": "The act of giving money voluntarily to a beneficiary in recognition of services rendered.", - "name": "TipAction", - "@id": "schema:TipAction", - "layer": "core" - - } - - ] - - }, - - ] - - }, - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Thing", "description": "A utility class that serves as the umbrella for a number of 'intangible' things such as quantities, structured values, etc.", - "name": "Intangible", - "@id": "schema:Intangible", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Intangible", "description": "Lists or enumerations\u2014for example, a list of cuisines or music genres, etc.", - "name": "Enumeration", - "@id": "schema:Enumeration", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Enumeration", "description": "A payment method is a standardized procedure for transferring the monetary amount for a purchase...", - "name": "PaymentMethod", - "@id": "schema:PaymentMethod", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:PaymentMethod", "description": "A payment method using a credit, debit, store or other card to associate the payment with an account.", - "name": "PaymentCard", - "@id": "schema:PaymentCard", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:PaymentCard", "description": "A card payment method of a particular brand or name. Used to mark up a particular payment method and/or the financial product/service that supplies the card account...", - "name": "CreditCard", - "@id": "schema:CreditCard", - "layer": "core" - - } - - ] - - } - - ] - - }, - - ] - - }, - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Intangible", "description": "Structured values are used when the value of a property has a more complex structure than simply being a textual value or a reference to another thing.", - "name": "StructuredValue", - "@id": "schema:StructuredValue", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:StructuredValue", "description": "A structured value representing a price or price range. Typically, only the subclasses of this type are used for markup...", - "name": "PriceSpecification", - "@id": "schema:PriceSpecification", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:PriceSpecification", "description": "A compound price specification is one that bundles multiple prices that all apply in combination for different dimensions of consumption...", - "name": "CompoundPriceSpecification", - "@id": "schema:CompoundPriceSpecification", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:PriceSpecification", "description": "The price for the delivery of an offer using a particular delivery method.", - "name": "DeliveryChargeSpecification", - "@id": "schema:DeliveryChargeSpecification", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:PriceSpecification", "description": "The costs of settling the payment using a particular payment method.", - "name": "PaymentChargeSpecification", - "@id": "schema:PaymentChargeSpecification", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:PriceSpecification", "description": "The price asked for a given offer by the respective organization or person.", - "name": "UnitPriceSpecification", - "@id": "schema:UnitPriceSpecification", - "layer": "core" - - } - - ] - - }, - - ] - - }, - - ] - - }, - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Thing", "description": "An organization such as a school, NGO, corporation, club, etc.", - "name": "Organization", - "@id": "schema:Organization", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Organization", "description": "A particular physical business or branch of an organization. Examples of LocalBusiness include a restaurant, a particular branch of a restaurant chain, a branch of a bank, a medical practice, a club, a bowling alley, etc.", - "name": "LocalBusiness", - "@id": "schema:LocalBusiness", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "Animal shelter.", - "name": "AnimalShelter", - "@id": "schema:AnimalShelter", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "Car repair, sales, or parts.", - "name": "AutomotiveBusiness", - "@id": "schema:AutomotiveBusiness", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:AutomotiveBusiness", "description": "Auto body shop.", - "name": "AutoBodyShop", - "@id": "schema:AutoBodyShop", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:AutomotiveBusiness", "description": "An car dealership.", - "name": "AutoDealer", - "@id": "schema:AutoDealer", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:AutomotiveBusiness", "description": "An auto parts store.", - "name": "AutoPartsStore", - "@id": "schema:AutoPartsStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:AutomotiveBusiness", "description": "A car rental business.", - "name": "AutoRental", - "@id": "schema:AutoRental", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:AutomotiveBusiness", "description": "Car repair business.", - "name": "AutoRepair", - "@id": "schema:AutoRepair", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:AutomotiveBusiness", "description": "A car wash business.", - "name": "AutoWash", - "@id": "schema:AutoWash", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:AutomotiveBusiness", "description": "A gas station.", - "name": "GasStation", - "@id": "schema:GasStation", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:AutomotiveBusiness", "description": "A motorcycle dealer.", - "name": "MotorcycleDealer", - "@id": "schema:MotorcycleDealer", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:AutomotiveBusiness", "description": "A motorcycle repair shop.", - "name": "MotorcycleRepair", - "@id": "schema:MotorcycleRepair", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A Childcare center.", - "name": "ChildCare", - "@id": "schema:ChildCare", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A dentist.", - "name": "Dentist", - "@id": "schema:Dentist", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A dry-cleaning business.", - "name": "DryCleaningOrLaundry", - "@id": "schema:DryCleaningOrLaundry", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "An emergency service, such as a fire station or ER.", - "name": "EmergencyService", - "@id": "schema:EmergencyService", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:EmergencyService", "description": "A fire station. With firemen.", - "name": "FireStation", - "@id": "schema:FireStation", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:EmergencyService", "description": "A hospital.", - "name": "Hospital", - "@id": "schema:Hospital", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:EmergencyService", "description": "A police station.", - "name": "PoliceStation", - "@id": "schema:PoliceStation", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "An employment agency.", - "name": "EmploymentAgency", - "@id": "schema:EmploymentAgency", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A business providing entertainment.", - "name": "EntertainmentBusiness", - "@id": "schema:EntertainmentBusiness", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:EntertainmentBusiness", "description": "An adult entertainment establishment.", - "name": "AdultEntertainment", - "@id": "schema:AdultEntertainment", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:EntertainmentBusiness", "description": "An amusement park.", - "name": "AmusementPark", - "@id": "schema:AmusementPark", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:EntertainmentBusiness", "description": "An art gallery.", - "name": "ArtGallery", - "@id": "schema:ArtGallery", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:EntertainmentBusiness", "description": "A casino.", - "name": "Casino", - "@id": "schema:Casino", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:EntertainmentBusiness", "description": "A comedy club.", - "name": "ComedyClub", - "@id": "schema:ComedyClub", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:EntertainmentBusiness", "description": "A movie theater.", - "name": "MovieTheater", - "@id": "schema:MovieTheater", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:EntertainmentBusiness", "description": "A nightclub or discotheque.", - "name": "NightClub", - "@id": "schema:NightClub", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "Financial services business.", - "name": "FinancialService", - "@id": "schema:FinancialService", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FinancialService", "description": "Accountancy business.\n\nAs a LocalBusiness it can be described as a provider of one or more Service(s).", - "name": "AccountingService", - "@id": "schema:AccountingService", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FinancialService", "description": "ATM/cash machine.", - "name": "AutomatedTeller", - "@id": "schema:AutomatedTeller", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FinancialService", "description": "Bank or credit union.", - "name": "BankOrCreditUnion", - "@id": "schema:BankOrCreditUnion", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FinancialService", "description": "An Insurance agency.", - "name": "InsuranceAgency", - "@id": "schema:InsuranceAgency", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A food-related business.", - "name": "FoodEstablishment", - "@id": "schema:FoodEstablishment", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FoodEstablishment", "description": "A bakery.", - "name": "Bakery", - "@id": "schema:Bakery", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FoodEstablishment", "description": "A bar or pub.", - "name": "BarOrPub", - "@id": "schema:BarOrPub", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FoodEstablishment", "description": "Brewery.", - "name": "Brewery", - "@id": "schema:Brewery", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FoodEstablishment", "description": "A cafe or coffee shop.", - "name": "CafeOrCoffeeShop", - "@id": "schema:CafeOrCoffeeShop", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FoodEstablishment", "description": "A distillery.", - "name": "Distillery", - "@id": "schema:Distillery", - "layer": "pending" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FoodEstablishment", "description": "A fast-food restaurant.", - "name": "FastFoodRestaurant", - "@id": "schema:FastFoodRestaurant", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FoodEstablishment", "description": "An ice cream shop.", - "name": "IceCreamShop", - "@id": "schema:IceCreamShop", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FoodEstablishment", "description": "A restaurant.", - "name": "Restaurant", - "@id": "schema:Restaurant", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:FoodEstablishment", "description": "A winery.", - "name": "Winery", - "@id": "schema:Winery", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A government office—for example, an IRS or DMV office.", - "name": "GovernmentOffice", - "@id": "schema:GovernmentOffice", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:GovernmentOffice", "description": "A post office.", - "name": "PostOffice", - "@id": "schema:PostOffice", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "Health and beauty.", - "name": "HealthAndBeautyBusiness", - "@id": "schema:HealthAndBeautyBusiness", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HealthAndBeautyBusiness", "description": "Beauty salon.", - "name": "BeautySalon", - "@id": "schema:BeautySalon", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HealthAndBeautyBusiness", "description": "A day spa.", - "name": "DaySpa", - "@id": "schema:DaySpa", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HealthAndBeautyBusiness", "description": "A hair salon.", - "name": "HairSalon", - "@id": "schema:HairSalon", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HealthAndBeautyBusiness", "description": "A health club.", - "name": "HealthClub", - "@id": "schema:HealthClub", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HealthAndBeautyBusiness", "description": "A nail salon.", - "name": "NailSalon", - "@id": "schema:NailSalon", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HealthAndBeautyBusiness", "description": "A tattoo parlor.", - "name": "TattooParlor", - "@id": "schema:TattooParlor", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A construction business.\n\nA HomeAndConstructionBusiness is a LocalBusiness that provides services around homes and buildings...", - "name": "HomeAndConstructionBusiness", - "@id": "schema:HomeAndConstructionBusiness", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HomeAndConstructionBusiness", "description": "An electrician.", - "name": "Electrician", - "@id": "schema:Electrician", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HomeAndConstructionBusiness", "description": "A general contractor.", - "name": "GeneralContractor", - "@id": "schema:GeneralContractor", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HomeAndConstructionBusiness", "description": "A business that provide Heating, Ventilation and Air Conditioning services.", - "name": "HVACBusiness", - "@id": "schema:HVACBusiness", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HomeAndConstructionBusiness", "description": "A house painting service.", - "name": "HousePainter", - "@id": "schema:HousePainter", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HomeAndConstructionBusiness", "description": "A locksmith.", - "name": "Locksmith", - "@id": "schema:Locksmith", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HomeAndConstructionBusiness", "description": "A moving company.", - "name": "MovingCompany", - "@id": "schema:MovingCompany", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HomeAndConstructionBusiness", "description": "A plumbing service.", - "name": "Plumber", - "@id": "schema:Plumber", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:HomeAndConstructionBusiness", "description": "A roofing contractor.", - "name": "RoofingContractor", - "@id": "schema:RoofingContractor", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "An internet cafe.", - "name": "InternetCafe", - "@id": "schema:InternetCafe", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A LegalService is a business that provides legally-oriented services, advice and representation, e...", - "name": "LegalService", - "@id": "schema:LegalService", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LegalService", "description": "Professional service: Attorney. \n\nThis type is deprecated - LegalService is more inclusive and less ambiguous.", - "name": "Attorney", - "@id": "schema:Attorney", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LegalService", "description": "A notary.", - "name": "Notary", - "@id": "schema:Notary", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A library.", - "name": "Library", - "@id": "schema:Library", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A lodging business, such as a motel, hotel, or inn.", - "name": "LodgingBusiness", - "@id": "schema:LodgingBusiness", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LodgingBusiness", "description": "Bed and breakfast.\n\nSee also the dedicated document on the use of schema...", - "name": "BedAndBreakfast", - "@id": "schema:BedAndBreakfast", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LodgingBusiness", "description": "A camping site, campsite, or campground is a place used for overnight stay in the outdoors...", - "name": "Campground", - "@id": "schema:Campground", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LodgingBusiness", "description": "A hostel - cheap accommodation, often in shared dormitories.\n\nSee also the dedicated document on the use of schema...", - "name": "Hostel", - "@id": "schema:Hostel", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LodgingBusiness", "description": "A hotel is an establishment that provides lodging paid on a short-term basis (Source: Wikipedia, the free encyclopedia, see http://en...", - "name": "Hotel", - "@id": "schema:Hotel", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LodgingBusiness", "description": "A motel.\n\nSee also the dedicated document on the use of schema...", - "name": "Motel", - "@id": "schema:Motel", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LodgingBusiness", "description": "A resort is a place used for relaxation or recreation, attracting visitors for holidays or vacations...", - "name": "Resort", - "@id": "schema:Resort", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A particular physical or virtual business of an organization for medical purposes...", - "name": "MedicalBusiness", - "@id": "schema:MedicalBusiness", - "layer": "health-lifesci", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A field of public health focusing on improving health characteristics of a defined population in relation with their geographical or environment areas", - "name": "CommunityHealth", - "@id": "schema:CommunityHealth", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A specific branch of medical science that pertains to diagnosis and treatment of disorders of skin.", - "name": "Dermatology", - "@id": "schema:Dermatology", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "Dietetic and nutrition as a medical speciality.", - "name": "DietNutrition", - "@id": "schema:DietNutrition", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A specific branch of medical science that deals with the evaluation and initial treatment of medical conditions caused by trauma or sudden illness.", - "name": "Emergency", - "@id": "schema:Emergency", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A specific branch of medical science that is concerned with the diagnosis and treatment of diseases, debilities and provision of care to the aged.", - "name": "Geriatric", - "@id": "schema:Geriatric", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A specific branch of medical science that pertains to the health care of women, particularly in the diagnosis and treatment of disorders affecting the female reproductive system.", - "name": "Gynecologic", - "@id": "schema:Gynecologic", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A facility, often associated with a hospital or medical school, that is devoted to the specific diagnosis and/or healthcare...", - "name": "MedicalClinic", - "@id": "schema:MedicalClinic", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A nurse-like health profession that deals with pregnancy, childbirth, and the postpartum period (including care of the newborn), besides sexual and reproductive health of women throughout their lives.", - "name": "Midwifery", - "@id": "schema:Midwifery", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A health profession of a person formally educated and trained in the care of the sick or infirm person.", - "name": "Nursing", - "@id": "schema:Nursing", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A specific branch of medical science that specializes in the care of women during the prenatal and postnatal care and with the delivery of the child.", - "name": "Obstetric", - "@id": "schema:Obstetric", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A specific branch of medical science that deals with benign and malignant tumors, including the study of their development, diagnosis, treatment and prevention.", - "name": "Oncologic", - "@id": "schema:Oncologic", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A store that sells reading glasses and similar devices for improving vision.", - "name": "Optician", - "@id": "schema:Optician", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "The science or practice of testing visual acuity and prescribing corrective lenses.", - "name": "Optometric", - "@id": "schema:Optometric", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A specific branch of medical science that is concerned with the ear, nose and throat and their respective disease states.", - "name": "Otolaryngologic", - "@id": "schema:Otolaryngologic", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A specific branch of medical science that specializes in the care of infants, children and adolescents.", - "name": "Pediatric", - "@id": "schema:Pediatric", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A pharmacy or drugstore.", - "name": "Pharmacy", - "@id": "schema:Pharmacy", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A doctor's office.", - "name": "Physician", - "@id": "schema:Physician", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "The practice of treatment of disease, injury, or deformity by physical methods such as massage, heat treatment, and exercise rather than by drugs or surgery.", - "name": "Physiotherapy", - "@id": "schema:Physiotherapy", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A specific branch of medical science that pertains to therapeutic or cosmetic repair or re-formation of missing, injured or malformed tissues or body parts by manual and instrumental means.", - "name": "PlasticSurgery", - "@id": "schema:PlasticSurgery", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "Podiatry is the care of the human foot, especially the diagnosis and treatment of foot disorders.", - "name": "Podiatric", - "@id": "schema:Podiatric", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "The medical care by a physician, or other health-care professional, who is the patient's first contact with the health-care system and who may recommend a specialist if necessary.", - "name": "PrimaryCare", - "@id": "schema:PrimaryCare", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "A specific branch of medical science that is concerned with the study, treatment, and prevention of mental illness, using both medical and psychological therapies.", - "name": "Psychiatric", - "@id": "schema:Psychiatric", - "layer": "health-lifesci" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:MedicalBusiness", "description": "Branch of medicine that pertains to the health services to improve and protect community health, especially epidemiology, sanitation, immunization, and preventive medicine.", - "name": "PublicHealth", - "@id": "schema:PublicHealth", - "layer": "health-lifesci" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "Original definition: \"provider of professional services.\"\n\nThe general ProfessionalService type for local businesses was deprecated due to confusion with Service...", - "name": "ProfessionalService", - "@id": "schema:ProfessionalService", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A radio station.", - "name": "RadioStation", - "@id": "schema:RadioStation", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A real-estate agent.", - "name": "RealEstateAgent", - "@id": "schema:RealEstateAgent", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A recycling center.", - "name": "RecyclingCenter", - "@id": "schema:RecyclingCenter", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A self-storage facility.", - "name": "SelfStorage", - "@id": "schema:SelfStorage", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A shopping center or mall.", - "name": "ShoppingCenter", - "@id": "schema:ShoppingCenter", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A sports location, such as a playing field.", - "name": "SportsActivityLocation", - "@id": "schema:SportsActivityLocation", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:SportsActivityLocation", "description": "A bowling alley.", - "name": "BowlingAlley", - "@id": "schema:BowlingAlley", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:SportsActivityLocation", "description": "A gym.", - "name": "ExerciseGym", - "@id": "schema:ExerciseGym", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:SportsActivityLocation", "description": "A golf course.", - "name": "GolfCourse", - "@id": "schema:GolfCourse", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:SportsActivityLocation", "description": "A public swimming pool.", - "name": "PublicSwimmingPool", - "@id": "schema:PublicSwimmingPool", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:SportsActivityLocation", "description": "A ski resort.", - "name": "SkiResort", - "@id": "schema:SkiResort", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:SportsActivityLocation", "description": "A sports club.", - "name": "SportsClub", - "@id": "schema:SportsClub", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:SportsActivityLocation", "description": "A stadium.", - "name": "StadiumOrArena", - "@id": "schema:StadiumOrArena", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:SportsActivityLocation", "description": "A tennis complex.", - "name": "TennisComplex", - "@id": "schema:TennisComplex", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A retail good store.", - "name": "Store", - "@id": "schema:Store", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A bike store.", - "name": "BikeStore", - "@id": "schema:BikeStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A bookstore.", - "name": "BookStore", - "@id": "schema:BookStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A clothing store.", - "name": "ClothingStore", - "@id": "schema:ClothingStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A computer store.", - "name": "ComputerStore", - "@id": "schema:ComputerStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A convenience store.", - "name": "ConvenienceStore", - "@id": "schema:ConvenienceStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A department store.", - "name": "DepartmentStore", - "@id": "schema:DepartmentStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "An electronics store.", - "name": "ElectronicsStore", - "@id": "schema:ElectronicsStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A florist.", - "name": "Florist", - "@id": "schema:Florist", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A furniture store.", - "name": "FurnitureStore", - "@id": "schema:FurnitureStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A garden store.", - "name": "GardenStore", - "@id": "schema:GardenStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A grocery store.", - "name": "GroceryStore", - "@id": "schema:GroceryStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A hardware store.", - "name": "HardwareStore", - "@id": "schema:HardwareStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A store that sells materials useful or necessary for various hobbies.", - "name": "HobbyShop", - "@id": "schema:HobbyShop", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A home goods store.", - "name": "HomeGoodsStore", - "@id": "schema:HomeGoodsStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A jewelry store.", - "name": "JewelryStore", - "@id": "schema:JewelryStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A shop that sells alcoholic drinks such as wine, beer, whisky and other spirits.", - "name": "LiquorStore", - "@id": "schema:LiquorStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A men's clothing store.", - "name": "MensClothingStore", - "@id": "schema:MensClothingStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A store that sells mobile phones and related accessories.", - "name": "MobilePhoneStore", - "@id": "schema:MobilePhoneStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A movie rental store.", - "name": "MovieRentalStore", - "@id": "schema:MovieRentalStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A music store.", - "name": "MusicStore", - "@id": "schema:MusicStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "An office equipment store.", - "name": "OfficeEquipmentStore", - "@id": "schema:OfficeEquipmentStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "An outlet store.", - "name": "OutletStore", - "@id": "schema:OutletStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A shop that will buy, or lend money against the security of, personal possessions.", - "name": "PawnShop", - "@id": "schema:PawnShop", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A pet store.", - "name": "PetStore", - "@id": "schema:PetStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A shoe store.", - "name": "ShoeStore", - "@id": "schema:ShoeStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A sporting goods store.", - "name": "SportingGoodsStore", - "@id": "schema:SportingGoodsStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A tire shop.", - "name": "TireShop", - "@id": "schema:TireShop", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A toy store.", - "name": "ToyStore", - "@id": "schema:ToyStore", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Store", "description": "A wholesale store.", - "name": "WholesaleStore", - "@id": "schema:WholesaleStore", - "layer": "core" - - } - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:LocalBusiness", "description": "A travel agency.", - "name": "TravelAgency", - "@id": "schema:TravelAgency", - "layer": "core" - - } - - ] - - }, - - ] - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Thing", "description": "A person (alive, dead, undead, or fictional).", - "name": "Person", - "@id": "schema:Person", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Thing", "description": "Any offered product or service. For example: a pair of shoes; a concert ticket; the rental of a car; a haircut; or an episode of a TV show streamed online.", - "name": "Product", - "@id": "schema:Product", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Product", "description": "A single, identifiable product instance (e.g. a laptop with a particular serial number).", - "name": "IndividualProduct", - "@id": "schema:IndividualProduct", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Product", "description": "A datasheet or vendor specification of a product (in the sense of a prototypical description).", - "name": "ProductModel", - "@id": "schema:ProductModel", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Product", "description": "A placeholder for multiple similar products of the same kind.", - "name": "SomeProducts", - "@id": "schema:SomeProducts", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Product", "description": "A vehicle is a device that is designed or used to transport people or cargo over land, water, air, or through space.", - "name": "Vehicle", - "@id": "schema:Vehicle", - "layer": "core", - "children": - [ - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Vehicle", "description": "A bus (also omnibus or autobus) is a road vehicle designed to carry passengers...", - "name": "BusOrCoach", - "@id": "schema:BusOrCoach", - "layer": "auto" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Vehicle", "description": "A car is a wheeled, self-powered motor vehicle used for transportation.", - "name": "Car", - "@id": "schema:Car", - "layer": "core" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Vehicle", "description": "A motorcycle or motorbike is a single-track, two-wheeled motor vehicle.", - "name": "Motorcycle", - "@id": "schema:Motorcycle", - "layer": "auto" - - }, - - - { - - "@type": "rdfs:Class", "rdfs:subClassOf": "schema:Vehicle", "description": "A motorized bicycle is a bicycle with an attached motor used to power the vehicle, or to assist with pedaling.", - "name": "MotorizedBicycle", - "@id": "schema:MotorizedBicycle", - "layer": "auto" - - } - - ] - - } - - ] - - } - - ] - -} - diff --git a/v1/migrations/0002_remove_profile_people.py b/v1/migrations/0002_remove_profile_people.py new file mode 100644 index 0000000..e026cc8 --- /dev/null +++ b/v1/migrations/0002_remove_profile_people.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.6 on 2017-03-02 14:39 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('v1', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='profile', + name='people', + ), + ] diff --git a/v1/models.py b/v1/models.py index 38719cc..d75df69 100644 --- a/v1/models.py +++ b/v1/models.py @@ -1,6 +1,5 @@ from __future__ import unicode_literals from django.db import models -from common.models import Person class Profile(models.Model): name = models.CharField(max_length=50, default='Default') diff --git a/v1/views.py b/v1/views.py index 1c512ad..dd9cfe5 100644 --- a/v1/views.py +++ b/v1/views.py @@ -4,7 +4,7 @@ from common.models import * import datetime as d import csv -dataCSV = 'data.csv' +dataCSV = 'from_insee.csv' def web_page(request, profile): """ Just render the HTML and call the generate function """ @@ -59,7 +59,7 @@ def purchase(price, person, organization, trade, **kwargs): category = extract(kwargs, 'category', organization.subcategory) if weeks ==0: raise Exception('You must define the frequency') - timesAYear = extract(kwargs, 'timesAYear', int(52/(weeks+4*months))) + timesAYear = extract(kwargs, 'timesAYear', int(52/(weeks))) priceOnce = price / timesAYear is_buy_action = trade == 'BuyAction' for i in range(timesAYear): -- 2.22.0