Есть ли другой способ отображения моих таблиц на основе аргументов, введенных с помощью модуля argparse?

Вы ничего не возвращаете из обратного вызова Array.map():

{Object.keys(context.state.subjects).map(subject => {
    <li>{context.state.subjects[subject].title}</li>; <-- this is not returned
    console.log(context.state.subjects[subject].title);
 })}

const contextValue = { state: {"subjects":{"subject0":{"title":"Math","description":"","cards":{"card1":{"note":"","answer":""}}},"subject1":{"title":"history","description":"","cards":{"card1":{"note":"","answer":""}}}}}};


const MyContext = React.createContext();

const Example = () => (
  <MyContext.Consumer>
  {context => (
    <ul>
    {Object.keys(context.state.subjects).map(subject => {
      console.log(context.state.subjects[subject].title);
      return (
        <li key={subject}>{context.state.subjects[subject].title}</li>
      );
     })}
    </ul>
  )}
  </MyContext.Consumer>
);

const Demo = ({ value }) => (
  <MyContext.Provider value={value}>
    <Example />
  </MyContext.Provider>
);

ReactDOM.render(
  <Demo value={contextValue} />,
  demo
);
<script crossorigin src="https://unpkg.com/react@16.3/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16.3/umd/react-dom.development.js"></script>

<div id="demo">
  </demo>

1
задан Automation 25 January 2019 в 02:43
поделиться

2 ответа

def main():
    args = arguments()
    if not os.path.isfile(args.inventory):
        sys.exit('Please specify valid, readable YAML file with data')

    inventory = get_inventory(args.inventory)
    generate_table(inventory, args)

Вы вызываете get_inventory со строкой, значения из args. Вам также следует вызвать generate_table со значениями из args или самого args. Переоценка args работает, но делает ваш код более грязным.

def generate_table(inventory, args):
    # args = arguments()    # no need to reevaluate args
    data = generate_data(inventory)
    ...

То же самое можно сделать для output_file, хотя не очевидно, где вы используете args.

В generate_table вы, кажется, используете args в основном в:

for arg in vars(args):
    if arg in main_headers and getattr(args, arg):
        main_header.append(arg)
    elif arg in lldp_headers and getattr(args, arg):
        lldp_header.append(arg)
    elif arg in out_file and getattr(args, arg):
        out_file.append(arg)
        output_file(inventory)

Это неясный фрагмент кода, трактующий args как пространство имен и словарь. Я думаю, что это просто проверка значений

args.os_version
args.serial_number
args.lldp
args.outfile

Это все store_true, поэтому они всегда будут присутствовать, и значение True/False. Так что вы могли бы

if args.out_file:
    output_file(inventory)

if args.lldp:
    lldp_header.append('lldp')

Но мне не слишком интересно копаться во всех логических шагах.

Убедитесь, что вы понимаете, что parse_args произвело. Во время отладки я призываю пользователей

 print(args)

Таким образом, будет меньше сюрпризов.

0
ответ дан hpaulj 25 January 2019 в 02:43
поделиться

Ваш метод generate_table всегда печатает две таблицы, когда вы хотите, чтобы он распечатал только одну:

Ваша исходная функция:

def generate_table(inventory):
    args = arguments()
    ... 

    print(main_table_header)
    print(lldp_table_header)

Должна просто измениться на: [ 118]

def generate_table(inventory):
    args = arguments()
    ... 

    if args.lldp:
        print(lldp_table_header)
    else:
        print(main_table_header)

Другие комментаторы упомянули оптимизации, которые, как правило, улучшают код, который вы должны рассмотреть, например:

  • , генерируя arguments только один раз

    [ 114]
  • создавать только таблицы, которые вы собираетесь визуализировать, вместо того, чтобы выполнять шаги по созданию таблиц, которые вы не собираетесь печатать в конце

Но, в конце концов, вы были в нескольких шагах от того, чтобы приведенные выше варианты использования работали так, как вы этого хотели.

0
ответ дан dtanabe 25 January 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: