Browse Source

first commit

fanch 1 year ago
commit
a41108607c
5 changed files with 139 additions and 0 deletions
  1. 7 0
      .gitignore
  2. 49 0
      setup.py
  3. 0 0
      src/fab/__init__.py
  4. 80 0
      src/fab/__main__.py
  5. 3 0
      src/fab/fab

+ 7 - 0
.gitignore

@@ -0,0 +1,7 @@
+/src/fab.egg-info/
+/src/mkfab.egg-info/
+/dist/
+/build/
+/.idea
+**.pyc
+**.sqlite3

+ 49 - 0
setup.py

@@ -0,0 +1,49 @@
+from setuptools import setup, find_packages
+from pathlib import Path
+
+install_requires = [
+    "devpi-client"
+]
+
+tests_require = [
+]
+
+def get_files(path):
+    root = Path(path)
+    queue = [root]
+    ret = []
+    while queue:
+        curr = queue.pop()
+        for file in curr.iterdir():
+            if file.is_file():
+                ret.append(str(file))
+            else:
+                queue.append(file)
+    return ret
+
+
+setup(
+    name="mkfab",
+    version="0.1.2",
+    description="Un outil pour uploader les fichier",
+    author="François GAUTRAIS",
+    install_requires=install_requires,
+    packages=find_packages("src"),
+    zip_safe=False,
+    data_files=[
+    ],
+    extras_require={
+        "test": tests_require,
+        "pylint": ["pylint"],
+    },
+    scripts=[
+        "src/fab/fab"
+    ],
+
+    entry_points={
+        "console_scripts": [
+        ]
+    },
+    package_dir={"": "src"},
+)
+

+ 0 - 0
src/fab/__init__.py


+ 80 - 0
src/fab/__main__.py

@@ -0,0 +1,80 @@
+import argparse
+import subprocess
+import sys
+import tempfile
+from pathlib import Path
+
+
+class Fab:
+
+    def __init__(self, dir=None, filename=None):
+        self.dir = Path(dir) if dir else None
+        self.filename = Path(filename) if filename else None
+        if self.dir and self.dir.is_file() and not self.filename and not self.dir.name.lower().endswith(".py"):
+            self.filename = self.dir
+            self.dir = None
+
+    def build(self):
+        if self.dir is None:
+            print(f"Impossible de construire {dir}", sys.stderr)
+            exit(-1)
+
+
+        self._temp_dir_obj = tempfile.TemporaryDirectory()
+        directory = Path(self._temp_dir_obj.name)
+        setup = None
+        if self.dir.is_dir():
+            setup = self.dir / "setup.py"
+        elif self.dir.is_file():
+            setup = self.dir
+
+        self._run(sys.executable, setup, "bdist_wheel", "--dist-dir", directory)
+
+        self.filename = None
+        for file in directory.iterdir():
+            self.filename = file
+
+    def _run(self, *cmd):
+        cmd = [str(x) for x in cmd]
+        print(f"Executing: {' '.join(cmd)}")
+        ret = subprocess.run(cmd)
+        if ret.returncode:
+            print(f"Impossible de continuer, abandon")
+            exit(-1)
+
+
+    def upload(self, user, password):
+        if not self.filename or self.filename.is_file():
+            self.build()
+        if not self.filename:
+            print(f"Impossible de construire {self.dir}", sys.stderr)
+            exit(-1)
+        if not user:
+            user = input("Nom d'utlisateur: ").split("\n")[0]
+        if not password:
+            password = input("Mot de passe: ").split("\n")[0]
+
+
+        self._run("devpi", "login", user, f"--password", password)
+        self._run("devpi", "upload", self.filename)
+        self._run("devpi", "logoff")
+        print("Upload successfull")
+
+
+class Cmdline(argparse.ArgumentParser):
+
+    def __init__(self):
+        super().__init__()
+        self.add_argument("--user", help="Utilisateur", )
+        self.add_argument("--password", help="mot de passe", )
+        self.add_argument("target", help="Dossier, fichier setup ou wheel a fabriquer/uploader", type=Path)
+
+    @classmethod
+    def parse(cls, args):
+        cmd = cls()
+        ret = cmd.parse_args(args if args is not None else sys.argv[1:0])
+        app = Fab(ret.target)
+        app.upload(ret.user, ret.password)
+
+if __name__ == "__main__":
+    Cmdline.parse(sys.argv[1:])

+ 3 - 0
src/fab/fab

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+python3 -m fab $*