# -*- coding: utf-8 -*-
from setuptools import setup

packages = \
['mocodo', 'mocodo.convert', 'mocodo.dev', 'mocodo.rewrite', 'mocodo.tools']

package_data = \
{'': ['*'],
 'mocodo': ['resources/*',
            'resources/colors/*',
            'resources/i18n/*',
            'resources/lorem/*',
            'resources/relation_templates/*',
            'resources/shapes/*']}

install_requires = \
['requests>=2.22.0,<3.0.0']

entry_points = \
{'console_scripts': ['mocodo = mocodo.__main__:main']}

setup_kwargs = {
    'name': 'mocodo',
    'version': '4.0.13',
    'description': 'Modélisation Conceptuelle de Données. Nickel. Ni souris.',
    'long_description': '**Octobre 2023.** Mocodo [4](https://github.com/laowantong/mocodo/releases/tag/4.0.4) introduit la gestion manuelle et automatique des contraintes d\'optionalité et d\'unicité, améliore les interfaces graphique et en ligne de commande, et ajoute un grand nombre de fonctionnalités\xa0: coloration syntaxique, liens de partage, exportation en UML, en notation de Chen et _crow\'s foot_, génération de MCD aléatoires, décomposition des associations et autres opérations de réécriture.\n\n**Septembre 2022.** Mocodo 3 introduit l\'[héritage](https://rawgit.com/laowantong/mocodo/master/doc/fr_refman.html#Héritage-(ou-spécialisation)), l\'[agrégation](https://rawgit.com/laowantong/mocodo/master/doc/fr_refman.html#Agrégation-(ou-pseudo-entité)), les [calques](https://rawgit.com/laowantong/mocodo/master/doc/fr_refman.html#Héritage-(ou-spécialisation)), les [sorties PDF et PNG](https://rawgit.com/laowantong/mocodo/master/doc/fr_refman.html#Héritage-(ou-spécialisation)), etc.\xa0: [3.0](https://github.com/laowantong/mocodo/releases/tag/3.0), [3.1](https://github.com/laowantong/mocodo/releases/tag/3.1.0), [3.2](https://github.com/laowantong/mocodo/releases/tag/3.2.0).\n\n------\n\n[Documentation](https://rawgit.com/laowantong/mocodo/master/doc/fr_refman.html) sur une seule page, incluant la sortie de [`mocodo --help`](https://rawgit.com/laowantong/mocodo/master/doc/fr_refman.html#mocodo---help) et l\'[aide-mémoire des transformations](https://rawgit.com/laowantong/mocodo/master/doc/fr_refman.html#Aide-mémoire-des-arguments-de---transform).\n\n----\n\n![](logos/banner.svg)\n\nMocodo est un logiciel d\'aide à l\'enseignement et à l\'apprentissage des [bases de données relationnelles](https://fr.wikipedia.org/wiki/Base_de_données_relationnelle).\n\n- En entrée, il prend un [MCD](https://fr.wikipedia.org/wiki/Modèle_entité-association) (modèle conceptuel de données) décrit dans un langage dédié minimaliste.\n- En sortie, il produit un diagramme entité-association et, à la demande, un [MLD](https://fr.wikipedia.org/wiki/Merise_(informatique)#MLD_:_modèle_logique_des_données) (schéma relationnel, sous forme graphique ou textuelle), un [DDL](https://fr.wikipedia.org/wiki/Langage_de_définition_de_données) (requêtes SQL de création de la base), un [diagramme de classes UML](https://fr.wikipedia.org/wiki/Diagramme_de_classes), etc.\n- En bonus, il est capable de réarranger automatiquement votre MCD de façon esthétique, et de lui appliquer des opérations de réécriture qui vont du mondain (typographie) à l\'académique (décomposition d\'associations), en passant par le merveilleux (inférence de types, génération d\'exercices et d\'exemples).\n\nVous pouvez utiliser Mocodo\xa0:\n\n- à distance, sans rien installer, avec [Mocodo _online_](https://www.mocodo.net)\xa0;\n- en local, comme n\'importe quel programme Python\xa0;\n- dans un document [Jupyter Notebook](https://jupyter.org).\n\n## Tracé du modèle conceptuel\n\nCi-dessous, un exemple d\'utilisation sous Jupyter Notebook. L\'appel du programme est en première ligne\xa0; le texte-source proprement dit, lignes suivantes. En sortie, le diagramme conceptuel, égayé au passage par l\'option `--colors`\xa0:\n\n![png](doc/readme/ccp_mcd.png)\n\n![svg](doc/readme/ccp_mcd.svg)\n\n## Opérations de conversion\n\nOn peut récupérer ce texte-source avec `--input` pour lui appliquer diverses opérations. Ainsi, l\'appel suivant génère et affiche son MLD, son diagramme relationnel et son DDL\xa0:\n\n```\n%mocodo --input ccp --transform mld diagram ddl --colors desert\n```\n\n---\n\n- **CLIENT** (<ins>Réf. client</ins>, Nom, Prénom, Adresse)\n- **COMMANDE** (<ins>Num. commande</ins>, Date, Montant, _#Réf. client_)\n- **INCLURE** (<ins>_#Num. commande_</ins>, <ins>_#Réf. produit_</ins>, Quantité)\n- **PRODUIT** (<ins>Réf. produit</ins>, Libellé, Prix unitaire)\n\n---\n\n![svg](doc/readme/ccp_mld.svg)\n\n---\n\n```sql\nCREATE TABLE CLIENT (\n  PRIMARY KEY (ref_client),\n  ref_client VARCHAR(8) NOT NULL,\n  nom VARCHAR(255),\n  prenom VARCHAR(255),\n  adresse VARCHAR(255)\n);\n\nCREATE TABLE COMMANDE (\n  PRIMARY KEY (num_commande),\n  num_commande VARCHAR(8) NOT NULL,\n  date DATE,\n  montant DECIMAL(10,2),\n  ref_client VARCHAR(8) NOT NULL\n);\n\nCREATE TABLE INCLURE (\n  PRIMARY KEY (num_commande, ref_produit),\n  num_commande VARCHAR(8) NOT NULL,\n  ref_produit VARCHAR(8) NOT NULL,\n  quantite INTEGER\n);\n\nCREATE TABLE PRODUIT (\n  PRIMARY KEY (ref_produit),\n  ref_produit VARCHAR(8) NOT NULL,\n  libelle VARCHAR(50),\n  prix_unitaire DECIMAL(10,2)\n);\n\nALTER TABLE COMMANDE ADD FOREIGN KEY (ref_client) REFERENCES CLIENT (ref_client);\n\nALTER TABLE INCLURE ADD FOREIGN KEY (ref_produit) REFERENCES PRODUIT (ref_produit);\nALTER TABLE INCLURE ADD FOREIGN KEY (num_commande) REFERENCES COMMANDE (num_commande);\n```\n\nDans la suite, pour épargner la frappe, les options `--input` et `--transform` seront respectivement abrégées en `-i` et `-t`.\n\nLes opérations de conversion ne se limitent pas forcément au schéma relationnel. En voici une qui extrait un dictionnaire des données, par défaut sous la forme d\'un tableau Markdown à trois colonnes :\n\n```\n%mocodo -i ccp -t data_dict\n```\n\n---\n\n| Entité ou association | Libellé de l\'attribut | Type          |\n|:----------------------|:----------------------|:--------------|\n| CLIENT                | Adresse               | VARCHAR(255)  |\n| "                     | Nom                   | VARCHAR(255)  |\n| "                     | Prénom                | VARCHAR(255)  |\n| "                     | Réf. client           | VARCHAR(8)    |\n| COMMANDE              | Date                  | DATE          |\n| "                     | Montant               | DECIMAL(10,2) |\n| "                     | Num. commande         | VARCHAR(8)    |\n| INCLURE               | Quantité              | INTEGER       |\n| PRODUIT               | Libellé               | VARCHAR(50)   |\n| "                     | Prix unitaire         | DECIMAL(10,2) |\n| "                     | Réf. produit          | VARCHAR(8)    |\n\nUne autre qui transcrit le MCD dans la notation _crow\'s foot_ (`crow`) pour [Mermaid](http://mermaid.js.org) (`mmd`)\xa0:\n\n```\n%mocodo -i ccp -t crow:mmd\n```\n\n---\n\n```mmd\nerDiagram\n  CLIENT {\n    VARCHAR(8) ref_client PK\n    VARCHAR(255) nom\n    VARCHAR(255) prenom\n    VARCHAR(255) adresse\n  }\n  COMMANDE {\n    VARCHAR(8) num_commande PK\n    DATE date\n    DECIMAL(10-2) montant\n  }\n  INCLURE {\n    INTEGER quantite PK\n  }\n  PRODUIT {\n    VARCHAR(8) ref_produit PK\n    VARCHAR(50) libelle\n    DECIMAL(10-2) prix_unitaire\n  }\n  CLIENT ||--o{ COMMANDE: PASSER\n  INCLURE }|..|| COMMANDE: DF\n  INCLURE }o..|| PRODUIT: DF\n\n```\n\nLe rendu des diagrammes décrits dans des langages-tiers (comme Mermaid) n\'est pas directement pris en charge, mais peut être délégué (`--defer`) de façon transparente au service web approprié. Dans ce cas, c\'est la sortie graphique qui est affichée\xa0:\n\n```\n%mocodo -i ccp -t crow:mmd --defer\n```\n\n---\n\n![svg](doc/readme/ccp_erd_crow.svg)\n\n## Opérations de réécriture\n\nUne **réécriture** transforme un MCD Mocodo en un autre MCD Mocodo (au contraire d\'une **conversion**, qui produit un animal d\'une espèce différente).\n\nHeureusement, l\'utilisateur n\'a pas à réfléchir si la transformation qu\'il souhaite appliquer est une réécriture ou une conversion\xa0: dans les deux cas, il invoque `-t` (c\'est-à-dire `--transform`), et Mocodo se débrouille.\n\nEn guise de premier exemple de réécriture, mettons les noms des entités et associations (`boxes`) en majuscules, et les libellés (`labels`) en ASCII et _snake case_\xa0:\n\n```\n%mocodo -i ccp -t upper:boxes ascii:labels snake:labels --colors brewer+3\n```\n\n![svg](doc/readme/ccp_mcd_ascii.svg)\n\n---\n\n    %%mocodo --colors brewer+3\n    CLIENT: ref_client [VARCHAR(8)], nom [VARCHAR(255)], prenom [VARCHAR(255)], adresse [VARCHAR(255)]\n    PASSER, 0N CLIENT, 11 COMMANDE\n    COMMANDE: num_commande [VARCHAR(8)], date [DATE], montant [DECIMAL(10,2)]\n    INCLURE, 1N COMMANDE, 0N PRODUIT: quantite [INTEGER]\n    PRODUIT: ref_produit [VARCHAR(8)], libelle [VARCHAR(50)], prix_unitaire [DECIMAL(10,2)]\n\nRemarquez que l\'exécution d\'une réécriture affiche, au-dessous du diagramme, le code-source résultant. Celui-ci est précédé de la commande magique originale, _privée de l\'option `-i` et de toute opération de réécriture_. Ces dispositions permettent de continuer à travailler directement dessus si on le copie-colle dans une autre cellule.\n\nPlusieurs opérations de réécriture de nature sémantique sont également offertes. Par exemple, on peut décomposer un MCD quelconque en un MCD équivalent, mais n\'employant que des dépendances fonctionnelles et des entités faibles\xa0:\n\n```\n%mocodo -i ccp --select mcd -t explode:weak,arity=2 arrange:wide --seed=3 --colors brewer+3\n```\n\n![svg](doc/readme/ccp_mcd_explode.svg)\n\nNotez la sous-option `arrange:wide`. Elle a procédé à une réorganisation aléatoire des boîtes, ce que l\'insertion de deux nouvelles associations de dépendance fonctionnelles avait rendu nécessaire. Quant à l\'option `--seed=3`, elle garantit que le résultat sera le même à chaque exécution.\n\nPour vous familiariser avec Mocodo, le plus simple est d\'utiliser [sa version en ligne](https://www.mocodo.net). Vous pourrez ensuite vous plonger dans la [documentation](https://rawgit.com/laowantong/mocodo/master/doc/fr_refman.html).\n',
    'author': 'Aristide Grange',
    'author_email': 'None',
    'maintainer': 'None',
    'maintainer_email': 'None',
    'url': 'https://www.mocodo.net/',
    'packages': packages,
    'package_data': package_data,
    'install_requires': install_requires,
    'entry_points': entry_points,
    'python_requires': '>=3.6.1,<4.0.0',
}


setup(**setup_kwargs)
