def write_types_list(types_dict, location):
    with open(location, 'w') as f:
        writer = mg.Writer(f)
        for type_name in types_dict:
            member = types_dict[type_name].type_member
            full_name = symbol_from_member(member)
            writer.write_heading(f"[[{full_name}|{type_name}]]", 4)
            writer.writeline(summary_from_member(member))

        writer.writeline(
            mg.emphasis("Note: This file was automatically generated"))
Beispiel #2
0
def main():
    """Create README."""
    if os.path.isfile('README.md'):
        readme = overwrite()
    else:
        readme = 'README.md'

    with open(readme, 'w') as f:
        w = mg.Writer(f)
        w.write_heading(user_data['project_name'], 1)
        w.write_hrule()

        # Description and Key Features
        if badge:
            w.writeline(badge)
            w.writeline()
        w.writeline('Version: ' + mg.emphasis(setup_dict['version']))
        w.writeline()
        w.writeline(setup_dict['description'])
        key_features = mg.List()
        key_features.append('Feature #1')
        key_features.append('Feature #2')
        key_features.append('Feature #3')
        w.write(key_features)

        # AUTHORS
        w.write_heading('Authors', 3)
        w.write_hrule()
        authors = mg.List()
        for i in range(len(setup_dict['author'])):
            authors.append(
                mg.link(user_data['project_user_profile_url'],
                        setup_dict['author'][i]))
        w.write(authors)

        # DEPENDENCIES
        w.write_heading('Dependencies', 3)
        w.write_hrule()
        deps = mg.List()
        for dep in dependencies:
            deps.append(dep)
        w.write(deps)

        if args.verbose:
            # DOCS
            w.write_heading('Documentation', 3)
            w.write_hrule()
            w.writeline('Additional documentation can be found at: {}'.format(
                'http://write-me.readthedocs.io/en/stable/'))

            w.write_heading('Getting Started', 3)
            w.write_hrule()

        w.write_heading('Getting Started', 3)

        # GETTING STARTED: Installation requirements
        w.write_heading(mg.emphasis('Prerequisites'), 5)
        prereqs = mg.List()
        prereqs.append(
            mg.link('https://www.python.org/downloads/', 'python (3.6+)'))
        prereqs.append(mg.link('https://pip.pypa.io/en/stable/', 'pip'))
        prereqs.append(mg.link('https://git-scm.com/', 'git'))
        w.write(prereqs)

        # GETTING STARTED: Cloning/VE Instructions
        w.write_heading(mg.emphasis('Installation'), 5)
        w.writeline(
            'First, clone the project repo from Github. Then, change directories into the cloned repository. To accomplish this, execute these commands:'
        )
        w.writeline()
        w.writeline('`$ git clone {}.git`'.format(user_data['url']))
        w.writeline()
        w.writeline('`$ cd {}`'.format(user_data['project_name']))
        w.writeline()
        w.writeline(
            'Now now that you have cloned your repo and changed directories into the project, create a virtual environment named "ENV", and install the project requirements into your VE.'
        )
        w.writeline()
        w.writeline('`$ python3 -m venv ENV`')
        w.writeline()
        w.writeline('`$ source ENV/bin/activate`')
        w.writeline()
        w.writeline('`$ pip install -r requirements.txt`')

        if args.django:
            # GETTING STARTED: Serving the App (Django)
            w.write_heading(mg.emphasis('Serving Locally'), 5)
            w.writeline(serving_options['django']['instructions'])
            w.writeline(serving_options['django']['serve_command'])
            w.writeline(serving_options['django']['hosting'])

        elif args.pyramid:
            # GETTING STARTED: Serving the App (Pyramid)
            w.write_heading(mg.emphasis('Serving Locally'), 5)
            w.writeline(serving_options['pyramid']['instructions'])
            w.writeline(serving_options['pyramid']['serve_command'])
            w.writeline(serving_options['pyramid']['hosting'])

        elif args.flask:
            # GETTING STARTED: Serving the App (Flask)
            w.write_heading(mg.emphasis('Serving Locally'), 5)
            w.writeline(serving_options['flask']['instructions'])
            w.writeline(serving_options['flask']['serve_command'])
            w.writeline(serving_options['flask']['hosting'])

        # TESTS: Running & Files
        w.write_heading('Test Suite', 3)
        w.write_hrule()
        if len(test_dict.keys()) > 0:
            w.write_heading(mg.emphasis('Running Tests'), 5)
            w.writeline(
                'This application uses {} as a testing suite. To run tests, run:'
                .format(mg.link(test_options[testing_mod][0], testing_mod)))
            w.writeline()
            w.writeline('`{}`'.format(test_options[testing_mod][1]))
            w.writeline()
            w.writeline('To view test coverage, run:')
            w.writeline()
            w.writeline('`{}`'.format(test_options[testing_mod][2]))

            w.write_heading(mg.emphasis('Test Files'), 5)
            w.writeline('The testing files for this project are:')
            w.writeline()
            test_table = mg.Table()
            test_table.add_column('File Name', mg.Alignment.CENTER)
            test_table.add_column('Description', mg.Alignment.CENTER)
            for key, val in test_dict.items():
                test_table.append('`{}`'.format(key), val)
            w.write(test_table)

            # URLS - table
            if args.django or args.pyramid or args.flask:
                w.write_heading('URLs', 3)
                w.write_hrule()
                w.writeline(
                    'The URLS for this project can be found in the following modules:'
                )
                w.writeline()
                urls_table = mg.Table()
                urls_table.add_column('URL module', mg.Alignment.CENTER)
                urls_table.add_column('Description', mg.Alignment.CENTER)
                for key, val in url_dict.items():
                    urls_table.append(key, val)
                w.write(urls_table)
        else:
            w.writeline('This repository contains no tests.')

        # APPLICATIONS (Django) -v
        if args.django and args.verbose:
            w.write_heading('Django Apps', 3)
            w.write_hrule()
            models_list = mg.List()
            for model in settings_dict['INSTALLED_APPS']:
                if "django.contrib" not in model:
                    models_list.append(model)
            w.write(models_list)

        # TOOLS
        w.write_heading('Development Tools', 3)
        w.write_hrule()
        tools_list = mg.List()
        tools_list.append('{} - programming language'.format(
            mg.emphasis('python')))
        if os.path.isfile('requirements.txt'):
            with open('requirements.txt', 'r') as f:
                reqs = []
                for line in f:
                    line = line.strip()
                    reqs.append(line)
            reqs = [i.split('==')[0] for i in reqs]
            for package in reqs:
                if package.lower() in frameworks:
                    tools_list.append('{} - web framework'.format(
                        mg.emphasis(package.lower())))
                elif package.lower() in dbms:
                    tools_list.append('{} - DB management system'.format(
                        mg.emphasis(package.lower())))
                elif package.lower() in languages:
                    tools_list.append('{} - programming language'.format(
                        mg.emphasis(package.lower())))
        w.write(tools_list)

        if args.verbose:
            # CONTRIBUTIONS
            w.write_heading('Contributions', 3)
            w.write_hrule()
            w.writeline(
                'If you wish to contribute to this project, please contact {}.'
                .format(setup_dict['author_email']))

        # LICENSE
        w.write_heading('License', 3)
        w.write_hrule()
        w.writeline(license)

        # ACKNOWLEDGEMENTS
        w.write_heading('Acknowledgements', 3)
        w.write_hrule()
        shoutouts = mg.List()
        shoutouts.append('Coffee')
        w.write(shoutouts)

        w.writeline(
            mg.emphasis('This README was generated using ' + mg.link(
                'https://github.com/chelseadole/write-me', 'writeme.')))
    return """
Beispiel #3
0
def main():
    """Create README."""
    if os.path.isfile('README.md'):
        readme = overwrite()
    else:
        readme = 'README.md'

    with open(readme, 'w') as f:
        w = mg.Writer(f)
        w.write_heading(user_data['project_name'], 1)
        w.write_hrule()

        # Description and Key Features
        w.write_heading('Description', 3)
        if badge:
            w.writeline(badge)
            w.writeline()
        w.writeline('Version: ' + mg.emphasis(setup_dict['version']))
        w.writeline()
        w.writeline(setup_dict['description'])
        key_features = mg.List()
        key_features.append('Feature #1')
        key_features.append('Feature #2')
        key_features.append('Feature #3')
        w.write(key_features)

        # AUTHORS
        w.write_heading('Authors', 3)
        w.write_hrule()
        authors = mg.List()
        for i in range(len(setup_dict['author'])):
            authors.append(mg.link(user_data['url'], setup_dict['author'][i]))
        w.write(authors)

        if len(dependencies) > 0:
            # DEPENDENCIES
            w.write_heading('Dependencies', 3)
            w.write_hrule()
            deps = mg.List()
            for dep in dependencies:
                deps.append(dep)
            if args.django and "django" not in dependencies:
                deps.append("Django")
            elif args.pyramid and "pyramid" not in dependencies:
                deps.append("Pyramid")
            elif args.flask and "flask" not in dependencies:
                deps.append("Flask")
            w.write(deps)

        if args.verbose:
            # DOCS
            w.write_heading('Documentation', 3)
            w.write_hrule()
            w.writeline(
                'Additional documentation can be found at: YOUR DOC SITE HERE')

        w.write_heading('Getting Started', 3)
        w.write_hrule()

        # GETTING STARTED: Installation requirements
        w.write_heading(mg.emphasis('Prerequisites'), 5)
        prereqs = mg.List()
        prereqs.append(
            mg.link('https://www.python.org/downloads/', 'python (3.6+)'))
        prereqs.append(mg.link('https://pip.pypa.io/en/stable/', 'pip'))
        prereqs.append(mg.link('https://git-scm.com/', 'git'))
        w.write(prereqs)

        # GETTING STARTED: Cloning/VE Instructions
        w.write_heading(mg.emphasis('Installation'), 5)
        w.writeline(
            'First, clone the project repo from Github. Then, change directories into the cloned repository. To accomplish this, execute these commands:'
        )
        w.writeline()
        w.writeline('`$ git clone {}.git`'.format(user_data['url']))
        w.writeline()
        w.writeline('`$ cd {}`'.format(user_data['project_name']))
        w.writeline()
        w.writeline(
            'Now now that you have cloned your repo and changed directories into the project, create a virtual environment named "ENV", and install the project requirements into your VE.'
        )
        w.writeline()
        w.writeline('`$ python3 -m venv ENV`')
        w.writeline()
        w.writeline('`$ source ENV/bin/activate`')
        w.writeline()
        w.writeline('`$ pip install -r requirements.txt`')

        if os.path.isfile('requirements.txt'):
            with open('requirements.txt', 'r') as f:
                reqs = []
                for line in f:
                    line = line.strip()
                    reqs.append(line)
            reqs = [i.split('==')[0] for i in reqs]

            if args.django and "psycopg2" in reqs:
                # Additional Django setup requirements using PostgreSQL
                w.writeline()
                w.writeline(
                    'Open PostgreSQL using the `psql` command from your Terminal.'
                )
                w.writeline(
                    'Create a PostgreSQL Database, called YOUR DBNAME HERE, using following command:'
                )
                w.writeline()
                w.writeline('`USER=# CREATE DATABASE ~YOUR DB NAME HERE~;`')
                w.writeline()
                w.writeline(
                    'Now that your database exists, you can migrate this project\'s data into it. Outside of the PostgreSQL commandline, on the same level as your `manage.py` file, run:'
                )
                w.writeline('`$ ./manage.py migrate`')
                w.writeline()

            elif args.django and "mymssql" in reqs:
                # Additional Django setup requirements using MySQL
                w.writeline()
                w.writeline(
                    'Open MySQL using the `psql` command from your Terminal, with your personal user data.'
                )
                w.writeline(
                    'Create a PostgreSQL Database, called YOUR DBNAME HERE, using following command:'
                )
                w.writeline()
                w.writeline('`USER=# CREATE DATABASE ~YOUR DB NAME HERE~;`')
                w.writeline()
                w.writeline(
                    'Now that your database exists, you can migrate this project\'s data into it. Outside of the MySQL commandline, on the same level as your `manage.py` file, run:'
                )
                w.writeline('`$ ./manage.py migrate`')
                w.writeline()

            elif args.django and "cx_Oracle" in reqs:
                # Additional Django setup requirements using Oracle
                w.writeline()
                w.writeline(
                    'Open Oracle using the `sqlplus` command from your Terminal.'
                )
                w.writeline(
                    'Create an Oracle Database, called YOUR DBNAME HERE, using following command:'
                )
                w.writeline()
                w.writeline('`USER=# CREATE DATABASE ~YOUR DB NAME HERE~;`')
                w.writeline()
                w.writeline(
                    'Now that your database exists, you can migrate this project\'s data into it. Outside of the Oracle commandline, on the same level as your `manage.py` file, run:'
                )
                w.writeline('`$ ./manage.py migrate`')
                w.writeline()

        if args.django:
            # GETTING STARTED: Serving the App (Django)
            w.write_heading(mg.emphasis('Serving Locally'), 5)
            w.writeline(serving_options['django']['instructions'])
            w.writeline(serving_options['django']['serve_command'])
            w.writeline(serving_options['django']['hosting'])

        elif args.pyramid:
            # GETTING STARTED: Serving the App (Pyramid)
            w.write_heading(mg.emphasis('Serving Locally'), 5)
            w.writeline(serving_options['pyramid']['instructions'])
            w.writeline(serving_options['pyramid']['serve_command'])
            w.writeline(serving_options['pyramid']['hosting'])

        elif args.flask:
            # GETTING STARTED: Serving the App (Flask)
            w.write_heading(mg.emphasis('Serving Locally'), 5)
            w.writeline(serving_options['flask']['instructions'])
            w.writeline(serving_options['flask']['serve_command'])
            w.writeline(serving_options['flask']['hosting'])

        # TESTS: Running & Files
        w.write_heading('Test Suite', 3)
        w.write_hrule()
        if len(test_dict.keys()) > 0:
            w.write_heading(mg.emphasis('Running Tests'), 5)
            if args.django:
                w.writeline(
                    'This is a Django application, and therefore to run tests, run the following command at the same level as `./manage.py`.'
                )
                w.writeline()
                w.writeline('`./manage.py test`')
            else:
                w.writeline(
                    'This application uses {} as a testing suite. To run tests, run:'
                    .format(mg.link(test_options[testing_mod][0],
                                    testing_mod)))
                w.writeline()
                w.writeline('`{}`'.format(test_options[testing_mod][1]))
                w.writeline()
                w.writeline('To view test coverage, run:')
                w.writeline()
                w.writeline('`{}`'.format(test_options[testing_mod][2]))

            w.write_heading(mg.emphasis('Test Files'), 5)
            w.writeline('The testing files for this project are:')
            w.writeline()
            test_table = mg.Table()
            test_table.add_column('File Name', mg.Alignment.CENTER)
            test_table.add_column('Description', mg.Alignment.CENTER)
            for key, val in test_dict.items():
                test_table.append('`{}`'.format(key), val)
            w.write(test_table)
        else:
            w.writeline('This repository contains no tests.')

        # URLS - table
        if args.django or args.pyramid or args.flask:
            w.write_heading('URLs', 3)
            w.write_hrule()
            w.writeline(
                'The URLS for this project can be found in the following modules:'
            )
            w.writeline()
            urls_table = mg.Table()
            urls_table.add_column('URL module', mg.Alignment.CENTER)
            urls_table.add_column('Description', mg.Alignment.CENTER)
            for key, val in url_dict.items():
                urls_table.append(key, val)
            w.write(urls_table)

        # APPLICATIONS (Django) -v
        if args.django and args.verbose:
            w.write_heading('Django Apps', 3)
            w.write_hrule()
            models_list = mg.List()
            for model in settings_dict['INSTALLED_APPS']:
                if "django.contrib" not in model and "storages" not in model:
                    models_list.append(model)
            w.write(models_list)

        # APPLICATIONS (Pyramid)
        if args.pyramid:
            w.write_heading('Pyramid Development Files', 3)
            w.write_hrule()
            w.writeline(
                'Development files specific to the Pyramid web framework can be found in the following files:'
            )
            pyr_table = mg.List()
            for key, val in pyramid_info.items():
                pyr_table.append(key)
            w.write(pyr_table)

        # TOOLS
        w.write_heading('Development Tools', 3)
        w.write_hrule()
        tools_list = mg.List()
        tools_list.append('{} - programming language'.format(
            mg.emphasis('python')))
        if os.path.isfile('requirements.txt'):
            with open('requirements.txt', 'r') as f:
                reqs = []
                for line in f:
                    line = line.strip()
                    reqs.append(line)
            reqs = [i.split('==')[0] for i in reqs]
            for package in reqs:
                if package.lower() in frameworks:
                    tools_list.append('{} - web framework'.format(
                        mg.emphasis(package.lower())))
                elif package.lower() in dbms:
                    tools_list.append('{} - DB management system'.format(
                        mg.emphasis(package.lower())))
        w.write(tools_list)

        if args.verbose:
            # CONTRIBUTIONS
            w.write_heading('Contributions', 3)
            w.write_hrule()
            w.writeline(
                'If you wish to contribute to this project, please contact {}.'
                .format(setup_dict['author_email']))

        # LICENSE
        w.write_heading('License', 3)
        w.write_hrule()
        w.writeline(license)

        # ACKNOWLEDGEMENTS
        w.write_heading('Acknowledgements', 3)
        w.write_hrule()
        shoutouts = mg.List()
        shoutouts.append('Coffee')
        w.write(shoutouts)

        w.writeline(
            mg.emphasis('This README was generated using ' + mg.link(
                'https://github.com/chelseadole/write-me', 'writeme.')))
    print("""

        README generated.

        User TODOs:
            * Add application highlights to bullet-point "Features" section
            * Add correct contributor Github URL links to "Authors" section
            * Populate "Acknowledgements" section

        Please review your new README, and complete any sections that require additional user input.

        """)
if __name__ == '__main__':
    with open('example.md', 'w') as f:
        writer = mg.Writer(f)
        writer.write('write()')
        writer.writeline()
        writer.writeline()
        writer.writeline('writeline()')
        writer.writelines(['writelines()1', 'writelines()2'])
        writer.write_hrule()

        writer.write_heading('heading1')
        for i in range(2, 7):
            writer.write_heading('heading{}'.format(i), i)

        writer.writeline(mg.emphasis('emphasis'))
        writer.writeline(mg.strong('strong'))
        writer.writeline(mg.strikethrough('strikethrough'))

        unordered = mg.List()
        unordered.append('unordered1')
        unordered.append(mg.emphasis('unordered2'))
        unordered.append('unordered3')
        writer.write(unordered)

        ordered = mg.List(ordered=True)
        unordered.append('ordered1')
        unordered.append(mg.emphasis('ordered2'))
        unordered.append('ordered3')
        writer.write(ordered)
    def to_md(self, directory):
        md_path = os.path.join(directory, f"{self.type_name}.md")
        print(f"Writing {md_path}")
        with open(md_path, 'w') as f:
            writer = mg.Writer(f)

            full_name = symbol_from_member(self.type_member)
            writer.write_heading(inline_code(full_name), 4)

            writer.writeline(mg.emphasis(summary_from_member(
                self.type_member)))

            writer.write_hrule()

            # FIELDS

            writer.write_heading("Fields", 3)
            if len(self.fields) == 0:
                writer.writeline(mg.emphasis("None"))
            else:
                for field in self.fields:
                    symbol = symbol_from_member(field)

                    short_name = symbol.replace(full_name + ".", "")

                    writer.writeline(
                        inline_code(short_name) + ": " + \
                        summary_from_member(field))

            # PROPERTIES

            writer.write_heading("Properties", 3)
            if len(self.properties) == 0:
                writer.writeline(mg.emphasis("None"))
            else:
                for prop in self.properties:
                    symbol = symbol_from_member(prop)

                    short_name = symbol.replace(full_name + ".", "")

                    writer.writeline(
                        inline_code(short_name) + ": " +
                        summary_from_member(prop))

            # METHODS

            writer.write_heading("Methods", 3)
            if len(self.methods) == 0:
                writer.writeline(mg.emphasis("None"))
            else:
                for method in self.methods:
                    symbol = symbol_from_member(method)

                    symbol = symbol.replace("#ctor", full_name)
                    symbol = symbol.replace(",", ", ")
                    symbol = symbol.replace("{", "<")
                    symbol = symbol.replace("}", ">")
                    symbol = symbol.replace("System.String", "string")
                    symbol = symbol.replace("System.Int32", "int")
                    symbol = symbol.replace("System.Single", "float")
                    symbol = symbol.replace("System.Object", "object")

                    if not symbol[-1] == ")":
                        symbol += "()"

                    writer.writeline(inline_code(symbol))
                    blockquote = mg.BlockQuote()
                    blockquote.append(summary_from_member(method))
                    blockquote.append("")
                    blockquote.append(mg.strong("Parameters"))
                    blockquote.append("")
                    params = [p for p in method if p.tag == "param"]

                    pre = "* "
                    if len(params) == 0:
                        blockquote.append(mg.emphasis("None"))
                    else:
                        for param in params:
                            param_name = param.attrib["name"]
                            param_text = param.text if param.text is not None else ""
                            blockquote.append(pre + inline_code(param_name) +
                                              ": " + param_text)
                            blockquote.append("")
                    writer.write(blockquote)

            writer.write_hrule()
            writer.writeline(
                mg.emphasis("Note: This file was automatically generated"))